rosbag录制与回放数据
参考网站
cn/ROS/Tutorials/Recording and playing back data – ROS Wiki
1运行小乌龟
启动两个节点——一个turtlesim可视化节点和一个turtlesim键盘控制节点。
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
这时按下键盘上的方向键应该会让turtle运动起来。需要注意的是要想控制turtle运动你必须先选中启动turtlesim键盘控制节点时所在的终端窗口而不是显示虚拟turtle所在的窗口。
2 rosbag record 录制
2.1 录制全部话题
mkdir ~/bagfiles
cd ~/bagfiles
rosbag record -a
录制结束,在运行rosbag record命令的窗口中按Ctrl-C退出该命令。
2.2 录制某个或某几话题
当运行一个复杂的系统时,比如PR2软件系统,会有几百个话题被发布,有些话题会发布大量数据(比如包含摄像头图像流的话题)。在这种系统中,要想把所有话题都录制保存到硬盘上的单个bag文件中是不切实际的。rosbag record命令支持只录制某些特别指定的话题到单个bag文件中,这样就允许用户只录制他们感兴趣的话题。
在bag文件所在目录下执行以下命令:
rosbag record -O subset /turtle1/cmd_vel # 记录控制命令,回放时可驱动小乌龟动
录制结束,在运行rosbag record命令的窗口中按Ctrl-C退出该命令。
3 rosbag play数据回放
现在我们已经使用rosbag record命令录制了一个bag文件,接下来我们可以使用rosbag info检查看它的内容,使用rosbag play命令回放出来。
3.1 rosbag info
rosbag info <your bagfile> # 查看bagfile信息
举例:
rosbag info 2020-09-05-18-18-23.bag
3.2 回放所有数据
rosbag play <your bagfile> # 回放bagfile所有数据
举例
rosbag play 2020-09-05-18-18-23.bag
回放过程中,小乌龟会动起来~~
3.3 回放选定话题
rosbag play <your bagfile name> --topics <topics> #只回放选定的话题
举例
rosbag play 2020-09-05-19-03-14.bag --topic /turtle1/cmd_vel
3.4 等几秒再回放
默认模式下,rosbag play命令在公告每条消息后会等待一小段时间(0.2秒)后才真正开始发布bag文件中的内容。等待一段时间的过程可以通知消息订阅器消息已经公告了消息数据可能会马上到来。如果rosbag play在公告消息后立即发布,订阅器可能会接收不到几条最先发布的消息。等待时间可以通过-d选项来指定。
rosbag play -d <delay time> <your bagfile>
举例
rosbag play -d 3 2020-09-05-18-18-23.bag # 延时3s再回放
3.5 改变消息回放速率
从运行rosbag play到turtle开始移动时所经历时间应该近似等于之前在本教程开始部分运行rosbag record后到开始按下键盘发出控制命令时所经历时间。你可以通过-s参数选项让rosbag play命令等待一段时间跳过bag文件初始部分后再真正开始回放。最后一个可能比较有趣的参数选项是-r选项,它允许你通过设定一个参数来改变消息发布速率。如果你执行:
rosbag play -r 2 <your bagfile>
举例
rosbag play -r 2 2020-09-05-18-18-23.bag # 回放速率×2
你应该会看到turtle的运动轨迹有点不同了,这时的轨迹应该是相当于当你以两倍的速度通过按键发布控制命令时产生的轨迹