Android XR, Geospatial API ve Gemini ile karma gerçeklik tur rehberi oluşturma

Okuma süresi 7 dakika

Bu yılki Google I/O'da, üç boyutlu deneyimlerle ilgili bir güncellemeyi duyurduk: Geospatial API artık Jetpack XR için ARCore'da önizleme olarak kullanılabiliyor. Android XR, Google'ın Görsel Konumlandırma Sistemi'ni (VPS) Android XR'ye getirerek desteklenen bölgelerde dijital içeriğin fiziksel dünyaya bir metrenin altında doğruluk ve hassas yönlendirmeyle sabitlenmesini sağlar.* Geospatial API'nin neler sunabileceğini keşfetmek için ekibimiz XR Geospatial Tour adlı bir demo oluşturdu.

Yeni bir şehre girdiğinizi, kablolu bir XR gözlük (ör. XREAL Project Aura) taktığınızı ve anında size etrafı gezdiren bilgili bir yerel rehberin olduğunu hayal edin. 2D haritaya bakmanız gerekmez. Bunun yerine, 3D modeller yolunuzu nazikçe gösterir ve akıllı bir ses, hemen önünüzdeki tarihi yerler hakkında bilgi verir. Ellerinizi kullanmadan, etkileyici bir yürüyüş turu deneyimi oluşturmak için Geospatial API'leri, Firebase AI Logic'i kullanan Gemini API, Google Haritalar Temellendirme ve Jetpack XR SDK'yı bir araya getirdik.

 

 

Sorumluluk reddi beyanı: Video ve Tur Rehberi uygulaması yalnızca tanıtım amaçlıdır. Bazı adımlar kısaltılmıştır. Gösterilen donanımlar geliştirme aşamasında olabilir. Nihai ürün ayrıntıları farklılık gösterebilir.

Uygulama ayrıntılarını inceleyelim ve dünya ölçeğinde bir uzamsal deneyim oluşturmak için bu API'leri nasıl bir araya getirdiğimizi gösterelim.

1. ARCore Geospatial API (VPS) ile Kullanıcıyı Tam Olarak Belirleme

GPS'nin gücünü VPS'nin hassasiyetiyle birleştirerek XR'deki gezinme deneyiminizi iyileştirin. VPS'nin sağladığı doğruluk ve hassas yönlendirme sayesinde 3 boyutlu yol noktaları fiziksel dünyayla uyumlu hale gelir.

Bu nedenle, Android XR'daki Geospatial API, özel deneyimler oluşturmanıza yardımcı olabilir. VPS, gelişmiş bilgisayar görüntülerini kullanarak GPS'ten daha doğru bir GeospatialPose (enlem, boylam ve yön dahil) sağlamaya çalışır.

Cihazın yönünü coğrafi koordinatla eşleyerek kullanıcının coğrafi uzamsal duruşunu nasıl aldığımızı aşağıda açıklıyoruz:

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

Tüm deneyim bu doğruluğa bağlı olduğundan, horizontalAccuracy ve orientationYawAccuracy eşiklerimizi karşılayana kadar bunları izleriz. Kullanıcı kapalı bir alandaysa veya tanınmayan bir bölgedeyse "açık bir alana çıkıp etrafına bakması" istenir.

2. Gemini API ve Google Haritalar Temellendirme ile Seyahat Planı Oluşturma

Konum bilgisi alındıktan sonra, Gemini modeline yerel bir tur rehberi gibi davranması için istem göndermek üzere Firebase AI Logic ile Gemini API'yi kullanırız. Kullanıcının koordinatlarını modele iletiyor ve yakındaki yürüyüş turlarını içeren yapılandırılmış bir JSON yanıtı vermesini istiyoruz:

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

Büyük dil modelleri, ayrıntılı açıklamalar oluşturma konusunda harika olsa da bazen tam enlem/boylam koordinatları konusunda halüsinasyon görebilirler. Bu sorunu çözmek için yapay zekayı temellendirmek üzere Google Haritalar Temellendirme'yi kullandık.

3. Size Yol Gösteren Bir Ses: Gemini 2.5 TTS

Tur rehberinin gerçekten orada olduğunu hissettirmek için dinamik seslendirmeler kullandık.

gemini-2.5-flash-tts model kullanarak model oluşturma yapılandırmamızı yalnızca metin yerine ses verilerini doğal olarak döndürecek şekilde yapılandırabiliriz. ResponseModality.AUDIO isteğinde bulunmak için:

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. Jetpack XR ile 3D'de Hayata Geçirme

Bulmacanın son parçası, bu verilerin kullanıcının görüş alanında oluşturulmasıdır. Jetpack XR SDK, 2D Android kullanıcı arayüzünden uzamsal bilişime geçişi kolaylaştırır.

Uzamsal bileşenler oluşturmak için XR için Jetpack Compose'u kullandık. Tur boyunca ilgi çekici noktaları göstermek için InfoSphere adlı bir Composable oluşturduk. Bu Composable, uzayda yüzen ve bilgilerini göstermek için etkileşime girilebilen 3D küre GltfModel'ini içerir.

Jetpack XR SDK'yı kullanarak SpatialBox ve SceneCoreEntity ile Compose kullanıcı arayüzünün yanına 3D modeller yerleştirebiliriz. Ayrıca, kullanıcı dokunmalarına yanıt vermek için InteractableComponent'ı kullandık.

Geleneksel Compose kullanıcı arayüzü yüzeyleri için AnimatedSpatialVisibility ile SceneCoreEntity 3D öğelerini birleştirerek verileri fiziksel dünyayla sorunsuz bir şekilde harmanlayabiliyoruz.

@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 ile neler yapabileceğinizi keşfedin

XR Geospatial Tour uygulamasını oluşturmak, Android geliştiriciler için dünya ölçeğinde mekansal deneyimlere giriş engelinin hiç olmadığı kadar düşük olduğunu gösterdi. Android XR'da artık önizleme sürümüyle kullanılabilen Geospatial API sayesinde uygulamalarınız çevrelerindeki fiziksel dünyayı sorunsuz bir şekilde anlayabilir. Compose for XR'ın API'lerini VPS'nin yüksek hassasiyetli konum verileri ve Gemini'ın üretken özellikleriyle birleştirerek kullanıcının nerede olduğunu ve neye baktığını anlayan deneyimler oluşturabiliriz.

Android XR'ı deneyimlemenize yardımcı olmak için XREAL Project Aura'nın da dahil olduğu Android XR Developer Catalyst Programı'na başvuruları açmaktan heyecan duyuyoruz. Bugünden itibaren, önümüzdeki aylarda XREAL Project Aura geliştirme kiti veya ekran gözlüğü geliştirme kitimize erişim elde etmek için başvurabilirsiniz. 

*Sorumluluk reddi beyanı: Belirli cihazlarda kullanılabilir. İnternet bağlantısı gerekir. Uyumlu uygulamalarda ve cihazlarda çalışır. Sonuçlar değişiklik gösterebilir. 

Okumaya devam et