本节主要介绍如何记录一个正在运行的ROS系统中的数据,然后在一个运行的系统中根据记录文件重新产生和记录时类似的运动情况。本例子还是以小海龟例程为例。
首先运行小海龟例程:
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
mkdir ~/bagfiles
cd ~/bagfiles
rosbag record -a
在运行一个特别复杂的程序时,可能有成百上千个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要发布信息了,让节点们做好接收信息的准备,否则刚开始发布的几条信息节点有可能收不到。当然我们可以自定义重放的参数。
在前面进行重放演示的时候就应该已经发现,演示时小海龟的路径和原始输入时的路径并不一致。主要原因是turtlesim的路径跟踪在系统中对于微小的变化都十分敏感,然而rosbag在精确复制系统的运行情况的能力是有限的,所以这个功能好像基本没有什么用途。。。
rosbag record:记录运行系统中的数据并生成bag文件
rosbag info:查看bag文件的信息
rosbag play:根据bag文件中的数据,重放系统
手机扫一扫
移动阅读更方便
你可能感兴趣的文章