文章目录
问题背景简述
当时在ros2录制包的过程中,由于板子内存限制导致录制提前中断,db3的数据包保存下来了,但是metadata.yaml确实空的,我直接把其他包的yaml复制修改db3包名称后进行使用,bag可以播放但是话题需要等待很长一段时间才出现

metadata.yaml 信息
-
Bag基本信息
version: 5
storage_identifier: sqlite3
说明:
ROS2 Bag格式版本 = 5
后端存储采用 SQLite3
实际数据保存在:
rosbag2_2026_06_05-03_22_25_0.db3
-
总消息数
message_count: 5619
整个Bag中共记录:
5619条消息
-
Topic统计
激光点云
/cx/lslidar_point_cloud
type: sensor_msgs/msg/PointCloud2
message_count: 1256
记录:
1256帧点云
LaserScan
/cx/scan
type: sensor_msgs/msg/LaserScan
message_count: 1256
记录:
1256帧二维激光
相机
/ image_raw
type: sensor_msgs/msg/Image
message_count: 3107
记录:
3107帧图像
从db3获取信息
录制起始结束时间戳和时长
查看命令
bash
SELECT
(MAX(timestamp)-MIN(timestamp))/1000000000.0
FROM messages;
终端示例
bash
(base) gg@gg:/media/gg/EXTERNAL_USB/ros2bag/rosbag2_2026_06_05-03_22_25$ sqlite3 rosbag2_2026_06_05-03_22_25_0.db3
SQLite version 3.41.2 2023-03-22 11:56:21
Enter ".help" for usage hints.
sqlite> .tables
messages metadata schema topics
sqlite> SELECT MIN(timestamp),MAX(timestamp)
...> FROM messages;
1780600945404366968|1780602252169703608
sqlite> SELECT
(MAX(timestamp)-MIN(timestamp))/1000000000.0
FROM messages;
1306.76533664
录制话题信息数量
查看命令:
bash
SELECT t.name,
MIN(m.timestamp),
MAX(m.timestamp),
COUNT(*)
FROM messages m
JOIN topics t
ON m.topic_id=t.id
GROUP BY t.name;
终端示例
bash
(base) gg@gg:/media/gg/EXTERNAL_USB/ros2bag/rosbag2_2026_06_05-03_22_25$ sqlite3 rosbag2_2026_06_05-03_22_25_0.db3
SQLite version 3.41.2 2023-03-22 11:56:21
Enter ".help" for usage hints.
sqlite> SELECT t.name,
MIN(m.timestamp),
MAX(m.timestamp),
COUNT(*)
FROM messages m
JOIN topics t
ON m.topic_id=t.id
GROUP BY t.name;
/cx/lslidar_point_cloud|1780600945417126136|1780602252072033272|13068
/cx/scan|1780600945404366968|1780602252072146232|13068
/image_raw|1780600945501671704|1780602252169703608|32350
话题信息数量、时间戳、频率
查看命令:
bash
SELECT
t.name,
COUNT(*) AS msg_count,
(MIN(m.timestamp))/1e9 AS start_time,
(MAX(m.timestamp))/1e9 AS end_time,
COUNT(*)*1.0/
((MAX(m.timestamp)-MIN(m.timestamp))/1e9)
AS hz
FROM messages m
JOIN topics t
ON m.topic_id=t.id
GROUP BY t.name;
终端示例
bash
sqlite> SELECT
t.name,
COUNT(*) AS msg_count,
(MIN(m.timestamp))/1e9 AS start_time,
(MAX(m.timestamp))/1e9 AS end_time,
COUNT(*)*1.0/
((MAX(m.timestamp)-MIN(m.timestamp))/1e9)
AS hz
FROM messages m
JOIN topics t
ON m.topic_id=t.id
GROUP BY t.name;
/cx/lslidar_point_cloud|13068|1780600945.41713|1780602252.07203|10.0011104145648
/cx/scan|13068|1780600945.40437|1780602252.07215|10.0010118925262
/image_raw|32350|1780600945.50167|1780602252.1697|24.7576271938493