9c861105f7
- Add comprehensive work plan for ArUco-based multi-camera calibration - Add recording_multi.py for multi-camera SVO recording - Add streaming_receiver.py for network streaming - Add svo_playback.py for synchronized playback - Add zed_network_utils.py for camera configuration - Add AGENTS.md with project context
23 lines
2.0 KiB
Markdown
23 lines
2.0 KiB
Markdown
## 2026-02-04 Init
|
|
- Baseline note: ZED SDK stub file `py_workspace/libs/pyzed_pkg/pyzed/sl.pyi` has many LSP/type-stub errors pre-existing in repo.
|
|
- Do not treat as regressions for this plan.
|
|
|
|
- ZED Fusion pose semantics confirmed by librarian:
|
|
- `/usr/local/zed/include/sl/Fusion.hpp` indicates `FusionConfiguration.pose` is "WORLD Pose of camera" in InitFusionParameters coordinate system/units.
|
|
- `/usr/local/zed/doc/API/html/classsl_1_1Matrix4f.html` indicates Matrix4f is row-major with translation in last column.
|
|
|
|
- Local LSP diagnostics not available: `basedpyright-langserver` is configured but not installed. Use `py_compile` + runtime smoke checks instead.
|
|
- Git commands currently fail due to missing git-lfs (smudge filter). Avoid git-based verification unless git-lfs is installed.
|
|
|
|
- `ak.from_parquet` requires `pyarrow` and `pandas` to be installed in the environment, which were missing initially.
|
|
|
|
## Task 6: IndexError in draw_detected_markers
|
|
- **Bug**: `draw_detected_markers` assumed `ids` was always 2D (`ids[i][0]`) and `corners` was always a list of 3D arrays.
|
|
- **Fix**: Flattened `ids` using `ids.flatten()` to support both (N,) and (N, 1) shapes. Reshaped `corners` and `int_corners` to ensure compatibility with `cv2.polylines` and text placement regardless of whether input is a list or a 3D/4D numpy array.
|
|
The calibration loop was hanging because SVOReader loops back to frame 0 upon reaching the end, and 'any(frames)' remained true. Fixed by calculating 'max_frames' based on remaining frames at start and bounding the loop.
|
|
- Fixed pose parsing in self-check: used np.fromstring instead of np.array on the space-separated string.
|
|
- Guarded max_frames calculation with a safety limit of 10,000 frames and handled cases where total_frames is -1 or 0.
|
|
- Improved --validate-markers mode to exit cleanly with a message when no SVOs are provided.
|
|
- Fixed pose string parsing in self-check distance block to use np.fromstring with sep=' '.
|
|
- Added max_frames guard for unknown total_frames (<= 0) to prevent infinite loops when SVO length cannot be determined.
|