ROS学习篇(七)rostopic消息记录、回放、转.txt

一、通过bag文件记录话题消息

当发布话题的节点运行后,可以通过rostopic list 列出当前运行的话题,然后记录:

mkdir bagfile
cd bagfile
rosbag record -a  #记录所有的话题

当消息记录完成后,结束ctrl+c终止record的命令行,在新建的bagfile文件中会生成年-月-日-时-分-秒.bag文件。

二、数据重现

我们使用rosbag命令将数据记录在bag文件之后,还可以利用里面的数据重现我们节点的运行状态。

cd bagfile
rosbag info 

会显示此bag文件的一些详细信息(如下图):
ROS学习篇(七)rostopic消息记录、回放、转.txt_第1张图片
回放

cd bagfile
rosbag play 

默认情况下,rosbag play命令会等待0.2秒之后才开始发布信息,这是为了在发布信息之前通知所有订阅信息的节点,以使它们能够及时地接收到rosbag play发布的信息。这个等待时间可以用-d选项指定。

因为rosbag record记录数据是有延迟的,所以在执行rosbag play最初的一小段时间里消息不会发布,使用-s选项后跟秒数可以跳过bag文件记录的前几秒。

-r,它可以改变信息发布的速度:

rosbag play -r 2    #以两倍的速度发布记录的消息

回放指定话题

rosbag play  --topics /topic_name

三、选定话题记录

在一个包含数百个话题的大型系统中,经常会发布诸如图像等的大量的信息,把它们都记录到一个文件里是不现实的,好在rosbag record命令提供了仅记录部分话题的能力。

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

-O选项指定了我们要保存的bag文件的名字(subset.bag),后面的/turtle1/cmd_vel/turtle1/pose则指定了我们要记录信息的话题。

注:rosbag record/play无法完美重现系统的状态。

四、.bag文件转.txt

file_name.bag文件中topic_name话题的消息转换到Txt_name.txt文件中:

rostopic echo -b file_name.bag -p /topic_name > Txt_name.txt

五、.bag文件生成失败,只出现.bag.active文件

根据目前的经验,出现这情况是因为电脑在记录消息时卡掉了,没有完成最终的录制。可以转换成.bag文件,但是消息有丢失(电脑卡掉后的话题内容)
恢复:

  • ①切换到"xxx.bag.active"文件所在的目录下;
  • ②命令行输入“rosbag reindex xxx.bag.active”;
  • ③输入"rosbag fix xxx.bag.active outfile_name.abg";

注:
在第二步结束后,除了原来的以.bag.active为后缀的文件之外,还会生成一个以.bag.org.active为后缀的文件,注意该文件只是中间文件,第三部输入的时候不要对该文件进行修复。

在第三步结束之后,会生成正常的.bag文件

六、使用rxplot画时间趋势曲线

在ROS系统中,标量数据可以根据消息中提供的时间戳作为时间序列绘制图形。
运行可以发布话题的节点后,可以通过rostopic list查看当前的发布的话题,现在,我们不再去使用rostopic echo ,而是通过rxplot命令就能够看到随时间变化的值的曲线。

rqt_plot /topic/data //单个话题,单个数据
rqt_plot /topic/x:y:z //单个话题,向量数据
rqt_plot /topic/x /topic/y /topic/z

或是先打开GUI界面:

rosrun rqt_plot rqt_plot

ROS学习篇(七)rostopic消息记录、回放、转.txt_第2张图片
然后再topic中输入想要观测的话题就可以了。
但是当某个话题数据较多时,需要plot单个数据才会有曲线,或是根本不行。待进一步研究…

你可能感兴趣的:(ROS学习篇)