1.查看.bag中包含的信息 : rosbag info
2.0回放.bag中包含的信息: rosbag play
2.1以某一频率发布消息 : rosbag play -r 2
2.2从某一时间节点开始发布消息 : rosbag play -s 2
3.1记录所有topic信息: rosbag record -a
3.2记录部分信息 : rosbag record -o subset /turtle1/cmd_vel /turtle1/pose
产生一个名为subset.bag的文件。
4.将.bag记录的图像数据输出为图片或视频。
a.创建文件 export.luach 并写入一下内容
$(find image_view)/test.bag" 其中image_view表示package名字,此处改为你的.bag文件所处的package的名字即可,同时test改为对应的名字。
from="image" to="/camera/image_raw"/> 此处表示需将你记录的topic名字覆盖掉/image 这个原始的topic。
b.运行launch文件,即
roslaunch export.launch
此时数据将被分离成一组图片,并存在“.ros”文件夹中。
c.创建文件夹 /source
将/.ros中的图片转移到/source中,即
mv ~/.ros/frame*.jpg source/
d.转换视频
cd ~/source
jpeg2yuv -I p -f 15 -j frame%04d.jpg -b 1 > tmp.yuv
//其中-f 15 表示频率, -b 1 表示起始图片的编号。
如果要产生.ogv文件:
ffmpeg2theora --optimize --videoquality 10 --videobitrate 16778 -o output.ogv tmp.yuv
如果要产生mpg文件:
mencoder "mf://*.jpg" -mf type=jpg:fps=15 -o output.mpg -speed 1 -ofps 30 -ovc lavc -lavcopts vcodec=mpeg2video:vbitrate=2500 -oac copy -of mpeg
在本步骤中可能会需要安装部分package,按提示安装即可:
sudo apt-get install packeage-name
二、用ros工具从bag文件中提取图片
1). 首先需要安装一些图片处理依赖的包: MJPEG, ffmpeg
$ sudo apt-get install mjepgtools
$ sudo apt-get install ffmpeg
2). 新建文件夹用于储存提取后的图片,并执行:
$ rosrun image_view extract_images _sec_per_frame:=0.01 image:= # 为bag文件中储存图片的topic
PS:如果输出的图片数量与rosbag info
命令查询得到的数量不符,可以减少_sec_per_frame参数的值。
3). 打开另一个终端,导向岗新建的文件夹,然后执行:
$ rosbag play # 为bag文件的路径
三. 将提取的图片转换成视频
PS:这部分并不涉及ros的操作,可以跳过。
这无非就是将图片压成视频,可以用FFMPEG包或者Mencoder包来执行。
1). 首先决定文件的fps。用rosscore info
来确认视频的图片数,然后除以持续的时间即可。
# 用mencoder压制
$ mencoder -nosound mf://*.jpg -mf w=:h=:type=jpg:fps= \ -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=\ :mbd=2:keyint=132:v4mv:vqmin=3:lumi_mask=0.07:dark_mask=0.2:mpeg_quant:scplx_mask=0.1:tcplx_mask=0.1:naq -o\
7. 提取bag文件中的数据并保存为csv格式
对于非图片数据,大部分情况下都可用csv文件存储。从section 5中我们就可以指导用rostopic echo即可打印topic中的数据。
$ rostopic echo -b -p > .csv # 是bag文件,为数据所在的topic
参考:
http://wiki.ros.org/ROS/Tutorials
https://coderwall.com/p/qewf6g/how-to-extract-images-from-a-rosbag-file-and-convert-them-to-video
http://www.clearpathrobotics.com/guides/ros/Practical%20Example.html
http://answers.ros.org/question/9102/how-to-extract-data-from-bag