יישום זיהוי מישורים ב-AR באפליקציה למובייל
לעתים קרובות אנו נתקלים בתרחיש הבא: לקוח רוצה למקם ספה וירטואלית בחדר, אבל האפליקציה מציגה אובייקט "מרחף" ללא יישור ברור לרצפה. המשתמש מאוכזב, והמפתח נתקל במגבלות של ערכות הפיתוח של הפלטפורמות. זיהוי מישורים יציב הוא המפתח ל-AR משכנע. בלעדיו, כל אובייקט AR מרגיש זר. למדנו להביא את זיהוי המישורים למצב של "נראה כאילו הוא שייך" תוך 5-8 ימים.
ממשקי API של הפלטפורמות והמגבלות האמיתיות שלהם
ARKit (iOS). ARWorldTrackingConfiguration עם planeDetection: [.horizontal, .vertical]. ARKit מחזיר ARPlaneAnchor עם ARPlaneGeometry—רשת מישור שמתעדכנת ככל שהסריקה מתקדמת. הבעיה: בשניות הראשונות, ARKit מחזיר מלבן קטן שמשנה גודל וכיוון באגרסיביות. אם תמקם אובייקט מיד, הוא "יקפוץ" בעדכון הבא.
הפתרון הוא סף ביטחון מינימלי ו-debounce על עדכונים. ARPlaneAnchor אין בו שדה ביטחון מפורש, אבל גודל המישור (extent) משמש כאינדיקטור עקיף לבשלות: אל תציג את ממשק המיקום עד ש-extent.x < 0.3 ו-extent.z < 0.3 מטרים.
ARCore (Android). Plane עם TrackingState.TRACKING ו-PlaneType.HORIZONTAL_UPWARD_FACING / VERTICAL. ARCore מספק בנוסף Plane.getSubsumedBy()—כששני מישורים מתמזגים לאחד. זה שובר את הלוגיקה אם עוגנים היו מחוברים למישורים המקוריים; צריך להעביר את Anchor למישור הקולט.
מישורים אנכיים. ARKit מזהה באופן אמין מישורים אנכיים על משטחים עם טקסטורה (טפט עם דוגמה עובד היטב, קירות לבנים מונוטוניים לא). ARCore עם זיהוי אנכי אפילו פחות בטוח. למוצרים שבהם התקנה על קיר היא קריטית (תמונות, מדפים), עדיף לשלב זיהוי מישורים עם LiDAR (iPhone 12 Pro+) כדי למלא גיאומטריה חסרה.
איך LiDAR משנה את המשחק?
במכשירים עם LiDAR (iPhone 12 Pro, 13 Pro, 14 Pro, 15 Pro, iPad Pro), ARKit בונה רשת צפופה של הסביבה דרך ARMeshAnchor. זיהוי מישורים עם LiDAR עובד בצורה שונה מהותית: מישורים נגזרים מהרשת, לא מ-SLAM חזותי. זה מספק:
- זיהוי מישורים תוך 1-2 שניות במקום 5-10
- גבולות יציבים אפילו על משטחים אחידים
- זיהוי נכון של מדרגות, רמפות ומישורים משופעים
ליישומים שבהם מכשירי LiDAR הם קהל היעד העיקרי (צילום מקצועי, שיפוצים, בנייה), מעבר בין ARWorldTrackingConfiguration לתצורה עם sceneReconstruction: .mesh מספק קפיצת איכות משמעותית.
למה המישור "קופץ" ואיך לתקן את זה?
הסיבה העיקרית היא מיקום האובייקט לפני שהמישור מתייצב. סף ביטחון ו-debounce פותרים 80% מהבעיה. הגישה המוכחת שלנו:
- אל תציג את כפתור המיקום עד שגודל המישור עולה על 0.3 מטר בכל ציר.
- כשהמישור מתעדכן, הזז את העוגן בצורה חלקה עם אנימציה (לדוגמה,
SCNActionב-SceneKit אוUIView.animateב-RealityKit). - השתמש ב-
ARWorldTrackingConfiguration.isAutoFocusEnabledכדי לשפר את איכות הפריימים.
רשימת בדיקה מפורטת למיקום יציב
- בדוק `ARPlaneAnchor.extent.x > 0.3` ו-`extent.z > 0.3` - התעלם מעדכוני מישור למשך 0.5 שניות לאחר הזיהוי הראשון - במכשירי LiDAR, השתמש ב-`ARMeshAnchor` לגיאומטריה מדויקת יותר - תמיד טפל ב-`ARCamera.TrackingState` וחסום את ממשק המשתמש כש-`LIMITED`המחשת התקדמות הסריקה
המשתמש לא יודע שהוא צריך "לסרוק" עם המצלמה—נדרשת הדרכה ברורה. דפוסים אופייניים:
- קרן סריקה מונפשת מתחתית המסך
- קו מתאר של המישור ש"גדל" ככל שהזיהוי מתקדם
- הוראות טקסט שנעלמות אוטומטית לאחר הזיהוי המוצלח הראשון
לציור גבולות מישור ב-RealityKit—ModelEntity עם חומר wireframe המחובר ל-PlaneAnchor. ב-SceneKit—SCNNode עם SCNGeometry מ-ARPlaneGeometry.boundaryVertices. ב-ARCore עם SceneKit/Filament—רשת מותאמת אישית מ-Plane.getPolygon().
בעיות ייצור אופייניות
המישור "נשבר" עם תנועת מצלמה מוגזמת—מצב המעקב עובר ל-LIMITED(.excessiveMotion). חסום מיקום אובייקט והצג אזהרה, אל תקרס.
על משטחים כהים (למינציה כהה, שטיח שחור), ARKit ו-ARCore מאבדים תכונות ל-SLAM חזותי. אזהרה דרך ARCamera.TrackingState.Reason.insufficientFeatures—יש לטפל בה ולתקשר אותה למשתמש.
מה כלול בעבודה
- בדיקות על מכשירי יעד עם הערכת יציבות
- אופטימיזציית LiDAR (אם נתמך)
- בחירת מישורים מרובים (יכולת לבחור מישור על ידי הקשה)
- שמירת ARWorldMap לשימוש חוזר בסצנה
- תיעוד אינטגרציה ותצורה
- הבטחה לפעולה יציבה: 30 ימי תמיכה חינם לאחר המסירה
| פלטפורמה | API | תכונות |
|---|---|---|
| iOS (ARKit) | ARPlaneAnchor, ARWorldTrackingConfiguration | התחלה מהירה, אבל נדרש debounce |
| Android (ARCore) | Plane, getSubsumedBy() | מיזוג מישורים, העברת עוגנים |
| מכשירי LiDAR | ARMeshAnchor | זיהוי תוך 1-2 שניות, יציבות |
השוואת שיטות ויזואליזציה
| כלי | ויזואליזציית גבולות | ביצועים | גמישות |
|---|---|---|---|
| RealityKit | ModelEntity עם wireframe | גבוהים | בינונית |
| SceneKit | SCNNode מ-boundaryVertices | בינוניים | גבוהה |
| ARCore + Filament | רשת מ-getPolygon() | בינוניים | גבוהה |
תיעוד Apple ARKit: זיהוי מישורים ב-ARKit תיעוד Google ARCore: זיהוי מישורים
לוח זמנים משוער
זיהוי מישורים בסיסי עם רמזים חזותיים ומיקום אובייקט—5 עד 8 ימים. הוספת תמיכת LiDAR, בחירת מישורים מרובים ושמירת ARWorldMap—עוד 5-7 ימים. המחיר מחושב באופן אישי, בהתאם למורכבות. קבלו ייעוץ—צרו קשר להערכת הפרויקט שלכם.
לצוות שלנו ניסיון של 5+ שנים בפיתוח AR ויותר מ-20 פרויקטים מוצלחים. הזמינו יישום סוהר ונשוב אליכם עם ייעוץ ותוכנית.







