Lodestar bouwen: hoe een navigatie-integriteitsmonitor buiten de schatter naar RED schakelt en return-to-home doet in plaats van een fix te bluffen in een GPS-loze storingsbel.
DronesRoboticsAutonomy

Mijn drone houdt 0,9% drift door een GPS-storingsbel. De code waar ik trots op ben is de regel die weigert te vliegen.

Ashutosh SinghalAshutosh Singhal3 juli 202613 min

Ik had niet verwacht dat het belangrijkste deel van dit project het deel zou zijn dat opgeeft.

Ik had het grootste deel van een middag naar een replay van een synthetische vlucht zitten staren. Een drone vliegt een missie van 80 seconden over een pad van 245,3 m. GPS houdt stand in de eerste 18 seconden en valt weg zodra het toestel een gesimuleerde elektronische-oorlogvoeringsbel binnenkomt. Op het scherm waaieren vanaf dat moment drie tracks uiteen. Eén daarvan, een felroze lijn, scheert af naar de hoek van de kaart en blijft gaan — zelfverzekerd en volledig fout — terwijl een kleine uitlezing ernaast volhoudt dat alles in orde is.

Die roze lijn is standaard visueel-inertiële odometrie, en zien hoe die tegen me liegt is wat de hele vorm van wat ik aan het bouwen was veranderde. Ik had aangenomen dat het moeilijke probleem bij GPS-loze navigatie was om nauwkeurig te blijven. Dat is het niet. Het moeilijke probleem is weten, in het ene moment dat ertoe doet, dat je dat niet bent.

In GPS-loos luchtruim is een zelfverzekerde-maar-foute positie gevaarlijker dan een eerlijk "ik weet het niet."

Dit is het verhaal van het bouwen van Lodestar, onze navigatie-integriteitsengine, en van de week die ik besteedde aan het oplossen van het verkeerde probleem voordat ik het juiste begreep.

Ik joeg een week op nauwkeurigheid voordat ik het echte probleem begreep

Ik begon waar de meeste mensen beginnen: bij de schatter. Elektronische oorlogvoering heeft GPS onbetrouwbaar gemaakt precies daar waar autonome drones nu ertoe doen: betwist luchtruim, mijnputten, tunnels, stedelijke canyons. Storing en spoofing in betwist luchtruim worden nu breed gerapporteerd, zo gewoon dat GPS-loze navigatie geen onderzoekscuriositeit meer is maar een harde eis. De voor de hand liggende fix is visueel-inertiële odometrie erbij te hangen, de camera te fuseren met de traagheidssensoren, en te hopen dat de drift klein blijft.

Dus bouwde ik een echte strak gekoppelde VIO-EKF en besteedde mijn eerste week eraan die nauwkeurig te maken. Hetzelfde filter, drie eerlijke configuraties: een dead-reckoning-IMU-basislijn zonder enig zicht, een standaard-VIO die elke visuele feature fuseert die hij ziet, en een integriteitsbewuste versie die voorzichtiger is over welke features hij gelooft. Ik liet ze allemaal lopen tegen een ground truth die de simulator genereert onafhankelijk van elke schatter, zodat niets zijn eigen huiswerk kon nakijken. De hele missie is geseed, byte-voor-byte reproduceerbaar, wat op dat moment meer uitmaakte dan ik besefte.

De nauwkeurigheidscijfers waren oprecht goed. Door de storingsbel heen houdt de integriteitsbewuste schatter 0,92% drift, 2,26 m eindfout over dat pad van 245,3 m. Dead reckoning explodeert ter vergelijking naar 30,95% drift en 75,92 m eindfout — het verschil tussen landen op het platform en landen in de volgende provincie. Ik was zo'n dag lang tevreden met mezelf.

Toen draaide ik het konvooi.

Wat een storingsbel doet met een drone die zijn eigen ogen vertrouwt

Ik wil eerlijk zijn over hoe gewoon de GPS-overdracht eruitziet, want dat is het deel dat werkt. Wanneer GPS wegvalt bij t=18 s, herweegt het filter naar de visueel-inertiële bron zonder moduswissel, zonder alarm, zonder voor de operator zichtbare naad. De schatting blijft gewoon continu. Als je de missie vloog, zou je de vloer niet voelen verdwijnen.

Lodestar-dashboard bij t=21 s, momenten nadat GPS is ontzegd binnen de gesimuleerde R-330Zh-stijl elektronische-oorlogvoeringsbel: integriteit leest GREEN, drift 0,41 m, 358 bruikbare visuele features, en de geschatte track ligt op ground truth.
De GPS-overdracht bij t=21 s. Integriteit houdt GREEN, drift is 0,41 m tegen ground truth, en 358 bruikbare features voeden de schatter. Dit is het makkelijke deel, en het is het deel dat iedereen demo't.

Hier is wat ik onderschatte. Een drone die op zicht vliegt faalt niet door langzaam slechter te worden. Hij faalt door zich vast te zetten op het verkeerde ding en een schone, zelfverzekerde positie te rapporteren die gewoon rommel is. De schatter weet niet dat hij is misleid, omdat de machinerie die de positie berekent dezelfde machinerie is die zou moeten merken dat de positie fout is. Ik had een systeem gebouwd dat nauwkeurig was tot precies het moment waarop het catastrofaal, stilzwijgend mis was, en ik had van binnenuit geen manier om die twee uit elkaar te houden.

Dat is geen afstemmingsprobleem. Je kunt je niet uit een systeem afstemmen dat zeker is van fout te zitten. Ik had iets nodig dat volledig buiten de schatter zat.

Het konvooi dat een goede schatter leerde liegen

Ik bouwde het konvooiscenario specifiek om mijn eigen werk te breken, en dat deed het. Tussen t=30 en t=43 steekt een kolonne voertuigen een low-texture open plek over, en sproeit valse features die, voor een hongerige VIO-front-end, precies lijken op de stabiele landmarks die hij wil volgen. Dit is de gedocumenteerde ORB-SLAM3-fout, die waarbij het algoritme de truck volgt en concludeert dat de drone stilstaat.

Standaard-VIO trapte er volledig in. In dezelfde geseede run zet hij zich vast op de bewegende voertuigen en vliegt weg, eindigend op 28,79% drift en 70,61 m eindfout, met een ATE van 32,95 m die feitelijk slechter is dan helemaal geen zicht te gebruiken. Dat was de roze lijn waarnaar ik had zitten kijken. Het lelijke detail is dat terwijl hij faalde, zijn interne vertrouwen gezond leek. De schatter was zeker van zichzelf. Hij was zeker van een positie die naar de rand van de kaart dreef.

Lodestar bij t=32 s tijdens het bewegende konvooi: integriteit is gedaald naar AMBER, feature count leest 2 met 10 gemaskeerd, standaard-VIO-fout is gestegen naar 11,0 m terwijl de integriteitsbewuste track 0,42 m drift houdt.
Het konvooi bij t=32 s. Semantische maskering heeft de bewegende voertuigen afgewezen (2 statische features gebruikt, 10 gemaskeerd), dus de integriteitsbewuste track houdt 0,42 m terwijl de standaard-VIO-fout oploopt naar 11,0 m en verdergaat. Integriteit rapporteert eerlijk AMBER, omdat er echt weinig statische features te vertrouwen zijn.

De integriteitsbewuste schatter overleeft het konvooi om een eenvoudige reden: hij weigert features te geloven die bij bewegende objecten horen. In het frame hierboven wees semantische maskering de 10 konvooifeatures af en hield alleen de 2 statische over, zodat de schatter zich nooit op de kolonne vastzet. De trajectorie houdt stand. Maar het deel dat ik niet had voorzien is wat mijn integriteitsmonitor op hetzelfde moment deed. Hij kleurde het scherm niet groen en deed alsof de wereld in orde was. Hij schakelde over naar AMBER, omdat er met de features van het konvooi gemaskeerd echt maar een handvol statische landmarks overbleef om te vertrouwen. Hij was nauwkeurig en nerveus tegelijk, en hij zei dat.

Dat was de eerste keer dat de monitor me iets vertelde wat de schatter niet kon, en het is meer waard dan de nauwkeurigheid op zich. Het dwong ook de vraag af die ik had ontweken.

Waarom kan de schatter zichzelf niet gewoon certificeren?

Ik besteedde een gênant aantal uren aan het proberen dat te beantwoorden met de eigen cijfers van de schatter. Mijn eerste integriteitscheck las simpelweg de door het filter gerapporteerde onzekerheid, zijn positiesigma, en stelde daar een poort op. Als de covariantie strak leek, vlieg. Het leek redelijk.

Het konvooi sloopte het. Toen standaard-VIO zich vastzette op de truck, bleef de gerapporteerde sigma klein. Het filter was precies zelfverzekerd omdat het iets consistents had gevonden om te volgen. De consistentie was een leugen, maar de covariantie kon dat niet weten, omdat covariantie een uitspraak is die de schatter over zichzelf doet. Ik vroeg de getuige om zijn eigen getuigenis te certificeren.

Vertrouwen mag niet afhangen van het ding dat wordt vertrouwd.

Die zin werd het ontwerp. De Navigation Integrity Monitor leeft expres buiten de schatter, als aparte code die een andere vraag beantwoordt. Niet "wat is mijn positie," wat de EKF beantwoordt, maar "kan deze positie nu worden vertrouwd," wat de EKF structureel niet over zichzelf kan beantwoorden. De monitor fuseert drie signalen tot een GREEN-, AMBER- of RED-toestand met harde drempels: bruikbaar feature count (GREEN bij 8 of meer, RED onder 1), positiesigma (GREEN onder 0,6 m, RED boven 1,5 m), en vision NIS, de chi-kwadraat-innovatieconsistentie die precies het geval vangt waarin de schatter zelfverzekerd en fout is (GREEN onder 7,0, RED boven 30,0). Geen enkel getal kan door de schatter worden gemanipuleerd, omdat twee van de drie überhaupt niet uit de eigen zelfbeoordeling van de schatter komen.

Dit is wat ik nu het sterkst geloof over safety-critical autonomie. Een betere VIO lost de zelfverzekerde-maar-foute foutmodus niet op, omdat "is dit betrouwbaar" een andere vraag is dan "wat is dit," en je de eerste niet kunt beantwoorden met de machinerie die de tweede produceerde. De industrie blijft racen om de schatter slimmer te maken. De duurzame architectuur is geen slimmere schatter. Het is een monitor die bereid is hem te overrulen.

De regel code die weigert te vliegen

Het moment waarop ik mijn eigen product echt begreep was de tunnel, en ik herinner me het omdat het het moment is waarop het systeem het minst doet.

Tussen t=52 en t=66 komt de missie een donkere tunnel binnen en storten de bruikbare visuele features in tot vrijwel nul. Er is niets te zien. Geen schatter, hoe goed ook afgestemd, kan een betrouwbare positie fabriceren uit een scène die hij niet kan observeren. Dit is geen fout om te repareren. Het is een feit om te respecteren. De standaard-VIO, die nog steeds probeert, glijdt weg naar een positie die hij geen recht heeft te claimen.

Lodestar doet iets anders. Features sterven, positie-onzekerheid overschrijdt de drempel, en na 0,5 seconden aanhoudend RED vergrendelt de monitor de failsafe en beveelt return-to-home bij t=52.5 s. Hij bluft geen positie. Hij verklaart de schatting onbetrouwbaar en geeft de besturing terug aan een veilig gedrag, en hij doet dat deterministisch, zonder een model in de lus dat iets beslist.

Lodestar bij t=54.5 s in de donkere tunnel: integriteit leest RED, "Positie NIET betrouwbaar," feature count 0, standaard-VIO-fout 35,2 m terwijl zijn track van de bovenkant van de kaart vliegt, en de tijdlijn toont return-to-home getriggerd bij t=52.5 s.
De tunnel bij t=54.5 s. Features zijn ingestort tot 0, integriteit is RED ("Positie NIET betrouwbaar"), en return-to-home heeft al afgevuurd bij t=52.5 s. Standaard-VIO, nog steeds zelfverzekerd, is weggevlogen naar 35,2 m fout. Dit is het hele punt van het product: de eerlijke onthouding, niet de zelfverzekerde fix.

Ik wil hier voorzichtig zijn met de cijfers, want eerlijkheid is de hele pitch. Over deze ene geseede missie markeert de monitor de echt niet-observeerbare tunnel 100% van de tijd en geeft vals alarm op het gezonde GPS-loze traject ongeveer 0,1% van de tijd, en houdt GREEN over 56,3% van de GPS-loze vlucht. Dat zijn de resultaten van deze missie, een fysica-getrouwe bewijsvoering van het mechanisme, geen open-world vluchttestgarantie. De duurzame claim is de structuur: vertrouwen berekend buiten de schatter, RED aangehouden tot een vergrendelde return-to-home, eerlijke onthouding bij een scène die niemand kon navigeren. De exacte meters horen bij deze run. De architectuur hoort bij elke run.

De waardevolste regel code in een autonomiestack is die welke weigert te vliegen.

Wat ik in het rapport zette zodat niemand mijn woord hoeft te nemen

Ik wilde niet dat iemand mijn screenshots moest vertrouwen, dus het laatste dat ik bouwde is het bewijsstuk. Eén klik exporteert een Flight Integrity Report, JSON plus printbaar HTML, met het scorebord, de headline metrics, de onthoudingscorrectheid, de failsafe-tijd, de gebeurtenistijdlijn, en — het deel waar ik het meest om geef — een expliciete scope-disclosure van wat gestubbed versus uitgesteld is.

Die disclosure is geen disclaimer die ik begraaf. Het is een feature. Het rapport zegt onomwonden dat de visuele front-end een stand-in is, dat de LiDAR-fusie een gesimuleerde afstandsbepaling is in plaats van een echte LiDAR-factor, dat de MAVLink-interface en de Jetson-doorvoer hier niet worden geoefend, en dat de 30-45 FPS op een Jetson Orin NX 16 GB een target-hardwarespecificatie is, geen gemeten resultaat. De 16.000 EKF-propagatie-updates in het rapport zijn gemeten op de demomachine. De FPS niet, en het rapport zegt dat in die woorden.

Het geëxporteerde Flight Integrity Report met LiDAR-fusie ingeschakeld: 0,01% drift voor de integriteitsbewuste run, 78,9% van de vlucht op GREEN, failsafe "n.v.t. (LiDAR hield integriteit)," en een scorebord tegen onafhankelijke ground truth.
Het Flight Integrity Report, geëxporteerd met LiDAR-fusie ingeschakeld. Met een gesimuleerde LiDAR-afstandsconstraint die de tunnel verankert, wordt de scène observeerbaar, daalt drift naar 0,01%, houdt 78,9% van de vlucht GREEN, en vuurt de monitor terecht de failsafe niet af. Het rapport is expliciet dat dit een trade is, geen magie.

Die LiDAR-run verdient aandacht omdat het de plek is waar veel demo's zouden valsspelen. Zet de gesimuleerde LiDAR aan en de tunnel herstelt: de afstandsconstraint verankert de oplossing, integriteit houdt stand, en er vuurt geen failsafe, omdat de scène niet langer niet-observeerbaar is. Het zou makkelijk zijn om alleen die run te tonen en het probleem opgelost te noemen. Maar het rapport draagt ook de kosten die de solution page eerlijk noemt, ruwweg 250 tot 400 g payload en 8 tot 12 W vermogen. LiDAR is een echte engineering-trade met een echte SWaP-C-rekening, geen gratis winst, en een koper verdient het om de rekening naast het voordeel te zien.

Er is precies één model ergens in de buurt van dit systeem, een optionele knop die het technical-review-narratief uit het gestructureerde rapport opstelt. Het draait volledig buiten de vluchtlus. Het schrijft proza. Het raakt nooit een besturingsbeslissing. De poort die beslist of er wordt gevlogen is deterministisch, geseed en offline, en zou identiek beslissen met de narratiefknop eruitgescheurd. Ik was streng over die grens, omdat de dag waarop een taalmodel een stem krijgt over of een drone zijn eigen positie vertrouwt een dag is waarvoor ik niet verantwoordelijk wil zijn.

Waar ik steeds op terugkom

Ik stelde me ten doel een drone te bouwen die nauwkeurig blijft wanneer GPS uitvalt, en dat deed ik, op deze missie, tot onder een procent drift. Wat ik niet had verwacht was om ervan overtuigd weg te gaan dat nauwkeurigheid de makkelijke helft was.

Nauwkeurigheid is een race waarin iedereen kan meedoen. Iedereen in dit veld maakt zijn schatter een beetje strakker, zijn features een beetje dichter, zijn backend een beetje slimmer, en dat is allemaal goed werk. Maar niets daarvan beantwoordt de vraag die een drone in een storingsbel daadwerkelijk doodt, namelijk niet "hoe fout zit ik" maar "zit ik in een situatie waarin ik niet kan weten hoe fout ik zit." Die vraag moet van buiten de schatter worden gesteld, door iets dat bereid is het onglamoureuze ding te zeggen en de besturing op te geven.

Nauwkeurigheid is een race waarin iedereen kan meedoen. Een systeem dat weet wanneer het blind is, is het product.

Je kunt het hele ding zelf draaien en de roze lijn weg zien vliegen, en daarna de RED-toestand zien afvuren, op veriprajna.com/nl/demos/lodestar-drone-autonomie-zonder-gps-die-weet-wanneer-het-niet-kan. Het is geseed, dus je ziet precies wat ik zag.

En als je het liever ziet dan leest hoe ik het beschrijf, hier is het hele ding van begin tot eind draaiend.

De vraag die ik niet kan laten rusten is deze. Als het waardevolste gedrag in je autonomiestack de weigering is om te handelen, hoeveel van je engineeringbudget gaat dan naar het deel dat opgeeft, en hoeveel naar het deel dat nooit leerde wanneer?

Gerelateerd onderzoek

Ook gepubliceerd op

Bouw uw AI met vertrouwen.

Werk samen met een team met diepgaande ervaring in het bouwen van de volgende generatie enterprise-AI. Laat ons u helpen bij het ontwerpen, bouwen en implementeren van een AI-strategie waarop u kunt vertrouwen.

Veriprajna Deep Tech-adviesbureau is gespecialiseerd in het bouwen van veiligheidskritische AI-systemen voor de gezondheidszorg, de financiële sector en gereguleerde domeinen. Onze architecturen worden gevalideerd aan de hand van gevestigde protocollen met uitgebreide compliancedocumentatie.