ساخت یک راهنمای تور واقعیت ترکیبی با اندروید XR، رابط برنامه‌نویسی کاربردی Geospatial و Gemini

۷ دقیقه مطالعه
۳ نویسنده
Coco Fatus, Alon Hetzroni, Azin Mehrnoosh

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

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

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

بیایید جزئیات پیاده‌سازی را بررسی کنیم و نشان دهیم که چگونه این APIها را برای ساخت یک تجربه مکانی در مقیاس جهانی به هم پیوند داده‌ایم.

۱. شناسایی دقیق کاربر با API مکانی ARCore (VPS)

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

به همین دلیل است که API جغرافیایی در اندروید XR می‌تواند به شما در ساخت تجربیات سفارشی کمک کند. با استفاده از بینایی رایانه‌ای پیشرفته، VPS سعی می‌کند موقعیت جغرافیایی (شامل عرض جغرافیایی، طول جغرافیایی و جهت) را ارائه دهد که دقیق‌تر از 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 Grounding

وقتی یک مکان را پیدا کردیم، از API مربوط به Gemini با استفاده از 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 Grounding برای اتصال هوش مصنوعی استفاده کردیم.

۳. صدایی برای راهنمایی شما: 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، گذار از رابط کاربری دوبعدی اندروید به محاسبات مکانی را شهودی می‌کند.

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

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

با ترکیب AnimatedSpatialVisibility برای سطوح رابط کاربری سنتی Compose با عناصر سه‌بعدی 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()
                        }
                    })
                }
            }
        )
    }
}

همین امروز امکانات اندروید XR را بررسی کنید

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

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

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

    نوشته شده توسط:
    ادامه مطلب