mirror of
https://github.com/azaion/gps-denied-onboard.git
synced 2026-06-21 10:31:13 +00:00
94d2358c8b
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>
80 lines
1.2 KiB
Plaintext
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
|