rosbag
第一步:录制数据
假设你已经启动了雷达驱动和底盘驱动,现在的 Topic 列表里应该有 /scan (雷达) 和 /tf (坐标变换)。
打开终端,准备录制: 我们不要录制所有数据(太大了),只录制关键的。同时给文件起个好名字,并开启压缩。
Bash
1
2# 语法:rosbag record -O <文件名> --lz4 <话题1> <话题2> ...
rosbag record -O my_test_01.bag --lz4 /scan /tf /odom-O my_test_01.bag: 把文件保存为my_test_01.bag(而不是默认的时间戳名字)。--lz4: 开启压缩(强烈建议,尤其是数据量大时)。/scan /tf /odom: 只录制这三个关键话题。
开始运行机器人: 用遥控器控制机器人在房间里走一圈。
结束录制: 在刚才的终端按
Ctrl + C。你会发现当前目录下多了一个my_test_01.bag文件。
第二步:检查数据
在离开现场前,最好检查一下数据包是否正常。
Bash
1 | rosbag info my_test_01.bag |
看什么?
- Duration: 录制时长对不对?(别只录了 1 秒)。
- Topics: 必须包含
/scan和/tf。如果没有/tf,SLAM 算法通常跑不起来。
第三步:环境准备
现在你坐在电脑前,准备测试算法了。这一步最关键,90% 的新手会漏掉。
因为 Bag 包里的时间是“过去的时间”,而你的 ROS 系统是“当前时间”。为了骗过算法节点,让它以为现在就是“过去”,你需要:
启动 ROS 核心:
Bash
1
roscore
设置仿真时间参数: 打开一个新的终端,输入:
Bash
1
rosparam set use_sim_time true
- 注意:这行命令必须在启动你的 SLAM 节点之前执行。
第四步:运行你的算法
现在启动你需要测试的算法节点。例如,如果你在跑 Gmapping:
Bash
1 | rosrun gmapping slam_gmapping scan:=/scan |
此时终端可能会静悄悄的,因为它在等数据。
第五步:回放数据
现在开始“播放录像”,给算法喂数据。
带时钟回放(必须加 –clock):
Bash
1
rosbag play --clock my_test_01.bag
--clock: 告诉 rosbag 发布/clock话题,驱动系统时间与 Bag 包同步。
控制技巧:
- 暂停:按键盘 空格键。
- 倍速:如果觉得太慢,按
rosbag play --clock -r 2.0 my_test_01.bag(2倍速)。
第六步:在 Rviz 中查看结果
- 打开 Rviz:
rosrun rviz rviz - 设置 Global Frame:通常设置为
map或odom。 - 添加显示:点击 “Add”,添加
LaserScan(查看雷达)和Map(查看建图结果)。
总结流程图
- 录制:
rosbag record -O test.bag /scan /tf - 设置:
rosparam set use_sim_time true - 算法:启动 SLAM 节点
- 回放:
rosbag play --clock test.bag