rosbag相当于是把一段实时数据打包成了一个bag文件,这个文件可以按照自己喜欢的方式去做处理,也可以发送给其他人。可以说,rosbag在学习ROS的过程中扮演了十分重要的角色。本文主要内容来自官网,但做了些概括和补充。rosbag初级教程
录制包 rosbag record
#录制所有的topic
rosbag record -a
#录制某个话题
rosbag recore /velodyne_points
查看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.bag
再rostopic 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
- 进入到/rosbag_filter_gui/scipts后,运行rosbag_filter_gui.py
python rosbag_filter_gui.py
- 在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进阶官方教程