
1. 录了整袋却复现不了
「导航偶发停住」的故障袋里只有 /scan 和 /cmd_vel——回放只能证明「当时停了」,不能证明为什么停。缺 TF、缺 controller 状态、缺 diagnostics、缺参数快照。另一种失败:磁盘被图像与点云写爆,关键话题反而没录到。Bag 是证据系统,不是备份按钮。先问:这次录包要证明什么假设?再决定 topic 集合与 QoS。
2. 三层采集
| 层 | 内容 | 默认 |
|---|---|---|
| 状态层 | TF、odom、diagnostics、关键参数 dump、/clock | 始终开 |
| 决策层 | 全局/局部 path、cmd_vel、BT 日志、lifecycle transition | 导航类始终开 |
| 感知层 | 图像、点云、原始 scan | 按需/降采样 |
感知层永远最贵。用正则/排除列表把③做成可开关,而不是默认全录:
# 状态 + 决策最小集
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.yaml3. 最小充分集(导航类)
缺 TF 的袋几乎不可复盘。导航事故最小集:
/tf、/tf_static、/odom/scan或降采样点云/plan、/local_plan、/cmd_vel/diagnostics- 关键参数 dump(
ros2 param dump或白名单节点) /clock(若仿真回放)
录包脚本应拒绝空 topic 集合启动,并在 metadata 写入假设编号与软件 git hash——没有 hash 的袋,一周后变神秘二进制。
4. 回放契约
回放必须带着 /clock 与 use_sim_time 策略一起说清楚:
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_id 与 git_commit。ros2 bag info 快速检查完整性。多机协同录包时,各机 NTP/PTP 对齐后再录——否则 TF 回放会 extrapolation 失败,与现场不一致。
录包规范是团队基础设施。先状态后感知,先假设后 topic 列表。
相关
也可以看看
- ·15 分钟阅读
ContentFilteredTopic:把过滤下推到中间件还是应用层
对比订阅端丢弃、应用层条件判断与 DDS 内容过滤的 CPU/带宽边界,说明表达式能力与发现时序限制;用高频率噪声话题与延迟尖峰验收过滤位置选择。
- ·16 分钟阅读
ROS 2 Action 取消语义:收到 cancel 不等于执行器已经停下
梳理 goal handle 状态机、取消回调与硬件停止之间的异步边界;用可中断执行循环、截止时间和终态发布构建契约并以注入验收。
- ·9 分钟阅读
ROS 2 大消息内存路径:intra-process、loaned message 与 shared memory 不是一回事
以 4K 图像和点云管线为例,逐段核对 rclcpp、RMW 与进程边界上的所有权、分配和真实拷贝。
johan's blog