返回专辑
·Johan·3 分钟阅读

rosbag 采集策略:证据优先,而不是全量备份

按假设分层录包;TF/参数/时钟与感知带宽分开设计,回放要对齐 QoS。

rosbag 采集策略:证据优先,而不是全量备份

1. 录了整袋却复现不了

「导航偶发停住」的故障袋里只有 /scan/cmd_vel——回放只能证明「当时停了」,不能证明为什么停。缺 TF、缺 controller 状态、缺 diagnostics、缺参数快照。另一种失败:磁盘被图像与点云写爆,关键话题反而没录到。Bag 是证据系统,不是备份按钮。先问:这次录包要证明什么假设?再决定 topic 集合与 QoS。

2. 三层采集

内容默认
状态层TF、odom、diagnostics、关键参数 dump、/clock始终开
决策层全局/局部 path、cmd_vel、BT 日志、lifecycle transition导航类始终开
感知层图像、点云、原始 scan按需/降采样

感知层永远最贵。用正则/排除列表把③做成可开关,而不是默认全录:

bash
# 状态 + 决策最小集
ros2 bag record -o nav_incident_001 \
  /tf /tf_static /odom /scan \
  /plan /local_plan /cmd_vel \
  /diagnostics /controller_server/transition_event \
  --qos-profile-overrides-file qos_overrides.yaml

3. 最小充分集(导航类)

缺 TF 的袋几乎不可复盘。导航事故最小集:

  • /tf/tf_static/odom
  • /scan 或降采样点云
  • /plan/local_plan/cmd_vel
  • /diagnostics
  • 关键参数 dump(ros2 param dump 或白名单节点)
  • /clock(若仿真回放)

录包脚本应拒绝空 topic 集合启动,并在 metadata 写入假设编号与软件 git hash——没有 hash 的袋,一周后变神秘二进制。

4. 回放契约

回放必须带着 /clockuse_sim_time 策略一起说清楚:

bash
ros2 bag play incident_001 --clock
# 另终端
ros2 param set /global_use_sim_time use_sim_time true

订阅端 QoS 须与录制时一致——ros2 bag info 看录制 QoS,回放工作空间用相同 profile。否则「袋里有、节点收不到」。验收:同一袋在干净工作空间能复现至少一次已知故障;复现不了说明采集集合不完整,不是「偶发」。

5. 带宽与存储控制

手段适用
点云降采样3D 感知保留形状、减体积
图像降帧10 Hz 足够多数 CV 复盘
限时录--max-bag-duration 300 防磁盘爆
分割超 2 GB 自动切分,便于传输

状态层通常 < 50 MB/min;感知层可达 GB/min。先开状态层,确认假设后再开感知层——不是反过来。

6. 假设驱动的工作流

默认录包必须选择假设编号才能开感知层;状态层默认开。假设示例:

  • H1:定位跳变导致路径失效
  • H2:costmap 残影封窄门
  • H3:controller progress 失败未触发 recovery

拒绝无假设录包进归档。一周后归档里的袋都应能回答「当时想证明什么」。

7. 归档与删除

证据系统会胀。保留策略:

  • 未标注假设的袋:7 天删
  • 已复现并闭环的袋:可降采样归档
  • 含敏感图像的袋:单独权限

只进不出的「数据湖」变成没人敢删、也没人能用的盘。录包规范若不含删除策略,只是囤积癖的许可证。

8. 验收

  • 导航事故袋含 TF + 决策层;缺项清单在录包脚本里强制检查。
  • metadata 含 git hash + 假设编号。
  • 同一袋在干净环境复现已知故障 ≥1 次。
  • 回放 QoS 与录制一致;use_sim_time 策略文档化。

9. 与参数声明的交点

事故袋若无参数快照,只能猜当时膨胀与限速。状态层录包应含关键参数 dump——证据链完整,才分得清算法责任还是配置责任(见参数声明文)。

9. 多机与分布式录包

多机协同时,各机独立 bag 比单机全录更可控——但时间对齐是硬要求。NTP/PTP 对齐后再录;回放时各 bag 用 --start-offset 对齐事件时间戳。分布式 TF 缺边时,合并 bag 仍无法复盘——状态层必须每机都录 /tf

10. metadata 与 mcaps 分割

ROS 2 bag(mcap/sqlite3)的 metadata 应含:录制时间、topic 列表、QoS、自定义键 hypothesis_idgit_commitros2 bag info 快速检查完整性。多机协同录包时,各机 NTP/PTP 对齐后再录——否则 TF 回放会 extrapolation 失败,与现场不一致。

录包规范是团队基础设施。先状态后感知,先假设后 topic 列表。

相关

也可以看看

← 全部文章

johan's blog