rosbag

第一步:录制数据

假设你已经启动了雷达驱动和底盘驱动,现在的 Topic 列表里应该有 /scan (雷达) 和 /tf (坐标变换)。

  1. 打开终端,准备录制: 我们不要录制所有数据(太大了),只录制关键的。同时给文件起个好名字,并开启压缩。

    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: 只录制这三个关键话题。
  2. 开始运行机器人: 用遥控器控制机器人在房间里走一圈。

  3. 结束录制: 在刚才的终端按 Ctrl + C。你会发现当前目录下多了一个 my_test_01.bag 文件。


第二步:检查数据

在离开现场前,最好检查一下数据包是否正常。

Bash

1
rosbag info my_test_01.bag

看什么?

  • Duration: 录制时长对不对?(别只录了 1 秒)。
  • Topics: 必须包含 /scan/tf。如果没有 /tf,SLAM 算法通常跑不起来。

第三步:环境准备

现在你坐在电脑前,准备测试算法了。这一步最关键,90% 的新手会漏掉。

因为 Bag 包里的时间是“过去的时间”,而你的 ROS 系统是“当前时间”。为了骗过算法节点,让它以为现在就是“过去”,你需要:

  1. 启动 ROS 核心:

    Bash

    1
    roscore
  2. 设置仿真时间参数: 打开一个新的终端,输入:

    Bash

    1
    rosparam set use_sim_time true
    • 注意:这行命令必须在启动你的 SLAM 节点之前执行。

第四步:运行你的算法

现在启动你需要测试的算法节点。例如,如果你在跑 Gmapping:

Bash

1
rosrun gmapping slam_gmapping scan:=/scan

此时终端可能会静悄悄的,因为它在等数据。


第五步:回放数据

现在开始“播放录像”,给算法喂数据。

  1. 带时钟回放(必须加 –clock):

    Bash

    1
    rosbag play --clock my_test_01.bag
    • --clock: 告诉 rosbag 发布 /clock 话题,驱动系统时间与 Bag 包同步。
  2. 控制技巧:

    • 暂停:按键盘 空格键
    • 倍速:如果觉得太慢,按 rosbag play --clock -r 2.0 my_test_01.bag(2倍速)。

第六步:在 Rviz 中查看结果

  1. 打开 Rviz:rosrun rviz rviz
  2. 设置 Global Frame:通常设置为 mapodom
  3. 添加显示:点击 “Add”,添加 LaserScan(查看雷达)和 Map(查看建图结果)。

总结流程图

  1. 录制rosbag record -O test.bag /scan /tf
  2. 设置rosparam set use_sim_time true
  3. 算法:启动 SLAM 节点
  4. 回放rosbag play --clock test.bag