ROS学习笔记十一:ROS中数据的记录与重放

ROS学习笔记十一:ROS中数据的记录与重放

本节主要介绍如何记录一个正在运行的ROS系统中的数据,然后在一个运行的系统中根据记录文件重新产生和记录时类似的运动情况。本例子还是以小海龟例程为例。

记录数据(创建一个bag文件)

首先运行小海龟例程:

roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key

记录所有的topics

mkdir ~/bagfiles
cd ~/bagfiles
rosbag record -a

记录指定的topics

在运行一个特别复杂的程序时,可能有成百上千个topics,这时记录所有的topics就有些不太现实了。而rosbag record支持记录指定的topics上的数据:

ros record -O subset /turtle1/cmd_vel /turtle1/pose

其中的-O选项说明输出的bag文件为subset.bag文件,要记录的topics就是后面指定的两个。

检验并重放数据

检验数据

可以利用rosbag info来查看bag文件的信息:

rosbag info subset.bag
path:        subset.bag
version:     2.0
duration:    27.9s
start:       Aug 28 2016 10:33:08.22 (1472351588.22)
end:         Aug 28 2016 10:33:36.10 (1472351616.10)
size:        154.3 KB
messages:    1889
compression: none [1/1 chunks]
types:       geometry_msgs/Twist [9f195f881246fdfa2798d1d3eebca84a]
             turtlesim/Pose      [863b248d5016ca62ea2e895ae5265cf9]
topics:      /turtle1/cmd_vel    146 msgs    : geometry_msgs/Twist
             /turtle1/pose      1743 msgs    : turtlesim/Pose

重放数据

关闭发布数据的节点turtle_teleop_key,然后在一个终端中输入如下命令:

rosbag play subset.bag

在turtlesim图形窗口中可以看到小海龟又在运动了,按照subset.bag文件中的数据。默认情况下rosbag play会先等待一段时间0.2秒钟,这是因为他要告诉所有订阅了这个topic的节点都知道这个topic要发布信息了,让节点们做好接收信息的准备,否则刚开始发布的几条信息节点有可能收不到。当然我们可以自定义重放的参数。

rosbag record/play的局限性

在前面进行重放演示的时候就应该已经发现,演示时小海龟的路径和原始输入时的路径并不一致。主要原因是turtlesim的路径跟踪在系统中对于微小的变化都十分敏感,然而rosbag在精确复制系统的运行情况的能力是有限的,所以这个功能好像基本没有什么用途。。。

总结

rosbag record:记录运行系统中的数据并生成bag文件
rosbag info:查看bag文件的信息
rosbag play:根据bag文件中的数据,重放系统

祝枫
2016年8月28日于哈尔滨

你可能感兴趣的:(ROS,ROS学习笔记)