Suivre la pose d'un appareil à l'aide d'ARCore pour Jetpack XR

Appareils XR concernés
Ces conseils vous aident à créer des expériences pour ces types d'appareils XR.
Casques XR
Lunettes XR filaires
Lunettes IA

Avec ARCore pour Jetpack XR, votre application peut récupérer la pose d'un appareil, c'est-à-dire l'orientation (tangage, lacet, roulis) et la position (X, Y, Z) de l'appareil par rapport à l'origine du monde.

Utilisez ces informations pour afficher du contenu numérique dans le monde réel ou convertir la pose de l'appareil en pose géospatiale afin de générer des données tenant compte de la localisation.

Accéder à une session

Accédez aux informations sur la pose de l'appareil via un Session Jetpack XR Runtime que votre application doit créer.

Configurer la session

Les informations sur la pose de l'appareil ne sont pas activées par défaut dans les sessions XR. Pour permettre à votre application de récupérer des informations sur la pose de l'appareil, configurez la session et définissez le mode 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.
}

Tous les appareils de réalité étendue ne sont pas compatibles avec le mode HeadTrackingMode.LAST_KNOWN. Si Session.configure() réussit, l'appareil est compatible avec ce mode.

Obtenir la pose de l'appareil

Une fois la session configurée, vous pouvez obtenir la pose de l'appareil dans le système de coordonnées AR à l'aide de l'objet 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

Obtenir la translation et la rotation de la pose de l'appareil

Le Pose de l'appareil représente la position (translation) et l'orientation (rotation) de l'appareil par rapport à l'origine du suivi. Utilisez ces informations dans votre application pour améliorer l'expérience utilisateur :

  1. Fournir des instructions de navigation précises : les données de position peuvent aider un utilisateur à s'orienter et à se déplacer dans son environnement grâce à du contenu numérique superposé.

  2. Alignement intermédiaire du monde : cette pose est utilisée par l'API Geospatial pour calculer la position dans le monde réel.

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

Convertir la pose de l'appareil en pose géospatiale

Une fois que vous avez la pose de l'appareil, vous pouvez obtenir une pose géospatiale à partir de celle-ci. La conversion en pose géospatiale transforme votre contenu de RA, qui était une expérience temporaire et isolée, en une fonctionnalité permanente, universellement partagée et contextuelle dans le monde réel.

Découvrez comment convertir une pose d'appareil en pose géospatiale dans la documentation de l'API Geospatial.