Mit der neuen ARCore Geospatial API eine Augmented-Reality-App erstellen

1. Überblick

ARCore ist das Framework von Google zur Entwicklung von Augmented Reality-Erlebnissen auf Smartphones. Die neue ARCore Geospatial API bietet Augmented Reality einen neuen Aspekt, mit dem sich standortspezifische Augmented Reality-Wegpunkte um reale Sehenswürdigkeiten herum platzieren lassen.

Aufgaben

In diesem Codelab lernen Sie die ARCore Geospatial API kennen. Sie erfahren, welche Informationen die Geospatial API für Ihre AR-Nutzung bieten kann und wie diese Daten für eine einfache AR-Wegsuche genutzt werden können.

Lerninhalte

  • ARCore-Projekt einrichten, das die Geospatial API verwendet
  • Geografische Daten von der Geospatial API anfordern und mit Google Maps anzeigen
  • So platzieren Sie einen Anker, der an einem realen Standort angebracht ist.

Voraussetzungen

2. Entwicklungsumgebung einrichten

Android Studio einrichten

Für die ersten Schritte mit der Geospatial API haben wir ein Startprojekt bereitgestellt, das die Grundlagen eines ARCore-Projekts enthält, das in das Google Maps SDK integriert ist. So erhalten Sie einen schnellen Einstieg in die Geospatial API.

  1. Starten Sie Android Studio und importieren Sie ein Projekt aus VCS.
    • Wenn bereits ein Projekt geöffnet ist, wählen Sie File > New > Project from Version Control... (Datei > Neu > Projekt aus Versionsverwaltung...) aus.
    • Wenn das Fenster Willkommen bei Android Studio angezeigt wird, verwenden Sie Von VCS abrufen. Vom VCS-Speicherort abrufen
  2. Wählen Sie Git aus und importieren Sie das Projekt mit der URL https://github.com/google-ar/codelab-geospatial.git.

Google Cloud-Projekt einrichten

Die Geospatial API verwendet StreetView-Bilder in Kombination mit dem Magnetometer und den Kamerasensorinformationen des Geräts, um die Ausrichtungswerte zu verbessern. Damit Sie diesen Dienst nutzen können, müssen Sie ein Google Cloud-Projekt einrichten.

  1. Erstellen Sie ein Projekt in der Google Cloud Console:
    • Weitere Informationen finden Sie unter Projekt in der Google Cloud Platform erstellen.
      Google Cloud-Projekt erstellen
    • Geben Sie einen geeigneten Projektnamen ein, z. B. "ARCore Geospatial API-Projekt", und wählen Sie einen Standort aus.
    • Klicken Sie auf Erstellen.
  2. Aktivieren Sie die erforderlichen APIs:
    • Wählen Sie in der Seitenleiste APIs und Dienste und dann Bibliothek aus.
    • Suchen Sie nach der ARCore API.
    • Klicken Sie auf Aktivieren.
    • Kehren Sie zur Bibliothek zurück.
    • Suchen Sie nach dem Maps SDK for Android.
    • Klicken Sie auf Aktivieren.
  3. Anmeldedaten für API-Schlüssel erstellen:
    • Wählen Sie unter APIs und Dienste die Option Anmeldedaten aus.
    • Klicken Sie in der oberen Leiste auf Anmeldedaten erstellen und wählen Sie dann API-Schlüssel aus.
    • Notieren Sie sich den erstellten Schlüssel, da Sie ihn für den nächsten Schritt benötigen. Kehren Sie zur Seite Anmeldedaten zurück, wenn Sie diese abrufen müssen.

Mit diesen Schritten haben Sie ein Google Cloud-Projekt mit API-Schlüsselautorisierung erstellt und können die Geospatial API verwenden.

API-Schlüssel in das Android Studio-Projekt einbinden

Um den API-Schlüssel von Google Cloud mit Ihrem Projekt zu verknüpfen, öffnen Sie das Projekt, das Sie in Android Studio erstellt haben, und ändern Sie die API-Schlüssel:

  1. Öffnen Sie app > src > AndroidManifest.xml.
  2. Suchen Sie die folgenden meta-data-Einträge:
    <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. Ersetzen Sie PLACEHOLDER_API_KEY durch den API-Schlüssel, den Sie in Ihrem Google Cloud-Projekt erstellt haben.

Durch den in com.google.android.ar.API_KEY gespeicherten Wert wird die Verwendung der Geospatial API durch diese App autorisiert. Mit dem in com.google.android.geo.API_KEY gespeicherten Wert wird die App autorisiert, das Google Maps SDK zu verwenden.

Projekt verifizieren

Stellen Sie sicher, dass Ihr Projekt startbereit ist. Führen Sie Ihre App in Android Studio aus. Sie sollten eine Kameraansicht und eine funktionierende Karte unten auf dem Bildschirm sehen können.

Boilerplate-Projekt

3. Position der Nutzenden bestimmen

In diesem Schritt fügen Sie dem Beispielprojekt Code hinzu, um mit der Geospatial API zu beginnen.

ARCore-Sitzung für die Verwendung der Geospatial API konfigurieren

Wenn Sie raumbezogene Daten erhalten möchten, müssen Sie die Geospatial API aktivieren. Ändern Sie die GeospatialMode in Ihrer Sitzungskonfiguration in ENABLED, indem Sie die Funktion configureSession in HelloGeoActivity.kt ändern:

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

Während der raumbezogene Modus ENABLED ist, kann die Anwendung raumbezogene Daten abrufen.

Daten von der Geospatial API anfordern

Suchen Sie in HelloGeoRenderer.kt die folgende Zeile:

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

Überprüfen Sie darunter, ob das Earth-Objekt zur Nutzung verfügbar ist. Dann hat er trackingState TrackingState.ENABLED.

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

Unterhalb von TODO können raumbezogene Daten von ARCore angefordert werden. Diese Zeile hinzufügen:

val cameraGeospatialPose = earth.cameraGeospatialPose

Dadurch erhalten Sie ein GeospatialPose, das folgende Informationen enthält:

  • Standort in Breiten- und Längengrad. Eine Schätzung der Standortgenauigkeit wird ebenfalls angegeben.
  • (Höhe) und eine Schätzung der Höhengenauigkeit.
  • Richtung: eine ungefähre Angabe der Richtung, in die das Gerät zeigt, und eine Schätzung der Genauigkeit der Richtung.

Positionsinformationen auf der Karte anzeigen

Sie können die in cameraGeospatialPose gespeicherte GeospatialPose verwenden, um eine Markierung auf der Karte zu verschieben, die den aktuellen Standort des Nutzers anzeigt. Fahren Sie an der Stelle fort, an der Sie aufgehört haben, und fügen Sie Folgendes hinzu:

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

Dadurch wird die Kartenposition kontinuierlich anhand der von der Geospatial API abgerufenen Werte aktualisiert.

Ausprobieren

Klicken Sie in Android Studio auf Spielen. Halte dein Gerät nach oben und bewege es, damit ARCore das Tracking leichter einrichten kann. Nach kurzer Zeit sollte auf der Karte eine grüne Markierung angezeigt werden. Diese Markierung dreht sich, während Sie Ihre Umgebung betrachten. Außerdem sollte der Pfeil in die richtige Richtung weisen: Wenn Sie nach Norden ausgerichtet sind, zeigt der Pfeil auch nach Norden.

Der grüne Pfeil folgt Ihrer Position und Richtung.

4. Anker mithilfe von Erdkoordinaten platzieren

Mit der Geospatial API können Anker an jedem Koordinatenpaar und bei jeder Rotation in der realen Welt platziert werden. So können Ihre Nutzer verankerten Content sehen, wenn sie bestimmte Standorte besuchen.

In diesem Schritt fügen Sie eine Möglichkeit hinzu, einen Anker zu platzieren, indem Sie auf die Karte tippen.

Aktion beim Antippen der Karte festlegen

Das Projekt verfügt über eine onMapClick-Funktion, die mit dem Breiten- und Längengrad aufgerufen wird, wenn auf das Kartenfragment geklickt wird. Suchen Sie die Funktion onMapClick in HelloGeoRenderer.kt.

Prüfen, ob das Earth-Objekt verwendet werden kann

Bevor Sie Anker auf der Erde erstellen, vergewissern Sie sich, dass der TrackingState des Erdobjekts auf TRACKING gesetzt ist. Das bedeutet, dass die Position der Erde bekannt ist. Außerdem muss EarthState auf ENABLED gesetzt sein. Das bedeutet, dass keine Probleme mit der Geospatial API aufgetreten sind. Fügen Sie diese Zeilen innerhalb von onMapClick hinzu:

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

Position des neuen Ankers festlegen

Nachdem Sie überprüft haben, ob das Earth-Objekt das Tracking ausführt, trennen Sie die vorherige earthAnchor (falls vorhanden). In den nächsten Schritten ersetzen Sie earthAnchor durch einen neuen Anker:

earthAnchor?.detach()

Verwenden Sie dann cameraGeospatialPose, um die Höhe für den neuen Anker zu bestimmen. Verwenden Sie das Koordinatenpaar aus dem Tippen auf die Karte als Position des Ankers.

// 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 erstellt einen Anchor, der mit einer bestimmten Rotation an geodätischen Koordinaten fixiert ist. Dieser Anker versucht, stabil zu bleiben und die angegebenen Koordinaten und Höhe zu fixieren.

Positionierung der Markierung auf der Karte anzeigen

Verschieben Sie schließlich eine neue Markierung, die angibt, wo die Markierung platziert wurde:

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

Ausprobieren

Klicken Sie in Android Studio auf Spielen. Halte dein Gerät nach oben und bewege es, damit ARCore das Tracking leichter einrichten kann. Nach kurzer Zeit sollte auf der Karte eine grüne Markierung für Ihre aktuelle Position angezeigt werden.

Beim Tippen auf die Karte wird die Geospatial API verwendet, um einen Anker zu platzieren, der an einem tatsächlichen Standort fixiert ist. Positioniere den Anker möglichst nahe an deinem aktuellen Standort, damit du ihn in der AR-Ansicht sehen kannst. Es sollte stabil bleiben, während Sie in Ihrer Umgebung navigieren.

Platzieren Sie eine Markierung, indem Sie auf die Karte tippen.

5. Fazit

In diesem Codelab haben Sie gelernt, wie Sie mithilfe der Geospatial API eine einfache AR-Erfahrung erstellen, die mit der realen Welt verbunden ist.

Platzieren Sie eine Markierung, indem Sie auf die Karte tippen.

Behandelte Themen

  • Google Cloud-Projekt mit aktivierter Geospatial API einrichten
  • Geodaten aus einem ARCore-Projekt abrufen und auf einer Karte darstellen
  • So platzieren Sie einen Anker mithilfe der geografischen Positionierung in der realen Welt.

Weitere Ressourcen

Weitere Informationen zu den geografischen Konzepten und SDKs, die in diesem Codelab verwendet werden, finden Sie in diesen zusätzlichen Ressourcen: