ROS使用介绍——rosbag

rosbag相当于是把一段实时数据打包成了一个bag文件,这个文件可以按照自己喜欢的方式去做处理,也可以发送给其他人。可以说,rosbag在学习ROS的过程中扮演了十分重要的角色。本文主要内容来自官网,但做了些概括和补充。rosbag初级教程

文章目录

    • 录制包 rosbag record
    • 查看bag的信息 rosbag info
    • 播放包 rosbag play
    • 包过滤 rosbag filter
    • 包压缩 rosbag compress

录制包 rosbag record

#录制所有的topic
rosbag record -a 

查看bag的信息 rosbag info

rosbag info your.bag

会显示如下内容:

path:        2014-12-10-20-08-34.bag
version:     2.0
duration:    1:38s (98s)
start:       Dec 10 2014 20:08:35.83 (1418270915.83)
end:         Dec 10 2014 20:10:14.38 (1418271014.38)
size:        865.0 KB
messages:    12471
compression: none [1/1 chunks]
types:       geometry_msgs/Twist [9f195f881246fdfa2798d1d3eebca84a]
             rosgraph_msgs/Log   [acffd30cd6b6de30f120938c17c593fb]
             turtlesim/Color     [353891e354491c51aabe32df673fb446]
             turtlesim/Pose      [863b248d5016ca62ea2e895ae5265cf9]
topics:      /rosout                    4 msgs    : rosgraph_msgs/Log   (2 connections)
             /turtle1/cmd_vel         169 msgs    : geometry_msgs/Twist
             /turtle1/color_sensor   6149 msgs    : turtlesim/Color
             /turtle1/pose           6149 msgs    : turtlesim/Pose

这个命令主要是拿来看一个包里的topic,时长,信息类型等。对于比较小的包,直接rosbag play xx.bagrostopic list0即可。但像KITTI转出来的,20多G的,打开实在太慢了,相比起来,info足够。

播放包 rosbag play

rosbag play xx.bag

-d 参数可以用来指定延迟播放的时间(Sec),这是因为如果输入以后直接开始播放的话,那么可能node会错过前面的几帧信息。
-s 参数用于指定从几秒开始.

#从十秒开始播放xx.bag
rosbag play -s 10 xx.bag

-u 参数表示仅use包的前几秒信息。

#仅播放前十秒
rosbag play -u 10 xx.bag

-r 参数用来指定播放速度。

# 2倍速播放
rosbag play -r 2 xx.bag

包过滤 rosbag filter

rosbag filter命令可以用python指令来过滤包,能够使用的内置变量为topic, m , t.secs和t.nsecs。
按时间过滤的时候,需要注意的是应该用UNIX时间,这个时间可以用rosbag info来确定。而如果需要截取一段时间,可以用and来连接。

rosbag filter input.bag output.bag "t.to_sec() <= 1284703931.86 and t.to_sec()>=1284703935.86"

按话题过滤的话,可以这样写:

rosbag filter my.bag only-tf.bag "topic == '/tf'"

但是有时候会面临可能唯独不想要哪些topic,这当然可以用正则表达式来解决。但是对于懒人而言,可能一个可视化工具会更方便:https://github.com/AtsushiSakai/rosbag_filter_gui。需要注意的是,按照README操作可能会提示找不到rosbag_filter_gui,这是因为它并没有生成一个可执行文件。正确的使用方法如下:
1.在任意位置git下该程序

git clone https://github.com/AtsushiSakai/rosbag_filter_gui.git
  1. 进入到/rosbag_filter_gui/scipts后,运行rosbag_filter_gui.py
python rosbag_filter_gui.py
  1. 在GUI界面中选择并打开想要过滤的包,选择需要保留的topic,点击convert,等待几秒,即可看到在包所在路径下多出了一个后缀为_filtered的包。可以用rosbag info xx_filtered,bag来检验转换结果。

包压缩 rosbag compress

有时候我们的包太大了,会导致打开很慢。比如25G的KITTI数据包可能需要10分钟打开。rosbag提供了两种压缩格式:BZ2和LZ4。其中BZ2占用硬盘小,但播放慢。LZ4虽然对体积的压缩不多,但打开速度提高了数倍。另外,此命令会自动备份要压缩的数据包,命名会加一个origin,所以无需担心。

rosbag compress --lz4 slam_2019-12-14-23-24-43_filter.bag

此处仅罗列了常用的操作,更多的命令请参考:rosbag进阶官方教程

你可能感兴趣的:(ROS)