mirror of
https://github.com/azaion/gps-denied-onboard.git
synced 2026-04-22 23:46:37 +00:00
component assesment and fixes done
This commit is contained in:
@@ -11,7 +11,8 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
| ID | Component | Interface | Purpose |
|
||||
|----|-----------|-----------|---------|
|
||||
| F01 | Flight API | `IFlightAPI` | REST endpoints, SSE streaming |
|
||||
| F02 | Flight Processor | `IFlightProcessor` | Central coordinator, processing loop |
|
||||
| F02.1 | Flight Lifecycle Manager | `IFlightLifecycleManager` | Flight CRUD, init, API delegation |
|
||||
| F02.2 | Flight Processing Engine | `IFlightProcessingEngine` | Processing loop, recovery orchestration |
|
||||
| F03 | Flight Database | `IFlightDatabase` | Persistence layer |
|
||||
| F04 | Satellite Data Manager | `ISatelliteDataManager` | Tile fetching, caching, progressive search |
|
||||
| F05 | Image Input Pipeline | `IImageInputPipeline` | Image ingestion, validation, storage |
|
||||
@@ -86,7 +87,7 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
└────────┬────────┘
|
||||
▼
|
||||
┌─────────────────┐
|
||||
│ F02 Ready │ ← Ready to accept flights
|
||||
│ F02.1 Ready │ ← Ready to accept flights
|
||||
└────────┬────────┘
|
||||
▼
|
||||
┌─────────────────┐
|
||||
@@ -113,7 +114,7 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
│ create_flight()
|
||||
▼
|
||||
┌─────────┐
|
||||
│ F02 │ Flight Processor
|
||||
│ F02.1 │ Flight Lifecycle Manager
|
||||
└────┬────┘
|
||||
┌────────────────────────┬─┴─┬────────────────────────┐
|
||||
│ │ │ │
|
||||
@@ -186,7 +187,7 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
**Sequence**:
|
||||
```
|
||||
┌──────────────────────────────────────────────────────────────────────────┐
|
||||
│ F02 Flight Processor │
|
||||
│ F02.2 Flight Processing Engine │
|
||||
│ │
|
||||
│ ┌─────────────┐ │
|
||||
│ │ get_next │◄───────────────────────────────────────────────────────┐│
|
||||
@@ -205,7 +206,7 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
│ └──────────────────────────────┬──────────────────────────────┘ ││
|
||||
│ ▼ ││
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ ││
|
||||
│ │ F07 compute_relative_pose_in_chunk() │ ││
|
||||
│ │ F07 compute_relative_pose() │ ││
|
||||
│ │ ├─ SuperPoint extract (prev + curr) via F16 │ ││
|
||||
│ │ └─ LightGlue match via F16 │ ││
|
||||
│ └──────────────────────────────┬──────────────────────────────┘ ││
|
||||
@@ -230,15 +231,17 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
│ ┌─────────────────┴─────────────────┐ ││
|
||||
│ │ Match Found? │ ││
|
||||
│ ▼ ▼ ││
|
||||
│ ┌─────────────────────────┐ ┌─────────────────────────┐ ││
|
||||
│ │F10 add_absolute_factor()│ │ Skip absolute anchor │ ││
|
||||
│ │F06 update_heading() │ │ (VO-only frame) │ ││
|
||||
│ └────────────┬────────────┘ └─────────────────────────┘ ││
|
||||
│ ┌──────────────────────────────────┐ ┌─────────────────────────┐ ││
|
||||
│ │F10 add_absolute_factor(flight_id,│ │ Skip absolute anchor │ ││
|
||||
│ │ frame_id, gps, covariance, │ │ (VO-only frame) │ ││
|
||||
│ │ is_user_anchor=False) │ └─────────────────────────┘ ││
|
||||
│ │F06 update_heading() │ ││
|
||||
│ └────────────┬─────────────────────┘ ││
|
||||
│ │ ││
|
||||
│ └─────────────────────┬───────────────────────────────────┘│
|
||||
│ ▼ │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
│ │ F10 optimize_chunk() │ │
|
||||
│ │ F10 optimize_chunk(flight_id, chunk_id, iterations) │ │
|
||||
│ └──────────────────────────────┬──────────────────────────────┘ │
|
||||
│ ▼ │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
@@ -324,7 +327,7 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
│ │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
│ │ 1. EMIT RecoveryStarted event │ │
|
||||
│ │ └─ F02 subscribes → Update status to "recovering" │ │
|
||||
│ │ └─ F02.2 updates status to "recovering" │ │
|
||||
│ └──────────────────────────────┬──────────────────────────────┘ │
|
||||
│ ▼ │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
@@ -381,7 +384,8 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
│ │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
│ │ create_chunk(flight_id, start_frame_id) │ │
|
||||
│ │ ├─ F10 create_new_chunk() ← Factor graph subgraph │ │
|
||||
│ │ ├─ F10 create_chunk_subgraph(flight_id, chunk_id, │ │
|
||||
│ │ │ start_frame_id) ← Factor graph subgraph │ │
|
||||
│ │ ├─ Initialize chunk state (unanchored, active) │ │
|
||||
│ │ └─ F03 save_chunk_state() │ │
|
||||
│ └──────────────────────────────┬──────────────────────────────┘ │
|
||||
@@ -390,16 +394,19 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
│ │ For each frame in chunk: │ │
|
||||
│ │ │ │
|
||||
│ │ ┌─────────────────────────────────────┐ │ │
|
||||
│ │ │ F07 compute_relative_pose_in_chunk()│ │ │
|
||||
│ │ │ F07 compute_relative_pose() │ │ │
|
||||
│ │ └───────────────────┬─────────────────┘ │ │
|
||||
│ │ ▼ │ │
|
||||
│ │ ┌──────────────────────────────────────┐ │ │
|
||||
│ │ │ F12 add_frame_to_chunk() │ │ │
|
||||
│ │ │ └─ F10 add_relative_factor_to_chunk│ │ │
|
||||
│ │ │ (flight_id, chunk_id, frame_i, │ │ │
|
||||
│ │ │ frame_j, relative_pose, cov) │ │ │
|
||||
│ │ └───────────────────┬──────────────────┘ │ │
|
||||
│ │ ▼ │ │
|
||||
│ │ ┌─────────────────────────────────────┐ │ │
|
||||
│ │ │ F10 optimize_chunk() (local) │ │ │
|
||||
│ │ │ F10 optimize_chunk(flight_id, │ │ │
|
||||
│ │ │ chunk_id, iterations) (local) │ │ │
|
||||
│ │ └─────────────────────────────────────┘ │ │
|
||||
│ │ │ │
|
||||
│ └────────────────────────────────────────────────────┘ │
|
||||
@@ -481,7 +488,8 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
│ ▼ │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
│ │ 2. Anchor chunk: F12 mark_chunk_anchored(chunk_id, gps) │ │
|
||||
│ │ └─ F10 add_chunk_anchor() │ │
|
||||
│ │ └─ F10 add_chunk_anchor(flight_id, chunk_id, frame_id, │ │
|
||||
│ │ gps, covariance) │ │
|
||||
│ └──────────────────────────────┬──────────────────────────────┘ │
|
||||
│ ▼ │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
@@ -490,20 +498,22 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
│ └──────────────────────────────┬──────────────────────────────┘ │
|
||||
│ ▼ │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
│ │ 4. Merge: F12 merge_chunks(chunk_id, target_chunk_id, Sim3) │ │
|
||||
│ │ ├─ F10 merge_chunks() ← Apply Sim(3) transform │ │
|
||||
│ │ 4. Merge: F12 merge_chunks(target_chunk_id, chunk_id, Sim3) │ │
|
||||
│ │ ├─ F10 merge_chunk_subgraphs(flight_id, chunk_id, │ │
|
||||
│ │ │ target_chunk_id, transform) ← Apply Sim(3) │ │
|
||||
│ │ ├─ F12 deactivate_chunk(chunk_id) │ │
|
||||
│ │ └─ F03 save_chunk_state() │ │
|
||||
│ └──────────────────────────────┬──────────────────────────────┘ │
|
||||
│ ▼ │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
│ │ 5. Optimize global: F10 optimize_global() │ │
|
||||
│ │ 5. Optimize global: F10 optimize_global(flight_id, │ │
|
||||
│ │ iterations) │ │
|
||||
│ └──────────────────────────────┬──────────────────────────────┘ │
|
||||
│ ▼ │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
│ │ 6. EMIT ChunkMerged event (flight_id,chunk_id,merged_frames)│ │
|
||||
│ │ └─ F14 subscribes → update_results_after_chunk_merge() │ │
|
||||
│ │ ├─ F10 get_trajectory() → ENU poses │ │
|
||||
│ │ ├─ F10 get_trajectory(flight_id) → ENU poses │ │
|
||||
│ │ ├─ F13 enu_to_gps() for each frame │ │
|
||||
│ │ ├─ F03 save_frame_result() + update_waypoint() │ │
|
||||
│ │ └─ F15 send_refinement() → SSE "frame_refined" × N │ │
|
||||
@@ -532,7 +542,7 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
│ │ 3. Create UserInputRequest │ │
|
||||
│ │ 4. F15 send_user_input_request() → SSE "user_input_needed" │ │
|
||||
│ │ 5. EMIT UserInputNeeded event │ │
|
||||
│ │ └─ F02 subscribes → Update status to "BLOCKED" │ │
|
||||
│ │ └─ F02.2 updates status to "BLOCKED" │ │
|
||||
│ └─────────────────────────────────────────────────────────────┘ │
|
||||
└──────────────────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
@@ -561,7 +571,7 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
│ │ 2. F10 add_absolute_factor(is_user_anchor=True) ← σ=5m │ │
|
||||
│ │ 3. F10 optimize() │ │
|
||||
│ │ 4. EMIT UserFixApplied event │ │
|
||||
│ │ └─ F02 subscribes → Update status to "PROCESSING" │ │
|
||||
│ │ └─ F02.2 updates status to "PROCESSING" │ │
|
||||
│ │ 5. Resume processing loop │ │
|
||||
│ └─────────────────────────────────────────────────────────────┘ │
|
||||
└──────────────────────────────────────────────────────────────────────────┘
|
||||
@@ -591,7 +601,7 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
│ │ 3. Identify refined frames │ │
|
||||
│ │ 4. F14 mark_refined(frame_ids) │ │
|
||||
│ │ ├─ For each frame: │ │
|
||||
│ │ │ ├─ F10 get_trajectory() → ENU pose │ │
|
||||
│ │ │ ├─ F10 get_trajectory(flight_id) → ENU pose │ │
|
||||
│ │ │ ├─ F13 enu_to_gps(flight_id, enu_pose) │ │
|
||||
│ │ │ ├─ F03 save_frame_result(refined=True) │ │
|
||||
│ │ │ └─ F03 update_waypoint() │ │
|
||||
@@ -651,12 +661,13 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
**Sequence**:
|
||||
```
|
||||
┌──────────────────────────────────────────────────────────────────────────┐
|
||||
│ F02 Flight Processor │
|
||||
│ F02.1 Flight Lifecycle Manager │
|
||||
│ │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
│ │ 1. All frames processed │ │
|
||||
│ │ 1. All frames processed (Signal from F02.2) │ │
|
||||
│ │ 2. Wait for pending chunk merges (if any) │ │
|
||||
│ │ 3. F10 optimize_global(iterations=100) ← Final optimization │ │
|
||||
│ │ 3. F10 optimize_global(flight_id, iterations=100) │ │
|
||||
│ │ ← Final optimization │ │
|
||||
│ └──────────────────────────────┬──────────────────────────────┘ │
|
||||
│ ▼ │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
@@ -699,7 +710,7 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
└────────┬────────┘
|
||||
▼
|
||||
┌─────────────────┐
|
||||
│ F02 Complete/ │ ← Complete or cancel active flights
|
||||
│ F02.1 Complete/ │ ← Complete or cancel active flights
|
||||
│ Cancel │
|
||||
└────────┬────────┘
|
||||
▼
|
||||
@@ -760,8 +771,13 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||
│ ORCHESTRATION LAYER │
|
||||
│ ┌─────────────────────────────────────────────────────────────────────┐ │
|
||||
│ │ F02 Flight Processor │ │
|
||||
│ │ (Central coordinator, event subscriber, background task manager) │ │
|
||||
│ │ F02.1 Flight Lifecycle Manager │ │
|
||||
│ └─────────────────────────────────────────────────────────────────────┘ │
|
||||
│ │ (Spawns/Manages) │
|
||||
│ ▼ │
|
||||
│ ┌─────────────────────────────────────────────────────────────────────┐ │
|
||||
│ │ F02.2 Flight Processing Engine │ │
|
||||
│ │ (Processing loop, State machine, Recovery orchestration) │ │
|
||||
│ └─────────────────────────────────────────────────────────────────────┘ │
|
||||
└─────────────────────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
@@ -772,7 +788,7 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
│ ┌─────────────┐ ┌─────────────┐ │ │ ┌───────────────────────┐ │
|
||||
│ │ F04 │ │ F05 │ │ │ │ F11 │ │
|
||||
│ │ Satellite │ │ Image │ │ │ │ Failure Recovery │ │
|
||||
│ │ Data │ │ Input │ │ │ │ (Event emitter) │ │
|
||||
│ │ Data │ │ Input │ │ │ │ (Logic & Strategies) │ │
|
||||
│ └─────────────┘ └─────────────┘ │ │ └───────────────────────┘ │
|
||||
│ │ │ │ │
|
||||
│ ┌─────────────┐ ┌─────────────┐ │ │ ▼ │
|
||||
@@ -827,20 +843,18 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
|
||||
---
|
||||
|
||||
## Event-Based Communication
|
||||
## Status-Based Recovery Communication
|
||||
|
||||
F11 Failure Recovery Coordinator emits events instead of directly calling F02:
|
||||
F11 Failure Recovery Coordinator uses **Direct Call Returns** to communicate with F02.2 Flight Processing Engine. Events have been removed to eliminate circular dependencies and clarify control flow.
|
||||
|
||||
| Event | Publisher | Subscribers | Action |
|
||||
|-------|-----------|-------------|--------|
|
||||
| `RecoveryStarted` | F11 | F02 | Update status to "recovering" |
|
||||
| `RecoverySucceeded` | F11 | F02 | Update status to "processing", resume |
|
||||
| `RecoveryFailed` | F11 | F02 | Update status to "blocked" |
|
||||
| `UserInputNeeded` | F11 | F02 | Update status to "blocked", await fix |
|
||||
| `UserFixApplied` | F11 | F02 | Update status to "processing", resume |
|
||||
| `ChunkCreated` | F11 | F02 | Log chunk creation |
|
||||
| `ChunkAnchored` | F11 | F02 | Log chunk anchor |
|
||||
| `ChunkMerged` | F11 | F02, F14 | F14 updates results for merged frames |
|
||||
| Action | Caller | Called | Return/Outcome |
|
||||
|--------|--------|--------|----------------|
|
||||
| `start_search` | F02.2 | F11 | `SearchSession` object |
|
||||
| `try_current_grid` | F02.2 | F11 | `AlignmentResult` (or None) |
|
||||
| `create_user_input_request` | F02.2 | F11 | `UserInputRequest` object |
|
||||
| `apply_user_anchor` | F02.2 | F11 | Success boolean |
|
||||
|
||||
F02.2 is responsible for updating the flight status (e.g., "recovering", "blocked", "processing") based on these return values.
|
||||
|
||||
---
|
||||
|
||||
@@ -880,4 +894,3 @@ F11 Failure Recovery Coordinator emits events instead of directly calling F02:
|
||||
| Mean Reprojection Error | < 1.0 pixels |
|
||||
| Place Recognition Recall@5 | > 85% |
|
||||
| LiteSAM Success Rate | > 95% (when rotation correct) |
|
||||
|
||||
|
||||
Reference in New Issue
Block a user