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

Obsługiwane urządzenia XR
Ten przewodnik pomoże Ci tworzyć aplikacje na te typy urządzeń XR.
Gogle XR
Przewodowe okulary XR
Okulary AI

Dzięki ARCore dla Jetpack XR Twoja 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żyj tych informacji, aby renderować treści cyfrowe w świecie rzeczywistym lub przekonwertować pozycję urządzenia na pozycję geoprzestrzenną, aby generować dane o lokalizacji.

Dostęp do sesji

Dostęp do informacji o pozycji urządzenia uzyskasz za pomocą Jetpack XR Runtime Session, którą 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.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 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 przesunięcia i obrotu pozycji urządzenia

Pose urządzenia reprezentuje jego położenie (przesunięcie) i orientację (obrót) względem początku układu współrzędnych śledzenia. Użyj tych informacji w aplikacji, aby poprawić jej działanie:

  1. Podawanie dokładnych instrukcji nawigacyjnych: dane o położeniu mogą pomóc użytkownikowi zorientować się w otoczeniu i poruszać się po nim dzięki nakładanym treściom cyfrowym.

  2. Obliczanie pośredniego wyrównania świata: ta pozycja jest wykorzystywana przez Geospatial API do obliczania lokalizacji w świecie rzeczywistym.

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

Konwertowanie pozycji urządzenia na pozycję geoprzestrzenną

Gdy masz już pozycję urządzenia, możesz uzyskać z niej pozycję geoprzestrzenną. Dzięki konwersji na pozycję geoprzestrzenną treści AR stają się stałą, powszechnie udostępnianą i uwzględniającą kontekst funkcją w świecie rzeczywistym.

Więcej informacji o konwertowaniu pozycji urządzenia na pozycję geoprzestrzenną znajdziesz w dokumentacji Geospatial API.