rosbag數據記錄及轉換圖片、視頻

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 並寫入一下內容

<launch>
  <node pkg="rosbag" type="play" name="rosbag" args="-d 2 $(find image_view)/test.bag"/>
  <node name="extract" pkg="image_view" type="extract_images" respawn="false" output="screen" cwd="ROS_HOME">
<remap from="image" to="/camera/image_raw"/>
  </node>
</launch>
 $(find image_view)/test.bag" 其中image_view表示package名字,此處改爲你的.bag文件所處的package的名字即可,同時test改爲對應的名字。
 <remap 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:=<IMAGETOPICINBAGFILE> # <IMAGETOPICINBAGFILE>爲bag文件中儲存圖片的topic

PS:如果輸出的圖片數量與rosbag info命令查詢得到的數量不符,可以減少_sec_per_frame參數的值。
3). 打開另一個終端,導向崗新建的文件夾,然後執行:

$ rosbag play <BAGFILE> # <BAGFILE>爲bag文件的路徑

三. 將提取的圖片轉換成視頻

PS:這部分並不涉及ros的操作,可以跳過。
這無非就是將圖片壓成視頻,可以用FFMPEG包或者Mencoder包來執行。
1). 首先決定文件的fps。用rosscore info來確認視頻的圖片數,然後除以持續的時間即可。

# 用mencoder壓制
$ mencoder -nosound mf://*.jpg -mf w=<WIDTH>:h=<HEIGHT>:type=jpg:fps=<FPS> \ -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=<BITRATE>\ :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\ <OUTPUT>.avi # <WIDTH>爲圖片的寬度,<HEIGHT>爲圖片的長度。<FPS>就是每秒所需的圖片張數。<BITRATE>決定視頻的質量,越大越高,一般1800KBits以上就可以。
#  用FFMPEG壓制
$ ffmpeg -r <FPS> -b <BITRATE> -i frame%04d.jpg <OUTPUT>.avi

7. 提取bag文件中的數據並保存爲csv格式

對於非圖片數據,大部分情況下都可用csv文件存儲。從section 5中我們就可以指導用rostopic echo即可打印topic中的數據。

$ rostopic echo -b <BAGFILE> -p <TOPIC> > <output>.csv # <BAGFILE>是bag文件,<TOPIC>爲數據所在的topic

參考:

  1. http://wiki.ros.org/ROS/Tutorials

  2. https://coderwall.com/p/qewf6g/how-to-extract-images-from-a-rosbag-file-and-convert-them-to-video

  3. http://www.clearpathrobotics.com/guides/ros/Practical%20Example.html

  4. http://answers.ros.org/question/9102/how-to-extract-data-from-bag

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章