בעזרת ARCore ל-Jetpack XR, האפליקציה יכולה לאחזר את הפוזה של המכשיר: האוריינטציה (pitch, yaw, roll) והמיקום (X, Y, Z) של המכשיר ביחס לנקודת המוצא בעולם.
המידע הזה משמש לעיבוד תוכן דיגיטלי בעולם האמיתי, או להמרת תנוחת המכשיר לתנוחה גיאוספציאלית כדי ליצור נתונים שמודעים למיקום.
גישה לסשן
גישה למידע על תנוחת המכשיר דרך Jetpack XR Runtime Session,
שהאפליקציה צריכה ליצור.
הגדרת הסשן
המידע על תנוחת המכשיר לא מופעל כברירת מחדל בסשנים של XR. כדי לאפשר לאפליקציה לאחזר מידע על תנוחת המכשיר, צריך להגדיר את הסשן ולבחור את המצב של HeadTrackingMode.LAST_KNOWN:
// Define the configuration object to enable tracking device pose.
val newConfig = session.config.copy(
headTrackingMode = Config.HeadTrackingMode.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 תומכים במצב HeadTrackingMode.LAST_KNOWN. אם הפעולה Session.configure() מצליחה, סימן שהמכשיר תומך במצב הזה.
קבלת תנוחת המכשיר
אחרי שמגדירים את הסשן, אפשר לקבל את המיקום של המכשיר במערכת הקואורדינטות של ה-AR באמצעות האובייקט ArDevice:
// Get the ArDevice instance
val arDevice = ArDevice.getInstance(session)
// Collect the state to process the device pose
arDevice.state.collect { state ->
// processDevicePose gets called automatically when a new pose is available.
processDevicePose(state.devicePose)
}
// Or, get the current device Pose from the AR Device's state.
// This is the device's position and orientation relative to the tracking origin.
val devicePose = ArDevice.getInstance(session).state.value.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 תוכלו לקרוא איך ממירים את תנוחת המכשיר לתנוחה גיאו-מרחבית.