Files
gps-denied-onboard/.gitignore
T
Oleksandr Bezdieniezhnykh 94d2358c8b [AZ-918] [AZ-919] [AZ-920] [AZ-921] [AZ-922] VIO/ESKF baseline fixes
Derkachi e2e Tier-2 divergence had three stacked root causes; this
commit ships fixes for all three plus the IMU prerequisite they
depend on, plus a baseline cheirality gate for cv2.recoverPose.

AZ-918  MAVLink IMU adapters now convert raw mG/mrad-s + FRD body to
        SI m/s^2 + rad/s + FLU body via helpers.imu_units. Without
        this the ESKF receives values ~1000x too small with wrong-
        sign Y/Z and cannot function at all.

AZ-919  Composition root wires EskfNominalAltitudeProvider into the
        KLT/RANSAC strategy via the AZ-331 factory introspect path;
        OKVIS2 and VINS-Mono are unaffected.

AZ-920  KLT/RANSAC recovers metric translation via Ground Sampling
        Distance when AGL is available; otherwise falls through with
        scale_quality=direction_only/unknown (no fake scale invented).

AZ-921  VioOutput.scale_quality signal; ESKF add_vio adapts R_meas
        position block based on the flag (1e6 inflation when scale is
        direction_only/unknown to keep the filter consistent).

AZ-922  KLT/RANSAC cheirality gate rejects single-frame rotations
        beyond a config threshold (default 30 deg), catching
        cv2.recoverPose twisted-pair flips that cause immediate ESKF
        divergence on low-parallax aerial scenes.

Verification:
- Tier-1 (macOS) unit suite: 2346 passed, 0 failed.
- Tier-2 (Jetson) Derkachi e2e: divergence moves from frame 5
  (mahalanobis^2 3757) to frame 233 (mahalanobis^2 212). Remaining
  drift is open-loop attitude accumulation, not cheirality.

Follow-up tickets filed:
- AZ-923 closed as misdiagnosed: EskfNominalAltitudeProvider was
  already correct (nominal_pos.z IS the AGL when takeoff origin sits
  at ground level); the early-frame AGL near zero reflects the drone
  being stationary on the ground, not a provider bug.
- AZ-942 filed: cross-check VIO rotation against IMU preintegrator
  (consistency gate) - more physically grounded than the coarse
  AZ-922 threshold and likely required to absorb the frame-233 drift.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-27 22:28:40 +03:00

80 lines
1.2 KiB
Plaintext

# Python
__pycache__/
*.py[cod]
*$py.class
*.so
*.egg
*.egg-info/
.eggs/
.pytest_cache/
.coverage
.coverage.*
coverage.xml
htmlcov/
.mypy_cache/
.ruff_cache/
.tox/
.venv/
venv/
env/
# Build artifacts
build/
dist/
_skbuild/
CMakeFiles/
CMakeCache.txt
cmake_install.cmake
Makefile
compile_commands.json
# Native engines and caches
*.engine
*.calib
*.index
*.faiss
*.onnx
*.trt
# Test fixtures — large blobs are out-of-band
tests/fixtures/large_replays/
tests/fixtures/flight_derkachi/*.mp4
tests/fixtures/flight_derkachi/*.h264
tests/fixtures/flight_derkachi/*.tlog
tests/fixtures/tiles_corpus/*.jpg
tests/fixtures/tiles_corpus/*.png
e2e/fixtures/sitl_replay/
# Problem-folder flight-log inputs (binary, out-of-band)
_docs/00_problem/input_data/**/*.tlog
_docs/00_problem/input_data/**/*.mp4
_docs/00_problem/input_data/**/*.h264
# Editor / OS noise
.idea/
.vscode/
.DS_Store
Thumbs.db
*.swp
*~
# Logs and runtime data
*.log
/var/lib/gps-denied/
fdr_output/
tile_cache/
e2e-results/
# Local scratch / one-off diagnostics
_scratch/
# Secrets
.env
.env.local
.env.test
*.key
!tests/fixtures/mavlink_signing/dev_key
# Deploy rollback bookmark (written by scripts/stop-services.sh)
.previous-tags.env