Files
gps-denied-onboard/_docs/00_problem/restrictions.md
T
Oleksandr Bezdieniezhnykh 12cc5a4e4b Strip implementation details from AC; add design-independence rule
acceptance_criteria.md and restrictions.md were carrying internal
component selections (DINOv2/SuperPoint/FAISS/ESKF), library pins
(pymavlink/MAVSDK), autopilot parameter values (GPS1_TYPE=14,
EK3_SRC1_*, VISO_QUAL_MIN), and v1/v1.1 phasing tied to specific
ArduPilot PR numbers. Per IEEE 830 / Atlassian / GitScrum,
acceptance criteria must be design-independent — outcomes only,
not implementation. Cleaned both files (-35% combined size) while
preserving every testable threshold and contract bullet.

Output-schema label renamed: vo_extrapolated -> visual_propagated.
FC scope broadened from ArduPilot-only to ArduPilot + iNav (both
via standard MAVLink external-positioning interfaces).

Encoded the lesson into the two skills that write/refine AC:
- problem/SKILL.md (initial AC production)
- research/steps/01_mode-a-initial-research.md (Phase 1 AC
  & Restrictions Assessment)

Autodev state reset to greenfield Step 2 (Research) for the
post-restart greenfield run; cycle 1, in-progress at sub-step
ac-restrictions-assessment.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-07 04:38:21 +03:00

4.5 KiB
Raw Blame History

Restrictions

Last revised 2026-05-07 (cleanup pass — design-independent, IEEE-830 style; only external dependencies, environmental constraints, integration boundaries).

UAV & Flight

  • Fixed-wing UAVs only; navigation camera fixed downward (no gimbal).
  • Operational area: eastern/southern Ukraine (east of Dnipro).
  • Mission profile: 8-hour flights, ~60 km/h cruise. Sector ≤150 km² + transit corridor ~50 km². Total cached area ≤~400 km², persistent across flights.
  • Altitude ≤1 km AGL; terrain assumed flat (rolling steppe / agricultural).
  • Weather: predominantly sunny daytime; validation must cover seasonal/visibility classes (summer crops, autumn/winter bare fields, cloud/haze, snow if winter, low-texture repetition).
  • Sharp turns are exceptions; consecutive photos may share <5% overlap (AC-3.2).
  • No raw-photo storage (AC-8.5); storage bounded by tile cache + per-flight FDR (AC-NEW-3).

Cameras

  • Navigation camera (pinned): ADTi 20MP 20L V1, APS-C ~23.6 × 15.7 mm, ~5472 × 3648 px (≈20 MP). Lens chosen so GSD lands in 1020 cm/px @ 1 km AGL (frame footprint ~470×314 m to ~980×655 m). Intrinsics + camera-to-body calibration must be obtained pre-flight (e.g., checkerboard).
  • AI camera: operator-controlled gimbal angle + zoom (consumed by AI detection systems). The GPS-Denied system supports object localization (AC-7.x) using gimbal angle + zoom only — UAV bank/pitch is not published to that path; AI-camera object localization is therefore scoped to level flight (AC-7.1).
  • Camera-to-companion interface: USB / MIPI-CSI / GigE (lens-module dependent).

Satellite Imagery

  • Source: Azaion Suite Satellite Service (separate Suite component). Onboard system is a consumer; upstream sourcing is the Service's concern.
  • Onboard interface is offline-only: companion holds a local cache populated pre-flight from the Service for the operational area (AC-8.3). No in-flight Service calls.
  • Mid-flight tile generation (AC-8.4): companion orthorectifies nav-camera frames into basemap-projected tiles, deduplicates, stores locally; uploads on landing.
  • Storage policy: tile is the unit of persistence; no raw frames retained (AC-8.5).
  • Resolution at cache interface: ≥0.5 m/px, ideally 0.3 m/px (AC-8.1).
  • Tile manifest schema: CRS, tile matrix, dimension, lat-adjusted m/px, capture date, source, compression. Slippy/XYZ zoom (if used) is a provider convention, not a resolution proof.
  • Cache budget: 10 GB persistent across the ~400 km² area, including manifests, overviews, and any precomputed indices unless the solution carves out a separate descriptor budget.
  • Freshness: enforced per AC-8.2 / AC-NEW-6 (6-month active-conflict / 12-month rear). Mid-flight tiles timestamped current and treated as fresh.
  • Sentinel-2 / free public imagery: not on runtime path; cache rejects below the 0.5 m/px floor.

Onboard Hardware

  • Companion computer (pinned): Jetson Orin Nano Super — 67 TOPS sparse INT8, 8 GB shared LPDDR5, 25 W TDP. JetPack (Ubuntu) with CUDA / TensorRT.
  • Cooling sized for 25 W continuous over 8 h at the upper environmental temp (AC-NEW-5).
  • Storage budget ≥ tile cache (~10 GB) + per-flight FDR (64 GB, AC-NEW-3).

Sensors & Integration

  • High-rate IMU available from FC via MAVLink.
  • Communication protocol (pinned): MAVLink for both FC and GCS.
  • Supported flight controllers: ArduPilot, iNav (both via standard MAVLink). PX4 out of scope.
  • Output to FC: WGS84 GPS coordinates as a real-GPS replacement, via the MAVLink message type(s) the supported FCs accept for external positioning (per-FC message selection is a design choice; contract is AC-4.3).
  • Ground station: QGroundControl (Mission Planner out of scope). Telemetry link bandwidth-limited; per-frame data stays on local FDR (AC-NEW-3); GCS sees 12 Hz downsampled summary (AC-6.1).
  • Representative data: see input_data/ (still images), input_data/flight_derkachi/ (cropped nadir video + synchronized SCALED_IMU2 + GLOBAL_POSITION_INT). Production acceptance still requires camera intrinsics, distortion, camera-to-body calibration, and synchronized representative flight data (frames + FC IMU/attitude/airspeed/altitude + emitted MAVLink + ground-truth trajectory).

Failsafe & Safety

  • If no estimate produced for >3 s → autopilot falls back to IMU-only dead reckoning (AC-5.2). 3 s rides through one sharp turn at cruise.
  • False-position safety budget: AC-NEW-4 (P(>500 m) <0.1 %, P(>1 km) <0.01 % per flight).
  • Cold-start TTFF <30 s (AC-NEW-1); spoofing-promotion latency <3 s (AC-NEW-2).