图 16-2 · 录放管线:写进去是原片,放出来是再生

本图回答的问题:从现场消息到 listener 复活,中间经过哪几步?--clock 双开关在管线的哪一段?

① 现场录制(写入) ② SQLite 时间序列 ③ 工位回放(再生) /chatter 等话题流 talker · 1Hz 实时数据 CDR 字节 ros2 bag record Ctrl+C 优雅停 · 事务写盘 exp16_full/ · SQLite3 + YAML t=10.002 /chatter [CDR] t=11.004 /chatter [CDR] … ⚠ kill -9 停录:缓存丢、YAML 不写 → 包损坏(必须 Ctrl+C) ros2 bag play 按原时序 · -r 调速 索引读取 再生发布 listener 分不清新旧 时钟双开关(配合 EXP-11 use_sim_time) ① play --clock → 以约 40Hz 持续再生 /clock 话题 ② 节点 / rviz2 -p use_sim_time:=true → 认钟 漏一个:now=今天 · stamp=昨天 → TF LookupException 满屏 验钟:Panels → Add New Panel → Time ros2 topic delay /scan(须带 header;/chatter 会报 no header) 漏开关的症状在右侧回放段爆发
✅ 结论:record 原片落盘、play 按索引再生,节点无法分辨历史与现场 ⚠️ 风险:kill -9 违规停录 · --clock/use_sim_time 漏一个即时间错位 🔍 验证:04 节 3 回放 listener 复活 + 4 双开关 Time 面板
EXP-16 · rosbag2 数据录制与回放