Roadmap — Research Track: Autonomía bajo incertidumbre (U1–U6)¶
- Objetivo del track: desarrollar, validar y endurecer la maquinaria de incertidumbre del sistema, en paralelo a las fases de implementación.
- Cobertura ADRs: ADR-0008 (mecanismo), ADR-0009 (política).
- Specs vinculantes:
docs/specs/uncertainty.md,docs/specs/perception.md,docs/specs/mission.md. - Carácter: investigación + ingeniería. Cada U produce código en
src/, datasets reproducibles, pruebas adversariales y un informe corto.
Relación con las fases del producto¶
El track de incertidumbre no sustituye las fases del producto (Fase 0–9). Corre en paralelo: cada Ux se acopla con una fase del producto que ya provee la base perceptual o de control necesaria.
Fases producto: 0 ── 1 ── 2 ── 3 ── 4 ── 5 ── 6 ── 7 ── 8 ── 9
Track U: U1 ── U2 ── U3 ── U4 ── U5 ── U6
│ │ │ │ │ │
│ │ │ │ │ └─ Hardware uncertainty
│ │ │ │ └─────── Adversarial + benchmarks
│ │ │ └───────────── Active perception loop
│ │ └─────────────────── Uncertainty-aware planning
│ └───────────────────────── Filter-level inflation
└─────────────────────────────── Mechanism in code
Convenciones de cada U¶
Cada U declara: Objetivo, Dependencias, Entregables, Criterios cuantitativos de aceptación, Definición de terminado, Riesgos abiertos.
U1 — Mechanism in code¶
Objetivo. Llevar a código el mecanismo de ADR-0008: tipos Estimate[T], Validity, EstimateSource, PerceptionMode, helpers de core.uncertainty y telemetría de modo. Sin productores reales todavía; solo el esqueleto + tests de propiedad.
Dependencias. Fase 1 cerrada (HAL, clock, telemetry, events operativos). T1, T2, T3 del roadmap de producto.
Entregables.
- Módulo
core.uncertaintycon todos los tipos y helpers dedocs/specs/uncertainty.md§2 y §8. - Canal
/perception/modedeclarado en telemetry yPerceptionModeDetectorcon FSM (sin productores reales conectados, alimentado por mocks). - Suite de tests de propiedad (
hypothesis) sobre simetría, PSD, sealing, downgrade por edad, composición de validity. - Notebook reproducible
notebooks/u1_uncertainty_envelope.ipynbque ilustra el envelope con datos sintéticos.
Criterios cuantitativos.
- Cobertura de
core.uncertainty> 90 %. - 100 % de los tests obligatorios listados en
uncertainty.md§11 pasan en CI Linux y Windows. - Throughput de
make_estimate≥ 100 k/s en máquina dev (medido y reportado enruns/u1/metrics.json). - FSM del detector no oscila bajo entrada sintética alternante con cadencia <
nominal_hold_ms / 2(verificado en test).
Definición de terminado. PR merged a main; tag u1; informe corto docs/research/u1_report.md con resultados de los benchmarks.
Riesgos abiertos.
- Costo de simetrización y verificación PSD en hot path. Mitigación: helper con flag
skip_psd_checkpara uso interno controlado. - Telemetría de modo demasiado verbosa. Mitigación: histeresis ya impuesta por FSM + submuestreo.
U2 — Filter-level inflation¶
Objetivo. Implementar los modelos de inflación de covarianza de uncertainty.md §5 dentro del primer estimador real (EKF de Fase 3). Demostrar que la covarianza inflada es calibrada: la sigma reportada no es ni optimista ni pesimista por más de un factor 2 sobre verdad de campo en PyBullet.
Dependencias. U1; Fase 3 producto (EKF + IMU preintegrado, primer VO). T6–T9 del roadmap.
Entregables.
core.uncertainty.inflate_*integrado en EKF y en productores perceptuales.- Dataset reproducible
datasets/u2_calibration/: 30 trayectorias PyBullet con perturbaciones controladas (ruido IMU, drop frames, low texture sintético). - Métrica de calibración: NEES (Normalized Estimation Error Squared) sobre las trayectorias.
- Informe
docs/research/u2_report.mdcon curvas de calibración por modo.
Criterios cuantitativos.
- NEES medio dentro de
[0.5, 2.0]sobre el dataset completo en modoNOMINAL. - NEES medio dentro de
[0.3, 3.0]en modosLOW_TEXTUREyLOW_LIGHT(más permisivo, refleja que la inflación debe ser conservadora). - Tail coverage: fracción de muestras donde
|err_verdadero|está dentro de3σreportado ≥ 99 % enNOMINAL; ≥ 97 % en modos degradados. NEES por sí solo es una métrica de calibración estadística, no de seguridad; tail coverage captura específicamente la cola del error, que es la que en hardware termina causando incidentes (veruncertainty_red_team_review.md§2.5). - Worst-case ratio: máximo de
|err_verdadero| / σ_reportadosobre todo el dataset ≤ 5.0. El umbral no es 3.0 porque queremos margen contra escenarios no observados durante U2. - En modo
STALE, la sigma reportada crece monotónicamente con la edad en al menos el 99 % de las muestras. - No regresión: tests de Fase 1 siguen pasando.
Definición de terminado. PR merged; tag u2; dataset publicado dentro del repo o, si supera 100 MB, en release de GitHub.
Riesgos abiertos.
- Inflación calibrada en PyBullet puede ser miscalibrada en Gazebo o hardware. Mitigación documentada: revisitar
Q_dryαen U6. - Modelo direccional (§5.2) asume rotación cámara-mundo precisa; con sigma alta de actitud puede ser inestable. Test específico.
U3 — Uncertainty-aware planning¶
Objetivo. Implementar el planner descrito en mission.md §3–§5: presupuestos por goal, modelo forward, rechazo de planes que excedan presupuesto, inserción de sub-goals ACTIVE_PERCEPTION. Demostrar que el planner prefiere caminos menos inciertos cuando hay alternativas equivalentes en distancia.
Dependencias. U1, U2; Fase 5 producto (primer planner real, A o RRT). Spec mission.md congelado.
Entregables.
- Módulo
mission.plannercon scorer que combina costo de distancia y costo de incertidumbre forward. - Suite de escenarios
tests/scenarios/u3/: ambientes con áreas texturadas y áreas pobres; el planner debe elegir el camino texturado cuando la diferencia de longitud es ≤ 20 %. - Registro de perfiles de escena (
registries/scene_profiles.yaml): primera versión poblada con perfiles texturados y pobres usados en las escenas U3. Sin este registro,mission.md §4.5deja elpessimism_factorpor default en 2.0 (escena no caracterizada). U3 baja explícitamente perfiles a 1.0 donde corresponda. - Métricas: tasa de planes que cumplen el presupuesto declarado en ≥ 100 ejecuciones por escenario.
- Informe
docs/research/u3_report.md.
Criterios cuantitativos.
- En escenarios con alternativa texturada disponible, el planner elige texturada en > 95 % de las corridas.
- 0 violaciones silenciosas de presupuesto (toda violación genera
MISSION_REPLANconreason="budget_exceeded"). - Tiempo de planning p99 < 200 ms para escenarios de 50 m × 50 m.
- Replay determinista: misma seed + misma escena = mismo plan, hash idéntico de
MissionPlan.sequence.
Definición de terminado. PR merged; tag u3; nuevas escenas añadidas al conformance.
Riesgos abiertos.
- Modelo forward de §4 puede subestimar crecimiento real bajo perturbación adversarial. Mitigación: U5 cubre adversarial.
- Sub-goals
ACTIVE_PERCEPTIONmal diseñados pueden generar bucles. Test específico de no-loop.
U4 — Active perception loop¶
Objetivo. Convertir ACTIVE_PERCEPTION en una primitiva ejecutable: yaw scan, ascenso lento, revisita de landmark. Cada primitiva tiene política de éxito/fallo cuantitativa y debe reducir la sigma observada de manera medible en el dataset.
Dependencias. U3; Fase 5–6 producto (planner + behaviors); SLAM básico de Fase 4 (para revisita de landmark).
Entregables.
- Módulo
mission.behaviors.active_perceptioncon primitivasYawScan,SlowAscend,RevisitLandmark. - Criterio de éxito por primitiva (reducción de sigma de posición ≥ X %).
- Dataset
datasets/u4_active/: 50 ejecuciones por primitiva en escenarios pobres en features. - Informe
docs/research/u4_report.mdcon histogramas de reducción de sigma pre/post primitiva.
Criterios cuantitativos.
YawScanreduce sigma horizontal en mediana ≥ 30 % cuando se ejecuta tras entrar aLOW_TEXTURE.SlowAscendreduce sigma vertical en mediana ≥ 40 % cuando se ejecuta trasLOW_LIGHT.RevisitLandmarkreduce sigma horizontal en mediana ≥ 60 % cuando se ejecuta con landmark a ≤ 5 m.- Tasa de éxito agregada de primitivas > 70 %; fallos producen evento
ACTIVE_PERCEPTION_FAILEDcon causa.
Definición de terminado. PR merged; tag u4; primitivas integradas en planner via U3.
Riesgos abiertos.
- Las primitivas pueden interferir con safety invariants (
max_altitude_m). Test obligatorio: T0 las recorta correctamente. - Revisita de landmark exige memoria persistente entre runs si la sesión es larga; fuera de scope para U4 (sesión única).
U5 — Adversarial campaign + benchmarks¶
Objetivo. Construir una campaña adversarial sistemática contra el sistema completo (perception + estimación + planning + behaviors): condiciones de luz extremas, pérdida temporal de cámara, drift inducido en IMU, ambientes repetitivos visuales. Establecer benchmarks comparables con literatura (EuRoC, TUM-VI) en lo aplicable.
Dependencias. U1–U4; Fase 6 producto (navegación autónoma). Disponibilidad de Gazebo+PX4 SITL si avanzó por ahí.
Entregables.
- Suite
tests/adversarial/u5/con escenarios paramétricos: luz, ruido, oclusión, textura. - Benchmark report contra mínimo dos secuencias de EuRoC adaptadas al pipeline (con adaptador de frames si se mantiene ENU/FLU).
- Métricas de degradación: tasa de
PERCEPTION_DEAD, tiempo medio enDEGRADED, ATE (Absolute Trajectory Error) por escenario. - Informe
docs/research/u5_report.mdcon comparación contra al menos un baseline publicado.
Criterios cuantitativos.
- ATE p50 ≤ 0.15 m sobre 60 s de vuelo en escenarios
NOMINAL. - ATE p50 ≤ 0.5 m sobre 60 s en escenarios
LOW_TEXTURE(con reducción de velocidad esperada). - Tasa de
PERCEPTION_DEAD< 1 % del tiempo de vuelo en escenarios adversariales no-extremos. - Cero violaciones de safety invariants (T0) durante toda la campaña.
Definición de terminado. PR merged; tag u5; informe linkable desde README. Datasets publicados.
Riesgos abiertos.
- Adaptación de EuRoC a ENU/FLU puede ser costosa. Si no se completa, documentar como deuda técnica y diferir a U6.
- Benchmarks de literatura usan métricas ligeramente distintas; documentar las diferencias.
U6 — Hardware uncertainty¶
Objetivo. Transferir los modelos de incertidumbre validados en simulación a hardware real (Fase 9). Recalibrar Q_dr, α, factores direccionales y thresholds del catálogo de modos sobre dataset capturado por la plataforma real. Demostrar que el sistema mantiene las garantías de honestidad sobre la incertidumbre fuera del simulador.
Duración estimada. 3–4 meses de trabajo dedicado, asumiendo hardware disponible al inicio. Desglose realista:
- 1 semana de calibración cámara–IMU (rehacerse cada vez que cambie el rig o entre sesiones largas).
- 1–2 semanas de bring-up de MoCap o RTK como groundtruth externo.
- 2–3 semanas de captura de dataset, incluyendo crashes, debug de ESCs, baterías muertas, GPS denegado en interior, fallos transitorios.
- 2 semanas de análisis y recalibración de parámetros.
- 1 semana de redacción del informe comparativo.
- Total mínimo absoluto: 7 semanas. Realista con contratiempos hardware: 12–16 semanas. Si los recursos no alcanzan, degradar U6 a "esquema parcial" con scope reducido documentado en
docs/research/u6_partial.md, y abrir U7 para completar la recalibración faltante.
Esta calibración temporal cierra el riesgo identificado en uncertainty_red_team_review.md §2.8.
Dependencias. U1–U5; Fase 9 producto (hardware operativo); calibración cámara-IMU completa.
Entregables.
- Dataset
datasets/u6_hardware/: ≥ 20 vuelos reales con groundtruth externo (MoCap o RTK, si disponible). - Recalibración de todos los parámetros numéricos de
uncertainty.mdpara hardware; publicada enconfigs/hardware/uncertainty.yaml. - Informe comparativo
docs/research/u6_report.md: sim vs hardware, qué se mantiene, qué cambia, qué no extrapola. - Lista de bugs descubiertos contra ADR-0008 y ADR-0009; cada uno cerrado o documentado como deuda con ADR de seguimiento.
Criterios cuantitativos.
- NEES medio (sigma reportada vs verdad MoCap) dentro de [0.5, 3.0] sobre el dataset hardware completo.
- Misión autónoma "despegar → cruzar room → aterrizar" exitosa con métrica de éxito ≥ 90 % de los intentos.
- 0 incidentes de seguridad (definido como cualquier evento
SAFETY_VIOLATIONno anticipado). - Tasa de
PERCEPTION_DEADpor escenario hardware documentada y razonable (< 5 % esperado en interior bien iluminado).
Definición de terminado. PR merged; tag u6; documento docs/research/u6_report.md linkado en README como "estado de la maquinaria de incertidumbre en hardware". Cierre formal del track de investigación; cualquier extensión posterior abre un nuevo track.
Riesgos abiertos.
- Acceso a MoCap o RTK es caro/restringido; alternativa documentada (ArUco grid + cámara externa) tiene precisión limitada.
- Drift de calibración cámara-IMU entre sesiones puede confundir métricas; protocolo de re-calibración por sesión obligatorio.
Plan de ejecución global del track¶
Camino crítico: U1 → U2 → U3 → U4 → U5 → U6. Cada U debe terminar (tag + informe) antes de iniciar la siguiente, con una excepción declarada: U5 puede arrancar en paralelo con la fase final de U4 si los recursos lo permiten.
Riesgos transversales del track¶
| Riesgo | Mitigación |
|---|---|
| Parámetros calibrados en sim no transfieren a hardware | U6 explícitamente recalibra; sin asumir transferencia |
| Catálogo de modos resulta incompleto en hardware | ADR de superseder ADR-0008 con extensión; sin parches silenciosos |
| Inflación calibrada bloquea misiones que sí son seguras (over-conservative) | U2 establece banda calibrada [0.5, 2.0] NEES; rechazo de hyper-inflación |
| Active perception entra en bucles | Test de no-loop en U4; timeout duro por sub-goal |
| Benchmarks contra literatura no son comparables | Documentar adaptación; reportar métrica nativa además de la adaptada |
Métricas de salida del track¶
Reportadas globalmente al cerrar U6 en docs/research/uncertainty_track_summary.md:
- NEES sim, NEES hardware.
- Tasa de éxito de active perception por primitiva.
- ATE en escenarios baseline (NOMINAL + LOW_TEXTURE + LOW_LIGHT).
- Tasa de violaciones de safety durante toda la campaña adversarial.
- Diferencial sim↔hardware de cada parámetro recalibrado (qué se desvía y cuánto).
Lo que no está en el track¶
- Aprendizaje profundo como mecanismo primario de detección de fallo. Permitido como opt-in en U5/U6 dentro del envelope
Estimate[T], nunca reemplazando el catálogo. - Multi-vehículo o coordinación.
- Misiones de exterior con perturbaciones meteorológicas extremas (rayos, lluvia fuerte). Fuera de scope.
- Sustitución del catálogo discreto por un controlador continuo. Si en U6 emerge evidencia clara de que el discreto es insuficiente, abrir ADR; no actuar dentro de este track.