(十三)记录和运行以保存的数据

参考网址:

此文章讲怎样将运行中的ROS系统记录保存在a.bag文件,并将保存的该文件运行得到相同的行为。

1,运行前准备工作
安装turtle_teleoppackage 和其相关的packages.
命令如下:
$ roscdturtle_teleop        %好像现在不能用roscd命令,我用的是rospack find turtle_teleop,然后cd 到该目录
$ rosdepinstall turtle_teleop
$ rosmaketurtle_teleop
安装好turtle_teleop package的依赖项,然后生成turtle_teleop和所有没有生成的依赖项。

2,记录数据(生成bag文件
首先,执行下面两条命令:
$ roscdturtle_teleop
$ roslaunchlaunch/turtle_keyboard.launch
此触launch会执行两个节点,turtlesim可视华节点和允许键盘执行节点。将鼠标放在终端,用键盘方向键控制turlesim时,终端会生成:
Reading fromkeyboard
-----------------------------------------
Use arrow keysto move the turtle.

1.2.1记录所有发送的topics
首先,检测所有列表的topics在运行系统中被发送。所以打开新的终端,执行下面命令:
$ rostopic list-v
得到输出结果:
Published topics:
  */turtle1/color_sensor [turtlesim/Color] 1 publisher
  */turtle1/command_velocity [turtlesim/Velocity] 1 publisher
  * /rosout[roslib/Log] 2 publishers
  */rosout_agg [roslib/Log] 1 publisher
  */turtle1/pose [turtlesim/Pose] 1 publisher

Subscribed topics:
  */turtle1/command_velocity [turtlesim/Velocity] 1 subscriber
  * /rosout[roslib/Log] 1 subscriber
这里所列举的topics只是消息类可能被记录的数据日志文件,因为只能发送的消息可以被记录。/turtle1/commanda_velocitypackag是turtle_teleop发送的消息,输入到turtlesim进程。/turtle1/color_sensor和/turtle1/pose消息是turtlesim发送的消息输出。

然后,我们开始记录发送的数据,打开新的终端,执行下面命令:
$ mkdir~/bagfiles
$ cd~/bagfiles
$ rosbag record-a

这里,我们创建一个临时路径来记录数据,然后执行rosbagrecord采用 -a 选项,表示所有的发送topics,都将记录在bag文件中。
将鼠标放到turtlesim终端上,运行10妙左右小海龟,用ctrl+c强制关闭rosbag终端,查看~/bagfiles,可以看到文件命名包括year,data,time 和 suffix.bag。这个文件包含所有节点发送的所有的主题在rosbag record运行时。

1.3,检查和运行bag文件
我们用rosbag record记录发送数据,我们也可以检查他并将他重现出来,采用命令rosbag info和rosbag play。
首先我们来查看下bag文件记载的数据。可以采用info命令,此命令检测bag文件的内容但是并不运行。
$ rosbag info<your bagfile> %我们需要cd到bag保存的目录下
我们得到(这是我电脑生成的):
$ rosbag info2011-02-21-17-06-35.bag 
path:         2011-02-21-17-06-35.bag
version:     2.0
duration:     6:36s (396s)
start:       Feb 21 2011 17:06:36.76(1298279196.76)
end:         Feb 212011 17:13:13.23 (1298279593.23)
size:         2.4MB
messages:     36462
compression: none [3/3chunks]
types:       roslib/Log         [acffd30cd6b6de30f120938c 17c593fb]
              turtlesim/Color     [353891e354491c51aabe32df 673fb446]
              turtlesim/Pose     [863b248d5016ca62ea2e895a e5265cf9]
              turtlesim/Velocity[9d5c2dcd348ac8f76ce2a430 7bd63a13]
topics:       /rosout                         4 msgs @ 323.2 Hz :roslib/Log         (2 connections)
              /turtle1/color_sensor       18189 msgs @  63.3 Hz : turtlesim/Color   
              /turtle1/command_velocity       80 msgs @  24.8 Hz : turtlesim/Velocity
              /turtle1/pose               18189 msgs@   63.7 Hz : turtlesim/Pose

他告诉我们topics的名字,类型,每个消息topic包含的数目。
下一步,我们运行这个bag文件,重现运行系统的行为。首先,要关闭掉所有turtlesim可能运行的节点(在launchturtle_keyboard.launch的终端运行- a Ctrl-C),然后在新的终端运行下命令:
$ rosrunturtlesim turtlesim_node
这个命令launches turtlesim节点,但没有触发键盘节点,我们可以对其用我们保存的bag文件,进行命令该turtle,在新的终端打开:
$ rosbag play<your bagfile>   %需要cd到保存bag文件的目录下。
比如我的是
$ rosbag play2011-02-21-17-06-35.bag 
[ INFO][1298281122.467928564]: Opening 2011-02-21-17-06-35.bag

Waiting 0.2 seconds afteradvertising topics... done.

Hit space to toggle paused, or's' to step.
  [RUNNING]  Bag Time: 1298279593.219138   Duration: 396.463736 / 396.479350      
Done.

我们会看到运行的结果跟我们之前所运行的结果完全一样,在默认的模式下,发送消息时间间隔为2S,时间间隔,可以用 -d 选项来设置。
一般的,/turtle1/command_velocitytopic将被发送,turtle,将在turtlesim运行类似我们已经在teleop程序中运行的模式。运行rosbagplay和turtle移动的间隔时间,应当大致等于原始rosbag record执行的时间和从键盘开始触发。我们也可以使得rosbagplay不从bag文件开始,而是从一些已经开始的间隔中,采用 -s 来设置。最后的选项是 -r,他是用来改变特定发送率的。比如,如果执行下面命令:
$ rosbag play-r 2 <your bagfile>
我们发现turtle执行不同的轨迹,这个轨迹是我们曾经从键盘触发的2倍速度。

1.4,记录数据子集
当运行完整的系统后,比如pr2软件系统,可能有上百个topics被发送。比如视频图像流,潜在的可发送的巨大数据。在这样的系统中,常常需要记录包括所有topics的日志文件保存到硬盘中。rosbagrecord 命令只支持一定的topic保存到bag 文件,运行用户记录感兴趣的topics。
如果turtlesim节点已经退出,重新launch键盘触发节点
$ roscdturtle_teleop
$ roslaunchlaunch/turtle_keyboard.launch
在bag文件路径,运行以下命令:
$ rosbag record-0 subset  /turtle1/command_velocity /turtle1/pose
-O 参数告诉rosbag record 记录的日志文件名为subset.bag,并且topic参数引起rosbag record仅仅subscribe2个topics.触发键盘移动turtle 几秒后,用ctrl+c终止rosbag record。
然后我们查看bagwenj ,(rosbag infosubset.bag)
这是我运行的结果:‘
path:         subset.bag
version:     2.0
duration:     1:44s(104s)
start:       Feb 21 2011 19:59:57.04 (1298289597.04)
end:         Feb 21 2011 20:01:41.27 (1298289701.27)
size:         370.0 KB
messages:     4796
compression: none [1/1 chunks]
types:       turtlesim/Pose     [863b248d5016ca62ea2e895a e5265cf9]
              turtlesim/Velocity[9d5c2dcd348ac8f76ce2a430 7bd63a13]
topics:       /turtle1/command_velocity     44 msgs @   0.6 Hz :turtlesim/Velocity
              /turtle1/pose               4752 msgs@ 64.0 Hz : turtlesim/Pose

1.5,rosbagrecord/play的限制
我们可能发现,对照turtle运行的轨迹和原始轨迹,并不是完全一样的。这是因为turtlesim运行的轨迹,对系统运行时间,非常敏感。rosbag在消息被记录和处理的同时,在消息被rosplay产生和处理的同时,不能精确的复制系统运行的行为。对于turtlesim节点,在当命令消息被处理轻微记时改变时,用户不可能气味完全精确的复制该行为






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值