Как отслеживать положение устройства с помощью ARCore для Jetpack XR

Поддерживаемые XR-устройства
Это руководство поможет вам создавать контент для таких устройств.
XR-шлемы
Проводные XR-очки

С помощью ARCore для Jetpack XR ваше приложение может получать позу устройства – его ориентацию (тангаж, рысканье, крен) и положение (X, Y, Z) относительно начала координат мира.

Используйте эту информацию, чтобы отображать цифровой контент в реальном мире или преобразовывать позу устройства в геопространственную позу для создания данных с учетом местоположения.

Как получить доступ к сеансу

Получать информацию о положении устройства с помощью Jetpack XR Runtime Session, который должно создать ваше приложение.

Как настроить сеанс

По умолчанию информация о позе устройства в сеансах XR не включена. Чтобы приложение могло получать информацию о положении устройства, настройте сеанс и задайте режим DeviceTrackingMode.SPATIAL:

// Define the configuration object to enable tracking device pose.
val newConfig = Config.Builder(session.config)
    .setDeviceTracking(DeviceTrackingMode.SPATIAL)
    .build()
// 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.
}

Режим DeviceTrackingMode.SPATIAL поддерживается не всеми XR-устройствами. Если команда Session.configure() выполнена успешно, устройство поддерживает этот режим.

Как получить позу устройства

После настройки сеанса вы можете получить положение устройства в системе координат дополненной реальности, используя объект 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)
}

Как получить данные о положении устройства

Устройство Pose представляет собой положение (перемещение) и ориентацию (поворот) устройства относительно начала координат отслеживания. Используйте эту информацию в приложении, чтобы сделать его удобнее:

  • Точные инструкции по навигации. Используйте данные о местоположении, чтобы помочь пользователю ориентироваться на местности и перемещаться по ней с помощью наложенного цифрового контента.

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