为了方便调试测试,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

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐