Créer un guide touristique en réalité mixte avec Android XR, l'API Geospatial et Gemini
Temps de lecture : 7 min
_Lors de la conférence Google I/O de cette année_, nous avons annoncé une mise à jour pour les expériences spatiales : l'_API Geospatial_ est désormais disponible en version preview dans _ARCore pour Jetpack XR_. En intégrant le système de positionnement visuel (VPS) de Google à Android XR, Android XR permet d'ancrer du contenu numérique dans le monde physique avec une précision inférieure au mètre et une orientation précise dans les zones compatibles.* Pour découvrir ce que l'API Geospatial pouvait offrir, notre équipe a créé une démo : la visite guidée XR Geospatial.
Imaginez que vous arrivez dans une nouvelle ville, que vous mettez une paire de lunettes XR filaires (comme le futur XREAL Project Aura) et qu'un guide local compétent vous fait visiter les lieux. Vous n'avez pas besoin de regarder une carte 2D. Au lieu de cela, des modèles 3D vous guident en douceur et une voix intelligente vous parle des monuments historiques qui se trouvent juste devant vous. Nous avons combiné les API Geospatial, API Gemini à l'aide de Firebase AI Logic, ancrage Google Maps et le SDK Jetpack XR pour créer une expérience de visite guidée immersive et mains libres.
Avis de non-responsabilité : La vidéo et l'application de visite guidée sont fournies à des fins de démonstration uniquement. Certaines séquences ont été raccourcies. Le matériel présenté peut être en cours de développement. Les informations détaillées sur le produit final peuvent varier.
Examinons les détails de l'implémentation et voyons comment nous avons associé ces API pour créer une expérience spatiale à l'échelle mondiale.
1. Localiser l'utilisateur avec l'API ARCore Geospatial (VPS)
Améliorez votre expérience de navigation sur XR en combinant la puissance du GPS à la précision du VPS. La justesse et l'orientation précise fournies par le VPS permettent aux points de cheminement 3D de s'aligner sur le monde physique.
C'est pourquoi l'API Geospatial sur Android XR peut vous aider à créer des expériences personnalisées. En utilisant une vision par ordinateur avancée, le VPS tente de fournir une GeospatialPose (y compris la latitude, la longitude et le cap) plus précise que le GPS.
Voici comment nous récupérons la pose géospatiale de l'utilisateur en mappant l'orientation de l'appareil sur une coordonnée géospatiale :
// 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}") }
Comme l'ensemble de l'expérience repose sur cette précision, nous surveillons les valeurs horizontalAccuracy et orientationYawAccuracy jusqu'à ce qu'elles atteignent nos seuils. Si l'utilisateur se trouve à l'intérieur ou dans une zone non reconnue, nous l'invitons à "se rendre dans un espace public extérieur et à regarder autour de lui".
2. Créer l'itinéraire avec l'API Gemini et l'ancrage Google Maps
Une fois que nous avons un emplacement, nous utilisons l'API Gemini à l'aide de Firebase AI Logic pour inviter le modèle Gemini à agir comme un guide touristique local. Nous transmettons les coordonnées de l'utilisateur au modèle et lui demandons de générer une réponse JSON structurée contenant des visites guidées à pied à proximité :
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.")
Les grands modèles de langage sont très efficaces pour générer des descriptions riches, mais ils peuvent parfois halluciner des coordonnées de latitude/longitude exactes. Pour résoudre ce problème, nous avons utilisé l'ancrage Google Maps pour ancrer l'IA.
3. Une voix pour vous guider : Gemini 2.5 TTS
Pour que le guide touristique soit vraiment présent, nous avons implémenté des voix off dynamiques.
À l'aide du gemini-2.5-flash-tts model, nous pouvons configurer la configuration de génération de notre modèle pour qu'il renvoie des données audio de manière native au lieu de simplement du texte. Voici comment demander le 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. Donner vie aux lieux en 3D avec Jetpack XR
La dernière pièce du puzzle consiste à afficher ces données dans le champ de vision de l'utilisateur. Le SDK Jetpack XR facilite la transition d'une interface utilisateur Android 2D vers l'informatique spatiale.
Nous avons utilisé Jetpack Compose pour XR afin de créer des composants spatiaux. Pour représenter les points d'intérêt de la visite, nous avons créé un composable appelé InfoSphere, qui contient un GltfModel d'un orbe 3D flottant dans l'espace et avec lequel il est possible d'interagir pour afficher des informations.
À l'aide du SDK Jetpack XR, nous pouvons placer des modèles 3D à côté de l'interface utilisateur Compose à l'aide de SpatialBox et SceneCoreEntity. Nous avons également utilisé InteractableComponent pour répondre aux appuis de l'utilisateur.
En combinant AnimatedSpatialVisibility pour les surfaces d'interface utilisateur Compose traditionnelles avec des éléments 3D SceneCoreEntity, nous pouvons intégrer de manière transparente les données dans le monde physique.
@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() } }) } } ) } }
Découvrez les possibilités d'Android XR dès aujourd'hui
La création de l'application de visite guidée XR Geospatial nous a montré que la barrière à l'entrée pour les expériences spatiales à l'échelle mondiale est plus faible que jamais pour les développeurs Android. L'API Geospatial étant désormais disponible en version preview sur Android XR, vos applications peuvent comprendre de manière transparente le monde physique qui les entoure. En combinant les API de Compose pour XR avec les données de localisation haute précision du VPS et les capacités génératives de Gemini, nous pouvons créer des expériences qui comprennent à la fois où se trouve l'utilisateur et ce qu'il regarde.
Pour vous aider à vous familiariser avec Android XR, nous sommes ravis d'ouvrir les candidatures au programme Android XR Developer Catalyst, qui inclut XREAL Project Aura. À partir d'aujourd'hui, vous pouvez demander à accéder à un kit de développement XREAL Project Aura ou à notre kit de développement de lunettes d'affichage au cours des prochains mois.
*Avis de non-responsabilité : Disponible sur certains appareils. Connexion Internet requise. Fonctionne sur les applis et surfaces compatibles. Les résultats peuvent varier.
Lire la suite
-
Aujourd'hui, nous lançons Android 17 et le mettons à disposition sur la plupart des appareils Pixel compatibles. Découvrez les nouveaux appareils fonctionnant sous Android 17 dans les mois à venir.
Matthew McCullough • Temps de lecture : 13 min
-
Actualités des produits
L'année dernière, nous avons introduit la validation des développeurs Android pour renforcer la sécurité de l'écosystème et empêcher les personnes malintentionnées de se cacher derrière l'anonymat pour publier des applications nuisibles.
Matthew Forsythe • Temps de lecture : 2 min
-
Actualités des produits
Des superpositions de réalité augmentée aux environnements entièrement immersifs, l'écosystème Android XR se développe rapidement, avec le Samsung Galaxy XR déjà disponible aujourd'hui.
Stevan Silva, Vinny DaSilva • Temps de lecture : 3 min
Restez informé
Recevez chaque semaine les dernières informations sur le développement Android directement dans votre boîte de réception.