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

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

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

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

Получить доступ к сессии

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

Настройте сессию

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

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

Не все устройства XR поддерживают режим DeviceTrackingMode.LAST_KNOWN . Если Session.configure() завершился успешно, значит, устройство поддерживает этот режим.

Определите положение устройства.

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

Получите данные о перемещении и вращении устройства.

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

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

  2. Промежуточное выравнивание по мировым координатам : эта поза используется геопространственным API для расчета местоположения в реальном мире.

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

Преобразуйте положение устройства в геопространственное положение.

Получив положение устройства, вы можете преобразовать его в геопространственное положение. Преобразование в геопространственное положение превращает ваш контент дополненной реальности из временного, изолированного объекта в постоянный, общедоступный и контекстно-зависимый объект в реальном мире.

Узнайте, как преобразовать положение устройства в геопространственное положение, в нашей документации по геопространственному API.