Jetpack XR 用 ARCore を使用してデバイスのポーズをトラッキングする

対象の XR デバイス
このガイダンスは、このようなタイプの XR デバイス向けのエクスペリエンスを構築する際に役立ちます。
XR ヘッドセット
有線 XR グラス
AI メガネ

Jetpack XR 向け ARCore を使用すると、アプリはデバイスのポーズ(デバイスの向き(ピッチ、ヨー、ロール)と、ワールド原点に対するデバイスの位置(X、Y、Z))を取得できます。

この情報を使用して、現実世界にデジタル コンテンツをレンダリングするか、デバイスのポーズを地理空間ポーズに変換して、位置認識データを生成します。

セッションにアクセスする

デバイスのポーズ情報には、Jetpack XR Runtime の Session を通じてアクセスします。この Session は、アプリで作成する必要があります

セッションを構成する

XR セッションでは、デバイスのポーズ情報はデフォルトで有効になっていません。アプリでデバイスのポーズ情報を取得できるようにするには、セッションを構成して 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.
}

すべての XR デバイスが HeadTrackingMode.LAST_KNOWN モードに対応しているわけではありません。Session.configure() が成功した場合、デバイスはこのモードをサポートしています。

デバイスのポーズを取得する

セッションが構成されると、ArDevice オブジェクトを使用して、AR 座標系内のデバイスのポーズを取得できます。

// 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. 中間ワールド アライメント: このポーズは Geospatial 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. */)
}

デバイスのポーズを地理空間のポーズに変換する

デバイスのポーズを取得したら、そこから地理空間ポーズを取得できます。地理空間ポーズに変換することで、AR コンテンツは一時的で孤立した体験から、現実世界における永続的で普遍的に共有されるコンテキスト認識機能へと変化します。

Geospatial API のドキュメントで、デバイスのポーズを地理空間のポーズに変換する方法をご確認ください。