Con ARCore per Jetpack XR, la tua app può recuperare la posa di un dispositivo: l' orientamento (beccheggio, imbardata, rollio) e una posizione (X, Y, Z) del dispositivo rispetto all'origine del mondo.
Utilizza queste informazioni per eseguire il rendering di contenuti digitali nel mondo reale o converti la posa del dispositivo in una posa geospaziale per generare dati basati sulla posizione.
Accedere a una sessione
Accedi alle informazioni sulla posa del dispositivo tramite un Jetpack XR Runtime Session,
che la tua app deve creare.
Configurare la sessione
Per impostazione predefinita, le informazioni sulla posa del dispositivo non sono attivate nelle sessioni XR. Per consentire alla tua
app di recuperare le informazioni sulla posa del dispositivo, configura la sessione e imposta la
DeviceTrackingMode.SPATIAL_LAST_KNOWN modalità:
// 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. }
Non tutti i dispositivi XR supportano la modalità DeviceTrackingMode.SPATIAL_LAST_KNOWN. Se
Session.configure() ha esito positivo, il dispositivo supporta questa modalità.
Ottenere la posa del dispositivo
Dopo aver configurato la sessione, puoi ottenere la posa del dispositivo all'interno del
sistema di coordinate AR utilizzando l'oggetto 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) }
Ottenere la traslazione e la rotazione della posa del dispositivo
La Pose del dispositivo rappresenta la posizione (traslazione) e l'orientamento (rotazione) del dispositivo rispetto all'origine del monitoraggio. Utilizza queste informazioni nella tua app per migliorare l'esperienza dell'app:
- Fornisci istruzioni di navigazione accurate in base alla posizione: utilizza i dati sulla posizione per aiutare un utente a orientarsi e a spostarsi nell'ambiente circostante con l'aiuto di contenuti digitali sovrapposti.
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. */) }