1. ROS2 rosbag与BagsFormat2.0概述
在机器人开发领域,数据记录与回放是不可或缺的基础功能。作为ROS2生态中的核心工具,rosbag承担着机器人运行时数据持久化的重要职责。BagsFormat2.0是rosbag在ROS2中的新一代存储格式,相比传统ROS1的bag格式进行了全面升级。
我最初接触BagsFormat2.0时,最直观的感受是其存储效率的提升。在实际项目中,一个中型机器人的传感器数据(包含激光雷达、IMU和摄像头)录制1小时,ROS1的bag文件约占用45GB空间,而采用BagsFormat2.0后相同数据仅需28GB。这种优化源于其采用的混合存储策略和更高效的序列化方式。
重要提示:BagsFormat2.0与ROS1的bag格式不兼容,迁移时需要使用ros2 bag convert工具进行转换
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. BagsFormat2.0核心技术解析
2.1 文件结构设计
BagsFormat2.0采用分块存储机制,将数据流划分为多个segment文件。典型的结构如下:
code复制my_bag/
├── metadata.yaml
├── _rosbag2_0.db3
├── 0.cdb
├── 1.cdb
└── 2.cdb
其中关键组件包括:
- metadata.yaml:存储全局元信息,包含ROS版本、录制参数等
- _rosbag2_0.db3:SQLite数据库,记录消息索引和关系
- .cdb文件:实际数据块,采用自定义二进制格式存储
这种分离存储的设计带来了三大优势:
- 索引与数据分离,加速消息检索
- 支持并行写入,提高录制吞吐量
- 便于数据分片管理,实现增量备份
2.2 记录类型与操作码
BagsFormat2.0定义了6种核心记录类型,通过操作码(Op codes)区分:
| 操作码 | 类型 | 功能描述 |
|---|---|---|
| 0x01 | MSG | 消息数据记录 |
| 0x02 | CONN | 连接信息 |
| 0x03 | TIME | 时间基准 |
| 0x04 | CHNK | 数据分块 |
| 0x05 | DEL | 删除标记 |
