اخبار محصول

ساختن «راهنمای تور واقعیت ترکیبی» با Android XR،‏ Geospatial API، و Gemini

‫۶ دقیقه خواندن
۳ نویسنده
Coco Fatus, Alon Hetzroni, Azin Mehrnoosh

در Google I/O امسال، به‌روزرسانی‌ای برای تجربه‌های فضایی اعلام کردیم: Geospatial API اکنون به‌عنوان پیش‌نمایش در ARCore برای Jetpack XR دردسترس است. Android XR با آوردن «سیستم موقعیت‌یابی دیداری» (VPS) Google به Android XR، امکان لنگر انداختن محتوای دیجیتال به دنیای فیزیکی را با دقت زیر یک متر و جهت‌یابی دقیق در مناطق پشتیبانی‌شده فراهم می‌کند.* برای کاوش در آنچه Geospatial API می‌تواند باز کند، تیم ما یک نسخه نمایشی ساخت: XR Geospatial Tour.

تصور کنید وارد شهر جدیدی می‌شوید، یک عینک واقعیت گسترده سیمی (مثل XREAL Project Aura که به‌زودی عرضه می‌شود) به چشم می‌زنید، و فوراً یک راهنمای محلی آگاه شما را در اطراف راهنمایی می‌کند. نیازی نیست به نقشه دوبعدی خیره شوید، درعوض مدل‌های سه‌بعدی به‌آرامی مسیرتان را راهنمایی می‌کنند و صدایی هوشمند درباره بناهای تاریخی درست در مقابلتان به شما می‌گوید. ما Geospatial APIs،‏ Gemini API بااستفاده از Firebase AI Logic،‏ Google Maps Grounding، و Jetpack XR SDK را ترکیب کردیم تا تجربه تور پیاده‌روی فراگیر و بدون دخالت دست ایجاد کنیم.

سلب مسئولیت: ویدیو و برنامه «راهنمای گشت» فقط برای اهداف نمایشی است. برخی‌از توالی‌ها کوتاه شده‌اند. هر سخت‌افزاری که نشان داده شده ممکن است درحال توسعه باشد؛ جزئیات محصول نهایی ممکن است متفاوت باشد.

بیایید جزئیات پیاده‌سازی را مرور کنیم و نشان دهیم که چگونه این میاناهای برنامه‌سازی کاربردی را به هم متصل کردیم تا یک تجربه فضایی در مقیاس جهانی بسازیم.

۱. Pinpointing the User with ARCore Geospatial API (VPS)

با ترکیب قدرت GPS با دقت VPS، تجربه ناوبری خود را در XR بهبود بخشید. دقت و جهت‌یابی دقیقی که با VPS ارائه می‌شود به نقطه‌مسیرهای سه‌بعدی امکان می‌دهد با دنیای فیزیکی هم‌تراز شوند.

به همین دلیل است که Geospatial API در Android XR می‌تواند به شما کمک کند تا تجربه‌های سفارشی بسازید. بااستفاده از بینایی رایانه‌ای پیشرفته، VPS تلاش می‌کند GeospatialPose (شامل عرض جغرافیایی، طول جغرافیایی، و جهت) را که دقیق‌تر از GPS است ارائه دهد.

در اینجا نحوه بازیابی حالت زمین‌مکانی کاربر با نگاشت جهت دستگاه به مختصات زمین‌مکانی آورده شده است:

// Retrieve the current geospatial pose from the ARCore session
val result = geospatial.createGeospatialPoseFromPose(arDevice.state.value.devicePose)
if (result is CreateGeospatialPoseFromPoseSuccess) {
    val pose = result.pose
    Log.d("VPS", "Accurate Location: ${pose.latitude}, ${pose.longitude}")
}

چون کل تجربه به این دقت بستگی دارد، horizontalAccuracy و orientationYawAccuracy را تا زمانی که به آستانه‌های ما برسند نظارت می‌کنیم. اگر کاربر در فضای بسته یا در منطقه‌ای ناشناخته باشد، از او می‌خواهیم «به فضای عمومی باز برود و اطراف را نگاه کند».

۲. ساختن برنامه سفر با Gemini API و پایه‌مندسازی Google Maps

وقتی مکان را دریافت کردیم، از Gemini API بااستفاده از Firebase AI Logic استفاده می‌کنیم تا مدل Gemini را وادار کنیم به‌عنوان راهنمای تور محلی عمل کند. مختصات کاربر را به مدل ارسال می‌کنیم و از آن می‌خواهیم یک پاسخ JSON ساختاریافته حاوی تورهای پیاده‌روی اطراف ارائه دهد:

   val configForTools = ToolConfig(
      functionCallingConfig = null,
      retrievalConfig = retrievalConfig {
        latLng = FirebaseLatLng(pose.latitude, pose.longitude)
        languageCode = "en"
      }
    )

    val responseJsonSchema = Schema.obj(
      mapOf(
        "locationIntro" to Schema.string(),
        "tours" to Schema.array(
          Schema.obj(
            mapOf(
              "title" to Schema.string(),
              "description" to Schema.string(),
              "stops" to Schema.array(
                Schema.obj(
                  mapOf(
                    "name" to Schema.string(),
                    "detailedName" to Schema.string(),
                    "description" to Schema.string()
                  )
                )
              )
            )
          )
        )
      )
    )

    val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
      modelName = "gemini-3.5-flash",
      tools = listOf(Tool.googleMaps()),
      generationConfig = generationConfig {
        responseMimeType = "application/json"
        responseSchema = responseJsonSchema
      }
    )

   val result = model.generateContent("The user is at latitude ${pose.latitude} and longitude ${pose.longitude}. Generate exactly 3 diverse tours near this location (e.g., historical, food, nature). All tour ideas should be walking distance only.")

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

۳. صدایی برای راهنمایی شما: Gemini 2.5 TTS

برای اینکه راهنمای تور واقعاً حضور داشته باشد، صداگذاری‌های پویایی را پیاده‌سازی کردیم.

بااستفاده از gemini-2.5-flash-tts model، می‌توانیم پیکربندی تولید مدل را طوری پیکربندی کنیم که به‌جای نوشتار، داده‌های صوتی را به‌صورت بومی برگرداند! در اینجا نحوه درخواست ResponseModality.AUDIO آورده شده است:

val ttsModel = Firebase.ai(backend = GenerativeBackend.googleAI())
    .generativeModel(
        modelName = "gemini-2.5-flash-tts",
        generationConfig = generationConfig {
            // Instruct the model to return Audio
            responseModalities = listOf(ResponseModality.AUDIO)
        }
    )

val response = ttsModel.generateContent("Say in a neutral but positive voice:\n$prompt")

// Extract the raw audio bytes from the response
val audioBytes = response.candidates.firstOrNull()?.content?.parts
    ?.filterIsInstance<InlineDataPart>()
    ?.firstOrNull { it.mimeType.contains("audio") }?.inlineData

۴. جان بخشیدن به آن به‌صورت سه‌بعدی با Jetpack XR

آخرین قطعه پازل، پردازش این داده‌ها در میدان دید کاربر است. کیت توسعه نرم‌افزار Jetpack XR انتقال از میانای کاربر Android دوبعدی به رایانش فضایی را آسان می‌کند.

ما از Jetpack Compose برای XR برای ساختن مؤلفه‌های فضایی استفاده کردیم. برای نمایش نقاط دیدنی درطول گشت، یک Composable به‌نام InfoSphere ساختیم که حاوی GltfModel از یک گوی سه‌بعدی است که در فضا شناور است و می‌توان با آن تعامل کرد تا اطلاعات را نشان دهد.

بااستفاده از Jetpack XR SDK، می‌توانیم مدل‌های سه‌بعدی را در کنار میانای کاربر Compose بااستفاده از SpatialBox و SceneCoreEntity قرار دهیم. همچنین از InteractableComponent برای پاسخ دادن به تک‌ضرب‌های کاربر استفاده کردیم.

با ترکیب کردن AnimatedSpatialVisibility برای سطوح سنتی Compose UI با عناصر سه‌بعدی SceneCoreEntity، می‌توانیم داده‌ها را به‌طور یکپارچه با دنیای فیزیکی ترکیب کنیم.

@Composable
fun InfoSphere(
    content: InfoBubbleContent,
    session: Session,
    sphereModel: GltfModel,
    isSelected: Boolean,
    onClick: () -> Unit
) {
    // SpatialBox lets us arrange 3D components and SpatialPanels together
    SpatialBox(
        SubspaceModifier
            .offset(x = 2.dp, y = 1.dp, z = (-3).dp) // Positioned in 3D space
    ) {
        // Smoothly animate the visibility of our 2D Compose UI Panel
        AnimatedSpatialVisibility(visible = isSelected) {
            SpatialPanel {
                InfoBubble(content) // Regular 2D Compose UI
            }
        }
        // Render our interactive 3D sphere
        SceneCoreEntity(
            factory = {
                GltfModelEntity.create(session, sphereModel).also { entity ->
                    // Make the 3D model respond to user taps
                    entity.addComponent(InteractableComponent.create(session) { inputEvent ->
                        if (inputEvent.action == InputEvent.Action.UP) {
                            onClick()
                        }
                    })
                }
            }
        )
    }
}

امروز امکانات Android XR را کاوش کنید

ساختن برنامه XR Geospatial Tour به ما نشان داد که مانع ورود به تجربه‌های فضایی در مقیاس جهانی برای توسعه‌دهندگان Android کمتر از همیشه است. با Geospatial API که اکنون در Android XR به‌صورت پیش‌نمایش دردسترس است، برنامه‌های شما می‌توانند به‌طور یکپارچه دنیای فیزیکی اطراف خود را درک کنند. با ترکیب کردن میاناهای برنامه‌سازی کاربردی Compose for XR با داده‌های مکان بسیار دقیق VPS و قابلیت‌های زایای Gemini، می‌توانیم تجربه‌هایی ایجاد کنیم که هم مکان کاربر و هم آنچه را که به آن نگاه می‌کند درک کند.

برای کمک به شما در کسب تجربه عملی با Android XR، بسیار خوشحالیم که ثبت‌نام برای برنامه Android XR Developer Catalyst را که شامل XREAL Project Aura می‌شود آغاز کرده‌ایم. از امروز می‌توانید برای دسترسی به کیت توسعه‌دهنده XREAL Project Aura یا کیت توسعه‌دهنده عینک نمایشگردار ما در ماه‌های آینده درخواست دهید! 

*سلب مسئولیت: در برخی‌از دستگاه‌ها دردسترس است. اتصال اینترنت لازم است. در برنامه‌ها و سطوح سازگار کار می‌کند. نتایج ممکن است متفاوت باشد. 

نویسنده:
ادامه خواندن