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

5.8 KiB

Tech Stack Evaluation

Requirements Analysis

Area Requirement
Runtime Jetson Orin Nano Super, Ubuntu/JetPack, CUDA/TensorRT available, 8 GB shared memory, 25 W thermal envelope.
Language Python is acceptable for orchestration/prototyping; C++/TensorRT paths likely needed for hot vision loops.
Vision Calibration, undistortion, homography, VPR descriptors, local matching, RANSAC verification.
Estimation BASALT VIO for relative camera+IMU propagation, wrapped by project-owned safety/anchor estimator logic for covariance calibration, source labels, blackout/spoofing modes, and MAVLink output mapping.
Storage Offline satellite cache, descriptor index, FDR with no raw frame retention.
Autopilot ArduPilot Plane, GPS_INPUT through pymavlink, MAVSDK for telemetry.

Technology Evaluation

Layer Selected Alternatives Considered Rationale Risk
OS / GPU stack JetPack Ubuntu + CUDA + TensorRT Plain Ubuntu without JetPack Required for Jetson acceleration and profiling. Thermal/performance tuning.
Calibration / geometry OpenCV 4.x Custom NumPy-only geometry Mature APIs for calibration, undistortion, homography, RANSAC. Version pin and calibration quality.
VO / estimator BASALT + project-owned safety/anchor wrapper OpenVINS, Kimera-VIO, custom OpenCV/ESKF, ORB-SLAM3, VINS-Fusion BASALT is the selected production VIO candidate; wrapper owns source labels, covariance gates, degraded modes, satellite-anchor acceptance, and MAVLink semantics. BASALT confidence/covariance must be calibrated; nadir fixed-wing replay required.
VPR descriptors DINOv2-VLAD / AnyLoc-style, model-size profiled, TensorRT only after fidelity check MixVPR, SALAD, NetVLAD, classical BoW Strong retrieval evidence; good offline descriptor model. Memory/latency and embedding drift if optimized incorrectly.
Vector search FAISS CPU-first on Jetson ARM64 HNSWLIB, PostgreSQL/pgvector metadata-assisted search, brute-force NumPy, custom FAISS GPU build Mature top-K search, save/load, PQ compression; PostgreSQL stores spatial/mission metadata around descriptor files. CPU query latency must be profiled; GPU FAISS is not default on aarch64.
Local matching DISK/ALIKED + LightGlue SuperPoint+LightGlue, SIFT/ORB, LoFTR Exact match outputs; Apache/BSD-friendly path; adaptive speed knobs. Jetson profiling needed.
Raster cache COG + PostgreSQL/PostGIS manifest + signed JSON sidecars PMTiles, MBTiles, loose tile folders COG fits geospatial raster and write-new-tile workflow; PostGIS supports spatial/freshness queries. 10 GB budget pressure and local DB availability.
MAVLink MAVSDK telemetry + pymavlink GPS_INPUT MAVSDK-only, MAVProxy bridge MAVSDK does telemetry well; GPS_INPUT needs raw field control. Plane SITL validation.
FDR PostgreSQL event index + CBOR/binary payload segments with optional Parquet export Raw images, plain CSV Queryable event metadata, bounded payload segments, no raw frame retention. Schema and local DB availability.
Testing ArduPilot Plane SITL + AerialVL/VPAir + EuRoC + representative flight replay Public datasets only No public dataset covers all ACs. Representative data collection required.

Tech Stack Summary

  • Primary implementation: Python for orchestration, test harness, cache tooling, and MAVLink integration; C++/TensorRT for hot-path vision if profiling requires it.
  • Vision utilities: OpenCV 4.x.
  • Estimator: BASALT VIO plus project-owned safety/anchor wrapper and mode machine.
  • Global retrieval: DINOv2-VLAD style descriptors with CPU-first FAISS top-K search.
  • Local matching: DISK/ALIKED + LightGlue; SuperPoint only after license review.
  • Cache: COG imagery, PostgreSQL/PostGIS manifest metadata, signed JSON sidecars, FAISS index files.
  • Autopilot: MAVSDK subscriptions plus pymavlink GPS_INPUT.
  • Validation: public datasets for component de-risking, Plane SITL for integration, representative flight/replay data for acceptance.

Risk Assessment

Risk Impact Mitigation
VPR/local matching exceeds Jetson latency AC-4.1 failure Conditional VPR, top-K caps, downsampled descriptors, CPU FAISS profiling, TensorRT only after embedding-fidelity checks.
Descriptor cache exceeds 10 GB AC-8.3/storage failure PQ/compression, multi-scale budget report, split descriptor budget if needed.
GPL library accidentally becomes production dependency Licensing issue Keep OpenVINS/ORB-SLAM3 as reference only unless legal approves; BASALT is the production VIO candidate.
BASALT covariance under-reports real error False-position safety budget failure Calibrate wrapper covariance against OpenVINS covariance, ground truth replay, and satellite anchor residuals.
Plane failsafe differs from Copter docs Safety behavior mismatch Production-parameter ArduPilot Plane SITL gate.
GPS_INPUT velocity ignore flags behave unexpectedly EKF drift or false velocity fusion SITL tests for velocity fields, ignore flags, and EK3_SRC1_* source parameters.
Public datasets fail to represent Ukrainian agricultural terrain False confidence Require representative synchronized flight/replay data before AC signoff.
Thermal throttling Latency regression Hot-soak test and throttle logging per AC-NEW-5.

Learning / Implementation Requirements

  • Jetson profiling with CUDA/TensorRT and memory instrumentation.
  • ArduPilot Plane SITL, GPS_INPUT, GPS spoof/failsafe parameters.
  • Geospatial raster formats: COG, CRS, tile matrices, m/px metadata, manifests.
  • BASALT integration, covariance calibration, and Mahalanobis rejection in the safety/anchor wrapper.
  • Aerial VPR benchmark methodology and georeference recall.