Files
gps-denied-onboard/_docs/01_solution/solution_draft01.md
T

12 KiB
Raw Blame History

Solution Draft

Product Solution Description

Build an onboard GPS-denied localization service that runs on the companion Jetson, consumes the fixed nadir navigation camera plus flight-controller IMU/attitude/altitude, and emits ArduPilot-compatible GPS_INPUT estimates with honest covariance.

The solution is a hybrid estimator:

Nav camera + FC telemetry
        |
        v
Image quality + calibration + orthorectification
        |
        +--> Steady state: VO/IMU propagation --> ESKF --> GPS_INPUT + QGC + FDR
        |
        +--> Re-anchor triggers: VPR top-K --> local match/RANSAC --> ESKF anchor update
        |
        +--> Tile generation: ortho tile + quality sidecar --> local cache --> post-flight Satellite Service upload

The steady-state path is intentionally lightweight. Heavy global retrieval and cross-domain local matching run only on cold start, VO failure, sharp turns, disconnected segments, covariance growth, or stale-anchor age.

Existing / Competitor Solutions Analysis

Recent fixed-wing GPS-denied research supports the same high-level mechanism: monocular visual odometry alone accumulates scale/drift error, while satellite-image comparison can periodically correct it. Aerial VPR surveys also show why the implementation cannot be naive: weather, season, scale mismatch, repetitive fields, tile overlap, and re-ranking runtime all matter.

The selected design borrows the proven structure but rejects an all-in-one SLAM dependency as the product core. OpenVINS and ORB-SLAM3 are useful benchmark/reference implementations, but their GPL-family licensing and broader SLAM lifecycle do not fit a default production dependency for this project.

Architecture

Component: Camera Ingest, Calibration, And Geometry

Solution Tools Pinned Mode/Config Advantages Limitations Requirements Security Cost API Capability Evidence Fit
OpenCV geometry utility layer OpenCV 4.x Camera calibration, undistortion, RANSAC homography, reprojection-error measurement Mature, local, fast, exact API fit Not a full estimator Calibration target, fixed intrinsics/extrinsics, lens/FOV selection Local-only, no network Low MVE: _docs/00_research/02_fact_cards.md; Source #5 Selected

Exact-fit evidence:

  • Project constraints checked: fixed nadir camera, calibration, homography, MRE gates.
  • Disqualifiers: none.
  • Restrictions × AC matrix: _docs/00_research/06_component_fit_matrix.md.

Component: VO / IMU Propagation And Estimator

Solution Tools Pinned Mode/Config Advantages Limitations Requirements Security Cost API Capability Evidence Fit
Custom VO/IMU ESKF OpenCV + custom estimator Frame-to-frame homography/features + FC IMU/attitude/altitude fused in a custom ESKF with source modes Owns covariance, source labels, degraded modes, ArduPilot output semantics More implementation work than adopting VIO library Synchronized frames/IMU, calibration, replay tests No third-party cloud; deterministic local logs Medium Facts #1, #4, #5, #16 Selected
OpenVINS reference OpenVINS Monocular camera + IMU EKF/MSCKF reference runs Strong VIO reference and evaluation tools GPL-3 production dependency risk Dataset/replay adapter Local only Low for benchmark Source #3 Reference only
ORB-SLAM3 alternative ORB-SLAM3 Monocular-inertial SLAM Mature SLAM benchmark GPLv3, heavier map lifecycle, initialization complexity Calibration, vocabulary, runtime tuning Local only Medium Source #4 Rejected for production

Exact-fit evidence:

  • Project constraints checked: one camera + IMU, frame-by-frame output, covariance labels, blackout/spoofing modes.
  • Runtime quality gate: validate drift and covariance on EuRoC-style and representative fixed-wing replay.

Component: Satellite Retrieval And Local Anchor

Solution Tools Pinned Mode/Config Advantages Limitations Requirements Security Cost API Capability Evidence Fit
DINOv2-VLAD + FAISS + LightGlue DINOv2/AnyLoc-style descriptors, FAISS, DISK/ALIKED+LightGlue, OpenCV RANSAC Offline precomputed VPR chunk descriptors; conditional query descriptor; top-K FAISS; local matching on candidates Matches AC-8.6; scalable top-K; local geometry verifies anchors Needs Jetson profiling and model-size pruning Fresh satellite cache, descriptors, dynamic K, RANSAC gates Cache is local; no in-flight provider calls Medium-high MVE blocks in 02_fact_cards.md; Sources #6-#9 Selected with runtime gate
SuperPoint + LightGlue SuperPoint, LightGlue Same local matching with SuperPoint features Strong technical baseline SuperPoint license is restrictive Legal review Local only Medium Source #6 Needs user decision
Classical SIFT/ORB-only OpenCV Handcrafted features and homography Simple fallback, low compute Poor cross-domain robustness Feature-rich scenes Local only Low Source #5 Fallback / regression baseline

Exact-fit evidence:

  • Project constraints checked: offline cache, top-K dynamic retrieval, cross-domain local match, <400 ms hot-path constraint.
  • Runtime gate: heavy VPR/re-ranking is trigger-based, not per-frame.

Component: Satellite Cache And Tile Write-Back

Solution Tools Pinned Mode/Config Advantages Limitations Requirements Security Cost API Capability Evidence Fit
COG + PostgreSQL/PostGIS manifest + descriptor sidecars GDAL COG, PostgreSQL/PostGIS manifest, FAISS sidecars Service tiles and generated candidate tiles stored as tiled compressed GeoTIFFs with CRS/date/source/meter-per-pixel metadata Geospatial standard, supports write-new-tile workflow, descriptor accounting Needs careful 10 GB budget STAC-like manifest, freshness gates, descriptor pruning Local signed manifests recommended Medium Source #18 Selected
PMTiles archive PMTiles Single-file read archive Efficient map reads Read-only; cannot update in place Archive rebuild for updates Local file integrity Low Source #17 Rejected for live mutable cache

Exact-fit evidence:

  • Project constraints checked: offline-only, no raw photo storage, mid-flight generated tiles, Satellite Service ingest metadata.
  • External dependency: Satellite Service owns the promotion/voting layer for trusted basemap updates.
Solution Tools Pinned Mode/Config Advantages Limitations Requirements Security Cost API Capability Evidence Fit
MAVSDK telemetry + pymavlink output MAVSDK, pymavlink MAVSDK subscribes to telemetry; pymavlink emits GPS_INPUT to ArduPilot with GPS1_TYPE=14 Exact GPS_INPUT field control while keeping high-level telemetry APIs Plane-specific failsafe/spoof triggers need SITL proof ArduPilot Plane params, QGC status, FDR tlog Validate MAVLink source and message rate Medium Sources #10-#12 Selected

Exact-fit evidence:

  • Project constraints checked: ArduPilot only, v1 GPS_INPUT only, WGS84 output, covariance to horiz_accuracy.
  • Validation gate: Plane SITL with production parameters.

Component: Flight Data Recorder

Solution Tools Pinned Mode/Config Advantages Limitations Requirements Security Cost API Capability Evidence Fit
Segmented FDR PostgreSQL event index + binary/CBOR payloads with Parquet export post-flight Fixed-size segment files for per-frame estimates, IMU, MAVLink, health, emitted GPS_INPUT, generated-tile metadata Replayable, bounded, no raw frame retention Exact format selected during implementation Rollover policy, monotonic timestamps Integrity hash per segment recommended Medium AC-NEW-3 Selected pattern

Runtime Modes

Mode Trigger Behavior Output Label
Satellite anchored VPR + local match passes freshness, RANSAC, covariance, and Mahalanobis gates ESKF absolute update, low covariance, tile generation eligible if sigma gate passes satellite_anchored
VO extrapolated Last anchor fresh enough, VO healthy, normal overlap VO/IMU propagation, covariance grows with anchor age vo_extrapolated
Dead reckoned Visual blackout, VO failure without anchor, spoofing while no visual signal IMU-only propagation, monotonic covariance growth, degraded fix type thresholds dead_reckoned
Failsafe / no fix Blackout >30 s or covariance >500 m GPS_INPUT.fix_type=0, horiz_accuracy=999.0, QGC status dead_reckoned with failsafe status

Testing Strategy

Integration / Functional Tests

  • Replay normal overlapping frames and assert AC-2.1a VO registration rate and AC-2.2 VO MRE.
  • Replay satellite-anchor cases and assert AC-1.1/1.2, AC-2.2 cross-domain MRE, freshness gates, and source labels.
  • Inject stale tiles and assert no satellite_anchored output.
  • Inject sharp turns and disconnected segments and assert VPR relocalization.
  • Run ArduPilot Plane SITL with GPS1_TYPE=14 and assert valid GPS_INPUT fields, fix type degradation, and QGC statuses.
  • Inject visual blackout + spoofed GPS and assert spoofed GPS is ignored, covariance grows, and thresholds match AC-NEW-8.
  • Request AI-camera object coordinates and assert level-flight projection plus maneuver error bound.

Non-Functional Tests

  • Jetson Orin Nano Super profiling: <400 ms p95, <8 GB shared memory, 25 W no-throttle hot-soak.
  • Cache build test for 400 km²: imagery + manifests + descriptors fit within budget or fail with explicit budget report.
  • 8-hour FDR load test: <=64 GB, rollover logged, no silent data loss.
  • Monte Carlo false-anchor and over-confidence tests for AC-NEW-4 and AC-NEW-7.
  • Cold boot 50x: first valid GPS_INPUT <30 s p95.

References

Detailed source registry: _docs/00_research/01_source_registry.md.

Key sources:

  • AC assessment: _docs/00_research/00_ac_assessment.md
  • Question decomposition: _docs/00_research/00_question_decomposition.md
  • Source registry: _docs/00_research/01_source_registry.md
  • Fact cards: _docs/00_research/02_fact_cards.md
  • Comparison framework: _docs/00_research/03_comparison_framework.md
  • Reasoning chain: _docs/00_research/04_reasoning_chain.md
  • Validation log: _docs/00_research/05_validation_log.md
  • Component fit matrix: _docs/00_research/06_component_fit_matrix.md