图 16-1 · 一个 bag 目录里到底装了什么
本图回答的问题:为什么删掉 metadata.yaml 这个包就"失忆",而 .db3 才是消息本体?
目录层
exp16_full/ (一个 bag = 一个目录)
metadata.yaml · 清单
duration: 13.55s(算频率的分母)
storage_identifier: sqlite3
relative_file_paths → *.db3
topics_with_message_count:条数/QoS
exp16_full_0.db3 · SQLite3 消息本体
表1 · topics(话题元数据)
id → name / type / serialization_format
offered_qos_profiles:录时声明的 QoS
→ info 秒查、play 回放按它重建发布端
表2 · messages(时间序列)
timestamp + topic_id + CDR 字节流
索引 → 任意时间点随机访问(跳转按钮)
事务 → 断电最多损坏最后一笔
CDR = DDS 线上原样字节 · 回放零转换 100% 保真
指向
删了它 → info 读不出
Count 来自 topics
频率心算尺
14 / 13.55s ≈ 1.03 Hz ✓
单查一个 _0.db3 会漏分片
查总数必须 ros2 bag info 目录
✅ 结论:metadata.yaml 管"找得到"、.db3 管"内容在",两者缺一不可
⚠️ 风险:单查一个 .db3 漏分片 · 删 yaml 后 info 失忆
🔍 验证:04 节 1.6 cat metadata.yaml + 2 info 心算 1.03Hz
EXP-16 · rosbag2 数据录制与回放