Śledzenie pozycji urządzenia za pomocą ARCore w Jetpack XR

Odpowiednie urządzenia XR
Te wskazówki pomogą Ci tworzyć rozwiązania na te typy urządzeń XR.
Gogle XR
Przewodowe okulary XR

Dzięki ARCore dla Jetpack XR aplikacja może pobierać pozycję urządzenia: orientację (pochylenie, odchylenie, obrót) i położenie (X, Y, Z) urządzenia względem początku układu współrzędnych świata.

Używaj tych informacji do renderowania treści cyfrowych w świecie rzeczywistym lub przekształcania pozycji urządzenia w pozycję geoprzestrzenną, aby generować dane zależne od lokalizacji.

Dostęp do sesji

Dostęp do informacji o pozycji urządzenia uzyskasz za pomocą środowiska wykonawczego Jetpack XR Session, które musi utworzyć Twoja aplikacja.

Konfigurowanie sesji

Informacje o pozycji urządzenia nie są domyślnie włączone w sesjach XR. Aby umożliwić aplikacji pobieranie informacji o pozycji urządzenia, skonfiguruj sesję i ustaw tryb DeviceTrackingMode.SPATIAL_LAST_KNOWN:

// Define the configuration object to enable tracking device pose.
val newConfig = session.config.copy(
    deviceTracking = DeviceTrackingMode.SPATIAL_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.
}

Nie wszystkie urządzenia XR obsługują tryb DeviceTrackingMode.SPATIAL_LAST_KNOWN. Jeśli polecenie Session.configure() zakończy się powodzeniem, urządzenie obsługuje ten tryb.

Uzyskiwanie pozycji urządzenia

Po skonfigurowaniu sesji możesz uzyskać pozycję urządzenia w układzie współrzędnych AR za pomocą obiektu ArDevice:

// Get the ArDevice instance
val arDevice = ArDevice.getInstance(session)
// There are two ways to get the device pose.

// 1. Get the current device pose once.
// This is the device's position and orientation relative to the tracking origin.
val devicePose = arDevice.state.value.devicePose
processDevicePose(devicePose)

// 2. Continuously receive updates for the device pose.
// `collect` is a suspending function that will run indefinitely and process new poses.
arDevice.state.collect { state ->
    processDevicePose(state.devicePose)
}

Pobieranie translacji i rotacji pozycji urządzenia

Urządzenie Pose reprezentuje pozycję (przesunięcie) i orientację (obrót) urządzenia względem punktu początkowego śledzenia. Wykorzystaj te informacje w aplikacji, aby zwiększyć komfort korzystania z niej:

  • Podawanie precyzyjnych instrukcji nawigacyjnych: korzystaj z danych o położeniu, aby pomóc użytkownikowi zorientować się w terenie i poruszać się po nim za pomocą nałożonych treści cyfrowych.

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. */)
}