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 qui permet de créer des expériences de réalité augmentée sur smartphone. La nouvelle API ARCore Geospatial apporte un nouvel aspect à la réalité augmentée : elle vous permet de placer des points de cheminement en réalité augmentée spécifiques à un lieu autour de points de repère réels.

Ce que vous allez faire

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

Points abordés

  • Configurer un projet ARCore qui utilise 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

Prérequis

2. Configurer l'environnement de développement

Configurer Android Studio

Pour faire vos premiers pas avec l'API Geospatial, nous vous avons fourni un projet de démarrage qui inclut les éléments de base d'un projet ARCore intégré au SDK Google Maps. Cela vous permet de démarrer rapidement avec l'API Geospatial.

  1. Démarrez Android Studio et importez un projet depuis VCS.
    • Si vous avez déjà ouvert un projet, utilisez Fichier > Nouveau > Projet 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 de l'emplacement VCS
  2. Sélectionnez Git et 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 combinées au magnétomètre et aux informations du capteur 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:
    • Consultez Créer un projet dans Google Cloud Platform. Créer un projet Google Cloud
    • Saisissez un nom de projet approprié (par exemple, "Projet de l'API ARCore Geospatial"), puis sélectionnez l'emplacement de votre choix.
    • Cliquez sur Créer.
  2. Activez les API nécessaires:
    • Dans la barre latérale, sélectionnez API et Services, puis sur 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 les identifiants de la 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 à l'étape suivante. Revenez à la page Identifiants si vous avez besoin de les récupérer.

En suivant ces étapes, vous avez créé un projet Google Cloud avec une 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 l'application > 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, tandis que 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 à être lancé. Dans Android Studio, exécutez votre application. Vous devriez voir une vue de la caméra, ainsi qu'un plan opérationnel au 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. Dans la configuration de votre session, définissez GeospatialMode sur 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 Géospatial est 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 à ce moment-là 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 cette ligne:

val cameraGeospatialPose = earth.cameraGeospatialPose

Vous obtenez ainsi un GeospatialPose contenant les informations suivantes:

  • Lieu, exprimé en latitude et en longitude. Une estimation de la précision de la position est également fournie.
  • Élévation et estimation de sa précision.
  • Direction : direction approximative de l'appareil et estimation de sa précision.

Afficher les 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. Reprenez 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 ainsi mise à jour en continu à l'aide des valeurs obtenues par l'API Geospatial.

Essayer

Dans Android Studio, cliquez sur Play (Lecture). Tenez votre appareil devant vous et déplacez-le pour aider ARCore à établir le suivi. Après quelques instants, vous devriez voir un repère vert apparaître sur la carte. Ce repère pivote lorsque vous regardez ce qui vous entoure. Elle doit également pointer dans la bonne direction: lorsque vous vous trouvez 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. Cela permet à vos utilisateurs de voir du contenu ancré lorsque des lieux spécifiques sont visités.

Au cours de cette étape, vous allez ajouter une méthode pour 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.

S'assurer 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 définie sur TRACKING, ce qui signifie que la position de la Terre est connue. Assurez-vous également que 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 l'emplacement de la nouvelle ancre

Après avoir vérifié que l'objet Earth est bien suivi, dissociez la earthAnchor précédente, le cas échéant. Au cours des étapes suivantes, vous allez remplacer earthAnchor par une nouvelle ancre:

earthAnchor?.detach()

Utilisez ensuite cameraGeospatialPose pour déterminer l'altitude de la nouvelle ancre. Utilisez la paire de coordonnées d'appuyer 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 à 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 sa position:

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

Essayer

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

Lorsque l'utilisateur appuie sur la carte, l'API Geospatial permet de placer une ancre, qui est fixée à un point géographique réel. Essayez de placer l'ancre à proximité de votre position actuelle afin de la voir dans la vue RA. Elle devrait 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 liée au 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 placer une ancre positionnée dans le monde réel à l'aide du positionnement 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 ces ressources supplémentaires: