Repository navigation
rldb/mcap: vendor MCAP spec 0.1 and validator - #718
Draft
SaveAanchal wants to merge 2 commits into
Draft
SaveAanchal wants to merge 2 commits into
SaveAanchal wants to merge 2 commits into
Conversation
This was referenced Oct 20, 2026
Open
Contributor
This was referenced Oct 22, 2026
What vendors deliver (one raw episode_<id>/episode.mcap per recording, plus optional annotation.mcap) and the check every delivery goes through before conversion to Lance: - SPEC.md: the vendor-facing spec; spec.py: the same rules as data (human / robot topic profiles, episode-info keys, frames, thresholds); schemas.py: the egoverse.* message types, rendered to proto/egoverse.proto for vendors. - validate.py: `python -m egomimic.rldb.mcap.validate episode_<id>/...` checks presence, video, clocks, calibration, IMU, poses and task/label spans, and prints the Lance recording_id each episode will get. - tests: synthetic episodes with one switch per mistake (each must report exactly its problem), proto/enum sync, and an integration run on real episodes. - pyproject: mcap, mcap-protobuf-support, foxglove-schemas-protobuf; ships the .proto. Checked on two real Aria recordings converted to the spec: both pass, and every column of aria_to_lance's steps rebuilds from the MCAP alone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…er trips on Found in review; each passed validation and then failed in conversion: - a camera whose -info / -info-extra name another frame than its video frames (conversion multiplied through the wrong frame). The video, -info and -info-extra must now name the same frame. - a head-worn rig's steps camera not rigidly mounted on the head (e.g. its calibration in `world`): the converter places the steps through a /tf_static path from `head` to that camera, which is now required. (A frame placed nowhere is still reported once, as having no path to world.) - a NaN / Inf /tf_static translation (conversion: "SVD did not converge"); only the rotations were checked. Translations must now be finite. SPEC.md states the three rules. Both real Aria test recordings still validate clean. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
RyanPCo
force-pushed
the
aanchal/mcap-validator
branch
from
October 22, 2026 14:06
c30cb1d to
378e486
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Stacked on #717.
What
What vendors deliver, and the check every delivery passes before it is converted to Lance. One raw MCAP per whole recording:
episode_<id>/episode.mcap, plus an optionalannotation.mcapfor labels.egomimic/rldb/mcap/SPEC.md: the vendor-facing spec, covering:lab/site/vendoras in the Lance pilot, andvendor-recording-idforrecording_id;hand-jointsnames each vendor's layout, and the wrist frame convention;spec.py: the same rules as data.schemas.py: theegoverse.*messages, rendered toproto/egoverse.protofor vendors.validate.py:python -m egomimic.rldb.mcap.validate episode_<id>/....Check groups: presence and types, video, clocks, calibration and frame graph, IMU, poses, and task/label spans. The label rules are the same ones
lance/annotations.pyapplies.Frame rules the converter relies on:
-infoand-info-extramust name the same frame;/tf_staticpath tohead, which is how the steps are placed;/tf_statictranslations must be finite, as well as its rotations being unit.Each of these used to pass validation and then fail inside conversion.
Output: PASS or the list of problems, plus the Lance
recording_idthe episode will get.Tests
tests/unit/test_mcap_validate.py: synthetic episodes, each with one breakage, must report exactly that problem. That includes a calibration naming another frame than its video, a steps camera fixed in the world instead of on the head, and a NaN static translation. Also checks proto/enum sync and the Lance ID and annotation types.tests/integration/test_mcap_abc.py: real episodes, viaEGOVERSE_TEST_*paths.aria_to_lance's steps rebuilds from those MCAPs alone.pyproject.tomladdsmcap,mcap-protobuf-supportandfoxglove-schemas-protobuf, and ships the.proto.🤖 Generated with Claude Code