تتبُّع وضع الجهاز باستخدام 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 object:

// 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. حساب المحاذاة الوسيطة للعالم: تستخدم واجهة برمجة التطبيقات الجغرافية المكانية هذه الوضعية لحساب الموقع الجغرافي في العالم الحقيقي.

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

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

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

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