chore: pin numpy<2.0 and align plan with tech-audit research

Research doc (2026-04-18 OSS stack audit) flagged NumPy 2.0 as silently
breaking GTSAM Python bindings (issue #2264). Pin numpy>=1.26,<2.0 and
constrain opencv-python-headless<4.11 (knock-on: 4.11+ requires numpy≥2).

Verified after downgrade:
  - 196 passed / 8 skipped unit/component
  - EuRoC MH_01 e2e PASS (no regression on 0.205m ESKF ATE baseline)

Plan updates in next_steps.md §5:
  - cuVSLAM strategy clarified: Mono-Depth (barometer as synthetic depth),
    not Mono-Inertial (needs stereo hardware we don't have)
  - DINOv2-VLAD (AnyLoc) for GPR + FP16 TRT (INT8 broken for ViT on Jetson)
  - GTSAM: documented that 4.2 stable is not on PyPI (only 4.3a0), so
    deferred to post-sprint-1 ESKF-only path stays the right call
  - VPAIR xfail root cause: no raw IMU + mock satellite index (verified
    with scale=1.0 and scale=45.0 runs — ATE stays at ~1236m ESKF /
    ~1770km GPS regardless of scale)
  - Flight controller H743 vs F405 check flagged as critical blocker

README "next steps" section rewritten to match the research-aligned plan.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Yuzviak
2026-04-18 15:50:12 +03:00
parent 4a3ac086cb
commit dfd41f27d4
3 changed files with 79 additions and 6 deletions
+9 -4
View File
@@ -292,10 +292,15 @@ gps-denied-onboard/
## Що залишилось (наступні кроки)
### Dev pipeline (захищений e2e-харнесом)
1. **cuVSLAM як VO backend** — замінити `ORBVisualOdometry` на `CuVSLAMVisualOdometry` (metric scale, IMU fusion). Поточний `vo_scale_m=0.005` — CI-хак, cuVSLAM вирішить це коректно.
2. **VPAIR outdoor** — перевірити satellite matching на fixed-wing outdoor сцені (VPAIR має `reference_views/`). Якщо GPS ATE покращиться — xfail → strict-assert.
3. **Аудит solution.md** — звірити імплементацію з `_docs/01_solution/solution.md`.
4. **Реструктуризація**`src/gps_denied/*``src/*` (зайвий неймспейс).
1. **cuVSLAM Mono-Depth** — замінити `ORBVisualOdometry` на cuVSLAM Mono + барометричний depth (`scale = altitude / focal_length`). Mono-Inertial потребує stereo hardware (нема). Mono-Depth — правильний шлях для одиничної nadir-камери. Research: `docs/superpowers/specs/2026-04-18-oss-stack-tech-audit-design.md`.
2. **DINOv2-VLAD (AnyLoc) для GPR** — замінити numpy L2 fallback. Satellite tiles через MapTiler MBTiles (offline). Fixed FP16, без INT8 (broken для ViT на Jetson).
3. **VPAIR unblock** — xfail (1770 км ATE) блокований відсутністю raw IMU + mock satellite index. Реальні MapTiler tiles **АБО** cuVSLAM Mono-Depth з GT-altitude розблокують.
4. **Аудит solution.md** — звірити імплементацію з `_docs/01_solution/solution.md`.
5. **Реструктуризація**`src/gps_denied/*``src/*` (зайвий неймспейс).
### Критичні блокери (перевірити до наступного коду)
- **Flight Controller processor**: H743 ✅ / F405 ❌ (silently ignores GPS_INPUT). Запитати постачальника.
- **IMU rate через MAVLink**: за замовчуванням ArduPilot 50 Hz, для Mono-Inertial потрібно ≥100 Hz (`SR2_RAW_SENS`). Для Mono-Depth не критично.
### On-device (Jetson Orin Nano Super)
1. Офлайн завантаження тайлів для зони місії → `{tile_dir}/z/x/y.png`