diff --git a/next_steps.md b/next_steps.md index 6e5fb53..b13d651 100644 --- a/next_steps.md +++ b/next_steps.md @@ -101,3 +101,5 @@ - **PR #6** `feat/e2e-harness-orb-vo` — замінили VO-бекенд у `_build_processor` з `SequentialVisualOdometry(ModelManager())` на `ORBVisualOdometry()`. Новий результат: `vo_success=99/100`. Залишилась проблема: `eskf_initialized=0/100` — ESKF потребує `init_flight()` зі start_gps, харнес цього не робить. - [decision 2026-04-18: VO-бекенд у харнесі має бути `ORBVisualOdometry` (реальні OpenCV фічі), а не Mock SP+LG (random keypoints). Для Jetson-production cuVSLAM залишається метою — але харнес валідує pipeline логіку незалежно від бекенду.] - **Наступний крок**: ініціалізувати ESKF у харнесі з синтетичним GPS-origin (середня координата GT або перша GT-поза). Це увімкне ESKF-шлях і дасть змогу виміряти реальний VO+ESKF дрейф без satellite fallback. +- **PR #8** `feat/e2e-eskf-init` — ESKF ініціалізується з першої GT-пози адаптера. Результат: `eskf_initialized: 0→100/100`, `eskf_has_position: 100/100`. ATE RMSE ~10.7 км. Satellite measurements відхиляються Mahalanobis gate (Δ²~10⁶ >> 16.3). Root cause: ORB `scale_ambiguous=True` → unit-scale VO translations → ESKF position diverges → satellite outlier gate срацює коректно. + - **Наступний крок**: VO metric scale. ORB переводить `(R, t̂)` де `t̂` — одиничний вектор, реальна відстань невідома. Варіанти: (а) передавати IMU timestamps у ESKF щоб він сам рахував scale через velocity; (б) перейти на cuVSLAM (metric backend); (в) хак — фіксований scale для EuRoC indoor (~0.3 м між кадрами). Правильний шлях — (б) cuVSLAM, але для CI-діагностики можна (в).