أخبار المنتجات

إنشاء مرشد سياحي للواقع المختلط باستخدام Android XR وGeospatial API وGemini

مدّة القراءة: 6 دقائق
3 مؤلفون
Coco Fatus, Alon Hetzroni, Azin Mehrnoosh

في مؤتمر Google I/O لهذا العام، أعلنّا عن تحديث للتجارب المكانية: واجهة برمجة التطبيقات Geospatial API متاحة الآن كنسخة حصرية في ARCore for Jetpack XR. من خلال توفير "نظام تحديد الموقع المرئي" (VPS) من Google على Android XR، يتيح Android XR تثبيت المحتوى الرقمي في العالم المادي بدقة أقل من متر وتوجيه دقيق في المناطق المتوافقة.* لاستكشاف الإمكانات التي تتيحها Geospatial API، أنشأ فريقنا نسخة تجريبية باسم XR Geospatial Tour.

تخيَّل أنّك تتجوّل في مدينة جديدة، وترتدي نظارة سلكية تعمل بنظام الواقع الممتد (مثل نظارة XREAL Project Aura القادمة)، وفجأة يظهر لك مرشد محلي خبير ليرافقك في جولتك. لن تحتاج إلى التحديق في خريطة ثنائية الأبعاد، بل ستوجّهك النماذج الثلاثية الأبعاد بسلاسة، وسيخبرك صوت ذكي بالمعالم التاريخية التي تظهر أمامك مباشرةً. لقد جمعنا بين واجهات برمجة التطبيقات Geospatial وGemini API باستخدام Firebase AI Logic وGoogle Maps Grounding وحزمة تطوير البرامج (SDK) لـ Jetpack XR لإنشاء تجربة جولة مشي غامرة بدون لمس الجهاز.

إخلاء مسؤولية: الفيديو وتطبيق Tour Guide هما لأغراض توضيحية فقط. تم اختصار بعض سلاسل الخطوات. قد تكون أي أجهزة معروضة قيد التطوير، وقد تختلف تفاصيل المنتج النهائية.

لنتعرّف على تفاصيل التنفيذ وكيفية ربط واجهات برمجة التطبيقات هذه معًا لإنشاء تجربة مكانية على مستوى العالم.

1. تحديد الموقع الجغرافي للمستخدم باستخدام ARCore Geospatial API (نظام تحديد المواقع المرئي)

يمكنك تحسين تجربة التنقّل في الواقع الممتد من خلال الجمع بين فعالية نظام GPS ودقة نظام تحديد المواقع المرئي (VPS). تتيح الدقة والتوجيه الدقيق اللذان يوفّرهما نظام تحديد الموقع المرئي (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 إلى أن يستوفيا الحدّ الأدنى المطلوب. إذا كان المستخدم في مكان مغلق أو في منطقة غير معروفة، نطلب منه "المشي إلى مكان عام في الهواء الطلق والنظر حوله".

2. إنشاء برنامج الرحلة باستخدام Gemini API وميزة "التحقّق من المصادر باستخدام خرائط Google"

بعد تحديد الموقع الجغرافي، نستخدم 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" لربط الذكاء الاصطناعي بمصادر موثوقة.

3- صوت يرشدك: نموذج تحويل النص إلى كلام Gemini 2.5

لجعل المرشد السياحي يشعر بأنه حاضر حقًا، قمنا بتنفيذ تعليقات صوتية ديناميكية.

باستخدام 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

4. Bringing it to Life in 3D with Jetpack XR

القطعة الأخيرة من اللغز هي عرض هذه البيانات في مجال رؤية المستخدم. تسهّل حزمة تطوير البرامج (SDK) لمنصة Jetpack XR الانتقال من  واجهة مستخدم Android ثنائية الأبعاد إلى الحوسبة المكانية.

استخدمنا Jetpack Compose for XR لإنشاء مكوّنات مكانية. لتمثيل المعالم على طول الجولة، أنشأنا دالة مركّبة باسم InfoSphere، تحتوي على GltfModel لكرة ثلاثية الأبعاد تطفو في الفضاء ويمكن التفاعل معها للكشف عن المعلومات.

باستخدام حزمة تطوير البرامج (SDK) لـ Jetpack XR، يمكننا وضع نماذج ثلاثية الأبعاد بجانب واجهة مستخدم Compose باستخدام SpatialBox وSceneCoreEntity. استخدمنا أيضًا 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()
                        }
                    })
                }
            }
        )
    }
}

استكشِف الإمكانات المتاحة مع Android XR اليوم

أثبت لنا تطوير تطبيق XR Geospatial Tour أنّ عائق الدخول إلى عالم التجارب المكانية على نطاق عالمي أصبح أقل من أي وقت مضى بالنسبة إلى مطوّري برامج Android. من خلال واجهة Geospatial API المتوفّرة الآن في نسخة حصرية على Android XR، يمكن لتطبيقاتك فهم العالم المادي من حولها بسلاسة. من خلال الجمع بين واجهات برمجة التطبيقات في Compose for XR وبيانات الموقع الجغرافي العالية الدقة في "خدمة تحديد الموقع المرئي" والإمكانات التوليدية في Gemini، يمكننا إنشاء تجارب تفهم مكان المستخدم وما ينظر إليه.

لمساعدتك في تجربة Android XR، يسرّنا فتح باب تقديم الطلبات للانضمام إلى برنامج Android XR Developer Catalyst، والذي يتضمّن مشروع Project Aura من XREAL. اعتبارًا من اليوم، يمكنك تقديم طلب للحصول على حزمة تطوير البرامج (SDK) لنظارات XREAL Project Aura أو نظاراتنا بشاشة عرض خلال الأشهر المقبلة. 

*إخلاء مسؤولية: هذه الميزة متوفّرة على أجهزة محدّدة. يجب توفُّر اتصال بالإنترنت. ويمكن استخدامها على التطبيقات ومساحات العرض المتوافقة. وقد تختلف النتائج. 

متابعة القراءة