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

Odpowiednie urządzenia XR
Te wskazówki pomogą Ci tworzyć treści na te urządzenia XR.
Gogle XR
Przewodowe okulary XR
Okulary AI

Dzięki ARCore w Jetpacku XR aplikacja może pobierać położenie urządzenia: orientację (pochylenie, odchylenie, obrót) i pozycję (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 HeadTrackingMode.LAST_KNOWN:

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

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

android.permission.HEAD_TRACKING

Uzyskiwanie pozycji urządzenia

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

// 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

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:

  1. Podawanie dokładnych instrukcji nawigacyjnych: dane o położeniu mogą pomóc użytkownikowi zorientować się w terenie i poruszać się po nim dzięki nałożonej treści cyfrowej.

  2. Pośrednie wyrównanie ś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. */)
}

Przekształcanie pozycji urządzenia w pozycję geoprzestrzenną

Gdy uzyskasz pozę urządzenia, możesz na jej podstawie określić pozę geoprzestrzenną. Przekształcenie w pozycję geoprzestrzenną sprawia, że treści AR z tymczasowego, odizolowanego doświadczenia stają się stałą, powszechnie udostępnianą i uwzględniającą kontekst funkcją w świecie rzeczywistym.

W dokumentacji interfejsu Geospatial API dowiesz się, jak przekształcić pozycję urządzenia w pozycję geoprzestrzenną.