ROS bag包数据的回放,提取任意话题数据,并转化为txt文件

转自:https://blog.csdn.net/jmzlzl/article/details/82775217

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

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

 
  1. mkdir bagfile

  2. cd bagfile

  3. rosbag record -a #记录所有的话题

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

二、数据重现

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

 
  1. cd bagfile

  2. rosbag info <file_name>

会显示此bag文件的一些详细信息(如下图):

 
  1. parallels@parallels-vm:~/bag$ rosbag info MERGED_cv_lanekeeping_2018-04-25-16-14-52.bag

  2. path: MERGED_cv_lanekeeping_2018-04-25-16-14-52.bag

  3. version: 2.0

  4. duration: 1:59s (119s)

  5. start: Apr 26 2018 04:14:52.51 (1524687292.51)

  6. end: Apr 26 2018 04:16:51.76 (1524687411.76)

  7. size: 14.4 GB

  8. messages: 621967

  9. compression: none [13485/13485 chunks]

  10. types: can_msgs/Frame [64ae5cebf967dc6aae4e78f5683a5b25]

  11. dbw_mkz_msgs/BrakeCmd [c0d20e1056976680942e85ab0959826c]

  12. dbw_mkz_msgs/BrakeInfoReport [fc88af128b5b3213ea25ab325a9b3bbb]

  13. dbw_mkz_msgs/BrakeReport [5716c7ce378fb5a251e0ff30ac24500e]

  14. dbw_mkz_msgs/FuelLevelReport [f5ec1964dbda02fda82785b8035744e4]

  15. dbw_mkz_msgs/GearReport [785b94d5bfee677e7f0da982153f2711]

  16. dbw_mkz_msgs/Misc1Report [c5c1e0d6ba52586919873bf9b0355143]

  17. dbw_mkz_msgs/SteeringCmd [ff1fa11624bdc2aff2aeee5aa6014057]

  18. dbw_mkz_msgs/SteeringReport [435efc512abdd87ef2f942c0e8ed296d]

  19. dbw_mkz_msgs/SurroundReport [17a8c9ed72da4f55d44d6d71483cf0e3]

  20. dbw_mkz_msgs/ThrottleCmd [d75259a1444adebea30e45b37542c415]

  21. dbw_mkz_msgs/ThrottleInfoReport [8255d20d2bbc661ad39074024259c71a]

  22. dbw_mkz_msgs/ThrottleReport [dc371d36db36a47de2ffaa1302bf4aec]

  23. dbw_mkz_msgs/TurnSignalCmd [f1310dcd252c98fc408c6df907b9495a]

  24. dbw_mkz_msgs/WheelPositionReport [0e6f28c4c7a099c93cc2173da9808a16]



回放

 
  1. cd bagfile

  2. rosbag play <bagfile_name>

 

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

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

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

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

 

三、选定话题记录

1、查找话题:

在数据回放的时候:新建终端,在终端输入:

 
  1. rostopic list -v

就会得到如图:

 
  1. parallels@parallels-vm:~$ rostopic list -v

  2.  
  3. Published topics:

  4. * /turtle1/cmd_vel [geometry_msgs/Twist] 1 publisher

  5. * /rosout [rosgraph_msgs/Log] 4 publishers

  6. * /rosout_agg [rosgraph_msgs/Log] 1 publisher

  7. * /turtle1/color_sensor [turtlesim/Color] 1 publisher

  8. * /turtle1/pose [turtlesim/Pose] 1 publisher

  9.  
  10. Subscribed topics:

  11. * /turtle1/cmd_vel [geometry_msgs/Twist] 2 subscribers

  12. * /rosout [rosgraph_msgs/Log] 1 subscriber

  13. * /statistics [rosgraph_msgs/TopicStatistics] 1 subscriber

2、提取其中的数据成立新的bag包

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

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

 

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

如果只是记录num次数据:可以在-O 后买你添加参数:-r num

注: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文件

  • 3
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值