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

Dispositivos de realidad extendida correspondientes
Esta guía te ayuda a crear experiencias para estos tipos de dispositivos de realidad extendida.
Visores de realidad extendida
Lentes de realidad extendida con cable

Con ARCore para Jetpack XR, tu app puede recuperar la pose de un dispositivo: la orientación (inclinación, guiñada, alabeo) 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 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.
}

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

Cómo obtener la posición del dispositivo

Después de configurar 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)
// 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)
}

Obtén la rotación y la traslación de la pose 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:

  • Proporciona instrucciones de navegación precisas en cuanto a la posición: Usa datos de posición para ayudar a los usuarios a orientarse y navegar por su entorno con la ayuda de contenido digital superpuesto.

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