MCAP→LeRobot v3 转换器 v0 验收报告(Phase 0.3 · 2026-08-29)
验收结论:PASS
样本 C:/Users/chunx/egodata/sample/sample_episode.mcap(46.9MB,EgoSuite 单集)端到端转换并读回验证通过。
对账数据
| 指标 | MCAP 源(M0 探针实测) | 转换产物(LeRobotDataset 读回) | 判定 |
|---|---|---|---|
| 姿态拍数 | 1039 拍 @30fps | 1038 帧写入(视频流少 1 帧,99.9%) | PASS |
| 时长 | 34.60s | fps=30 × 1038 帧 | PASS |
| state/action 维度 | head(7)+双手(各 21 关节×7)=301 | float32 ×301 ✓ | PASS |
| 视频轨 | 双路 H.264(Annex-B,关键帧带 SPS/PPS) | cam_left/cam_right 可解码回读,(3,1456,1920) | PASS |
| 质量层 | is_bad 字段(本样本全 False) | valid_ratio=1.0,valid 列随帧保留 | PASS |
| 任务名 | session.SessionMetadata.task_info.task_name | "Accessory Gathering and Desktop Cleaning" | PASS |
| 标定 | CameraCalibration 1920×1456 K/P + FrameTransforms | extra_meta.json 旁路保存 | PASS |
实现要点(scripts/mcap2lerobot.py + mcap2lerobot_convert.py)
- 读端:从 MCAP schema.data 动态构建 protobuf 类(mcap + google.protobuf descriptor pool),无预编译桩
- 写端:
LeRobotDataset.create()官方 writer(v3.0 格式免疫),逐帧add_frame流式写入 - 视频链路:CompressedVideo → PyAV 逐包解码 RGB → writer 编码,内存常驻单帧(首版全量驻留 17GB 被 OOM 杀,已流式化)
- 附加产物:extra_meta.json(标定/外参/会话元数据,世界模型重建用,LeRobot 不消费)
对账单测
tests/test_mcap2lerobot.py 四项:帧数 1039 / state 301 维 / bad_ratio=0(样本干净帧)/ 时长 34.6s 单调 —— 全过。
已知限制(v1 待办)
- 视频流尾部 1 帧差(编码器 GOP 对齐尾帧丢弃,99.9% 对齐,训练无影响)
- 本机 Windows 下 torchcodec native 加载失败自动回退 PyAV(功能正常,速度可再调)
- v2 双输出(GR00T 生态)未接——writer 参数化预留,需要时一个参数加回
- 批量模式(目录扫描+断点续转)未做——10 万小时规模化跑批时的下一步
合规边界(重申)
转换产物仅作训练语料与采集 SOP 对照,不进本仓数据产品(EgoSuite 许可:商用训练可、禁转卖)。
价值链位置
打开"外购 ego 池"(Open100K 90kh + EgoPro 10kh)的接入管线;计量协议 T 指标(可训性验证)对 MCAP 格式客户数据的前置工具。