אובדן מעקב ביישומי AR על מדפים מונוטוניים או במסדרונות ארוכים הוא בעיה של עקביות מפת SLAM. SLAM (מיקום ומיפוי סימולטני) בונה בו-זמנית מפה של חלל לא ידוע וקובע את מיקום המכשיר בתוך אותה מפה. ARKit הסטנדרטי משתמש באודומטריה חזותית-אינרציאלית (VIO), שעובדת היטב עם תאורה טובה ומרקם עשיר, אך נכשלת באופן קריטי על קירות לבנים, בחללים גדולים (סחיפה של עד 5 מטרים לכל 100 מטרים של תנועה), ובסצנות דינמיות. כאשר המעקב המובנה אינו מספק, אנו מיישמים SLAM מותאם אישית המבוסס על ORB-SLAM3, LiDAR+IMU, או סמני ArUco. הניסיון שלנו כולל למעלה מ-50 פרויקטים של ניווט AR בתנאים מאתגרים: מתקני מחסנים, מרכזי קניות, אתרי תעשייה. אלגוריתמים מותאמים אישית מדויקים פי חמישה מ-VIO סטנדרטי בחללים גדולים, מאומת על ידי מדדי ATE (שגיאת מסלול מוחלטת). אנו משתמשים בטכנולוגיות מודרניות: Swift 5.9, Kotlin, Flutter, C++. החיסכון בזמן בפיתוח מעקב מגיע עד 40%, מה שמקצר משמעותית את זמן היציאה לשוק ומאפשר התמקדות בלוגיקת העסקית של היישום. אנו מבטיחים יציבות מעקב ב-95% מהזמן.
מגבלות ARKit סטנדרטי בתנאים מאתגרים
ARKit משתמש ב-VIO: נקודות תכונה ממצלמה + נתוני IMU. זה עובד מצוין עם תאורה טובה ומרקם עשיר. עם זאת, כשלים מתרחשים בארבעה תרחישים אופייניים:
- סצנות דינמיות: אנשים יוצרים נקודות תכונה שגויות, הסחיפה גדלה.
- משטחים מונוטוניים: מסדרון לבן ארוך ללא עוגנים.
- חללים גדולים: על 200+ מטרים, שגיאת VIO מצטברת הופכת לבלתי מקובלת.
- תאורה נמוכה: מחסני לילה, מסדרונות חשוכים.
לתרחישים כאלה, אנו מיישמים אלגוריתמים מותאמים אישית או חיישנים נוספים.
אפשרויות SLAM עיקריות ל-AR נייד
| טכנולוגיה | דיוק | מורכבות | זמן יישום |
|---|---|---|---|
| ORB-SLAM3 (C++ Monocular/Stereo/RGB-D) | 0.1–0.5 מ' | גבוהה (NDK/JNI) | 8–16 שבועות |
| ARKit + Core Location (GPS+IMU+Barometer) | 1–5 מ' | בינונית | 4–6 שבועות |
| LiDAR + IMU (iOS Depth+RGB+ICP loop closure) | 0.05–0.2 מ' | בינונית | 6–10 שבועות |
| סמני ArUco + PDR (פנים, לא מקוון) | 0.5–1.5 מ' | נמוכה | 2–4 שבועות |
ORB-SLAM3 — קוד פתוח, מהודר באמצעות CMake עבור iOS (Metal) ואנדרואיד (NDK). ב-iPhone 13 Pro אנו משיגים 25–30 FPS, וזה מקובל עבור AR. דורש גישור C++: מעטפת ObjectiveC++ עבור iOS, JNI עבור אנדרואיד. אנו משתמשים בו כאשר יש צורך בשליטה מלאה על האלגוריתם.
מיזוג ARKit + Core Location — עבור חוץ/פנים בקנה מידה גדול: אנו משלבים GPS (CLLocationManager), מצפן וברומטר עם מעקב ARKit באמצעות פילטר קלמן מורחב. הסחיפה מתוקנת כל N מטרים כאשר אות GPS זמין. הפילטר מיושם ב-C++ באמצעות Eigen או ב-Swift באמצעות Accelerate framework.
LiDAR + IMU SLAM (iOS) — ARWorldTrackingConfiguration עם sceneReconstruction מספק נתוני עומק מ-LiDAR. השילוב של עומק + RGB + IMU הוא RGB-D SLAM. אנו בונים מפה צפופה מ-ARMeshAnchor, משתמשים ב-ICP לסגירת לולאה. זה נותן דיוק ברמת סנטימטר בתוך מבנים.
כיצד סגירת לולאה פותרת את בעיית הסחיפה?
הבעיה העיקרית עם VIO ללא סגירת לולאה: המשתמש מסתובב סביב אולם במעגל וחוזר לנקודת ההתחלה, אבל SLAM חושב שההתחלה והסיום הם מקומות שונים. הסחיפה מצטברת. סגירת לולאה מזהה חזרה למקום ידוע (באמצעות תיאורי תכונה — ORB, SIFT, SuperPoint) וסוגרת את הלולאה, מתקנת את כל המפה. ב-ARKit, סגירת לולאה מתרחשת אוטומטית באמצעות relocalization — אם המעקב אבד ושוחזר במיקום ידוע. עבור מערכות מותאמות אישית, אנו משתמשים ב-bag-of-words (DBoW2, FBoW) לאינדוקס מהיר של keyframes.
מהי אודומטריה חזותית-אינרציאלית ומתי היא נכשלת?
VIO משלב נתונים חזותיים ממצלמה עם מדידות אינרציאליות מ-IMU. זהו הבסיס של ARKit ו-ARCore. VIO עובד היטב עם מספיק נקודות תכונה ותאורה יציבה. אבל זה נכשל בשלושה מקרים: חוסר מוחלט במרקם (קירות לבנים), תנועות מהירות (טשטוש), ונסיעה ממושכת ללא חזרה (סחיפה מצטברת). במצבים אלה, SLAM מותאם אישית עם סגירת לולאה וחיישנים נוספים מספק יציבות.
מקרה מעשי: ניווט AR במחסן של 8000 מ"ר
עבור מחסן של 8000 מ"ר, בנינו ניווט AR עבור קוטפי הזמנות. ARCore סטנדרטי איבד מעקב על מדפים מונוטוניים לאחר 40–60 שניות. הפתרון שלנו: רשת של סמני ArUco כל 15 מטר כעוגני relocalization + PDR בין סמנים באמצעות Android Step Counter API. דיוק מיקום — 0.5–1.5 מ', מספיק כדי לציין מדף ספציפי. המערכת עובדת לא מקוונת ללא שרת — מפת הסמנים מוטמעת באפליקציה ומתעדכנת דרך CMS פנימי כאשר הפריסה משתנה.
השוואת דיוק: פתרון ArUco+PDR מותאם אישית יציב פי 3 מ-VIO בשטח מעל 1000 מ"ר.
התקנה שלב אחר שלב של ORB-SLAM3 על iOS
- הידור ORB-SLAM3 עבור iOS באמצעות CMake עם backend של Metal.
- יצירת מעטפת Objective-C++ לשילוב עם Swift.
- כיול מצלמה: מטריצת intrinsics, מקדמי עיוות.
- התחלת מעקב: הגדרת פרמטרי ORB (מספר תכונות, קנה מידה).
- הפעלת סגירת לולאה: קישור ל- DBoW2 vocabulary.
- אופטימיזציית ביצועים: סינון פריימים (דילוג על תנועה קטנה), הפחתת רזולוציית RGB.
השוואת דיוק בין גישות SLAM שונות
| גישה | ATE (שגיאה ממוצעת) | סחיפה לכל 100 מ' | חיישנים נדרשים |
|---|---|---|---|
| VIO (ARKit) | 0.5–2 מ' | 2–5 מ' | מצלמה + IMU |
| ORB-SLAM3 (מונו) | 0.1–0.5 מ' | 0.2–1 מ' | מצלמה (חד-עינית) |
| ORB-SLAM3 (סטריאו) | 0.05–0.2 מ' | 0.1–0.5 מ' | שתי מצלמות |
| LiDAR + IMU | 0.02–0.1 מ' | 0.05–0.2 מ' | LiDAR + IMU |
| ArUco + PDR | 0.5–1.5 מ' | 1–3 מ' | סמנים + IMU |
מידע נוסף על SLAM ניתן לקרוא בויקיפדיה.
מה כלול בעבודה
אנו מנתחים את תנאי ההפעלה ובוחרים ארכיטקטורת SLAM. אנו מיישמים או משלבים את האלגוריתם (ORB-SLAM3, OpenVSLAM, מותאם אישית), מספקים מיזוג עם חיישנים נוספים (GPS, UWB, ברומטר). אנו מכוונים פרמטרי מעקב לסביבה הספציפית ומעריכים דיוק באמצעות מדדי ATE ו-RPE (שגיאת תנוחה יחסית).
לוחות זמנים: שילוב SDK SLAM מוכן עם התאמה אישית — 4–8 שבועות. מודול SLAM מותאם אישית מאפס בתוספת כוונון סביבה — 3–6 חודשים. העלות מחושבת באופן פרטני.
אנו משתמשים בטכנולוגיות מודרניות (Swift, Kotlin, Flutter, C++) ומבצעים בדיקות עומס בתנאים אמיתיים. כל הפתרונות עוברים אימות יציבות בסצנות דינמיות ובתאורה נמוכה. למעלה מ-5 שנים בשוק — למעלה מ-50 פרויקטי AR מוצלחים. צרו קשר לייעוץ — נעריך את הפרויקט שלכם. הזמינו פרויקט פיילוט — נדגים דיוק באתר שלכם.







