
Mi dron mantiene un 0,9 % de deriva a través de una burbuja de interferencia GPS. El código del que estoy orgulloso es la línea que se niega a volar.
No esperaba que la parte más importante de este proyecto fuera la parte que se rinde.
Había estado mirando la repetición de un vuelo sintético durante casi toda una tarde. Un dron cruza una misión de 80 segundos sobre un recorrido de 245,3 m. El GPS se mantiene durante los primeros 18 segundos y luego muere cuando la aeronave entra en una burbuja simulada de guerra electrónica. En la pantalla, tres trazas se abren en abanico desde ese momento. Una de ellas, una línea rosa brillante, se desvía hacia la esquina del mapa y sigue adelante, confiada y completamente equivocada, mientras un pequeño indicador a su lado insiste en que todo está bien.
Esa línea rosa es odometría visual-inercial de serie, y verla mentirme es lo que cambió por completo la forma de lo que estaba construyendo. Había asumido que el problema difícil en la navegación sin GPS era mantener la precisión. No lo es. El problema difícil es saber, en el único momento en que importa, que no la tienes.
En un espacio aéreo sin GPS, una posición confiada pero equivocada es más peligrosa que un honesto «no lo sé».
Esta es la historia de construir Lodestar, nuestro motor de integridad de navegación, y de la semana que pasé resolviendo el problema equivocado antes de entender el correcto.
Perseguí la precisión durante una semana antes de entender el problema real
Empecé donde empieza la mayoría, que es con el estimador. La guerra electrónica ha hecho el GPS poco fiable exactamente en los lugares donde los drones autónomos ahora importan: espacio aéreo en disputa, fosas mineras, túneles, cañones urbanos. La interferencia y la suplantación en espacio aéreo en disputa se reportan ahora de forma generalizada, lo bastante comunes como para que la navegación sin GPS haya dejado de ser una curiosidad de investigación y se haya convertido en un requisito duro. La solución obvia es acoplar odometría visual-inercial, fusionar la cámara con los sensores inerciales y esperar que la deriva se mantenga pequeña.
Así que construí un EKF de VIO realmente acoplado de forma estrecha y pasé mi primera semana haciéndolo preciso. El mismo filtro, tres configuraciones honestas: una línea base de IMU por navegación a estima sin visión alguna, una VIO de serie que fusiona cada característica visual que ve, y una versión consciente de la integridad que es más cuidadosa con qué características cree. Las ejecuté todas contra una verdad de terreno que el simulador genera independientemente de cada estimador, de modo que nada pudiera calificar su propia tarea. Toda la misión está sembrada, reproducible byte a byte, lo que importó más de lo que entendí en aquel momento.
Los números de precisión eran genuinamente buenos. A través de la burbuja de interferencia, el estimador consciente de la integridad mantiene 0,92 % de deriva, 2,26 m de error final sobre ese recorrido de 245,3 m. La navegación a estima, en comparación, se dispara hasta 30,95 % de deriva y 75,92 m de error final, que es la diferencia entre aterrizar en la plataforma y aterrizar en el condado de al lado. Estuve satisfecho conmigo mismo durante aproximadamente un día.
Entonces ejecuté el convoy.
Lo que una burbuja de interferencia hace a un dron que confía en sus propios ojos
Quiero ser honesto sobre lo ordinaria que parece el traspaso del GPS, porque esa es la parte que funciona. Cuando el GPS cae en t=18 s, el filtro vuelve a ponderar hacia la fuente visual-inercial sin cambio de modo, sin alarma, sin costura visible para el operador. La estimación simplemente se mantiene continua. Si estuvieras volando la misión, no sentirías desaparecer el suelo.

Esto es lo que subestimé. Un dron que opera con visión no falla empeorando poco a poco. Falla al engancharse a lo equivocado y reportar una posición limpia y confiada que es simplemente basura. El estimador no sabe que ha sido engañado, porque la maquinaria que calcula la posición es la misma maquinaria que tendría que notar que la posición está mal. Había construido un sistema que era preciso justo hasta el momento en que estaba catastrófica y silenciosamente equivocado, y no tenía forma de distinguir ambos desde dentro.
Eso no es un problema de ajuste. No puedes resolver a base de ajuste un sistema que está confiado de estar equivocado. Necesitaba algo que se situara fuera del estimador por completo.
El convoy que enseñó a mentir a un buen estimador
Construí el escenario del convoy específicamente para romper mi propio trabajo, y lo hizo. Entre t=30 y t=43 una columna de vehículos cruza un claro de baja textura, rociando características espurias que parecen, para un front-end de VIO hambriento, exactamente los hitos estables que quiere seguir. Este es el fallo documentado de ORB-SLAM3, aquel en el que el algoritmo sigue el camión y concluye que el dron está quieto.
La VIO de serie cayó por completo. En la misma ejecución sembrada, se engancha a los vehículos en movimiento y se desvía, terminando con 28,79 % de deriva y 70,61 m de error final, con un ATE de 32,95 m que es realmente peor que no usar visión en absoluto. Esa era la línea rosa que había estado mirando. El detalle feo es que, mientras fallaba, su confianza interna parecía sana. El estimador estaba seguro de sí mismo. Estaba seguro de una posición que derivaba hacia el borde del mapa.

El estimador consciente de la integridad sobrevive al convoy por una razón sencilla: se niega a creer características que pertenecen a objetos en movimiento. En el fotograma de arriba, el enmascarado semántico rechazó las 10 características del convoy y conservó solo las 2 estáticas, así que el estimador nunca se engancha a la columna. La trayectoria se sostiene. Pero la parte que no anticipé es lo que hizo mi monitor de integridad en el mismo momento. No pintó la pantalla de verde y fingió que el mundo estaba bien. Pasó a AMBER, porque con las características del convoy enmascaradas realmente solo quedaba un puñado de hitos estáticos en los que confiar. Era preciso y estaba nervioso, al mismo tiempo, y lo dijo.
Fue la primera vez que el monitor me dijo algo que el estimador no podía, y vale más que la precisión por sí sola. También forzó la pregunta que había estado evitando.
¿Por qué el estimador no puede simplemente certificarse a sí mismo?
Pasé un número vergonzoso de horas intentando responder eso con los propios números del estimador. Mi primera comprobación de integridad simplemente leía la incertidumbre reportada por el filtro, su sigma de posición, y actuaba como puerta sobre eso. Si la covarianza se veía ajustada, vuela. Parecía razonable.
El convoy lo demolió. Cuando la VIO de serie se enganchó al camión, su sigma reportado se mantuvo pequeño. El filtro estaba confiado precisamente porque había encontrado algo consistente que seguir. La consistencia era una mentira, pero la covarianza no podía saberlo, porque la covarianza es una afirmación que el estimador hace sobre sí mismo. Estaba pidiendo al testigo que certificara su propio testimonio.
La confianza no debe depender de aquello en lo que se confía.
Esa frase se convirtió en el diseño. El Monitor de Integridad de Navegación vive fuera del estimador a propósito, como código separado que responde a una pregunta distinta. No «cuál es mi posición», que el EKF responde, sino «¿se puede confiar en esta posición ahora mismo?», que el EKF es estructuralmente incapaz de responder sobre sí mismo. El monitor fusiona tres señales en un estado GREEN, AMBER o RED con umbrales duros: conteo de características utilizables (GREEN a 8 o más, RED por debajo de 1), sigma de posición (GREEN bajo 0,6 m, RED por encima de 1,5 m), y NIS de visión, la consistencia de innovación chi-cuadrado que captura exactamente el caso en que el estimador está confiado y equivocado (GREEN bajo 7,0, RED por encima de 30,0). Ningún número individual puede ser manipulado por el estimador, porque dos de los tres no vienen en absoluto de la autoevaluación del estimador.
Esto es lo que ahora creo con más fuerza sobre la autonomía crítica para la seguridad. Una VIO mejor no arregla el fallo confiado-pero-equivocado, porque «¿es esto fiable?» es una pregunta distinta de «¿qué es esto?», y no puedes responder la primera con la maquinaria que produjo la segunda. La industria sigue corriendo a hacer el estimador más inteligente. La arquitectura duradera no es un estimador más inteligente. Es un monitor dispuesto a anularlo.
La línea de código que se niega a volar
El momento en que realmente entendí mi propio producto fue el túnel, y lo recuerdo porque es el momento en que el sistema hace lo mínimo.
Entre t=52 y t=66 la misión entra en un túnel oscuro y las características visuales utilizables colapsan a esencialmente cero. No hay nada que ver. Ningún estimador, por bien ajustado que esté, puede fabricar una posición fiable a partir de una escena que no puede observar. Esto no es un fallo que arreglar. Es un hecho que respetar. La VIO de serie, aún intentándolo, deriva hacia una posición que no tiene derecho a reclamar.
Lodestar hace otra cosa. Las características mueren, la incertidumbre de posición cruza el umbral, y después de 0,5 segundos de RED sostenido el monitor enclava el failsafe y ordena el retorno a casa en t=52,5 s. No finge una posición. Declara la estimación no fiable y devuelve el control a un comportamiento seguro, y lo hace de forma determinista, sin ningún modelo en el bucle decidiendo nada.

Quiero ser cuidadoso con los números aquí, porque la honestidad es toda la propuesta. A lo largo de esta única misión sembrada, el monitor marca el túnel genuinamente inobservable el 100 % de las veces y da falsas alarmas en el tramo sano sin GPS alrededor del 0,1 % de las veces, manteniendo GREEN durante el 56,3 % del vuelo denegado. Esos son los resultados de esta misión, una prueba fiel a la física del mecanismo, no una garantía de prueba de vuelo en mundo abierto. La afirmación duradera es la estructura: confianza calculada fuera del estimador, RED sostenido hasta un retorno a casa enclavado, abstención honesta ante una escena que nadie podría navegar. Los metros exactos pertenecen a esta ejecución. La arquitectura pertenece a cada ejecución.
La línea de código más valiosa en una pila de autonomía es la que se niega a volar.
Lo que puse en el informe para que nadie tenga que creerme de palabra
No quería que nadie tuviera que confiar en mis capturas de pantalla, así que lo último que construí es el recibo. Un clic exporta un Informe de Integridad de Vuelo, JSON más HTML imprimible, con el marcador, las métricas principales, la corrección de la abstención, el tiempo del failsafe, la línea temporal de eventos y, la parte que más me importa, una divulgación explícita del alcance de lo que es un sustituto provisional frente a lo aplazado.
Esa divulgación no es un descargo que entierro. Es una función. El informe declara con claridad que el front-end visual es un sustituto, que la fusión LiDAR es una restricción de rango simulada en lugar de un factor LiDAR real, que la interfaz MAVLink y el rendimiento del Jetson no se ejercitan aquí, y que los 30-45 FPS en un Jetson Orin NX de 16 GB son una especificación del hardware objetivo, no un resultado medido. Las 16.000 actualizaciones de propagación del EKF en el informe se midieron en la máquina de demostración. Los FPS no, y el informe lo dice con esas palabras.

Esa ejecución con LiDAR merece detenerse porque es donde muchas demostraciones harían trampa. Activas el LiDAR simulado y el túnel se recupera: la restricción de rango ancla la solución, la integridad se sostiene y no se dispara ningún failsafe, porque la escena ya no es inobservable. Sería fácil mostrar solo esa ejecución y dar el problema por resuelto. Pero el informe también lleva el coste que la página de la solución admite, aproximadamente 250 a 400 g de carga útil y de 8 a 12 W de potencia. El LiDAR es un intercambio de ingeniería real con una factura real de SWaP-C, no una victoria gratis, y un comprador merece ver la factura junto al beneficio.
Hay exactamente un modelo en cualquier lugar cerca de este sistema, un botón opcional que redacta la narrativa de revisión técnica a partir del informe estructurado. Corre enteramente fuera del bucle de vuelo. Escribe prosa. Nunca toca una decisión de control. La puerta que decide si volar es determinista, sembrada y fuera de línea, y tomaría la decisión idéntica con el botón de narrativa arrancado. Fui firme con ese límite, porque el día en que un modelo de lenguaje tenga voto sobre si un dron confía en su propia posición es un día del que no quiero ser responsable.
A lo que sigo volviendo
Me propuse construir un dron que se mantenga preciso cuando muere el GPS, y lo hice, en esta misión, con menos de un por ciento de deriva. Lo que no esperaba era salir convencido de que la precisión era la mitad fácil.
La precisión es una carrera a la que cualquiera puede entrar. Todo el mundo en este campo está haciendo su estimador un poco más ajustado, sus características un poco más densas, su backend un poco más inteligente, y todo eso es buen trabajo. Pero nada de ello responde a la pregunta que realmente mata a un dron en una burbuja de interferencia, que no es «cuán equivocado estoy» sino «¿estoy en una situación en la que no puedo saber cuán equivocado estoy?». Esa pregunta tiene que formularse desde fuera del estimador, por algo dispuesto a decir lo poco glamuroso y soltar los controles.
La precisión es una carrera a la que cualquiera puede entrar. Un sistema que sabe cuándo está ciego es el producto.
Puedes ejecutar todo esto tú mismo y ver la línea rosa desviarse, luego ver dispararse el estado RED, en veriprajna.com/es/demos/lodestar-autonomia-de-drones-en-gps-denegado-que-sabe-cuando-no-puede. Está sembrado, así que verás exactamente lo que yo vi.
Y si prefieres verlo a leerme describirlo, aquí está todo corriendo de extremo a extremo.
La pregunta que no he dejado de darle vueltas es esta. Si el comportamiento más valioso en tu pila de autonomía es la negativa a actuar, ¿cuánto de tu presupuesto de ingeniería va a la parte que se rinde, y cuánto a la parte que nunca aprendió cuándo hacerlo?


