3. 数据采集与存储格式:ROS Bag、HDF5、Mcap、自定义二进制格式

做多传感器融合,第一步就是搞定数据怎么存。

我见过太多团队,算法调得飞起,结果回放数据时发现格式不兼容,或者磁盘写爆了。说白了,存储格式选错了,后面全是坑。

今天咱们就把主流的几种格式掰开揉碎聊一聊。我个人习惯,先看场景再选格式,别盲目跟风。

3.1 ROS Bag:老牌劲旅,生态为王

ROS Bag 是 ROS 生态下的标准格式。你想想看,如果你用 ROS 做开发,那 Bag 几乎是默认选项。

优点:

  • 与 ROS 无缝集成,录制和回放就是一行命令的事
  • 支持时间戳同步,话题过滤,非常方便
  • 社区资源丰富,各种工具链成熟

缺点:

  • 文件体积大。我做过一个项目,64线激光雷达加上6个摄像头,录了10分钟,Bag文件直接飙到50GB
  • 不支持随机访问。你想跳转到第5分钟的数据?得从头读到尾
  • 跨语言支持一般,C++和Python没问题,但其他语言就麻烦了
我的经验: 如果你在做原型验证,或者团队全是ROS生态,用Bag没毛病。但如果是量产车的数据采集,我建议你慎重。

3.2 HDF5:科学计算的老大哥

HDF5 来自高性能计算领域。我第一次接触它是在做气象数据分析时,后来发现用在传感器数据上也很香。

优点:

  • 支持分层数据结构,像文件系统一样组织数据
  • 压缩效率高。同样的数据,HDF5 比 Bag 小 30%-50%
  • 支持随机访问和并行I/O,大数据场景下性能极佳

缺点:

  • 学习曲线陡。API 设计偏底层,新手容易搞错
  • 时间戳管理需要自己实现,不像 Bag 那么方便
  • 跨语言绑定虽然多,但质量参差不齐
避坑指南: 我曾经在项目里直接用 HDF5 的默认配置,结果写入速度慢得离谱。后来发现要调 chunk size 和 compression level,才把性能提上来。记住,HDF5 默认配置不是为实时写入优化的。

3.3 MCAP:后起之秀,专为自动驾驶而生

MCAP 是 Foxglove 团队推出的新格式。说实话,我第一次看到它时觉得「又一个新格式?」,但用下来发现确实有两把刷子。

优点:

  • 支持流式写入,适合长时间录制
  • 文件结构紧凑,支持索引,随机访问速度极快
  • 与 ROS 2 深度集成,同时支持非 ROS 场景

缺点:

  • 生态还在成长中,工具链不如 Bag 丰富
  • 对老版本 ROS 1 支持有限
我的建议: 如果你在做一个新的自动驾驶项目,或者从 ROS 1 迁移到 ROS 2,MCAP 是当前最好的选择。它解决了 Bag 的很多痛点,而且性能确实好。

3.4 自定义二进制格式:终极性能,但代价不菲

嗯,这里要注意。自定义格式是最后的选择,不是第一选择。

优点:

  • 极致性能。你可以针对传感器数据做最紧凑的编码
  • 完全控制数据布局,内存映射直接访问
  • 文件体积可以做到最小

缺点:

  • 开发成本高。你要自己处理序列化、版本兼容、校验和
  • 调试困难。二进制文件出错了,肉眼根本看不出来
  • 团队协作成本高。每个新人都要学你的私有格式
避坑指南: 我曾经在一个项目里自己撸了一套二进制格式,当时觉得特别牛。结果半年后换了个传感器,协议变了,我的解析代码全得重写。从那以后,除非性能真的压不住,否则我绝不碰自定义格式。

3.5 各格式优缺点对比

特性 ROS Bag HDF5 MCAP 自定义二进制
生态成熟度 ★★★★★ ★★★★ ★★★ ★
文件体积 ★★ ★★★★ ★★★★ ★★★★★
随机访问 ★ ★★★★ ★★★★ ★★★★★
写入性能 ★★★ ★★★ ★★★★ ★★★★★
跨语言支持 ★★ ★★★★ ★★★ ★
学习成本 ★ ★★★ ★★ ★★★★★

3.6 核心逻辑:如何选择?

我画了一张图,帮你理清思路。说白了,就三个问题:

  1. 你在用 ROS 吗? 是 → Bag 或 MCAP;否 → 看下一个问题
  2. 需要随机访问吗? 是 → HDF5 或 MCAP;否 → Bag 也能凑合
  3. 性能压不住了吗? 是 → 自定义二进制;否 → 别折腾
数据存储格式选择流程图 开始选择 使用ROS? 是 ROS版本? ROS Bag MCAP 否 随机访问? HDF5 自定义

你想想看,选格式其实就是在「生态便利性」和「性能」之间做权衡。没有银弹,只有最适合你场景的方案。

我的最终建议:
  • ROS 1 项目 → ROS Bag,别折腾
  • ROS 2 项目 → MCAP,一步到位
  • 非 ROS 项目,需要随机访问 → HDF5
  • 非 ROS 项目,极致性能 → 自定义二进制(但要做好心理准备)

好了,这一章的内容就到这里。记住,数据格式选对了,后面回放、分析、训练都会顺畅很多。别像我当年一样,在格式上栽了跟头才回头补课。

可可精品资料库