ردیابی وضعیت دستگاه بااستفاده از ARCore برای Jetpack XR

دستگاه‌های XR قابل‌اعمال
این راهنمایی به شما کمک می‌کند برای این نوع دستگاه‌های واقعیت گسترده تجربه بسازید.
هدست‌های واقعیت گسترده
عینک واقعیت گسترده سیمی

با ARCore برای Jetpack XR، برنامه شما می‌تواند وضعیت دستگاه را بازیابی کند: جهت (گام، چرخش، غلتش) و موقعیت (X،‏ Y،‏ Z) دستگاه نسبت‌به مبدأ جهان.

از این اطلاعات برای ارائه محتوای دیجیتال در دنیای واقعی استفاده کنید، یا وضعیت دستگاه را به وضعیت زمین‌فضایی تبدیل کنید تا داده‌های مکان‌آگاه تولید کنید.

دسترسی به جلسه

ازطریق Jetpack XR Runtime Session به اطلاعات وضعیت دستگاه دسترسی پیدا کنید، که برنامه شما باید آن را ایجاد کند.

پیکربندی جلسه

اطلاعات وضعیت دستگاه به‌طور پیش‌فرض در جلسات واقعیت گسترده فعال نیست. برای اینکه برنامه‌تان بتواند اطلاعات وضعیت دستگاه را بازیابی کند، جلسه را پیکربندی کنید و حالت DeviceTrackingMode.SPATIAL را تنظیم کنید:

// Define the configuration object to enable tracking device pose.
val newConfig = Config.Builder(session.config)
    .setDeviceTracking(DeviceTrackingMode.SPATIAL)
    .build()
// 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 پشتیبانی نمی‌کنند. اگر 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. */)
}