اخبار محصول

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

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

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

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

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

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

۱. تعیین دقیق مکان کاربر با ARCore Geospatial API (VPS)

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

به همین دلیل است که «میانای برنامه‌سازی کاربردی جغرافیایی» در Android XR می‌تواند به شما در ساختن تجربه‌های سفارشی کمک کند. «سیستم موقعیت‌یابی بصری» بااستفاده از دید رایانه‌ای پیشرفته تلاش می‌کند تا 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 برای ساختن عناصر فضایی استفاده کردیم. برای نمایش نقاط موردعلاقه درطول تور، یک عنصر «ترکیبی» به‌نام 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 را کاوش کنید

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

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

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

ادامه خواندن