Cómo hacer un seguimiento de la postura de un dispositivo con ARCore para Jetpack XR

Dispositivos XR aplicables
Esta guía te ayuda a crear experiencias para estos tipos de dispositivos de XR.
Auriculares XR
Lentes de RE con cable
Lentes con IA

Con ARCore para Jetpack XR, tu app puede recuperar la pose de un dispositivo: la orientación (inclinación, desviación, rotación) y una posición (X, Y, Z) del dispositivo en relación con el origen del mundo.

Usa esta información para renderizar contenido digital en el mundo real o convertir la postura del dispositivo en una postura geoespacial para generar datos que tengan en cuenta la ubicación.

Cómo acceder a una sesión

Accede a la información de la posición del dispositivo a través de un Session de Jetpack XR Runtime, que tu app debe crear.

Configura la sesión

La información de la posición del dispositivo no está habilitada de forma predeterminada en las sesiones de XR. Para permitir que tu app recupere información sobre la postura del dispositivo, configura la sesión y establece el modo 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.
}

No todos los dispositivos de XR admiten el modo HeadTrackingMode.LAST_KNOWN. Si Session.configure() se ejecuta correctamente, el dispositivo admite este modo.

Cómo obtener la posición del dispositivo

Una vez que se configura la sesión, puedes obtener la postura del dispositivo dentro del sistema de coordenadas de RA con el objeto 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

Obtén la rotación y la traslación de la posición del dispositivo

El objeto Pose del dispositivo representa la posición (traslación) y la orientación (rotación) del dispositivo en relación con el origen del seguimiento. Usa esta información en tu app para mejorar su experiencia:

  1. Proporcionar instrucciones de navegación precisas en cuanto a la posición: Los datos de posición se pueden usar para ayudar a un usuario a orientarse y navegar por su entorno con la ayuda de contenido digital superpuesto.

  2. Alineación intermedia con el mundo: La API de Geospatial utiliza esta pose para calcular la ubicación en el mundo real.

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

Cómo convertir la posición del dispositivo en una posición geoespacial

Una vez que tengas la postura del dispositivo, podrás obtener una postura geoespacial a partir de ella. Convertir tu contenido de RA en una pose geoespacial hace que pase de ser una experiencia temporal y aislada a una función permanente, compartida universalmente y que tiene en cuenta el contexto en el mundo real.

Obtén más información para convertir la posición de un dispositivo en una posición geoespacial en nuestra documentación de la API de Geospatial.