mirror of
https://github.com/azaion/gps-denied-onboard.git
synced 2026-04-22 20:16:36 +00:00
spec cleanup
This commit is contained in:
@@ -297,8 +297,8 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
│ │ │ │ │
|
||||
│ │ ▼ │ │
|
||||
│ │ ┌─────────────────────────────────────┐ │ │
|
||||
│ │ │ F03 save_heading() via F06 │ │ │
|
||||
│ │ │ update_heading() │ │ │
|
||||
│ │ │ F06 update_heading() → returns │ │ │
|
||||
│ │ │ F02.2 calls F03 save_heading() │ │ │
|
||||
│ │ └─────────────────────────────────────┘ │ │
|
||||
│ │ │ │
|
||||
│ └────────────────────────────────────────────────────┘ │
|
||||
@@ -323,15 +323,15 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
**Sequence**:
|
||||
```
|
||||
┌──────────────────────────────────────────────────────────────────────────┐
|
||||
│ F11 Failure Recovery Coordinator │
|
||||
│ F02.2 calls F11 methods (direct returns, NO EVENTS) │
|
||||
│ │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
│ │ 1. EMIT RecoveryStarted event │ │
|
||||
│ │ └─ F02.2 updates status to "recovering" │ │
|
||||
│ │ 1. F02.2 calls F11.start_search() → returns SearchSession │ │
|
||||
│ │ F02.2 updates status to "recovering" │ │
|
||||
│ └──────────────────────────────┬──────────────────────────────┘ │
|
||||
│ ▼ │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
│ │ 2. create_chunk_on_tracking_loss() via F12 │ │
|
||||
│ │ 2. F02.2 calls F11.create_chunk_on_tracking_loss() via F12 │ │
|
||||
│ │ └─ Proactive chunk creation (processing continues) │ │
|
||||
│ └──────────────────────────────┬──────────────────────────────┘ │
|
||||
│ ▼ │
|
||||
@@ -343,10 +343,9 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
│ │ │ │
|
||||
│ │ ┌───────────────────────────────────────────────────┐ │ │
|
||||
│ │ │ For grid_size in [1, 4, 9, 16, 25]: │ │ │
|
||||
│ │ │ ├─ F04 expand_search_grid() │ │ │
|
||||
│ │ │ ├─ For each tile: │ │ │
|
||||
│ │ │ │ ├─ F04 compute_tile_bounds() │ │ │
|
||||
│ │ │ │ └─ F09 align_to_satellite(img, tile, bounds)│ │ │
|
||||
│ │ │ ├─ F11.expand_search_radius() → tiles │ │ │
|
||||
│ │ │ ├─ F02.2 fetches tiles via F04 │ │ │
|
||||
│ │ │ ├─ F11.try_current_grid() → AlignmentResult │ │ │
|
||||
│ │ │ │ │ │ │
|
||||
│ │ │ └─ If match found: BREAK │ │ │
|
||||
│ │ └───────────────────────────────────────────────────┘ │ │
|
||||
@@ -357,8 +356,8 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
│ │ Single-image match found? │ │
|
||||
│ ▼ ▼ │
|
||||
│ ┌─────────────────────┐ ┌────────────────────────────┐ │
|
||||
│ │ EMIT RecoverySucceeded│ │ Continue chunk building │ │
|
||||
│ │ Resume normal flow │ │ → Flow 7 (Chunk Building) │ │
|
||||
│ │ F11.mark_found() │ │ Continue chunk building │ │
|
||||
│ │ Resume normal flow │ │ → Flow 7 (Chunk Building) │ │
|
||||
│ └─────────────────────┘ │ → Flow 8 (Chunk Matching) │ │
|
||||
│ │ (Background) │ │
|
||||
│ └────────────────────────────┘ │
|
||||
@@ -480,28 +479,28 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
**Sequence**:
|
||||
```
|
||||
┌───────────────────────────────────────────────────────────────────────-──┐
|
||||
│ F11 merge_chunk_to_trajectory() │
|
||||
│ F02.2 orchestrates via F11.merge_chunk_to_trajectory() │
|
||||
│ │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
│ │ 1. Get chunk frames: F12 get_chunk_frames(chunk_id) │ │
|
||||
│ │ 1. Get chunk frames: F12 get_chunk_frames(new_chunk_id) │ │
|
||||
│ └──────────────────────────────┬──────────────────────────────┘ │
|
||||
│ ▼ │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
│ │ 2. Anchor chunk: F12 mark_chunk_anchored(chunk_id, gps) │ │
|
||||
│ │ └─ F10 add_chunk_anchor(flight_id, chunk_id, frame_id, │ │
|
||||
│ │ 2. Anchor chunk: F12 mark_chunk_anchored(new_chunk_id, gps) │ │
|
||||
│ │ └─ F10 add_chunk_anchor(flight_id, new_chunk_id, frame_id│ │
|
||||
│ │ gps, covariance) │ │
|
||||
│ └──────────────────────────────┬──────────────────────────────┘ │
|
||||
│ ▼ │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
│ │ 3. Determine target chunk (predecessor or "main") │ │
|
||||
│ │ └─ Returns target_chunk_id (predecessor or "main") │ │
|
||||
│ │ 3. Determine main chunk (predecessor or "main") │ │
|
||||
│ │ └─ Returns main_chunk_id (predecessor or "main") │ │
|
||||
│ └──────────────────────────────┬──────────────────────────────┘ │
|
||||
│ ▼ │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
│ │ 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) │ │
|
||||
│ │ 4. Merge: F12 merge_chunks(main_chunk_id,new_chunk_id,Sim3) │ │
|
||||
│ │ ├─ F10 merge_chunk_subgraphs(flight_id, new_chunk_id, │ │
|
||||
│ │ │ main_chunk_id, transform) ← Apply Sim(3) │ │
|
||||
│ │ ├─ F12 deactivate_chunk(new_chunk_id) │ │
|
||||
│ │ └─ F03 save_chunk_state() │ │
|
||||
│ └──────────────────────────────┬──────────────────────────────┘ │
|
||||
│ ▼ │
|
||||
@@ -511,10 +510,11 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
│ └──────────────────────────────┬──────────────────────────────┘ │
|
||||
│ ▼ │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
│ │ 6. EMIT ChunkMerged event (flight_id,chunk_id,merged_frames)│ │
|
||||
│ │ └─ F14 subscribes → update_results_after_chunk_merge() │ │
|
||||
│ │ ├─ F10 get_trajectory(flight_id) → ENU poses │ │
|
||||
│ │ ├─ F13 enu_to_gps() for each frame │ │
|
||||
│ │ 6. F11 returns True → F02.2 coordinates result updates: │ │
|
||||
│ │ ├─ F02.2 calls F10 get_trajectory(flight_id) → ENU poses │ │
|
||||
│ │ ├─ F02.2 calls F13 enu_to_gps() for each frame │ │
|
||||
│ │ ├─ F02.2 constructs List[RefinedFrameResult] │ │
|
||||
│ │ └─ F02.2 calls F14.update_results_after_chunk_merge() │ │
|
||||
│ │ ├─ F03 save_frame_result() + update_waypoint() │ │
|
||||
│ │ └─ F15 send_refinement() → SSE "frame_refined" × N │ │
|
||||
│ └─────────────────────────────────────────────────────────────┘ │
|
||||
@@ -522,6 +522,7 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
```
|
||||
|
||||
**Sim(3) Transform**: Translation + Rotation + Scale alignment between chunks
|
||||
**Note**: F14 does NOT call F10/F13. F02.2 performs coordinate conversion and passes GPS results.
|
||||
|
||||
---
|
||||
|
||||
@@ -534,14 +535,18 @@ ASTRAL-Next is a GPS-denied UAV visual localization system using tri-layer match
|
||||
**Sequence**:
|
||||
```
|
||||
┌──────────────────────────────────────────────────────────────────────────┐
|
||||
│ F11 create_user_input_request() │
|
||||
│ F02.2 orchestrates via F11.create_user_input_request() │
|
||||
│ │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
│ │ 1. Get UAV image for frame_id │ │
|
||||
│ │ 2. Get top-5 candidates from F08 │ │
|
||||
│ │ 3. Create UserInputRequest │ │
|
||||
│ │ 4. F15 send_user_input_request() → SSE "user_input_needed" │ │
|
||||
│ │ 5. EMIT UserInputNeeded event │ │
|
||||
│ │ 1. F11.create_user_input_request() → returns UserInputRequest│ │
|
||||
│ │ └─ Gets UAV image, top-5 candidates from F08 │ │
|
||||
│ │ └─ Returns request object (does NOT call F15) │ │
|
||||
│ └──────────────────────────────┬──────────────────────────────┘ │
|
||||
│ ▼ │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
│ │ 2. F02.2 receives UserInputRequest │ │
|
||||
│ │ ├─ F02.2 calls F15.send_user_input_request() │ │
|
||||
│ │ │ → SSE "user_input_needed" │ │
|
||||
│ │ └─ F02.2 updates status to "BLOCKED" │ │
|
||||
│ └─────────────────────────────────────────────────────────────┘ │
|
||||
└──────────────────────────────────────────────────────────────────────────┘
|
||||
|
||||
Reference in New Issue
Block a user