Skip to content

rosbag2 概览

Rosbag2 是 ROS 2 中录制与回放系统数据的工具链——「rosbag」即一个装满带时间戳消息的文件,首要目标是高效录制以实时支撑复杂系统,其次是高效回放以便查看与使用已录制数据。本站内容整理自 Rosbag2 官方仓库 与文档。

Rosbag2 是 ROS 1 时代 rosbag 的继任者。它以「订阅-落盘」的方式捕获系统中所有话题消息(含时间戳),并能按原始节奏或指定速率重新发布,是 ROS 开发中数据记录、调试与测试复现的标准工具。历史背景可参阅项目最初的设计文章。

  • 录制:ros2 bag record 订阅并记录话题——可全量(-a)、指定话题列表或静态列表;录制中发现的新话题自动纳入。
  • 回放:ros2 bag play 按时间戳重放,支持倍速、倒放、起止时间过滤、循环、话题重映射与 QoS 覆盖。
  • 快照模式:持续滚动缓存,事件触发时才落盘——只在出问题时保存最近数据,长时间运行不占满磁盘。
  • 文件分割:按大小(-b)或时长(-d)自动切分,便于归档与分段处理;分片时可自动重发 transient-local(如 /tf_static、/map)保证单文件可独立回放。
  • 格式转换:ros2 bag convert 支持合并、拆分、压缩格式转换、序列化格式转换等重写操作。
  • 多种存储后端:插件化存储架构,内置 sqlite3 与 mcap,另有 rosbag_v2 读取插件(播放 ROS 1 的 bag)。
  • 压缩与加密:写入时压缩(如 zstd)、存储级加密插件满足数据合规需求。
  • 组合与 API:Player/Recorder 可作为组件加载进容器进程内通信;提供 C++ API 与服务接口(暂停/恢复、寻址等)做程序化控制。
  • 仿真时间:--use-sim-time 以 /clock 为时间源录制,与 Gazebo 等仿真器时间轴对齐。
  • 现场调试:机器人出问题时录制全部话题,回到办公室逐帧回放定位原因。
  • 算法离线开发:录制传感器数据后,反复回放给 SLAM、感知、规划算法调参,无需机器人在线。
  • 数据集构建:采集激光/图像/IMU 数据并转换为训练格式;配合仿真器批量生成数据。
  • 回归测试:以固定输入 bag 驱动被测节点,比较输出差异,是 CI 中的常用手段。
  • 系统监测:长时间滚动录制 + 快照模式,异常时保留证据窗口。
  • 与 ROS 2 原生集成:无需改代码,任何话题(含服务/动作的事件流)都能录制;
  • 插件化:存储、压缩、序列化格式均可替换扩展,社区有 mcap、rosbag_v2 等现成插件;
  • 高效:写入按批处理,支持进程内零拷贝路径,可跟上高带宽传感器数据。
  1. 使用示例:录制、回放、过滤与转换的常用命令;
  2. 转换插件:自定义存储与序列化插件的开发;
  3. 设计文档 系列:快照模式、回放寻址、QoS 等机制的设计内幕。

Rosbag2 以 Debian 软件包分发,任何 -ros-base 安装(-desktop 已包含)都会自动安装:

Terminal window
sudo apt-get install ros-$ROS_DISTRO-rosbag2

其他二进制安装方式参见 ROS 2 安装替代方案。