Créer une application de réalité augmentée (RA) à l'aide de la nouvelle API ARCore Geospatial

1. Présentation

ARCore est le framework de Google permettant de créer des expériences de réalité augmentée sur smartphone. La nouvelle API ARCore Geospatial offre un nouvel aspect à la réalité augmentée, vous permettant de placer des points de cheminement en réalité augmentée spécifiques à un lieu autour de points de repère réels.

Objectifs de l'atelier

Dans cet atelier de programmation, vous allez faire vos premiers pas avec l'API ARCore Geospatial. Vous découvrirez quelles informations l'API Geospatial peut offrir à votre expérience globale de RA, et comment ces données peuvent être utilisées pour alimenter une expérience de repérage simple en RA.

Points abordés

  • Configurer un projet ARCore utilisant l'API Geospatial
  • Demander des données géographiques à l'API Geospatial et les afficher à l'aide de Google Maps
  • Positionner une ancre associée à un lieu réel

Ce dont vous avez besoin

2. Configurer l'environnement de développement

Configurer Android Studio

Pour vous aider à faire vos premiers pas avec l'API Geospatial, nous vous fournissons un projet de démarrage qui inclut les éléments de base d'un projet ARCore intégré au SDK Google Maps. qui vous permettra de commencer rapidement avec l'API Geospatial.

  1. Lancez Android Studio, puis importez un projet à partir de VCS.
    • Si vous avez déjà ouvert un projet, sélectionnez File > New > Project from Version Control (Fichier > Nouveau > Projet provenant du contrôle des versions).
    • Si la fenêtre Welcome to Android Studio (Bienvenue dans Android Studio) s'affiche, utilisez Get from VCS (Obtenir depuis VCS). Obtenir à partir d'un emplacement VCS
  2. Sélectionnez Git, puis utilisez l'URL https://github.com/google-ar/codelab-geospatial.git pour importer le projet.

Configurer un projet Google Cloud

L'API Geospatial utilise les images Street View associées au magnétomètre et aux capteurs de l'appareil photo de l'appareil pour améliorer les valeurs d'orientation. Pour utiliser ce service, vous devez configurer un projet Google Cloud.

  1. Créez un projet dans la console Google Cloud:
  2. Activez les API nécessaires:
    • Dans la barre latérale, sélectionnez API et services, puis Bibliothèque.
    • Recherchez l'API ARCore.
    • Cliquez sur Activer.
    • Revenez à la bibliothèque.
    • Recherchez le SDK Maps pour Android.
    • Cliquez sur Activer.
  3. Créez des identifiants de clé API:
    • Sous API et services, sélectionnez Identifiants.
    • Dans la barre supérieure, cliquez sur Créer des identifiants, puis sélectionnez Clé API.
    • Notez la clé créée, car vous en aurez besoin pour l'étape suivante. Si vous avez besoin de les récupérer, revenez à la page Identifiants.

Suivez ces étapes pour créer un projet Google Cloud avec autorisation par clé API, et vous êtes prêt à utiliser l'API Geospatial.

Intégrer la clé API au projet Android Studio

Pour associer la clé API de Google Cloud à votre projet, ouvrez le projet que vous avez créé dans Android Studio et modifiez les clés API:

  1. Ouvrez app > src > AndroidManifest.xml.
  2. Recherchez les entrées meta-data suivantes:
    <meta-data
        android:name="com.google.android.ar.API_KEY"
        android:value="PLACEHOLDER_API_KEY" />
    
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="PLACEHOLDER_API_KEY" />
    
  3. Remplacez PLACEHOLDER_API_KEY par la clé API que vous avez créée dans votre projet Google Cloud.

La valeur stockée dans com.google.android.ar.API_KEY autorise cette application à utiliser l'API Geospatial, et la valeur stockée dans com.google.android.geo.API_KEY autorise cette application à utiliser le SDK Google Maps.

Valider votre projet

Assurez-vous que votre projet est prêt. Dans Android Studio, exécutez votre application. Vous devriez voir une vue de caméra, ainsi qu'une carte fonctionnelle en bas de l'écran.

Projet récurrent

3. Déterminer la position de l'utilisateur

Au cours de cette étape, vous allez ajouter du code à l'exemple de projet pour commencer à utiliser l'API Geospatial.

Configurer la session ARCore pour utiliser l'API Geospatial

Pour obtenir des données géospatiales, vous devez activer l'API Geospatial. Remplacez GeospatialMode dans la configuration de votre session par ENABLED en modifiant la fonction configureSession dans HelloGeoActivity.kt:

fun configureSession(session: Session) {
  session.configure(
    session.config.apply {
      // Enable Geospatial Mode.
      geospatialMode = Config.GeospatialMode.ENABLED
    }
  )
}

Lorsque le mode Geospatial est défini sur ENABLED, l'application peut obtenir des informations géospatiales.

Demander des données à l'API Geospatial

Dans HelloGeoRenderer.kt, recherchez la ligne suivante:

// TODO: Obtain Geospatial information and display it on the map.

En dessous, vérifiez que l'objet Earth peut être utilisé. C'est alors qu'il y a trackingState TrackingState.ENABLED.

val earth = session.earth
if (earth?.trackingState == TrackingState.TRACKING) {
  // TODO: the Earth object may be used here.
}

Sous TODO, demandez des informations géospatiales à ARCore. Ajoutez la ligne suivante:

val cameraGeospatialPose = earth.cameraGeospatialPose

Vous obtenez alors un GeospatialPose contenant les informations suivantes:

  • Emplacement, exprimé à la latitude et la longitude. Une estimation de la précision de la localisation est également fournie.
  • L'élévation, ainsi qu'une estimation de la précision de l'altitude.
  • Orientation, approximation de la direction vers laquelle l'appareil est dirigé et estimation de la précision de l'orientation.

Afficher des informations de positionnement sur la carte

Vous pouvez utiliser le GeospatialPose stocké dans cameraGeospatialPose pour déplacer un repère sur la carte qui indique où se trouve l'utilisateur. Continuez là où vous en étiez et ajoutez les éléments suivants:

activity.view.mapView?.updateMapPosition(
  latitude = cameraGeospatialPose.latitude,
  longitude = cameraGeospatialPose.longitude,
  heading = cameraGeospatialPose.heading
)

La position de la carte est mise à jour en continu à l'aide des valeurs obtenues avec l'API Geospatial.

Essayer

Dans Android Studio, cliquez sur Play (Lire). Tenez votre appareil et déplacez-le pour aider ARCore à établir le suivi. Après quelques instants, un repère vert doit apparaître sur la carte. Ce repère pivote lorsque vous voyez votre environnement. Elle doit également être dans le bon sens: lorsque vous êtes physiquement face au nord, la flèche pointe également vers le nord.

La flèche verte suit votre position et votre direction.

4. Placer une ancre à l'aide des coordonnées Earth

L'API Geospatial peut placer des ancres sur n'importe quelle paire de coordonnées et rotation dans le monde réel. Vos utilisateurs peuvent ainsi voir du contenu ancré lorsqu'ils visitent des établissements spécifiques.

Au cours de cette étape, vous allez ajouter un moyen de placer une ancre en appuyant sur la carte.

Définir une action lorsque l'utilisateur appuie sur la carte

Le projet est fourni avec une fonction onMapClick, qui est appelée avec une latitude et une longitude lorsque l'utilisateur clique sur le fragment de carte. Recherchez la fonction onMapClick dans HelloGeoRenderer.kt.

Assurez-vous que l'objet Earth peut être utilisé

Avant de créer des ancres sur Earth, assurez-vous que la valeur TrackingState de l'objet Earth est TRACKING, ce qui signifie que la position de la Terre est connue. Assurez-vous également que son EarthState est défini sur ENABLED, ce qui signifie qu'aucun problème n'a été rencontré avec l'API Geospatial. Ajoutez les lignes suivantes dans onMapClick:

val earth = session?.earth ?: return
if (earth.trackingState != TrackingState.TRACKING) {
  return
}

Déterminer la position de la nouvelle ancre

Après avoir vérifié que l'objet Earth effectue un suivi, dissociez l'élément earthAnchor précédent, le cas échéant. Vous remplacerez earthAnchor par une nouvelle ancre au cours des étapes suivantes:

earthAnchor?.detach()

Utilisez ensuite cameraGeospatialPose pour déterminer l'altitude de la nouvelle ancre. Utilisez la paire de coordonnées en appuyant sur la carte pour positionner l'ancre.

// Place the earth anchor at the same altitude as that of the camera to make it easier to view.
val altitude = earth.cameraGeospatialPose.altitude - 1
// The rotation quaternion of the anchor in the East-Up-South (EUS) coordinate system.
val qx = 0f
val qy = 0f
val qz = 0f
val qw = 1f
earthAnchor =
  earth.createAnchor(latLng.latitude, latLng.longitude, altitude, qx, qy, qz, qw)

createAnchor crée un Anchor fixe sur des coordonnées géodésiques avec une rotation donnée. Cette ancre tente de rester stable et fixe aux coordonnées et à l'altitude spécifiées.

Afficher le repère placé sur la carte

Enfin, déplacez un nouveau repère indiquant l'endroit où il a été placé:

activity.view.mapView?.earthMarker?.apply {
  position = latLng
  isVisible = true
}

Essayer

Dans Android Studio, cliquez sur Play (Lire). Tenez votre appareil et déplacez-le pour aider ARCore à établir le suivi. Après quelques instants, un repère vert indiquant votre position actuelle doit apparaître sur la carte.

Lorsque l'utilisateur appuie sur la carte, l'API Geospatial est utilisée pour placer une ancre, qui est fixée à un emplacement réel. Essayez de placer l'ancre près de votre position actuelle afin de la voir dans la vue RA. Elle doit rester stable pendant que vous naviguez dans votre environnement.

Placez un repère en appuyant sur la carte.

5. Conclusion

Dans cet atelier de programmation, vous avez appris à utiliser l'API Geospatial pour créer une expérience de RA simple, centrée sur le monde réel.

Placez un repère en appuyant sur la carte.

Points abordés

  • Configurer un projet Google Cloud avec l'API Geospatial activée
  • Obtenir des informations géospatiales dans un projet ARCore et les afficher sur une carte
  • Comment positionner une ancre dans le monde réel à l'aide de la position géographique

Ressources supplémentaires

Pour en savoir plus sur les concepts géographiques et les SDK utilisés dans cet atelier de programmation, consultez les ressources supplémentaires suivantes: