Files
crosstyan 9c861105f7 feat: add aruco-svo-calibration plan and utils scripts
- 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
2026-02-05 03:17:05 +00:00

2.0 KiB

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.