为了方便调试测试,ROS提供了数据记录与回放的功能包——rosbag,可以帮助开发者收集ROS系统运行时的消息数据,然后在离线状态下回放。
下面通过乌龟例程来介绍rosbag数据记录和回放的实现方法。
记录数据
首先要在不同终端下分别执行以下命令,启动键盘控制乌龟例程所需的所有节点:
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun turtlesim turtle_teleop_key
查看当前ROS系统中发布的话题,因为只有发布的消息才能被记录下来:
$ rostopic list -v
接下来用rosbag记录这些话题的消息,并且打包成一个文件放置到指定文件夹中,成功生成的数据记录文件应该是一个以时间命名并且以.bag为后缀的文件。打开一个新终端,输入以下指令:
$ mkdir ~/bagfiles
$ cd ~/bagfiles
$ rosbag record -a //-a表示将所有发布的话题消息都记录在这一个bag文件中
检查并回放数据
我们可以执行info命令检查bag文件的内容而不回放它:
$ rosbag info <your bagfile>
我们可以使用rosbag play回放bag文件来再现系统运行过程。在这个例子里要先关闭之前打开的turtle_teleop_key控制节点,并且重新启动turtlesim_node节点,然后使用以下命令回放所记录的话题数据:
$ rosbag play <your bagfile>
录制数据子集
在一个复杂的系统中,会有上百个话题被发布,如果这时候只录制子集想要的话题,我们可以使用rosbag record命令,后面跟上指定的话题来记录。例如
$ rosbag record /turtle1/cmd_vel