یک برنامه واقعیت افزوده (AR) با استفاده از ARCore Geospatial API جدید بسازید

۱. مرور کلی

ARCore چارچوب گوگل برای ساخت تجربیات واقعیت افزوده در تلفن‌های هوشمند است. API جدید مکانی ARCore جنبه جدیدی به واقعیت افزوده می‌بخشد و به شما امکان می‌دهد نقاط مسیر واقعیت افزوده مختص به مکان را در اطراف مکان‌های دیدنی دنیای واقعی قرار دهید.

آنچه خواهید ساخت

در این آزمایشگاه کد، شما با API مکانی ARCore شروع به کار می‌کنید. شما کشف خواهید کرد که API مکانی چه اطلاعاتی را می‌تواند به تجربه کلی واقعیت افزوده شما ارائه دهد و چگونه می‌توان از این داده‌ها برای تقویت یک تجربه ساده مسیریابی واقعیت افزوده استفاده کرد.

آنچه یاد خواهید گرفت

  • نحوه راه‌اندازی یک پروژه ARCore که از API جغرافیایی استفاده می‌کند.
  • نحوه درخواست داده‌های جغرافیایی از API Geospatial و نمایش آن با استفاده از نقشه‌های گوگل.
  • چگونه یک لنگر متصل به یک مکان واقعی را قرار دهیم.

آنچه نیاز دارید

۲. محیط توسعه خود را تنظیم کنید

راه اندازی اندروید استودیو

برای شروع کار با Geospatial API، ما یک پروژه مقدماتی ارائه دادیم که شامل اصول اولیه یک پروژه ARCore یکپارچه با Google Maps SDK است. این به شما امکان می‌دهد تا به سرعت با Geospatial API آشنا شوید.

  1. اندروید استودیو را اجرا کنید و یک پروژه از VCS وارد کنید.
    • اگر از قبل پروژه‌ای باز دارید، از مسیر File > New > Project از بخش Version Control... استفاده کنید.
    • اگر پنجره‌ی «به اندروید استودیو خوش آمدید» را مشاهده کردید، از Get from VCS استفاده کنید. دریافت از مکان VCS
  2. گیت را انتخاب کنید و از آدرس https://github.com/google-ar/codelab-geospatial.git برای وارد کردن پروژه استفاده کنید.

راه‌اندازی یک پروژه ابری گوگل

رابط برنامه‌نویسی کاربردی جغرافیایی (Geospatial API) از تصاویر StreetView همراه با اطلاعات حسگر مغناطیس‌سنج و دوربین دستگاه برای بهبود مقادیر جهت‌گیری استفاده می‌کند. برای استفاده از این سرویس، باید یک پروژه ابری گوگل راه‌اندازی کنید.

  1. یک پروژه در کنسول ابری گوگل ایجاد کنید:
  2. فعال کردن API های لازم:
    • در نوار کناری، APIها و خدمات (APIs & Services) و سپس کتابخانه (Library) را انتخاب کنید.
    • API مربوط به ARCore را جستجو کنید.
    • روی فعال کردن کلیک کنید.
    • بازگشت به کتابخانه .
    • SDK نقشه‌ها برای اندروید را جستجو کنید.
    • روی فعال کردن کلیک کنید.
  3. ایجاد اعتبارنامه‌های کلید API:
    • در بخش APIها و خدمات ، گزینه اعتبارنامه‌ها (Credentials) را انتخاب کنید.
    • در نوار بالا، روی «ایجاد اعتبارنامه‌ها» کلیک کنید، سپس «کلید API» را انتخاب کنید.
    • کلید ایجاد شده را یادداشت کنید زیرا برای مرحله بعدی به آن نیاز دارید. در صورت نیاز به بازیابی آن، به صفحه اعتبارنامه‌ها برگردید.

با این مراحل، شما یک پروژه Google Cloud با مجوز کلید API ایجاد کرده‌اید و آماده استفاده از API Geospatial هستید.

ادغام کلید API با پروژه اندروید استودیو

برای مرتبط کردن کلید API از Google Cloud با پروژه خود، پروژه‌ای را که در Android Studio ایجاد کرده‌اید باز کنید و کلیدهای API را تغییر دهید:

  1. برنامه > src > AndroidManifest.xml را باز کنید.
  2. ورودی‌های meta-data زیر را پیدا کنید:
    <meta-data
        android:name="com.google.android.ar.API_KEY"
        android:value="PLACEHOLDER_API_KEY" />
    
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="PLACEHOLDER_API_KEY" />
    
  3. به جای PLACEHOLDER_API_KEY ، کلید API که در پروژه Google Cloud خود ایجاد کرده‌اید را قرار دهید.

مقدار ذخیره شده در com.google.android.ar.API_KEY به این برنامه اجازه می‌دهد تا از Geospatial API استفاده کند، و مقدار ذخیره شده در com.google.android.geo.API_KEY به این برنامه اجازه می‌دهد تا از Google Maps SDK استفاده کند.

پروژه خود را تأیید کنید

مطمئن شوید که پروژه شما آماده اجرا است. در اندروید استودیو، برنامه خود را اجرا کنید. باید بتوانید نمای دوربین را به همراه یک نقشه کاری در پایین صفحه ببینید.

پروژه دیگ بخار

۳. موقعیت کاربر را تعیین کنید

در این مرحله، برای شروع کار با Geospatial API، کدی را به پروژه نمونه اضافه می‌کنید.

پیکربندی جلسه ARCore برای استفاده از API مکانی

برای دریافت داده‌های مکانی، باید API مکانی را فعال کنید. با تغییر تابع configureSession در HelloGeoActivity.kt ، مقدار GeospatialMode در پیکربندی جلسه خود به ENABLED تغییر دهید:

fun configureSession(session: Session) {
  session.configure(
    session.config.apply {
      // Enable Geospatial Mode.
      geospatialMode = Config.GeospatialMode.ENABLED
    }
  )
}

در حالی که حالت مکانی ENABLED است، برنامه می‌تواند اطلاعات مکانی را دریافت کند.

درخواست داده از API مکانی

در HelloGeoRenderer.kt ، خط زیر را پیدا کنید:

// TODO: Obtain Geospatial information and display it on the map.

در زیر آن، بررسی کنید که شیء Earth برای استفاده در دسترس باشد. این زمانی است که trackingState TrackingState.ENABLED داشته باشد.

val earth = session.earth
if (earth?.trackingState == TrackingState.TRACKING) {
  // TODO: the Earth object may be used here.
}

در زیر TODO ، اطلاعات مکانی را از ARCore درخواست کنید. این خط را اضافه کنید:

val cameraGeospatialPose = earth.cameraGeospatialPose

این به شما یک GeospatialPose می‌دهد که شامل این اطلاعات است:

  • موقعیت مکانی، بیان شده بر حسب طول و عرض جغرافیایی. تخمینی از دقت موقعیت مکانی نیز ارائه می‌شود.
  • ارتفاع، و تخمینی از دقت ارتفاع.
  • جهت، تقریبی از جهتی که دستگاه رو به آن است و تخمینی از دقت جهت.

نمایش اطلاعات موقعیت مکانی روی نقشه

شما می‌توانید از GeospatialPose ذخیره شده در cameraGeospatialPose برای جابجایی یک نشانگر روی نقشه که نشان می‌دهد کاربر کجاست، استفاده کنید. از جایی که متوقف شدید، ادامه دهید و موارد زیر را اضافه کنید:

activity.view.mapView?.updateMapPosition(
  latitude = cameraGeospatialPose.latitude,
  longitude = cameraGeospatialPose.longitude,
  heading = cameraGeospatialPose.heading
)

این به طور مداوم موقعیت نقشه را با استفاده از مقادیر به دست آمده از API Geospatial به‌روزرسانی می‌کند.

امتحانش کن.

در اندروید استودیو، روی Play کلیک کنید. دستگاه خود را بالا نگه دارید و آن را حرکت دهید تا به ARCore در ردیابی کمک کند. پس از مدت کوتاهی، باید یک نشانگر سبز روی نقشه ظاهر شود. این نشانگر با مشاهده محیط اطراف شما می‌چرخد. همچنین باید در جهت صحیح قرار گیرد: وقتی رو به شمال هستید، فلش نیز شمال را نشان می‌دهد.

فلش سبز موقعیت مکانی و جهت شما را دنبال می‌کند.

۴. با استفاده از مختصات زمین، لنگر را قرار دهید

API جغرافیایی می‌تواند Anchors را در هر جفت مختصات و چرخش در دنیای واقعی قرار دهد. این به کاربران شما اجازه می‌دهد هنگام بازدید از مکان‌های خاص، محتوای anchored را مشاهده کنند.

در این مرحله، با ضربه زدن روی نقشه، روشی برای قرار دادن لنگر اضافه می‌کنید.

تنظیم یک اقدام هنگام لمس نقشه

این پروژه با یک تابع onMapClick ارائه می‌شود که هنگام کلیک روی قطعه نقشه، با طول و عرض جغرافیایی فراخوانی می‌شود. تابع onMapClick را در HelloGeoRenderer.kt پیدا کنید.

مطمئن شوید که می‌توان از شیء زمین استفاده کرد

قبل از ایجاد لنگرها روی زمین، مطمئن شوید که TrackingState شیء Earth روی TRACKING باشد، به این معنی که موقعیت زمین مشخص باشد. همچنین مطمئن شوید که EarthState آن ENABLED باشد، به این معنی که هیچ مشکلی با Geospatial API وجود نداشته باشد. این خطوط را داخل onMapClick اضافه کنید:

val earth = session?.earth ?: return
if (earth.trackingState != TrackingState.TRACKING) {
  return
}

موقعیت لنگر جدید را تعیین کنید

پس از تأیید ردیابی شیء Earth، در صورت وجود earthAnchor قبلی، آن را جدا کنید. در مراحل بعدی earthAnchor با یک anchor جدید جایگزین کنید:

earthAnchor?.detach()

سپس، از cameraGeospatialPose برای تعیین ارتفاع لنگر جدید استفاده کنید. از جفت مختصات حاصل از ضربه زدن روی نقشه به عنوان موقعیت لنگر استفاده کنید.

// Place the earth anchor at the same altitude as that of the camera to make it easier to view.
val altitude = earth.cameraGeospatialPose.altitude - 1
// The rotation quaternion of the anchor in the East-Up-South (EUS) coordinate system.
val qx = 0f
val qy = 0f
val qz = 0f
val qw = 1f
earthAnchor =
  earth.createAnchor(latLng.latitude, latLng.longitude, altitude, qx, qy, qz, qw)

createAnchor یک Anchor ایجاد می‌کند که با یک چرخش مشخص، نسبت به مختصات ژئودتیک ثابت شده است. این لنگر سعی می‌کند نسبت به مختصات و ارتفاع مشخص شده، پایدار و ثابت بماند.

نشانگر قرار داده شده را روی نقشه نشان دهید

در نهایت، یک نشانگر جدید که نشان می‌دهد نشانگر کجا قرار داده شده است، جابجا کنید:

activity.view.mapView?.earthMarker?.apply {
  position = latLng
  isVisible = true
}

امتحانش کن.

در اندروید استودیو، روی «پخش» کلیک کنید. دستگاه خود را بالا نگه دارید و آن را حرکت دهید تا به ARCore در ردیابی کمک کند. پس از مدت کوتاهی، باید یک نشانگر سبز روی نقشه ظاهر شود که موقعیت فعلی شما را نشان می‌دهد.

با ضربه زدن روی نقشه، از API جغرافیایی برای قرار دادن یک لنگر استفاده می‌شود که به یک مکان در دنیای واقعی ثابت شده است. سعی کنید لنگر را نزدیک به مکان فعلی خود قرار دهید تا بتوانید آن را در نمای واقعیت افزوده ببینید. هنگام پیمایش در محیط، لنگر باید ثابت بماند.

با ضربه زدن روی نقشه، یک نشانگر قرار دهید.

۵. نتیجه‌گیری

در این آزمایشگاه کد، یاد گرفتید که چگونه از API جغرافیایی برای ایجاد یک تجربه ساده واقعیت افزوده که به دنیای واقعی گره خورده است، استفاده کنید.

با ضربه زدن روی نقشه، یک نشانگر قرار دهید.

آنچه ما پوشش داده‌ایم

  • نحوه راه‌اندازی یک پروژه Google Cloud با فعال کردن Geospatial API.
  • نحوه دریافت اطلاعات مکانی در یک پروژه ARCore و نمایش آن روی نقشه.
  • چگونه با استفاده از موقعیت‌یابی جغرافیایی، لنگری را که در دنیای واقعی قرار دارد، قرار دهیم.

منابع اضافی

برای جزئیات بیشتر در مورد مفاهیم جغرافیایی و SDK های مورد استفاده در این آزمایشگاه کد، به این منابع اضافی مراجعه کنید: