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 (cabeceo, 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 pose del dispositivo en una pose geoespacial para generar datos basados en la ubicación.

Accede a una sesión

Accede a la información de la pose 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 pose del dispositivo no está habilitada de forma predeterminada en las sesiones de realidad extendida. Para permitir que tu app recupere la información de la pose del dispositivo, configura la sesión y establece el DeviceTrackingMode.SPATIAL modo:

// Define the configuration object to enable tracking device pose.
val newConfig = session.config.copy(
    deviceTracking = DeviceTrackingMode.SPATIAL
)
// 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 realidad extendida admiten el modo DeviceTrackingMode.SPATIAL. Si Session.configure() tiene éxito, el dispositivo admite este modo.

Obtén la pose del dispositivo

Después de configurar la sesión, puedes obtener la pose del dispositivo dentro del sistema de coordenadas de RA con el ArDevice objeto:

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

La 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 posicionales para ayudar a un usuario 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. */)
}