feat(mcap): switch single-source exports to copy layout
Namespace single-source zed_svo_to_mcap outputs with a derived camera label so one-camera exports use the same copy-layout topic shape as current multi-camera copy files. Use the per-camera frame and pose reference identifiers for those single-source outputs, document copy as the current one-camera wire shape, and clarify that legacy /camera/* files are retained only as a legacy contract. Add a small mcap_rgbd_example helper plus mcap_recipes guide for summarizing bundled/copy MCAPs and exporting one RGB/depth sample, and update the validator and viewer wording/behavior to match the bundled-vs-copy semantics.
This commit is contained in:
+12
-4
@@ -1,14 +1,15 @@
|
||||
# MCAP Layout
|
||||
|
||||
`cvmmap-streamer` writes three related MCAP layouts:
|
||||
`cvmmap-streamer` currently deals with three active MCAP layouts plus one legacy single-camera layout:
|
||||
|
||||
- single-camera MCAP export
|
||||
- legacy single-camera `/camera/*` MCAP export
|
||||
- bundled multi-camera timeline export
|
||||
- multi-camera copy export
|
||||
- single-source `zed_svo_to_mcap` output, which now uses the one-camera `copy` shape
|
||||
|
||||
This document covers the topic layout, schema types, and timestamp semantics for both.
|
||||
|
||||
## Single-Camera Layout
|
||||
## Legacy Single-Camera Layout
|
||||
|
||||
Default topics:
|
||||
|
||||
@@ -23,6 +24,8 @@ Default topics:
|
||||
|
||||
Single-camera export preserves the original per-frame source timestamp on video, depth, and pose messages.
|
||||
|
||||
This layout is still used by the generic sink/testers in the repository, but it is no longer the default shape written by `zed_svo_to_mcap` for a single `.svo` or `.svo2` input.
|
||||
|
||||
## Bundled Multi-Camera Layout
|
||||
|
||||
Bundled export namespaces each camera stream and adds one bundle manifest topic:
|
||||
@@ -65,6 +68,11 @@ Because `nearest` emits on the slowest common timeline, faster cameras can legit
|
||||
|
||||
`--copy-range common` trims each camera to the common overlap window without resampling. `--copy-range full` preserves each camera’s full readable timestamp range from the grouped segment.
|
||||
|
||||
Single-source `zed_svo_to_mcap` now writes this same wire shape with one derived label, for example:
|
||||
|
||||
- `/zed4/video`, `/zed4/depth`, `/zed4/calibration` for `*_zed4.svo2`
|
||||
- `/cam1/video`, `/cam1/depth`, `/cam1/calibration` when the filename has no `zedN` suffix
|
||||
|
||||
## Bundle Manifest Contract
|
||||
|
||||
`/bundle` is the authoritative grouping contract for bundled MCAP files. Consumers should not infer grouping from identical MCAP `logTime` values or from matching per-camera timestamps.
|
||||
@@ -151,4 +159,4 @@ For multi-camera `copy` MCAP files, the current validation contract is:
|
||||
- each camera must have `/zedN/video`, `/zedN/depth`, and `/zedN/calibration`
|
||||
- for each camera, `/zedN/video` and `/zedN/depth` message counts must match
|
||||
|
||||
The repository-level Python helper [scripts/mcap_bundle_validator.py](../scripts/mcap_bundle_validator.py) now understands all three layouts and reports which one it found before applying the corresponding validation rules.
|
||||
The repository-level Python helper [scripts/mcap_bundle_validator.py](../scripts/mcap_bundle_validator.py) understands bundled, copy, and legacy `/camera/*` layouts and reports which one it found before applying the corresponding validation rules.
|
||||
|
||||
Reference in New Issue
Block a user