تتبُّع وضع الجهاز باستخدام ARCore for Jetpack XR

أجهزة XR المشمولة
تساعدك هذه الإرشادات في إنشاء تجارب لهذه الأنواع من أجهزة XR.
سماعات الرأس بنظام الواقع الممتد
نظارات سلكية بنظام الواقع الممتد

باستخدام ARCore for Jetpack XR، يمكن لتطبيقك استرداد وضع الجهاز، أي اتجاهه (الميل والانحراف والدوران) وموضعه (الإحداثيات X وY وZ) بالنسبة إلى نقطة الأصل في العالم.

استخدِم هذه المعلومات لعرض محتوى رقمي في العالم الحقيقي أو تحويل وضع الجهاز إلى وضع جغرافي مكاني لإنشاء بيانات تستند إلى الموقع الجغرافي.

الوصول إلى جلسة

يمكنك الوصول إلى معلومات وضع الجهاز من خلال Session في Jetpack XR Runtime، الذي يجب أن ينشئه تطبيقك.

ضبط الجلسة

لا يتم تفعيل معلومات وضع الجهاز تلقائيًا في جلسات XR. للسماح لتطبيقك باسترداد معلومات وضع الجهاز، اضبط الجلسة واضبط الوضع DeviceTrackingMode.SPATIAL_LAST_KNOWN:

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

لا تتيح بعض أجهزة XR الوضع DeviceTrackingMode.SPATIAL_LAST_KNOWN. إذا نجحت عملية 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. */)
}