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

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

باستخدام ARCore for 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(
    deviceTracking = 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)
// 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 موضع الجهاز (الترجمة) واتجاهه (الدوران) بالنسبة إلى نقطة الأصل للتتبُّع. استخدِم هذه المعلومات في تطبيقك لتحسين تجربة استخدامه:

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

تحويل وضعية الجهاز إلى وضعية جغرافية مكانية

بعد الحصول على وضع الجهاز، يمكنك الحصول على وضع جغرافي مكاني منه. عند تحويل المحتوى إلى وضعية جغرافية مكانية، يتحوّل محتوى الواقع المعزّز من تجربة مؤقتة ومعزولة إلى ميزة دائمة ومتاحة للجميع ومراعية للسياق في العالم الحقيقي.

تعرَّف على كيفية تحويل وضعية جهاز إلى وضعية جغرافية مكانية في مستندات Geospatial API.