Avec ARCore pour Jetpack XR, votre application peut récupérer la pose d'un appareil : 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 convertissez la pose de l'appareil en pose géospatiale pour générer des données basées sur la position.
Accéder à une session
Accédez aux informations sur la pose de l'appareil via un Jetpack XR Runtime Session,
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 ces informations, configurez la session et définissez le
DeviceTrackingMode.SPATIAL mode :
// 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. }
Tous les appareils XR ne sont pas compatibles avec le mode DeviceTrackingMode.SPATIAL. 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 RA à l'aide de l'objet 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) }
Obtenir la translation et la rotation de la pose de l'appareil
La Pose de l'appareil représente sa position (translation) et son orientation (rotation) par rapport à l'origine du suivi. Utilisez ces informations dans votre application pour améliorer l'expérience utilisateur :
- Fournir des instructions de navigation précises en termes de position : utilisez les données de position pour aider un utilisateur à s'orienter et à se déplacer dans son environnement à l'aide de contenu numérique superposé.
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. */) }