בניית Lodestar: כיצד מוניטור שלמות ניווט מחוץ למעריך הופך ל-RED ומחזיר הביתה במקום לבלף תיקון בבועת שיבוש ללא GPS.
DronesRoboticsAutonomy

הרחפן שלי מחזיק 0.9% סחף דרך בועת שיבוש GPS. הקוד שאני גאה בו הוא השורה שמסרבת לטוס.

Ashutosh SinghalAshutosh Singhal3 ביולי 202613 min

לא ציפיתי שהחלק החשוב ביותר בפרויקט הזה יהיה החלק שמוותר.

בהיתי בשידור חוזר של טיסה סינתטית במשך רוב אחר הצהריים. רחפן חוצה משימה של 80 שניות על מסלול של 245.3 מ'. ה-GPS מחזיק ב-18 השניות הראשונות, ואז מת כאשר הכלי חוצה אל תוך בועת לוחמה אלקטרונית מדומה. על המסך, שלושה מסלולים מתפצלים מאותו רגע. אחד מהם, קו ורוד בוהק, נפרד לעבר פינת המפה וממשיך הלאה, בטוח בעצמו ושגוי לחלוטין, בעוד קריאה קטנה לידו מתעקשת שהכול בסדר.

הקו הוורוד הזה הוא אודומטריה חזותית-אינרציאלית סטנדרטית, וצפייה בו כשהוא משקר לי היא מה ששינה את כל צורת מה שבניתי. הנחתי שהבעיה הקשה בניווט ללא GPS היא להישאר מדויק. זה לא. הבעיה הקשה היא לדעת, ברגע האחד שבו זה חשוב, שאתה לא.

במרחב אווירי ללא GPS, מיקום בטוח-אך-שגוי מסוכן יותר מ"אני לא יודע" כנה.

זה הסיפור על בניית Lodestar, מנוע שלמות הניווט שלנו, ועל השבוע שבו ביליתי בפתרון הבעיה הלא נכונה לפני שהבנתי את הנכונה.

רדפתי אחרי דיוק במשך שבוע לפני שהבנתי את הבעיה האמיתית

התחלתי במקום שבו רוב האנשים מתחילים, כלומר במעריך. לוחמה אלקטרונית הפכה את ה-GPS לבלתי אמין בדיוק במקומות שבהם רחפנים אוטונומיים חשובים כעת: מרחב אווירי מוכחש, בורות כרייה, מנהרות, קניוני ערים. שיבוש וזיוף במרחב אווירי מוכחש מדווחים כיום בהרחבה, נפוצים דיים כך שניווט ללא GPS חדל להיות סקרנות מחקרית והפך לדרישה קשה. התיקון הברור הוא להוסיף אודומטריה חזותית-אינרציאלית, למזג את המצלמה עם החיישנים האינרציאליים, ולקוות שהסחף יישאר קטן.

אז בניתי VIO EKF מצומד-הדוק אמיתי וביליתי את השבוע הראשון שלי בהפיכתו למדויק. אותו מסנן, שלוש תצורות כנות: קו בסיס IMU של ניווט מקורב ללא ראייה כלל, VIO סטנדרטי שממזג כל מאפיין חזותי שהוא רואה, וגרסה מודעת-שלמות שזהירה יותר לגבי אילו מאפיינים היא מאמינה. הרצתי את כולם מול אמת קרקע שהסימולטור מייצר באופן בלתי תלוי בכל מעריך, כך ששום דבר לא יכול היה לבדוק את שיעורי הבית של עצמו. כל המשימה מוזרעת, ניתנת לשחזור בייט-אחר-בייט, וזה היה חשוב יותר ממה שהבנתי באותו זמן.

מספרי הדיוק היו באמת טובים. דרך בועת השיבוש, המעריך מודע-השלמות מחזיק 0.92% סחף, 2.26 מ' של שגיאה סופית על אותו מסלול של 245.3 מ'. ניווט מקורב, לשם השוואה, מתפוצץ ל-30.95% סחף ו-75.92 מ' של שגיאה סופית, שזה ההבדל בין נחיתה על המשטח לנחיתה במחוז הבא. הייתי מרוצה מעצמי בערך ליום.

ואז הרצתי את השיירה.

מה שבועת שיבוש עושה לרחפן שסומך על עיניו עצמו

אני רוצה להיות כן לגבי כמה רגילה נראית מסירת ה-GPS, כי זה החלק שעובד. כשה-GPS נופל ב-t=18 ש', המסנן משוקלל מחדש אל המקור החזותי-אינרציאלי ללא שינוי מצב, ללא אזעקה, ללא תפר גלוי למפעיל. האומדן פשוט נשאר רציף. אם הייתם מטיסים את המשימה לא הייתם מרגישים שהרצפה נעלמת.

לוח המחוונים של Lodestar ב-t=21 ש', רגעים אחרי שה-GPS נשלל בתוך בועת הלוחמה האלקטרונית המדומה בסגנון R-330Zh: השלמות קוראת GREEN, סחף 0.41 מ', 358 מאפיינים חזותיים שמישים, והמסלול המשוער יושב על אמת הקרקע.
מסירת ה-GPS ב-t=21 ש'. השלמות מחזיקה GREEN, הסחף הוא 0.41 מ' מול אמת הקרקע, ו-358 מאפיינים שמישים מזינים את המעריך. זה החלק הקל, וזה החלק שכולם מדגימים.

הנה מה שהערכתי בחסר. רחפן שרץ על ראייה אינו נכשל בכך שהוא מחמיר לאט. הוא נכשל בכך שהוא ננעל על הדבר הלא נכון ומדווח על מיקום נקי ובטוח שהוא פשוט זבל. המעריך אינו יודע שרומו אותו, כי המנגנון שמחשב את המיקום הוא אותו מנגנון שהיה צריך להבחין שהמיקום שגוי. בניתי מערכת שהייתה מדויקת עד הרגע שבו היא הייתה שגויה באסון, בשקט, ולא הייתה לי דרך להבחין בין השניים מבפנים.

זו אינה בעיית כוונון. אי אפשר לכוונן את הדרך החוצה ממערכת שבטוחה שהיא טועה. הייתי זקוק למשהו שיושב מחוץ למעריך לחלוטין.

השיירה שלימדה מעריך טוב לשקר

בניתי את תרחיש השיירה במיוחד כדי לשבור את העבודה שלי עצמי, והוא עשה זאת. בין t=30 ל-t=43 טור כלי רכב חוצה מרווח דל-מרקם, ומרסס מאפיינים כוזבים שנראים, לחזית VIO רעבה, בדיוק כמו נקודות הציון היציבות שהיא רוצה לעקוב אחריהן. זהו כשל ORB-SLAM3 המתועד, זה שבו האלגוריתם עוקב אחרי המשאית ומסיק שהרחפן עומד במקום.

VIO סטנדרטי נפל בפח לחלוטין. באותה הרצה מוזרעת, הוא ננעל על כלי הרכב הנעים וטס הצידה, ומסיים ב-28.79% סחף ו-70.61 מ' של שגיאה סופית, עם ATE של 32.95 מ' שהוא למעשה גרוע יותר מאשר לעשות ללא ראייה כלל. זה היה הקו הוורוד שצפיתי בו. הפרט המכוער הוא שבעודו נכשל, הביטחון הפנימי שלו נראה בריא. המעריך היה בטוח בעצמו. הוא היה בטוח במיקום שנסחף לעבר קצה המפה.

Lodestar ב-t=32 ש' במהלך השיירה הנעה: השלמות ירדה ל-AMBER, ספירת המאפיינים קוראת 2 עם 10 ממוסכים, שגיאת VIO סטנדרטי עלתה ל-11.0 מ' בעוד המסלול מודע-השלמות מחזיק 0.42 מ' סחף.
השיירה ב-t=32 ש'. מיסוך סמנטי דחה את כלי הרכב הנעים (2 מאפיינים סטטיים בשימוש, 10 ממוסכים), כך שהמסלול מודע-השלמות מחזיק ב-0.42 מ' בעוד שגיאת VIO סטנדרטי מטפסת ל-11.0 מ' וממשיכה. השלמות מדווחת בכנות AMBER, כי באמת יש מעט מאפיינים סטטיים לסמוך עליהם.

המעריך מודע-השלמות שורד את השיירה מסיבה פשוטה: הוא מסרב להאמין למאפיינים ששייכים לעצמים נעים. בפריים למעלה, מיסוך סמנטי דחה את 10 מאפייני השיירה והשאיר רק את ה-2 הסטטיים, כך שהמעריך לעולם אינו ננעל על הטור. המסלול מחזיק. אבל החלק שלא ציפיתי לו הוא מה שמוניטור השלמות שלי עשה באותו רגע. הוא לא צבע את המסך בירוק והעמיד פנים שהעולם בסדר. הוא התהפך ל-AMBER, כי עם מאפייני השיירה ממוסכים החוצה באמת נותרו רק קומץ נקודות ציון סטטיות לסמוך עליהן. הוא היה מדויק והוא היה עצבני, באותו זמן, ואמר זאת.

זו הייתה הפעם הראשונה שהמוניטור אמר לי משהו שהמעריך לא יכול היה, וזה שווה יותר מהדיוק לבדו. זה גם כפה את השאלה שהייתי מתחמק ממנה.

מדוע המעריך לא יכול פשוט לאשר את עצמו?

ביליתי מספר מביך של שעות בניסיון לענות על כך עם המספרים של המעריך עצמו. בדיקת השלמות הראשונה שלי פשוט קראה את אי-הוודאות המדווחת של המסנן, את סיגמת המיקום, וקבעה סף על פיה. אם הקווריאנס נראה הדוק, טוס. זה נראה סביר.

השיירה הרסה את זה. כש-VIO סטנדרטי ננעל על המשאית, הסיגמה המדווחת שלו נשארה קטנה. המסנן היה בטוח בדיוק כי מצא משהו עקבי לעקוב אחריו. העקביות הייתה שקר, אבל הקווריאנס לא יכול היה לדעת זאת, כי קווריאנס הוא הצהרה שהמעריך עושה על עצמו. ביקשתי מהעד לאשר את עדותו עצמו.

אמון לא יכול להיות תלוי בדבר שבו נותנים אמון.

המשפט הזה הפך לתכנון. מוניטור שלמות הניווט חי מחוץ למעריך בכוונה, כקוד נפרד שעונה על שאלה שונה. לא "מה המיקום שלי," שעליה עונה ה-EKF, אלא "האם אפשר לסמוך על המיקום הזה עכשיו," שעליה ה-EKF מבחינה מבנית אינו מסוגל לענות על עצמו. המוניטור ממזג שלושה אותות למצב GREEN, AMBER או RED עם ספי קשיחות: ספירת מאפיינים שמישים (GREEN ב-8 או יותר, RED מתחת ל-1), סיגמת מיקום (GREEN מתחת ל-0.6 מ', RED מעל 1.5 מ'), ו-NIS של ראייה, עקביות חדשנות כי-בריבוע שתופסת בדיוק את המקרה שבו המעריך בטוח ושגוי (GREEN מתחת ל-7.0, RED מעל 30.0). אף מספר בודד אינו ניתן למשחק על ידי המעריך, כי שניים מתוך השלושה אינם מגיעים כלל מהערכה העצמית של המעריך.

זה הדבר שבו אני מאמין כעת הכי חזק לגבי אוטונומיה קריטית לבטיחות. VIO טוב יותר אינו מתקן את כשל הבטוח-אך-שגוי, כי "האם זה אמין" היא שאלה שונה מ-"מה זה," ואי אפשר לענות על הראשונה עם המנגנון שייצר את השנייה. התעשייה ממשיכה לרוץ כדי להפוך את המעריך לחכם יותר. הארכיטקטורה העמידה אינה מעריך חכם יותר. היא מוניטור שמוכן לבטל אותו.

שורת הקוד שמסרבת לטוס

הרגע שבו באמת הבנתי את המוצר שלי עצמי היה המנהרה, ואני זוכר אותו כי זה הרגע שבו המערכת עושה הכי מעט.

בין t=52 ל-t=66 המשימה נכנסת למנהרה חשוכה והמאפיינים החזותיים השמישים קורסים בעצם לאפס. אין מה לראות. אף מעריך, כמה שיהיה מכוונן היטב, אינו יכול לייצר מיקום אמין מסצנה שהוא אינו יכול לצפות בה. זה אינו כשל לתקן. זו עובדה לכבד. ה-VIO הסטנדרטי, שעדיין מנסה, גולש למיקום שאין לו זכות לטעון.

Lodestar עושה משהו אחר. מאפיינים מתים, אי-ודאות המיקום חוצה את הסף, ואחרי 0.5 שניות של RED מתמשך המוניטור נועל את הכשל הבטוח ומצווה חזרה-הביתה ב-t=52.5 ש'. הוא אינו מבלף מיקום. הוא מכריז שהאומדן אינו אמין ומחזיר את השליטה להתנהגות בטוחה, והוא עושה זאת באופן דטרמיניסטי, ללא מודל בלולאה שמחליט משהו.

Lodestar ב-t=54.5 ש' במנהרה החשוכה: השלמות קוראת RED, "מיקום אינו אמין," ספירת מאפיינים 0, שגיאת VIO סטנדרטי 35.2 מ' כשמסלולו טס מעל ראש המפה, וציר הזמן מראה חזרה-הביתה שהופעלה ב-t=52.5 ש'.
המנהרה ב-t=54.5 ש'. המאפיינים קרסו ל-0, השלמות היא RED ("מיקום אינו אמין"), וחזרה-הביתה כבר נורתה ב-t=52.5 ש'. VIO סטנדרטי, שעדיין בטוח, טס ל-35.2 מ' של שגיאה. זה כל הנקודה של המוצר: ההימנעות הכנה, לא התיקון הבטוח.

אני רוצה להיות זהיר לגבי המספרים כאן, כי כנות היא כל הטיעון. לאורך המשימה המוזרעת הזו האחת, המוניטור מסמן את המנהרה הבלתי ניתנת לצפייה באמת 100% מהזמן ומדווח התראות שווא על הקטע הבריא ללא GPS בכ-0.1% מהזמן, מחזיק GREEN ב-56.3% מהטיסה ללא GPS. אלה תוצאות המשימה הזו, הוכחה נאמנה-לפיזיקה של המנגנון, לא ערבות לבדיקת טיסה בעולם פתוח. הטענה העמידה היא המבנה: אמון שמחושב מחוץ למעריך, RED מתמשך עד חזרה-הביתה נעולה, הימנעות כנה על סצנה שאיש לא יכול היה לנווט. המטרים המדויקים שייכים להרצה הזו. הארכיטקטורה שייכת לכל הרצה.

שורת הקוד היקרה ביותר במחסנית אוטונומיה היא זו שמסרבת לטוס.

מה ששמתי בדוח כדי שאיש לא יצטרך לקחת אותי על המילה

לא רציתי שאיש יצטרך לסמוך על צילומי המסך שלי, אז הדבר האחרון שבניתי הוא הקבלה. לחיצה אחת מייצאת דוח שלמות טיסה, JSON ועוד HTML להדפסה, עם לוח התוצאות, מדדי הכותרת, נכונות ההימנעות, זמן הכשל הבטוח, ציר האירועים, והחלק שאכפת לי ממנו ביותר, גילוי היקף מפורש של מה מדומה לעומת מה שנדחה.

הגילוי הזה אינו כתב ויתור שאני קובר. זו תכונה. הדוח קובע בבירור שהחזית החזותית היא תחליף, שמיזוג ה-LiDAR הוא אילוץ טווח מדומה ולא גורם LiDAR אמיתי, שממשק ה-MAVLink ותפוקת ה-Jetson אינם מופעלים כאן, ושה-30-45 FPS על Jetson Orin NX 16 GB הוא מפרט חומרת-יעד, לא תוצאה מדודה. 16,000 עדכוני הפצת EKF בדוח נמדדו על מכונת ההדגמה. ה-FPS לא, והדוח אומר זאת במילים האלה.

דוח שלמות הטיסה המיוצא עם מיזוג LiDAR מופעל: 0.01% סחף להרצה מודעת-השלמות, 78.9% מהטיסה ב-GREEN, כשל בטוח "לא רלוונטי (LiDAR החזיק שלמות)," ולוח תוצאות מול אמת קרקע בלתי תלויה.
דוח שלמות הטיסה, מיוצא עם מיזוג LiDAR מופעל. עם אילוץ טווח LiDAR מדומה שמעגן את המנהרה, הסצנה הופכת לניתנת לצפייה, הסחף יורד ל-0.01%, 78.9% מהטיסה מחזיקים GREEN, והמוניטור בצדק אינו יורה את הכשל הבטוח. הדוח מפורש שזהו סחר, לא קסם.

ההרצה עם LiDAR שווה להתעכב עליה כי זה המקום שבו הרבה הדגמות היו מרמות. הפעילו את ה-LiDAR המדומה והמנהרה מתאוששת: אילוץ הטווח מעגן את הפתרון, השלמות מחזיקה, ושום כשל בטוח אינו נורה, כי הסצנה כבר אינה בלתי ניתנת לצפייה. היה קל להראות רק את ההרצה הזו ולקרוא לבעיה פתורה. אבל הדוח גם נושא את המחיר שעמוד הפתרון מודה בו, בערך 250 עד 400 ג' של מטען ו-8 עד 12 ואט של הספק. LiDAR הוא סחר הנדסי אמיתי עם חשבון SWaP-C אמיתי, לא ניצחון חינם, וקונה ראוי לראות את החשבון ליד התועלת.

יש בדיוק מודל אחד בכל מקום ליד המערכת הזו, כפתור אופציונלי שמנסח את נרטיב הסקירה הטכנית מהדוח המובנה. הוא רץ לחלוטין מחוץ ללולאת הטיסה. הוא כותב פרוזה. הוא לעולם אינו נוגע בהחלטת בקרה. השער שמחליט אם לטוס הוא דטרמיניסטי, מוזרע ו-offline, והוא היה מקבל את הקריאה הזהה עם כפתור הנרטיב קרוע החוצה. הייתי נחוש לגבי הגבול הזה, כי היום שבו מודל שפה מקבל קול בהחלטה אם רחפן סומך על המיקום שלו עצמו הוא יום שאיני רוצה להיות אחראי לו.

למה אני ממשיך לחזור

יצאתי לבנות רחפן שנשאר מדויק כשה-GPS מת, ועשיתי זאת, במשימה הזו, לסחף של פחות מאחוז. מה שלא ציפיתי היה לצאת משם משוכנע שהדיוק היה החצי הקל.

דיוק הוא מרוץ שכל אחד יכול להיכנס אליו. כולם בתחום הזה הופכים את המעריך שלהם להדוק קצת יותר, את המאפיינים שלהם צפופים קצת יותר, את ה-backend שלהם חכם קצת יותר, וכל זה עבודה טובה. אבל שום דבר מזה אינו עונה על השאלה שבאמת הורגת רחפן בבועת שיבוש, שאינה "כמה אני טועה" אלא "האם אני במצב שבו איני יכול לדעת כמה אני טועה." השאלה הזו חייבת להישאל מחוץ למעריך, על ידי משהו שמוכן לומר את הדבר הלא-זוהר ולמסור את השליטה.

דיוק הוא מרוץ שכל אחד יכול להיכנס אליו. מערכת שיודעת מתי היא עיוורת היא המוצר.

אתם יכולים להריץ את כל הדבר בעצמכם ולצפות בקו הוורוד טס הצידה, ואז לצפות במצב ה-RED יורה, ב-veriprajna.com/he/demos/gps-denied-drone-autonomy. זה מוזרע, אז תראו בדיוק מה שראיתי.

ואם תעדיפו לראות זאת מאשר לקרוא אותי מתאר אותה, הנה כל הדבר רץ מקצה לקצה.

השאלה שלא הפסקתי להפוך היא זו. אם ההתנהגות היקרה ביותר במחסנית האוטונומיה שלכם היא הסירוב לפעול, כמה מתקציב ההנדסה שלכם הולך לחלק שמוותר, וכמה לחלק שלעולם לא למד מתי?

מחקר קשור

פורסם גם ב

בנו את ה-AI שלכם בביטחון.

שותפו עם צוות בעל ניסיון עמוק בבניית הדור הבא של AI ארגוני. אנו נסייע לכם לתכנן, לבנות ולהטמיע אסטרטגיית AI שתוכלו לסמוך עליה.

Veriprajna ייעוץ דיפ-טק מתמחה בבניית מערכות AI קריטיות לבטיחות עבור תחומי הבריאות, הפיננסים והרגולציה. הארכיטקטורות שלנו מאומתות מול פרוטוקולים מבוססים ומלוות בתיעוד ציות מקיף.