Membuat Panduan Wisata Mixed Reality dengan Android XR, Geospatial API, dan Gemini

7 menit membaca

Di Google I/O tahun ini, kami mengumumkan pembaruan untuk pengalaman spasial: Geospatial API kini tersedia sebagai pratinjau di ARCore untuk Jetpack XR. Dengan menghadirkan Visual Positioning System (VPS) Google ke Android XR, Android XR memungkinkan konten digital dijangkarkan ke dunia fisik dengan akurasi sub-meter dan orientasi yang presisi di area yang didukung.* Untuk menjelajahi potensi Geospatial API, tim kami membuat demo: XR Geospatial Tour.

Bayangkan Anda berjalan-jalan di kota baru, memakai kacamata XR berkabel (seperti XREAL Project Aura yang akan datang), dan langsung memiliki panduan wisata lokal yang berpengetahuan luas dan siap memandu Anda. Anda tidak perlu menatap peta 2D—sebaliknya, model 3D akan memandu Anda dengan lembut, dan suara cerdas akan memberi tahu Anda tentang landmark bersejarah yang ada tepat di depan Anda. Kami menggabungkan Geospatial APIGemini API menggunakan Firebase AI LogicGoogle Maps Grounding, dan Jetpack XR SDK untuk menciptakan pengalaman tur jalan kaki imersif tanpa menggunakan tangan.

 

 

Pernyataan penyangkalan: Aplikasi Video dan Panduan Wisata 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 implementasinya dan tunjukkan bagaimana kami menggabungkan API ini untuk membangun pengalaman spasial berskala dunia.

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

Tingkatkan pengalaman navigasi Anda di XR dengan menggabungkan kecanggihan GPS dengan 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 visi komputer canggih, VPS mencoba memberikan GeospatialPose (termasuk lintang, bujur, dan arah) yang lebih akurat daripada GPS.

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

// 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 dikenali, kami akan meminta mereka untuk "berjalan ke ruang publik di luar ruangan dan melihat sekeliling".

2. Membuat Rencana Perjalanan dengan Gemini API &Google Maps Grounding

Setelah mendapatkan lokasi, kami menggunakan Gemini API menggunakan Firebase AI Logic untuk meminta model Gemini bertindak sebagai panduan wisata lokal. Kami meneruskan koordinat pengguna ke model dan memintanya untuk menampilkan respons JSON terstruktur yang berisi tur jalan kaki terdekat:

   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 membuat deskripsi yang kaya, tetapi terkadang dapat mengalami halusinasi koordinat lintang/bujur yang tepat. Untuk mengatasi hal ini, kami menggunakan Google Maps Grounding untuk meng-ground AI.

3. Suara untuk Memandu Anda: Gemini 2.5 TTS

Untuk membuat panduan wisata terasa benar-benar ada, kami menerapkan voiceover dinamis.

Dengan menggunakan gemini-2.5-flash-tts model, kami dapat mengonfigurasi konfigurasi pembuatan model untuk menampilkan data audio secara native, bukan hanya teks. Berikut cara meminta 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 memudahkan transisi dari UI Android 2D ke komputasi spasial.

Kami menggunakan Jetpack Compose untuk XR untuk membangun komponen spasial. Untuk merepresentasikan tempat menarik di sepanjang tur, kami membuat Composable bernama InfoSphere, yang berisi GltfModel bola 3D yang melayang di luar angkasa dan dapat berinteraksi untuk menampilkan informasi.

Dengan 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, kami 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 kemungkinan yang dapat dilakukan dengan Android XR saat ini

Membangun aplikasi XR Geospatial Tour menunjukkan bahwa hambatan untuk masuk ke pengalaman spasial berskala 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 membuat pengalaman yang memahami lokasi pengguna dan apa yang mereka lihat.

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

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

Lanjutkan membaca