feat(zed): export depth at neural optimal resolution

Restrict ZED depth export to neural modes and default offline MCAP conversion to the SDK-selected optimal depth size instead of camera resolution.

Add a configurable --depth-size option, propagate the actual returned depth dimensions into DepthMap metadata, and emit a dedicated depth calibration topic when depth resolution differs from video.

Update the batch and recording helper scripts to use the new neural-only depth mode surface and pass through depth sizing.

Verification:
- cmake --build build --target zed_svo_to_mcap mcap_multi_record_tester mcap_pose_record_tester -j4
- build/bin/mcap_multi_record_tester
- build/bin/mcap_pose_record_tester
- build/bin/zed_svo_to_mcap --input /workspaces/data/kindergarten/jump/experiment/2/2026-03-18T11-27-15/2026-03-18T11-27-15_zed4.svo2 --output /tmp/zed4_neural_optimal_test.mcap --codec h264 --encoder-device software --mcap-compression zstd --depth-mode neural --depth-size optimal --start-frame 0 --end-frame 9
This commit is contained in:
2026-03-20 12:04:37 +00:00
parent 7808b89a03
commit 2f74a9561d
8 changed files with 497 additions and 190 deletions
@@ -61,6 +61,7 @@ struct McapRecordStreamConfig {
std::string topic{"/camera/video"};
std::string depth_topic{"/camera/depth"};
std::string calibration_topic{"/camera/calibration"};
std::string depth_calibration_topic{"/camera/depth_calibration"};
std::string pose_topic{"/camera/pose"};
std::string body_topic{"/camera/body"};
std::string frame_id{"camera"};
@@ -97,6 +98,9 @@ public:
[[nodiscard]]
std::expected<void, std::string> write_camera_calibration(const RawCameraCalibrationView &calibration);
[[nodiscard]]
std::expected<void, std::string> write_depth_camera_calibration(const RawCameraCalibrationView &calibration);
[[nodiscard]]
std::expected<void, std::string> write_pose(const RawPoseView &pose);
@@ -165,6 +169,11 @@ public:
StreamId stream_id,
const RawCameraCalibrationView &calibration);
[[nodiscard]]
std::expected<void, std::string> write_depth_camera_calibration(
StreamId stream_id,
const RawCameraCalibrationView &calibration);
[[nodiscard]]
std::expected<void, std::string> write_pose(
StreamId stream_id,