mirror of
https://github.com/azaion/gps-denied-onboard.git
synced 2026-06-21 21:21:13 +00:00
4f122b604d
Updates _docs/02_document/ to capture the highest-leverage cycle-1 deltas after 97 implementation batches: - FINAL_report.md: revise Decision 9 to reflect the actual opencv-python pin (>=4.11.0.86,<4.12; D-CROSS-CVE-1 deferred per leftover); new "Cycle 1 Implementation Status" section documents the _STRATEGY_REGISTRY + pre_constructed composition-root additions (AZ-591, AZ-618/AZ-619..AZ-624), AZ-332 + AZ-333 BLOCKED with parked Tier-2 follow-ups AZ-592 + AZ-593, AZ-589 + AZ-590 closed Won't-Fix, Step 11 Run Tests results (3343 passed / 88 skipped / 0 failed local; Docker harness rehab tracked by AZ-602), and the deferred-reconciliation list. - glossary.md: 5 new cycle-1 entries (_STRATEGY_REGISTRY, airborne_bootstrap, KltRansac as production-default Tier-1 VIO, pre_constructed kwarg, Tier-1 task / Tier-2 task capability classification). Status line notes the cycle-1 additions pending re-confirmation. - ripple_log_cycle1.md (new): explains why per-file enumeration is N/A for end-of-cycle-1 sync, lists the three doc-update levels and their effective scope, and records the recommended follow-up ordering for the deferred component / helper / contract / test passes. Step 13 deferred: architecture.md, module-layout.md, system-flows.md, 14 component description.md + tests.md, 8 helper docs, 18 contract subfolders, 7 test docs (~50+ files; ~80 product tasks + ~8 helper tasks + ~36 blackbox test tasks). Filed in FINAL_report.md and ripple_log_cycle1.md; resume in a fresh conversation per the 2026-05-18 LESSONS.md guidance. State: greenfield / Step 13 / in_progress / phase 5 (system-level-updates) / cycle 1. Co-authored-by: Cursor <cursoragent@cursor.com>
118 lines
19 KiB
Markdown
118 lines
19 KiB
Markdown
# Glossary
|
||
|
||
**Status**: confirmed-by-user (Plan baseline 2026-05-09); cycle-1 additions appended 2026-05-19 pending re-confirmation
|
||
**Date**: 2026-05-09 baseline · 2026-05-19 cycle-1 additions (marked with `(source: cycle 1 as-built …)` in their entry)
|
||
**Scope**: project-specific terminology for the GPS-denied onboard pose-estimation system. Generic software / industry terms (REST, JSON, IMU, WGS84, etc.) are intentionally omitted.
|
||
|
||
Terms are alphabetical. Each entry: one-line definition + parenthetical source.
|
||
|
||
---
|
||
|
||
**`_STRATEGY_REGISTRY`** — Module-level dict in `runtime_root` mapping `(component_slug, strategy_name) → factory`, with `tier` and `depends_on` metadata. Populated per-binary by an `<role>_bootstrap.register_<role>_strategies()` call before `compose_root()` runs; `compose_root()` raises `StrategyNotLinkedError` if a config-selected strategy is absent. Runtime-side complement to ADR-002 build-time exclusion: the build decides which strategies *can* be registered, the registry decides which one this binary *does* register. Filled cycle-1 by AZ-591; public API is `register_strategy(component_slug, strategy_name, factory, *, tier, depends_on)`. (source: cycle 1 as-built; AZ-591 task spec)
|
||
|
||
**adti20** — Informal name for the production deployment camera, the **ADTi Surveyor Lite 20MP 20L V1** (APS-C ~23.6×15.7 mm, ~5472×3648 px, fixed downward, no gimbal). Pinned in `restrictions.md` §Cameras. (source: `restrictions.md`, user confirmation 2026-05-09)
|
||
|
||
**adti26** — Informal name for the camera that captured the 60 still-image test fixtures (`AD000001..AD000060.jpg`) under `_docs/00_problem/input_data/`. Distinct from the production-deployed `adti20`; calibration data must be sourced from public/factory references for these test images. (source: user confirmation 2026-05-09)
|
||
|
||
**AdHoP refinement** — OrthoLoC method-agnostic perspective preconditioning, conditional sub-stage between cross-domain matcher and pose estimation; invoked only when initial reprojection error exceeds threshold (component C3.5). (source: `solution.md` §C3.5, SQ2 Decision 2)
|
||
|
||
**AGL / Above Ground Level** — Vertical distance from the ground directly below the UAV; operational ceiling ≤1 km AGL. (source: `restrictions.md` §UAV & Flight)
|
||
|
||
**AI camera** — Operator-controlled gimbal+zoom camera consumed by AI detection systems; out of scope for nav-pose, in scope for AC-7.x object localization only. (source: `restrictions.md` §Cameras)
|
||
|
||
**`airborne_bootstrap`** — Module under `runtime_root/` that performs the two pre-`compose_root()` setup steps for the airborne binary: `register_airborne_strategies()` populates `_STRATEGY_REGISTRY` with 7 component-strategy slots (c1_vio, c2_vpr, c2_5_rerank, c3_matcher, c3_5_adhop, c4_pose, c5_state), and `build_pre_constructed(config)` constructs the 12-key infrastructure dict (`pre_constructed`). The airborne entrypoint `runtime_root.main()` calls both before `compose_root(config, pre_constructed=...)`. Missing registry entry → `StrategyNotLinkedError`; missing `pre_constructed` key → `AirborneBootstrapError`. Operator binary uses the parallel `operator_bootstrap` module today only as a placeholder. (source: cycle 1 as-built; AZ-591 + AZ-618 umbrella → AZ-619..AZ-624 subtasks)
|
||
|
||
**Camera calibration artifact** — JSON file carrying camera intrinsics + distortion + body-to-camera extrinsics + acquisition method (`factory_sheet | checkerboard_refined | hybrid`). The only way camera-specific parameters enter the system; no hard-coded camera math anywhere. Test fixtures and production deployments load different artifacts on the same code path. (source: user directive 2026-05-09)
|
||
|
||
**Companion / Companion PC** — The onboard Jetson Orin Nano Super running the GPS-denied estimation pipeline. Synonyms used interchangeably across docs. (source: `restrictions.md` §Onboard Hardware)
|
||
|
||
**D-PROJ-1** — *(CLOSED in this Plan cycle)* Camera calibration acquisition strategy. Resolved as: hybrid factory data sheet + per-unit ground-truth checkerboard refinement (~1 day per deployed unit). No physical hardware available this cycle, so production calibration is documented as instructions only. (source: `solution.md` Open decisions, user confirmation 2026-05-09)
|
||
|
||
**D-PROJ-2** — *(OPEN, parent-suite)* Two design tasks against `satellite-provider`: (i) post-landing tile ingest endpoint, (ii) multi-flight trust / staleness logic. Surfaced in `satellite-provider/_docs/` outside this Plan cycle as a parent-suite deliverable. Tracked via `_docs/_process_leftovers/2026-05-09_satellite-provider-design-tasks.md`. (source: `solution.md`, user confirmation 2026-05-09)
|
||
|
||
**D-PROJ-3** — Multi-flight fixture acquisition (AerialVL S03 + Maxar Open Data Ukraine + own multi-flight data). NOT pursued in this Plan cycle: AC-NEW-4 / AC-NEW-7 wording was relaxed to Monte-Carlo-over-current-data with stated CI; multi-flight statistical residual risk recorded for the Step 4 risk register. (source: `solution.md`, traceability-matrix.md, user confirmation 2026-05-09)
|
||
|
||
**Dead reckoned** — Source label `dead_reckoned`: estimate produced from IMU-only propagation with no visual or satellite anchoring. Carries monotonically growing covariance; emitted during visual blackouts or after re-localization fails. (source: AC-1.4, AC-NEW-8)
|
||
|
||
**Derkachi flight footage** — Representative cropped nadir video + synchronized `SCALED_IMU2` + `GLOBAL_POSITION_INT` telemetry under `input_data/flight_derkachi/`. Used for runtime cadence + VIO + replay testing. (source: `problem.md`, `data_parameters.md`)
|
||
|
||
**External position / GPS replacement** — What this system emits to the FC: WGS84 coordinates + honest covariance + provenance label, replacing real GPS when denied/spoofed. (source: AC-4.3, AC-6.3)
|
||
|
||
**FC / Flight Controller** — ArduPilot Plane or iNav. PX4 explicitly out of scope. (source: `restrictions.md` §Sensors & Integration)
|
||
|
||
**FDR / Flight Data Recorder** — Per-flight onboard NVM record (≤64 GB) of estimates, IMU traces, MAVLink stream, mid-flight tiles, system health, failed-tile thumbnails. Excludes raw nav/AI-camera frames. (source: AC-NEW-3)
|
||
|
||
**Flight** — Operator-authored mission persisted in the parent-suite `flights` REST service. Carries an ordered list of `Waypoint` entries (lat / lon / alt / objective / source). The DTO shape mirrors `suite/flights/Database/Entities/{Flight,Waypoint}.cs`. C12 reads the `Flight` pre-flight to derive the cache bbox + takeoff origin (AZ-489); the companion never reaches the flights service. (source: ADR-010, AZ-489)
|
||
|
||
**Flights API / `flights` REST service** — Parent-suite .NET 8 REST microservice (`suite/flights/`) that owns `Flight` + `Waypoint` persistence. Read pre-flight by C12 `FlightsApiClient` over HTTPS. Operator-workstation-only — never reached from the airborne companion (Principle #9). (source: ADR-010, AZ-489)
|
||
|
||
**Flight state** — Boolean signal `IN_AIR | ON_GROUND` derived from FC `MAV_STATE` (MAVLink HEARTBEAT). Safety-critical: gates the post-landing upload path; `IN_AIR` forbids any outbound write to `satellite-provider`. Enforced primarily by process-level isolation — the Tile Manager (C11), which carries both the `TileDownloader` and the `TileUploader`, is not loaded in the airborne companion image. (source: user directive 2026-05-09)
|
||
|
||
**GCS / Ground Control Station** — QGroundControl. Mission Planner is out of scope. (source: `restrictions.md`)
|
||
|
||
**GPS denial / GPS spoofing** — Distinct failure modes the system must distinguish: denial = no fix; spoofing = false fix that must not be promoted into the estimator. (source: AC-3.5, AC-NEW-2, AC-NEW-8)
|
||
|
||
**`GPS_INPUT`** — MAVLink message used as the per-frame FC delivery channel for ArduPilot Plane. (source: AC-4.3, `restrictions.md`)
|
||
|
||
**GSD / Ground Sample Distance** — Meters-per-pixel on the ground; target 10–20 cm/px @ 1 km AGL for the nav camera. (source: `restrictions.md` §Cameras)
|
||
|
||
**Internal smoothing** — AC-4.5 scope: GTSAM iSAM2 retroactively refines past keyframes onboard and emits the corrected current frame; the FC log is forward-time only. NOT to be confused with FC-side retroactive correction (which neither ArduPilot nor iNav supports). (source: `solution.md` §C5, Mode B Fact #107)
|
||
|
||
**Jetson Orin Nano Super** — Pinned companion compute: 67 TOPS sparse INT8, 8 GB shared LPDDR5, 25 W TDP, JetPack/CUDA/TensorRT. (source: `restrictions.md`)
|
||
|
||
**`KltRansac`** — Engine-rule-mandatory simple-baseline `VioStrategy` (AZ-334). In cycle 1 this is the **production-default** airborne VIO selection because OKVIS2 (AZ-332) and VINS-Mono (AZ-333) are BLOCKED on Tier-2 prerequisites (CI build env + Jetson hardware + DBoW2 vocab; upstream vendoring decision). The `_STRATEGY_REGISTRY` still registers all three slots — config-selecting OKVIS2 / VINS-Mono raises `StrategyNotAvailableError` from `vio_factory.py` until their `BUILD_*` flag is ON and the Tier-2 follow-ups (AZ-592, AZ-593) land. ADR-001 / ADR-002 unchanged; only the production default selection shifts. (source: cycle 1 as-built; `implementation_completeness_cycle1_report.md`)
|
||
|
||
**Mid-flight bounded-delta GPS gate** — Third clause of Principle #11. Even when FC GPS health is "stable + non-spoofed for ≥ 10 s" and the visual/satellite consistency check has succeeded, the FC's reported position must be within ≤ 200 m (configurable) of the companion's last emitted `PoseEstimate` before the FC GPS is fused via `add_pose_anchor`. Catches "FC reports stable GPS but the value is wrong". (source: Principle #11 amended, ADR-010)
|
||
|
||
**Mid-flight tile generation** — Companion orthorectifies nav-camera frames into basemap-projected tiles in flight, deduplicates, stores locally in `satellite-provider`-compatible format. NO outbound upload while airborne — upload happens post-landing only. (source: AC-8.4, user directive 2026-05-09)
|
||
|
||
**Mission Planner UI** — Parent-suite operator-facing web UI at `suite/ui/` where operators author flight routes (waypoints + altitudes + objectives) before C12 cache provisioning. Persists routes to the `flights` REST service. Out of scope for this project's deliverables, but the `Flight` DTO it produces IS in scope as an inbound boundary. Not to be confused with the GCS-side "Mission Planner" desktop tool — that is out of scope (only QGroundControl is the supported GCS). (source: ADR-010)
|
||
|
||
**Mission profile** — 8 h flight, ~150 km² operational sector + ~50 km² transit corridor, ≤400 km² total cached, ~60 km/h cruise, ≤1 km AGL, eastern/southern Ukraine. (source: `restrictions.md`)
|
||
|
||
**`MSP2_SENSOR_GPS`** — MSP2 message used as the per-frame FC delivery channel for iNav (iNav has no inbound MAVLink external-positioning handler). (source: `restrictions.md`, AC-4.3)
|
||
|
||
**Nav camera / Navigation camera** — The fixed-downward (no gimbal) camera on the UAV; pinned model is `adti20`. Distinct from the operator-controlled AI camera. (source: `restrictions.md` §Cameras)
|
||
|
||
**Operator** — Pre-flight and post-flight human role: authors the flight route in the **Mission Planner UI** (`suite/ui`), classifies the operational area (active-conflict vs stable rear), drives C12 cache provisioning (which reads the `Flight` from the parent-suite `flights` REST service, downloads satellite tiles via the **Tile Manager** for the route bbox, and bakes the takeoff origin into the C10 Manifest), stages calibration onto the companion before takeoff, and after landing triggers the **Tile Manager** upload run. (source: `problem.md`, AC-3.4 / AC-6.2, ADR-010, user confirmation 2026-05-09 + 2026-05-11)
|
||
|
||
**`pre_constructed`** — Mandatory kwarg of `compose_root(config, pre_constructed=...)` carrying a 12-key dict of infrastructure objects (`c13_fdr`, `c6_descriptor_index`, `c6_tile_store`, `c7_inference`, `c3_lightglue_runtime`, `c3_feature_extractor`, `c282_ransac_filter`, `c5_wgs_converter`, `c5_se3_utils`, `c5_isam2_graph_handle`, `c5_imu_preintegrator`, `clock`). Built by `airborne_bootstrap.build_pre_constructed(config)` in 6 dependency-ordered phases (Phase A=c13/clock through Phase F=wire `main()`); GPU-touching builders gate on `BUILD_*` env flags. Tests stub by passing the same kwarg. Missing key → `AirborneBootstrapError`. (source: cycle 1 as-built; AZ-618 umbrella → AZ-619..AZ-624 subtasks)
|
||
|
||
**Tier-1 task / Tier-2 task** — Capability-readiness classification distinct from the `Tier-1 / Tier-2` test-environment split. A **Tier-1 task** is the cycle deliverable; passes the implement skill's cycle-end Completeness Gate without external hardware/CI prerequisites. A **Tier-2 task** is a follow-up gated on prerequisites that are not provisioned in this cycle (e.g., DBoW2 vocab artifact for OKVIS2; Jetson runner for VINS-Mono pybind11 binding). Tier-2 follow-ups are parked in `_docs/02_tasks/backlog/` with the Tier-1 task's BLOCKED handle naming them explicitly. The implement skill's "PASS-with-BLOCKED" terminal classification permits a Tier-1 task to ship in BLOCKED state if a Tier-2 follow-up is named in its Implementation Notes. (source: cycle 1 as-built; `implementation_completeness_cycle1_report.md`)
|
||
|
||
**Tile Manager** — Operator-side component (C11) that owns both directions of network I/O against `satellite-provider`: pre-flight download (F1) into the local C6 store via the `TileDownloader` interface, and post-landing upload (F10) from C6 to the parent-suite ingest endpoint via the `TileUploader` interface. Carries **no internal flight-state gating** (Batch 44 SRP refactor — the post-landing safety check lives in C12's `PostLandingUploadOrchestrator`, which reads the `flight_footer.clean_shutdown` field). Implemented as a separate binary / image so neither network path is loaded in the airborne companion (ADR-004 process-level isolation). Replaces the earlier "post-landing upload tool" naming after Plan-cycle scope expansion 2026-05-09. (source: user directive 2026-05-09; Batch 44 SRP refactor 2026-05-13)
|
||
|
||
**`satellite-provider`** — First-class architecture boundary: the suite's existing .NET 8 REST microservice at `/Users/obezdienie001/dev/azaion/suite/satellite-provider/`. Runs in Docker (`:5100`, OpenAPI at `/swagger`); downloads Google Maps tiles; stores them in PostgreSQL + filesystem (`./tiles/{zoomLevel}/{x}/{y}.jpg`). Read-only from the onboard runtime; receives post-landing tile uploads via a yet-to-be-designed ingest endpoint (parent-suite work, D-PROJ-2). Synonym in older docs: "Suite Sat Service" / "Azaion Suite Satellite Service". (source: parent-suite `satellite-provider/README.md`, user confirmation 2026-05-09)
|
||
|
||
**Satellite anchored** — Source label `satellite_anchored`: estimate produced by matching the current nav frame against pre-cached satellite tiles. Highest confidence among the three labels. (source: AC-1.4)
|
||
|
||
**Sector classification** — Pre-flight operator decision: active-conflict (6-month tile-freshness threshold) vs stable rear (12-month threshold). Drives the freshness gate at ingest and during runtime tile use. (source: AC-8.2, AC-NEW-6, `solution.md` operator-orchestrator section)
|
||
|
||
**Source label** — Provenance tag carried with every emitted estimate: `{satellite_anchored | visual_propagated | dead_reckoned}`. (source: AC-1.4)
|
||
|
||
**Suite Sat Service** — Synonym for `satellite-provider` used in earlier docs (problem.md, restrictions.md, solution_draft01/02). The actual implementation in the parent suite is the .NET 8 service; "Suite Sat Service" is the role name. (source: `restrictions.md`, parent-suite `satellite-provider/README.md`)
|
||
|
||
**Takeoff origin** — `LatLonAlt` baked into the C10 Manifest by C12 at build time from `Flight.waypoints[0]`. Consumed at boot by C5 via `set_takeoff_origin(origin, sigma_horiz_m, sigma_vert_m)` (AZ-490) as a Bayesian prior on the initial pose — iSAM2 attaches a `PriorFactorPose3` at `Pose3.Identity()` (origin BECOMES the local-ENU (0,0,0) anchor); ESKF seeds the nominal position to (0,0,0) + position-block covariance to `diag(sigma_horiz_m², sigma_horiz_m², sigma_vert_m²)`. Primary cold-start trust anchor per ADR-010; FC EKF GPS is secondary. (source: ADR-010, AZ-490)
|
||
|
||
**Tier-1 / Tier-2** — Testing-environment split: Tier-1 = workstation Docker (fast/cheap); Tier-2 = Jetson hardware (AC-bound). Both appear in the deployment plan and CI matrix per finding F6. (source: `_docs/02_document/tests/environment.md`)
|
||
|
||
**Tile** — Unit of persistent imagery on the companion; basemap-projected, deduplicated; the only persistent imagery format. Mid-flight-generated tiles use the same on-disk format as `satellite-provider` (`./{zoomLevel}/{x}/{y}.jpg` + matching metadata schema) so post-landing upload is byte-identical. (source: AC-8.4, AC-8.5, parent-suite `satellite-provider/README.md`, user confirmation 2026-05-09)
|
||
|
||
**Tile cache** — Local on-Jetson store, ≤10 GB, populated pre-flight from `satellite-provider`, augmented mid-flight by orthorectified nav-camera-derived tiles. (source: `restrictions.md`, AC-8.3, AC-8.4)
|
||
|
||
**Tile freshness** — <6 mo (active-conflict sectors) / <12 mo (stable rear); stale tiles must be rejected or downgraded. (source: AC-8.2, AC-NEW-6)
|
||
|
||
**TTFF / Time To First Fix** — From companion boot to first valid emitted external-position frame; budget <30 s p95. (source: AC-NEW-1)
|
||
|
||
**UAV** — Fixed-wing unmanned aerial vehicle this system runs on; ~60 km/h cruise, ≤1 km AGL, 8 h flights, eastern/southern Ukraine theater. (source: `restrictions.md`)
|
||
|
||
**VioStrategy** — Pluggable interface (Okvis2 / VinsMono / KltRansac) selected at startup by config; not hot-swappable mid-flight. The interchangeable-strategy pattern (ADR-001) plus build-time exclusion via per-implementation CMake `BUILD_*` flags (ADR-002) lets the project produce a small **deployment binary** (links the production-default + the engine-rule-mandatory simple-baseline) and a separate **research binary** that links every available strategy for the IT-12 comparative-study report. ADR-002 is purely technical (binary size on 8 GB shared Jetson, AC-NEW-1 boot budget, dependency / attack surface, accidental-selection risk); component licenses do not influence which strategy is the deployment-default. (source: `solution.md` §C1, `architecture.md` ADR-001 + ADR-002 + ADR-009)
|
||
|
||
**VIO / Visual-Inertial Odometry** — Frame-to-frame motion + IMU bias estimation via fused camera + IMU streams (component C1). (source: `solution.md` §C1)
|
||
|
||
**Visual propagated** — Source label `visual_propagated`: estimate produced by VIO frame-to-frame propagation with no fresh satellite anchor. Mid-confidence. (source: AC-1.4)
|
||
|
||
**VPR / Visual Place Recognition** — Descriptor-based retrieval of the nearest satellite tile to the current nav frame (component C2). (source: `solution.md` §C2)
|
||
|
||
**Waypoint** — Ordered `(lat, lon, alt, objective, source)` entry inside a `Flight`. Operationally meaningful ordering: `waypoints[0]` is the planned takeoff point and is extracted by C12 `FlightsApiClient` as the takeoff origin. C12 envelopes all waypoint lat/lon to derive the cache bbox. DTO shape mirrors `suite/flights/Database/Entities/Waypoint.cs`. (source: ADR-010, AZ-489)
|