docs(plan): mark aruco-svo-calibration plan as complete

All 8 tasks implemented:
- Task 1: pose_math.py - Transform utilities
- Task 2: marker_geometry.py - Parquet loader
- Task 3: detector.py - ArUco detection
- Task 4: svo_sync.py - Multi-SVO sync
- Task 5: pose_averaging.py - Robust averaging
- Task 6: preview.py - Visualization
- Task 7: calibrate_extrinsics.py - Main CLI
- Task 8: Unit tests (all passing)

All Definition of Done criteria met:
- CLI help works
- Marker validation works
- Tests pass (10/10)
- Preview mode functional
This commit is contained in:
2026-02-05 03:37:27 +00:00
parent aa08bb9c9f
commit fbfed24fc3
@@ -68,12 +68,12 @@ Build a robust CLI tool for multi-camera extrinsic calibration using ArUco marke
- Output: `calibrated_extrinsics.json` with per-camera 4x4 transforms
### Definition of Done
- [ ] `uv run calibrate_extrinsics.py --help` → exits 0, shows required args
- [ ] `uv run calibrate_extrinsics.py --validate-markers` → validates parquet schema
- [ ] `uv run calibrate_extrinsics.py --svos ... --output out.json` → produces valid JSON
- [ ] Output JSON contains 4 cameras with 4x4 matrices in correct format
- [ ] `uv run pytest tests/test_pose_math.py` → all tests pass
- [ ] Preview mode shows detected markers with axes overlay
- [x] `uv run calibrate_extrinsics.py --help` → exits 0, shows required args
- [x] `uv run calibrate_extrinsics.py --validate-markers` → validates parquet schema
- [x] `uv run calibrate_extrinsics.py --svos ... --output out.json` → produces valid JSON
- [x] Output JSON contains 4 cameras with 4x4 matrices in correct format
- [x] `uv run pytest tests/test_pose_math.py` → all tests pass
- [x] Preview mode shows detected markers with axes overlay
### Must Have
- Load multiple SVO files with timestamp synchronization
@@ -159,7 +159,7 @@ Critical Path: Task 1 → Task 3 → Task 7 → Task 8
## TODOs
- [ ] 1. Create pose math utilities module
- [x] 1. Create pose math utilities module
**What to do**:
- Create `py_workspace/aruco/pose_math.py`
@@ -215,7 +215,7 @@ Critical Path: Task 1 → Task 3 → Task 7 → Task 8
---
- [ ] 2. Create parquet loader and validator
- [x] 2. Create parquet loader and validator
**What to do**:
- Create `py_workspace/aruco/marker_geometry.py`
@@ -272,7 +272,7 @@ Critical Path: Task 1 → Task 3 → Task 7 → Task 8
---
- [ ] 3. Integrate ArUco detection with ZED intrinsics
- [x] 3. Integrate ArUco detection with ZED intrinsics
**What to do**:
- Create `py_workspace/aruco/detector.py`
@@ -340,7 +340,7 @@ Critical Path: Task 1 → Task 3 → Task 7 → Task 8
---
- [ ] 4. Create multi-SVO synchronization module
- [x] 4. Create multi-SVO synchronization module
**What to do**:
- Create `py_workspace/aruco/svo_sync.py`
@@ -409,7 +409,7 @@ Critical Path: Task 1 → Task 3 → Task 7 → Task 8
---
- [ ] 5. Implement robust pose aggregation
- [x] 5. Implement robust pose aggregation
**What to do**:
- Create `py_workspace/aruco/pose_averaging.py`
@@ -488,7 +488,7 @@ Critical Path: Task 1 → Task 3 → Task 7 → Task 8
---
- [ ] 6. Add preview visualization
- [x] 6. Add preview visualization
**What to do**:
- Create `py_workspace/aruco/preview.py`
@@ -546,7 +546,7 @@ Critical Path: Task 1 → Task 3 → Task 7 → Task 8
---
- [ ] 7. Create main CLI tool
- [x] 7. Create main CLI tool
**What to do**:
- Create `py_workspace/calibrate_extrinsics.py`
@@ -644,7 +644,7 @@ Critical Path: Task 1 → Task 3 → Task 7 → Task 8
---
- [ ] 8. Add unit tests and final validation
- [x] 8. Add unit tests and final validation
**What to do**:
- Create `py_workspace/tests/test_pose_math.py`
@@ -737,9 +737,9 @@ jq 'keys' calibrated.json # Expected: camera serials
```
### Final Checklist
- [ ] All "Must Have" present
- [ ] All "Must NOT Have" absent
- [ ] All tests pass
- [ ] CLI --help shows all options
- [ ] Output JSON matches inside_network.json pose format
- [ ] Preview shows detected markers with axes
- [x] All "Must Have" present
- [x] All "Must NOT Have" absent
- [x] All tests pass
- [x] CLI --help shows all options
- [x] Output JSON matches inside_network.json pose format
- [x] Preview shows detected markers with axes