Navegación Autónoma de Drones en Entornos Urbanos con Visión Monocular y Small Language Model (SLM)
Documentación técnica y resumen de la tesis de posgrado de la Maestría en Ciencia de Datos de la Universidad Austral. El trabajo presenta un sistema integral de planificación previa, percepción geométrica monocular y control táctico asistido por modelos de lenguaje pequeños (SLM) en simulación urbana de alta fidelidad.
Actualizaciones Recientes (2026-10-14)
Informe Alineado con el Código
Barrida completa del informe contra el código y config/.env vigentes: el modelo de visión-lenguaje es LFM2.5-VL-1.6B (tag local lfm2.5-vl-1.6b:q4km-ctx8k), el flujo óptico trabaja a 640 px y el capítulo 6 incorpora la sección de profundidad monocular estimada con Depth Anything V2 (Yang et al., 2024).
Registro de Corrida y Visor de Auditoría
El capítulo 4 describe cada archivo de una corrida (traza JSONL con el DroneState completo, CSV plano, resumen, resumen por objetivo, muestras de DistMin, consola, videos frontal y externo, fotogramas de cada consulta) y el uso del visor HTML: dos videos sincronizados por ciclo, panel de detalle con el campo de obstáculos, la consulta y el árbol del estado, y tabla de ciclos navegable.
Profundidad Monocular Estimada en el Lazo Lento
La capa estratégica y el barrido de deadlock juzgan qué direcciones son volables con una red de profundidad monocular (Depth Anything V2 Metric Outdoor Small, ~25 M parámetros) que estima metros desde el mismo RGB de la cámara: un sector es libre si el percentil 5 de su profundidad es ≥ 15 m. ~110 ms por consulta en su propio hilo. No es el sensor de profundidad del simulador, que sigue fuera del lazo.
Banco de Prueba con el VLM a Bordo
Con LFM2.5-VL-1.6B (Q4_K_M) en Ollama sobre la misma GPU que Unreal, el VLM no separa sectores volables de bloqueados (AUC 0.53) y declara transitables todos los rumbos del barrido; la profundidad estimada lo hace con AUC 0.83–0.87. La única señal útil del VLM está en el plan de ruta sobre el mapa cenital (AUC 0.81 con el juicio por parches).
Lotes de la Capa Estratégica
CitySim (15 corridas) y el corredor arbolado de TownSim (10 corridas), regla de decisión fijada antes de correr: ninguna fuente (profundidad, VLM o sin capa) acelera la misión. En TownSim las 10 misiones se completan y la capa con profundidad mantiene al dron más lejos del follaje en las 5 semillas (10 s frente a 29 s a menos de 1 m). Configuración final: STRATEGIC_SOURCE=depth, DEADLOCK_STRATEGY=depth; el VLM no corre durante el vuelo.
Plan de Ruta con el VLM sobre el Mapa
Antes del despegue, y una sola vez por misión, cada tramo se compara contra rutas alternativas (la recta, dos en L y desvíos paralelos). El VLM clasifica parches del mapa cenital a lo largo de cada candidata (calle, edificio, árboles, estacionamiento, autopista elevada) y gana la de mayor probabilidad media de «calle», leída de los logprobs; sus vértices se insertan como waypoints VIA_*. Todas las corridas de un lote vuelan el mismo plan.
Mapa Cenital Registrado con el Simulador
El mapa de CitySim se reconstruyó con 286 capturas cenitales de AirSim a 1000 m (FOV 15°), registrado en NED por construcción: el mapa anterior estaba rotado 90° y con otra escala. Antes de cada toma el dron baja a 40 m para que Unreal cargue la zona. Con el mapa correcto, WP_3 de citysim_pilot resultó estar dentro de un edificio y se movió a la calle.
Banco de Prueba del VLM
Calibración fuera de vuelo: las poses de las corridas se reproducen en AirSim para obtener profundidad y, con ella, la etiqueta de referencia de cada pregunta (sector libre, lado por donde rodear, espacio por encima, dirección más abierta, rutas sobre el mapa). Se mide exactitud balanceada, AUC con probabilidades del modelo, respuestas constantes y sesgo por posición (grilla con etiquetas permutadas).
Dos Lazos Desacoplados
El lazo rápido (5 Hz: guiado, evasión por flujo óptico, GIRAR_90, detección de atasco) es el único que comanda velocidades. La capa estratégica opera en un lazo lento y asíncrono que nunca detiene al dron en vuelo normal.
Capa Estratégica Anclada a la Pose
Periódicamente (o de inmediato ante un muro), la fuente —profundidad estimada por defecto, o el VLM— juzga el fotograma frontal dividido en una grilla de 3×3 (los tercios de la foto) e indica qué sectores son volables: hacia los costados, por arriba o por abajo. La respuesta se convierte en una sub-meta en coordenadas del mundo anclada a la pose del fotograma: sigue siendo válida aunque el dron haya girado mientras se procesaba. Se descarta si tiene más de 10 s, si cambió el waypoint o si ya quedó atrás.
Barrido de Deadlock en Marco Mundo
Ante un deadlock, el dron captura 4 rumbos; la profundidad estimada (o el VLM, con deep_vlm) juzga cada imagen y el código asigna a cada una el yaw medido al capturarla. La salida es una sub-meta a 15 m hacia el rumbo transitable más cercano a la meta. Sin rumbo transitable o ante una falla, escape determinista GANAR_ALTURA (o GIRAR_90 sobre 30 m).
La Fuente Decide, las Reglas No la Reescriben
La respuesta de la red o del modelo se traduce a geometría y se aplica sin reglas deterministas encima; solo se descartan respuestas obsoletas o no parseables. Así, la comparación mide a la fuente y no a una capa de correcciones.
Detección de Atasco de Dos Señales
StallDetector: dron trabado (se ordenó avanzar ≥ 0.3 m/s y el dron no se movió durante 10 ciclos, nunca bajo el piso óptico de 4.5 m) y sin progreso (10 s sin acercarse 2 m al objetivo actual). El despegue no es un atasco.
Sin Profundidad del Simulador en el Lazo
Ni el grafo, ni main.py, ni experiments/runner.py leen la profundidad del simulador; la única profundidad del lazo es la estimada desde el RGB. La distancia mínima a obstáculo la mide un hilo de auditoría aislado, con su propia conexión al simulador, que no comparte nada con el grafo. Un test estático verifica ambas cosas: el sistema de control es estrictamente monocular.
Resumen Ejecutivo
La navegación autónoma de cuadricópteros eVTOL en entornos urbanos densos —como el de Buenos Aires— enfrenta severos desafíos derivados de la alta densidad de obstáculos, la degradación de señales satelitales (GNSS) en cañones urbanos y las restricciones presupuestarias que descartan sensores de alto costo como LiDAR. Para abordar esta problemática bajo estrictas restricciones de hardware y en conformidad con las normativas locales (ANAC Res. 880/2019), esta tesis presenta un sistema integral de navegación basado exclusivamente en visión monocular y modelos de lenguaje pequeños (SLM) locales.
La arquitectura desacopla un módulo de planificación deliberativa en tierra (estación de control
WebDCS, que compila directivas en lenguaje natural a un manifiesto inmutable de navegación)
de un lazo táctico a bordo de alta frecuencia. El módulo de percepción implementa un pipeline ligero de
flujo óptico denso derotado mediante telemetría de actitud, mapeo de ocupación espacial
(ObstacleField) y estimación de Tiempo-a-Colisión (TTC) a partir de la
divergencia del campo de flujo, alcanzando un área bajo la curva ROC de 0.96–0.97 en su
validación frente a canales de profundidad de referencia. En la capa de decisión a bordo, un grafo de estados
(LangGraph) separa un lazo reactivo rápido de una capa estratégica asíncrona que propone sub-metas en
coordenadas del mundo, ancladas a la pose del fotograma que analizó, para tolerar la latencia. La capa se
diseñó para un modelo de visión-lenguaje pequeño; medido contra etiquetas de referencia, el modelo a bordo
(LFM2.5-VL-1.6B, local, con decodificación estructurada json_schema) no
distingue direcciones volables de bloqueadas, y la configuración final usa una red de
profundidad monocular estimada desde el mismo RGB. El VLM queda en la planificación de
ruta sobre el mapa cenital, la única tarea en la que aporta una señal medible.
Entorno de Validación y Benchmarking: La experimentación se realiza sobre
Cosys-AirSim en Unreal Engine 5.5, empleando el entorno urbano
CitySim como plataforma principal de benchmark y calibrando la cinemática de
vuelo contra conjuntos de datos de telemetría de drones comerciales reales (DJI / Zenodo).
Arquitectura del Sistema: Dos Cerebros Desacoplados
El sistema resuelve el compromiso entre razonamiento deliberativo de alto nivel y control reactivo de alta frecuencia dividiendo la inteligencia en dos dominios estrictamente desacoplados:
1. Lazo Deliberativo de Tierra y GCS (airsim-plan / WebDCS)
Opera antes de que los motores se armen. El operador humano define la misión en lenguaje natural en la consola
de la estación terrena. Un modelo de lenguaje local compila estas directivas en un Manifiesto de Vuelo
Inmutable (MissionManifest.json), validado mediante esquemas Pydantic para garantizar
que todos los waypoints se encuentren dentro del polígono georreferenciado del mapa y en coordenadas locales
NED seguras (z < 0).
La suite incluye WebDCS (Ground Control Station Web) sobre FastAPI, que provee renderizado de cartas 2D en Canvas interactivo, gestión de manifiestos y edición manual de waypoints. Cada corrida del lazo táctico se audita post-vuelo mediante un visor HTML autocontenido que sincroniza el video anotado del vuelo con la traza completa de decisiones (prompt, respuesta estructurada cruda y latencia de inferencia de cada consulta al SLM).
Antes del vuelo, la estación terrena también planifica la ruta con el VLM sobre el mapa cenital: propone rutas alternativas para cada tramo, el modelo clasifica parches del mapa a lo largo de cada una y los vértices de la más «calle» se agregan al manifiesto. El mapa de CitySim se construye con capturas del propio simulador, de modo que coincide con el mundo de vuelo.
2. Lazo Táctico Autónomo en Vuelo (airsim-loop)
Es un grafo de decisión por ciclo (LangGraph StateGraph) de cuatro nodos
(capture → perception → navigate → motor, con desvío a degraded_hover si el
simulador no entrega datos) ejecutado a 5 Hz, que procesa cada fotograma y la telemetría de vuelo para emitir
comandos cinemáticos en coordenadas de cuerpo (body frame):
- Contrato único de percepción (
ObstacleField): Grilla de 3×3 celdas (3 sectores horizontales × 3 bandas verticales) con ocupación, TTC, divergencia y confianza. Ningún nodo del grafo accede a datos crudos de flujo óptico ni al canal de profundidad del simulador. - Lazo rápido en
navigate: Un único nodo evalúa en orden fijo la continuación de barridos y maniobras comprometidas, el contacto no visible al flujo (imu_contact,blind_wall), el piso óptico, el atasco (StallDetector) y el TTC: guiado nominal, evasión lateral oGIRAR_90ante un muro que ocupa el campo visual. - Capa estratégica asíncrona: Consulta periódica e inmediata tras un
GIRAR_90. La fuente (STRATEGIC_SOURCE: profundidad estimada por defecto, VLM uoff) indica qué sectores de una grilla de 3×3 del fotograma son volables; la respuesta se convierte en una sub-meta en el mundo que elWaypointTrackerpersigue con el guiado normal. El dron nunca frena a esperarla. - Resolución de deadlock (
depth): Barrido panorámico de 4 rumbos con yaw medido por imagen, juzgados por la profundidad estimada (o por el VLM condeep_vlm); sin rumbo transitable o ante una falla (timeout, formato inválido, rotación imposible), escape vertical determinista. - Decodificación Estructurada y Parser Estricto: Cada modo de consulta tiene su esquema
json_schema; una respuesta que no lo cumple no produce ninguna acción ni un valor por defecto. - Fuente Única de Verdad Cinemática (
action_to_command): Centraliza la conversión de macro-acciones simbólicas a velocidades lineales y tasa de guiñada, asegurando simetría e invariancia física en todos los brazos de control. - Tres Brazos Experimentales Comparables: Evaluación estandarizada entre el brazo
slm(lazo rápido + lazo lento), la máquina de estadosfsmy el control reactivoreactivebajo idéntico espacio de acciones y percepción; la estrategiablindofrece el contraste sin VLM en ningún punto.
El diagrama de flujo exportado directamente del código compilado y el detalle de cada nodo se encuentran disponibles en Grafo de Control Táctico.
Percepción Monocular y Estimación de Tiempo-a-Colisión (TTC)
El pipeline de percepción del lazo rápido prescinde de detectores de objetos neuronales pesados y fundamenta su robustez en la física del campo de movimiento visual. El lazo lento agrega un segundo canal: profundidad monocular estimada desde el mismo RGB con Depth Anything V2 (Metric Outdoor Small, ~25 M parámetros, ~110 ms en su propio hilo), que no necesita traslación entre fotogramas y por eso cubre los puntos ciegos del flujo (hover, giro puro, obstáculo centrado en el foco de expansión). Cada sector de una grilla 3×3 es libre si el percentil 5 de su profundidad estimada es ≥ 15 m: AUC 0.83 contra la etiqueta de referencia, frente a 0.53 del VLM.
Flujo Óptico Denso (DIS)
Calcula el desplazamiento aparente píxel a píxel mediante algoritmos variacionales ultrarrápidos
(cv2.DISOpticalFlow) sobre imágenes escaladas.
Derotación Analítica
Proyecta los deltas de actitud (IMU: Δφ, Δθ, Δψ) sobre el plano focal y resta el flujo angular, aislando el componente traslacional puro.
Foco de Expansión (FOE)
Estima el punto de fuga del vector de avance mediante mínimos cuadrados ponderados con recorte recursivo de valores atípicos.
TTC Calibrado por ROC
Calcula TTC(p) = ||p - FOE|| · Δt / ||v_trans(p)|| en segundos reales, alcanzando un AUC de 0.96–0.97 contra profundidad de referencia.
| Horizonte Crítico (τ) | Umbral Óptimo de Youden (TTC) | AUC ROC | Acción Asociada en el Grafo |
|---|---|---|---|
| τ = 2.0 s | TTC ≤ 3.18 s (≈ 3.2 s) | 0.97 | Activación de maniobra de evasión reactiva o bypass determinista. |
| τ = 3.0 s | TTC ≤ 4.58 s (≈ 4.6 s) | 0.96 | Ventana de advertencia: evasión lateral preventiva. |
| Despejado / Seguro | TTC > 4.6 s o TTC = +∞ | — | Navegación en crucero nominal hacia el waypoint (keep_going). |
Taxonomía de Modos de Falla en Lazos Híbridos con LLM
Uno de los principales aportes metodológicos del trabajo es la documentación sistemática de los modos de falla propios de la integración de modelos de lenguaje en lazos robóticos de control en tiempo real:
1. Desincronización de Esquemas (Schema Drift)
Campos nulos por defecto (ej. listas vacías) interpretados como "espacio despejado" causan que el SLM razone coherentemente sobre premisas falsas y avance hacia colisiones sin generar excepciones.
2. Desalineación Temporal en Prompts
Etiquetar secuencias históricas sin un buffer sincrónico real inyecta fotogramas estáticos con etiquetas de avance temporal, distorsionando el razonamiento causal del modelo.
3. Descalibración de Escala en Operadores
Kernels de gradiente diferencial sin normalizar sobreestiman la divergencia, provocando que compuertas lógicas OR saturen y anulen la señal métrica del canal de TTC.
4. Descarte Silencioso en Grafos de Estado
Variables de control no tipadas en el esquema del orquestador son descartadas silenciosamente, originando ciclos límite y bucles absorbentes de ascenso indefinido.
5. Punto Ciego Estructural del Sensor Monocular (FOE)
El flujo óptico traslacional se anula exactamente en los obstáculos centrados en la trayectoria de avance (Foco de Expansión). En pasillos arbolados densos, ninguno de los tres brazos de control puede detectar el obstáculo frontal crítico. Mitigación parcial: señales de contacto (imu_contact, blind_wall) y detección de atasco. Solución estructural: cámara estéreo (Anexo 7).
6. Integración del VLM
Respuestas correctas ejecutadas al revés (error de marco de referencia), ignoradas por un valor por defecto silencioso o casi constantes respecto de la escena. Contención: el modelo identifica imágenes y columnas, el código asigna rumbos medidos; esquemas estrictos sin defaults; ninguna regla reescribe la decisión del modelo.
Progreso de la Tesis (2024-2026)
Cronología de hitos técnicos y avances documentados en la investigación:
Planificación y Revisión de Literatura
Definición del alcance, revisión de estado del arte en navegación autónoma, SLM y visión monocular. Establecimiento de requisitos y restricciones.
Implementación del Pipeline de Percepción
Desarrollo del estimador de flujo óptico denso, derotación por IMU, cálculo del Foco de Expansión (FOE) y estimación de TTC con validación contra datos de referencia.
Integración con LangGraph y Entorno de Simulación
Construcción del grafo de decisión táctica, integración con Cosys-AirSim, validación de cinemática contra datos reales de drones comerciales (DJI).
Calibración de Umbrales y Máquina de Escape
Calibración de TTC por curvas ROC, desarrollo de la máquina de estados para escape de deadlock, pruebas de estabilidad y repetibilidad.
Experimentación y Análisis Comparativo
Evaluación de tres brazos experimentales (SLM, FSM, Reactivo) bajo condiciones idénticas. Medición de métricas de rendimiento y robustez.
Documentación Final y Validación (Actual)
Redacción de informe, documentación técnica completa, publicación de resultados y preparación para defensa. Capa estratégica anclada a la pose, resolución de deadlocks en marco mundo, herramientas de auditoría post-vuelo, saneamiento de la estación de control en tierra, banco de prueba del VLM a bordo y profundidad monocular estimada en el lazo lento.
Estado actual (2026-10-14): Lote base completo (75 corridas: 5 escenarios × 3 brazos × 5 semillas). VLM local (LFM2.5-VL-1.6B Q4_K_M, tag lfm2.5-vl-1.6b:q4km-ctx8k en Ollama, misma GPU que Unreal) con banco de prueba a bordo: sin señal en primera persona (AUC 0.53), señal útil en el plan de ruta sobre el mapa (AUC 0.81). Capa estratégica y barrido con profundidad monocular estimada (STRATEGIC_SOURCE=depth, DEADLOCK_STRATEGY=depth); dos lotes de la capa estratégica (CitySim, 15 corridas; corredor arbolado de TownSim, 10 corridas, 10/10 misiones completas). 299 pruebas unitarias, incluido el grafo compilado de punta a punta y la guardia contra el uso del canal de profundidad del simulador. Pendiente: comparación entre brazos con el sistema final (lotes D, E y F).
Stack Tecnológico
El ecosistema tecnológico combina simulación gráfica fotorrealista con procesamiento óptico clásico e inferencia de modelos de lenguaje locales:
| Componente | Herramienta / Framework | Propósito / Rol en la Arquitectura |
|---|---|---|
| Entorno & Física | Unreal Engine 5.5 + Cosys-AirSim | Simulación física y visual del espacio aéreo urbano (escenarios CitySim /
CityParkSim). |
| Percepción Monocular | OpenCV (DISOpticalFlow) + Derotación IMU |
Cálculo de flujo óptico denso traslacional y Foco de Expansión (FOE) a 5 Hz. |
| Estimación de Riesgo | Tiempo-a-Colisión (TTC) + ObstacleField 3×3 |
Evaluación de colisión calibrada por curvas ROC y ordenamiento monótono de riesgo. |
| Capa Estratégica y Barrido | Depth Anything V2 Metric Outdoor Small (~25 M) | Profundidad monocular estimada desde el RGB, en su propio hilo (~110 ms con la GPU compartida); decide qué sectores y rumbos son volables y propone sub-metas en el mundo. |
| Plan de Ruta (VLM) | LFM2.5-VL-1.6B (GGUF Q4_K_M, contexto 8k) | Modelo de visión-lenguaje local en Ollama, en la misma GPU que Unreal, con salida restringida
json_schema; clasifica parches del mapa cenital antes del vuelo. |
| Ground Control Station | FastAPI + WebDCS (HTML5 / Canvas 2D / JS) | Planificación manual de waypoints y auditoría post-vuelo con video sincronizado a la traza de decisiones. |
| Orquestación Táctica | LangGraph (StateGraph), Pydantic & Subproceso OS |
Grafo de decisión por tick ejecutado en subproceso no buferizado para eliminar deadlocks RPC. |
| Infraestructura de Validación | GPU NVIDIA RTX 5060 + AMD Ryzen 7 5700 | Ejecución concurrente de simulación fotorrealista e inferencia del modelo de lenguaje local. |
Evaluación y Calibración Experimental
Un pilar central del trabajo es garantizar la fidelidad de la simulación frente a dinámicas físicas reales y calibrar cuantitativamente los estimadores de riesgo:
1. Calibración del Simulador vs. Telemetría Real (Zenodo / DJI)
Se contrastó la cinemática del simulador frente a trayectorias de drones comerciales reales (DJI) mediante pruebas estadísticas de Levene:
- Varianza de Actitud en Giros: En simulación, el dron ejecuta inclinaciones instantáneas de pitch/roll para seguir la ruta (p ≪ 0.05), mientras que el dron físico está acotado electrónicamente a ±30° por su controlador PID.
- Comportamiento en Crucero Recto: La simulación exhibe varianza nula en tramos rectos sin viento, mientras que el dron real mantiene una oscilación permanente de ±2° a ±3° por turbulencia atmosférica y estabilización.
2. Benchmark de Rendimiento de SLMs Locales
Métricas de generación (Tokens por Segundo) y tiempos de carga medidos en local para modelos candidatos:
| Modelo | Parámetros | Prompt Eval (T/s) | Generation Rate (T/s) | Tiempo de Carga (s) |
|---|---|---|---|---|
| LiquidAI/lfm2.5-1.2b-instruct | 1.2B | 1245.20 | 120.67 | 0.11 |
| llama3.2:3b | 3.0B | 1133.67 | 44.79 | 0.32 |
| phi4-mini:latest | 3.8B | 238.22 | 37.19 | 0.34 |
| qwen3.5:4b | 4.0B | 153.76 | 28.82 | 0.51 |
Instalación y Uso
Instrucciones para configurar el entorno de ejecución, simulador y estación terrena:
1. Clonar el repositorio y configurar el entorno Conda
# Clonar repositorio
git clone https://github.com/georgsmeinung/dronelm.git
cd dronelm
# Crear y activar entorno
conda env create -f environment.yml
conda activate airsimenv
2. Descargar e Iniciar el Entorno de Simulación (CitySim)
Descargue el binario empaquetado del entorno CitySim desde el repositorio
compartido de Google Drive:
Descargar Entornos UE5 (Google Drive)
Asegúrese de configurar su archivo Settings.json de AirSim:
{
"SettingsVersion": 2.0,
"SimMode": "Multirotor",
"LocalHostIp": "0.0.0.0",
"ApiServerPort": 41451,
"CameraDefaults": {
"CaptureSettings": [
{
"ImageType": 0,
"Width": 1080,
"Height": 720
}
]
}
}
3. Iniciar la Estación de Control en Tierra (WebDCS)
Inicie el servidor web FastAPI de WebDCS para planificar misiones y supervisar el vuelo:
cd airsim-plan
python -m uvicorn webdcs.main:app --reload
Acceda a http://localhost:8000 en su navegador para planificar misiones manualmente; la
auditoría de las decisiones del SLM se hace post-vuelo con el visor HTML generado en cada corrida.
Informe de Tesis
El informe completo está disponible como sitio HTML navegable (generado con MkDocs Material) y como PDF de impresión. Ambos se generan desde los fuentes en informe/ ejecutando el script informe/build.ps1.
Informe HTML
Navegación lateral completa, búsqueda integrada y modo oscuro/claro. Incluye todos los capítulos (00–13) y nueve anexos (A1–A9).
Abrir Informe (HTML)Informe PDF
Versión de impresión generada por Chrome headless a partir de la página de impresión unificada de MkDocs.
Descargar PDFPara regenerar: .\informe\build.ps1 desde la raíz del repositorio.