בעזרת ARCore ל-Jetpack XR, האפליקציה יכולה לאחזר את המיקום של המכשיר: הכיוון (pitch, yaw, roll) והמיקום (X, Y, Z) של המכשיר ביחס לנקודת המוצא של העולם.
המידע הזה משמש לעיבוד תוכן דיגיטלי בעולם האמיתי, או להמרת תנוחת המכשיר לתנוחה גיאוספציאלית כדי ליצור נתונים שמודעים למיקום.
גישה לסשן
גישה למידע על תנוחת המכשיר דרך Jetpack XR Runtime Session,
שהאפליקציה צריכה ליצור.
הגדרת הסשן
המידע על תנוחת המכשיר לא מופעל כברירת מחדל בסשנים של 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() מצליחה, סימן שהמכשיר תומך במצב הזה.
קבלת תנוחת המכשיר
אחרי שמגדירים את הסשן, אפשר לקבל את תנוחת המכשיר במערכת הקואורדינטות של ה-AR באמצעות האובייקט 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 מייצג את המיקום (הזזה) והכיוון (סיבוב) של המכשיר ביחס לנקודת המוצא של המעקב. אפשר להשתמש במידע הזה באפליקציה כדי לשפר את חוויית השימוש באפליקציה:
מתן הוראות ניווט מדויקות מבחינת מיקום: אפשר להשתמש בנתוני מיקום כדי לעזור למשתמש להתמצא ולנווט בסביבה שלו בעזרת תוכן דיגיטלי שמוצג בשכבת-על.
חישוב התאמה ביניים לעולם: התנוחה הזו משמשת את 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 לתנוחה גיאו-מרחבית הופכת את חוויית ה-AR הזמנית והמבודדת לתכונה קבועה, משותפת לכולם ומודעת-הקשר בעולם האמיתי.
במסמכי התיעוד של Geospatial API מוסבר איך ממירים את תנוחת המכשיר לתנוחה גיאו-מרחבית.