Membangun Pemandu Tur Mixed Reality dengan Android XR, Geospatial API, dan Gemini

Waktu baca: 7 menit

Di Google I/O tahun ini, kami mengumumkan update untuk pengalaman spasial: Geospatial API kini tersedia sebagai pratinjau di ARCore untuk Jetpack XR. Dengan menghadirkan Sistem Pemosisi Visual (VPS) Google ke Android XR, Android XR memungkinkan penambatan konten digital ke dunia fisik dengan akurasi di bawah satu meter dan orientasi yang presisi di area yang didukung.* Untuk mempelajari potensi Geospatial API, tim kami membuat demo: XR Geospatial Tour.

Bayangkan Anda berjalan ke kota baru, mengenakan kacamata XR berkabel (seperti XREAL Project Aura yang akan datang), dan langsung memiliki pemandu lokal yang berpengetahuan luas yang memandu Anda berkeliling. Anda tidak perlu menatap peta 2D—sebaliknya, model 3D akan memandu jalan Anda, dan suara cerdas akan memberi tahu Anda tentang landmark bersejarah yang ada tepat di depan Anda. Kami menggabungkan Geospatial APIGemini API menggunakan Firebase AI LogicPerujukan Google Maps, dan Jetpack XR SDK untuk menciptakan pengalaman tur jalan kaki imersif tanpa perlu memegang perangkat.

 

 

Pernyataan Penyangkalan: Aplikasi Video dan Pemandu Tur hanya untuk tujuan demonstrasi. Beberapa rangkaian proses telah dipersingkat. Hardware yang digambarkan mungkin masih dalam pengembangan; detail produk akhir mungkin berbeda.

Mari kita bahas detail penerapan dan tunjukkan cara kami menggabungkan API ini untuk membangun pengalaman spasial skala dunia.

1. Menentukan Lokasi Pengguna dengan ARCore Geospatial API (VPS)

Tingkatkan pengalaman navigasi Anda di XR dengan menggabungkan kecanggihan GPS dan presisi VPS. Akurasi dan orientasi presisi yang disertakan dengan VPS memungkinkan titik jalan 3D selaras dengan dunia fisik.

Itulah sebabnya Geospatial API di Android XR dapat membantu Anda membangun pengalaman kustom. Dengan menggunakan computer vision canggih, VPS mencoba memberikan GeospatialPose (termasuk lintang, bujur, dan arah) yang lebih akurat daripada GPS.

Berikut cara mengambil pose Geospasial pengguna dengan memetakan orientasi perangkat ke koordinat Geospasial:

// 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}")
}

Karena seluruh pengalaman bergantung pada akurasi ini, kami memantau horizontalAccuracy dan orientationYawAccuracy hingga memenuhi nilai minimum kami. Jika pengguna berada di dalam ruangan atau di area yang tidak dikenal, kami akan meminta mereka untuk "berjalan ke ruang publik di luar ruangan dan melihat sekeliling".

2. Membuat Itinerari dengan Gemini API & Perujukan Google Maps

Setelah mendapatkan lokasi, kami menggunakan Gemini API menggunakan Firebase AI Logic untuk meminta model Gemini bertindak sebagai pemandu wisata lokal. Kita meneruskan koordinat pengguna ke model dan memintanya untuk menghasilkan respons JSON terstruktur yang berisi tur jalan kaki di sekitar:

   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.")

Model Bahasa Besar sangat bagus dalam menghasilkan deskripsi yang kaya, tetapi terkadang dapat berhalusinasi dengan koordinat lintang/bujur yang tepat. Untuk menyelesaikannya, kami menggunakan Grounding Google Maps untuk melakukan grounding AI.

3. Suara yang Memandu Anda: Gemini 2.5 TTS

Untuk membuat pemandu wisata terasa benar-benar hadir, kami menerapkan sulih suara dinamis.

Dengan gemini-2.5-flash-tts model, kita dapat mengonfigurasi konfigurasi pembuatan model untuk menampilkan data audio secara native, bukan hanya teks. Berikut cara Anda memintanya: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. Menghidupkan Konten dalam 3D dengan Jetpack XR

Bagian terakhir dari teka-teki ini adalah merender data ini dalam bidang pandang pengguna. Jetpack XR SDK mempermudah transisi dari UI Android 2D ke komputasi spasial.

Kami menggunakan Jetpack Compose untuk XR guna membuat komponen spasial. Untuk merepresentasikan tempat menarik di sepanjang tur, kami membuat Composable bernama InfoSphere, yang berisi GltfModel dari bola 3D yang mengambang di ruang angkasa dan dapat berinteraksi untuk mengungkapkan informasi.

Dengan menggunakan Jetpack XR SDK, kita dapat menempatkan model 3D bersama UI Compose menggunakan SpatialBox dan SceneCoreEntity. Kami juga menggunakan InteractableComponent untuk merespons ketukan pengguna.

Dengan menggabungkan AnimatedSpatialVisibility untuk platform UI Compose tradisional dengan elemen 3D SceneCoreEntity, kita dapat memadukan data dengan lancar ke dunia fisik.

@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()
                        }
                    })
                }
            }
        )
    }
}

Jelajahi berbagai kemungkinan dengan Android XR sekarang

Membangun aplikasi XR Geospatial Tour menunjukkan bahwa hambatan untuk memasuki pengalaman spasial skala dunia lebih rendah dari sebelumnya bagi developer Android. Dengan Geospatial API yang kini tersedia dalam pratinjau di Android XR, aplikasi Anda dapat memahami dunia fisik di sekitarnya dengan lancar. Dengan menggabungkan API Compose for XR dengan data lokasi presisi tinggi VPS dan kemampuan generatif Gemini, kita dapat menciptakan pengalaman yang memahami lokasi pengguna dan apa yang mereka lihat.

Untuk membantu Anda menggunakan Android XR secara langsung, kami dengan senang hati membuka pendaftaran untuk Program Katalis Developer Android XR, yang mencakup Project Aura XREAL. Mulai hari ini, Anda dapat mengajukan permohonan untuk mendapatkan akses ke devkit XREAL Project Aura atau devkit kacamata tampilan kami dalam beberapa bulan mendatang. 

*Pernyataan penyangkalan: Tersedia di perangkat tertentu. Koneksi internet diperlukan. Berfungsi di aplikasi dan platform yang kompatibel. Hasil dapat berbeda-beda. 

Lanjutkan membaca