• rosbag数据记录及转换图片、视频


    博客转载自: https://blog.csdn.net/u012706484/article/details/78495896

    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的文件,记录的是 /turtle1/cmd_vel和/turtle1/pose两个信息

    不确定需要记录消息的名称的话,可以查看所有的信息

    rostopic list -v
    

    4.需要将.bag记录的图像数据输出为图片或视频时候,首先创建文件 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。
    

    之后运行launch文件

    roslaunch export.launch
    

    此时数据将被分离成一组图片,并存在“.ros”文件夹中。

    稍后可以创建文件夹 /source ,将/.ros中的图片转移到/source中,即

    mv ~/.ros/frame*.jpg source/
    

    最后转换成视频

    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
    

    四. 提取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



  • 相关阅读:
    【唯星宠物】——CSS/BootStrap/Jquery爬坑之响应式首页
    layui table数据渲染页面+筛选医生+在筛选日期一条龙2
    layui table数据渲染页面+筛选医生+在筛选日期一条龙
    拿到数组逗号分隔在循环拿到里面的数据,最后DOM插入页面
    解决跨域请求的几种方式
    MUI下拉刷新
    Java集合(6):理解Map
    Java集合(5):理解Collection
    Java集合(4):未获支持的操作及UnsupportedOperationException
    Java集合(3):使用Abstract类
  • 原文地址:https://www.cnblogs.com/flyinggod/p/9363984.html
Copyright © 2020-2023  润新知