Geräteposition mit ARCore für Jetpack XR erfassen

Anwendbare XR‑Geräte
Dieser Leitfaden hilft Ihnen dabei, Erlebnisse für diese Arten von XR-Geräten zu entwickeln.
XR-Headsets
XR-Datenbrille mit Kabel
AI Glasses

Mit ARCore für Jetpack XR kann Ihre App die Ausrichtung eines Geräts abrufen: die Orientierung (Neigung, Gieren, Rollen) und eine Position (X, Y, Z) des Geräts relativ zum Weltursprung.

Mit diesen Informationen können Sie digitale Inhalte in der realen Welt rendern oder die Geräteposition in eine geospatialen Position umwandeln, um standortbezogene Daten zu generieren.

Auf eine Sitzung zugreifen

Sie können über eine Jetpack XR-Laufzeit Session auf Informationen zur Geräteposition zugreifen, die von Ihrer App erstellt werden muss.

Sitzung konfigurieren

Informationen zur Geräteposition sind bei XR-Sitzungen nicht standardmäßig aktiviert. Damit Ihre App Informationen zur Geräteposition abrufen kann, müssen Sie die Sitzung konfigurieren und den Modus HeadTrackingMode.LAST_KNOWN festlegen:

// Define the configuration object to enable tracking device pose.
val newConfig = session.config.copy(
    headTrackingMode = Config.HeadTrackingMode.LAST_KNOWN
)
// Apply the configuration to the session.
try {
    when (val configResult = session.configure(newConfig)) {
        is SessionConfigureSuccess -> {
            // The session is now configured to track the device's pose.
        }
        else -> {
            // Catch-all for other configuration errors returned using the result class.
        }
    }
} catch (e: UnsupportedOperationException) {
    // Handle configuration failure. For example, if the specific mode is not supported on the current device or API version.
}

Nicht alle XR-Geräte unterstützen den HeadTrackingMode.LAST_KNOWN-Modus. Wenn Session.configure() erfolgreich ist, unterstützt das Gerät diesen Modus.

Geräteposition abrufen

Sobald die Sitzung konfiguriert ist, können Sie die Position des Geräts im AR-Koordinatensystem mit dem ArDevice-Objekt abrufen:

// Get the ArDevice instance
val arDevice = ArDevice.getInstance(session)

// Collect the state to process the device pose
arDevice.state.collect { state ->
      // processDevicePose gets called automatically when a new pose is available.
      processDevicePose(state.devicePose)
}

// Or, get the current device Pose from the AR Device's state.
// This is the device's position and orientation relative to the tracking origin.
val devicePose = ArDevice.getInstance(session).state.value.devicePose

Translation und Rotation der Geräte-Pose abrufen

Das Gerät Pose stellt die Position (Translation) und Ausrichtung (Rotation) des Geräts relativ zum Tracking-Ursprung dar. So können Sie diese Informationen in Ihrer App nutzen, um die Nutzerfreundlichkeit zu verbessern:

  1. Positionsgenaue Navigationsanweisungen bereitstellen: Mithilfe von Positionsdaten kann sich ein Nutzer orientieren und mit überlagerten digitalen Inhalten in seiner Umgebung navigieren.

  2. Zwischenausrichtung der Welt: Diese Pose wird von der Geospatial API verwendet, um den realen Standort zu berechnen.

fun processDevicePose(pose: Pose) {

    // Extract Translation and Rotation
    val translation = pose.translation // Vector3(x, y, z)
    val rotation = pose.rotation // Quaternion (x, y, z, w)

    TODO(/* Use the translation and rotation in your app. */)
}

Geräteposition in eine raumbezogene Position umwandeln

Sobald Sie die Geräteposition haben, können Sie daraus eine geospatiale Position ableiten. Wenn Sie AR-Inhalte in eine raumbezogene Position umwandeln, werden sie von einer temporären, isolierten Erfahrung zu einer dauerhaften, universell geteilten und kontextbezogenen Funktion in der realen Welt.

In der Dokumentation zur Geospatial API erfahren Sie, wie Sie die Geräteposition in eine raumbezogene Position umwandeln.