[AZ-219] Scaffold onboard runtime project

Add the initial source, test, infrastructure, CI, configuration, and evidence-path scaffold so dependent implementation tasks have stable package and runtime boundaries.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Oleksandr Bezdieniezhnykh
2026-05-03 12:04:22 +03:00
parent dd9afe2797
commit 79997e39ac
97 changed files with 753 additions and 3 deletions
+1
View File
@@ -0,0 +1 @@
"""Source-root package marker for editable installs."""
+1
View File
@@ -0,0 +1 @@
"""Anchor verification component."""
+10
View File
@@ -0,0 +1,10 @@
"""Public anchor verification interfaces."""
from typing import Any, Protocol
class AnchorVerifier(Protocol):
"""Verifies retrieved candidates against camera observations."""
def verify(self, frame: Any, candidate: Any) -> Any:
"""Return an anchor decision for one candidate."""
+5
View File
@@ -0,0 +1,5 @@
"""Public anchor verification type aliases."""
from typing import Any
AnchorDecisionLike = Any
+1
View File
@@ -0,0 +1 @@
"""BASALT VIO adapter component."""
+13
View File
@@ -0,0 +1,13 @@
"""Public BASALT VIO adapter interfaces."""
from typing import Any, Protocol
class VioAdapter(Protocol):
"""Processes frame and telemetry inputs into relative VIO state."""
def initialize(self) -> None:
"""Initialize adapter resources."""
def process(self, frame: Any, telemetry: Any) -> Any:
"""Process one synchronized frame/telemetry pair."""
+5
View File
@@ -0,0 +1,5 @@
"""Public BASALT VIO type aliases."""
from typing import Any
VioStatePacketLike = Any
@@ -0,0 +1 @@
"""Camera ingest and calibration component."""
@@ -0,0 +1,10 @@
"""Public camera ingest interfaces."""
from typing import Any, Protocol
class FrameProvider(Protocol):
"""Source of navigation frames for downstream localization components."""
def next_frame(self) -> Any:
"""Return the next frame packet."""
+5
View File
@@ -0,0 +1,5 @@
"""Public camera ingest type aliases."""
from typing import Any
FramePacketLike = Any
+1
View File
@@ -0,0 +1 @@
"""Flight data recorder and observability component."""
+13
View File
@@ -0,0 +1,13 @@
"""Public flight recorder interfaces."""
from typing import Any, Protocol
class FlightRecorder(Protocol):
"""Append-only event recorder for runtime evidence."""
def append_event(self, event: Any) -> None:
"""Persist one FDR event."""
def export(self) -> Any:
"""Export recorded evidence for post-flight analysis."""
+5
View File
@@ -0,0 +1,5 @@
"""Public FDR type aliases."""
from typing import Any
FdrEventLike = Any
+1
View File
@@ -0,0 +1 @@
"""MAVLink and GCS integration component."""
+13
View File
@@ -0,0 +1,13 @@
"""Public MAVLink gateway interfaces."""
from typing import Any, Protocol
class MavlinkGateway(Protocol):
"""Bridges FC telemetry inputs and localization GPS_INPUT outputs."""
def subscribe_telemetry(self) -> Any:
"""Subscribe to flight-controller telemetry."""
def emit_gps_input(self, estimate: Any) -> None:
"""Emit one localization estimate to the flight controller."""
+5
View File
@@ -0,0 +1,5 @@
"""Public MAVLink/GCS type aliases."""
from typing import Any
TelemetrySampleLike = Any
+3
View File
@@ -0,0 +1,3 @@
# BASALT Bridge
Reserved for native BASALT integration code wrapped by `basalt_vio_adapter`.
+3
View File
@@ -0,0 +1,3 @@
# Feature Matching Bridge
Reserved for native feature extraction, matching, and RANSAC acceleration code.
+3
View File
@@ -0,0 +1,3 @@
# TensorRT Bridge
Reserved for Jetson/TensorRT descriptor inference integrations.
+1
View File
@@ -0,0 +1 @@
"""Safety and anchor wrapper component."""
+13
View File
@@ -0,0 +1,13 @@
"""Public localization state-machine interfaces."""
from typing import Any, Protocol
class LocalizationStateMachine(Protocol):
"""Coordinates VIO propagation and anchor promotion decisions."""
def update_vio(self, vio_state: Any) -> Any:
"""Update the state machine with a VIO state packet."""
def consider_anchor(self, anchor_decision: Any) -> Any:
"""Evaluate a verified anchor decision."""
+5
View File
@@ -0,0 +1,5 @@
"""Public safety wrapper type aliases."""
from typing import Any
PositionEstimateLike = Any
+1
View File
@@ -0,0 +1 @@
"""Offline satellite retrieval and synchronization component."""
+13
View File
@@ -0,0 +1,13 @@
"""Public satellite service interfaces."""
from typing import Any, Protocol
class SatelliteService(Protocol):
"""Retrieves offline VPR candidates from mission cache data."""
def load_index(self) -> None:
"""Load the local descriptor index."""
def retrieve(self, frame: Any) -> list[Any]:
"""Return candidate anchor records for one frame."""
+5
View File
@@ -0,0 +1,5 @@
"""Public satellite service type aliases."""
from typing import Any
VprCandidateLike = Any
+1
View File
@@ -0,0 +1 @@
"""Shared runtime foundation packages."""
+1
View File
@@ -0,0 +1 @@
"""Runtime configuration helper namespace."""
+3
View File
@@ -0,0 +1,3 @@
"""Shared DTO and interface contract namespace."""
CONTRACT_VERSION = "0.1.0"
+1
View File
@@ -0,0 +1 @@
"""Shared error envelope namespace."""
+1
View File
@@ -0,0 +1 @@
"""Geospatial geometry helper namespace."""
+1
View File
@@ -0,0 +1 @@
"""Structured telemetry and health metadata namespace."""
+1
View File
@@ -0,0 +1 @@
"""Clock-domain and timestamp helper namespace."""
+1
View File
@@ -0,0 +1 @@
"""Tile cache and generated tile lifecycle component."""
+13
View File
@@ -0,0 +1,13 @@
"""Public tile manager interfaces."""
from typing import Any, Protocol
class TileManager(Protocol):
"""Validates and serves local cache tile records."""
def validate_cache(self) -> None:
"""Validate local cache metadata and signatures."""
def get_tile_window(self, footprint: Any) -> list[Any]:
"""Return tiles intersecting a requested footprint."""
+5
View File
@@ -0,0 +1,5 @@
"""Public tile manager type aliases."""
from typing import Any
CacheTileRecordLike = Any