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
rosbag数据记录及转换图片、视频的更多相关文章
- Azure IoT Hub 十分钟入门系列 (3)- 使用消息路由将原始设备数据记录存档
本文主要分享一个案例: 10分钟使用消息路由将原始设备数据记录存档 B站视频讲解:https://www.bilibili.com/video/av90223893/ 本文主要有如下内容: 1.理解什 ...
- 【小工具系列】Python + OpenCV 图片序列转换成视频
图片序列转换成视频 最近一直在找一个工具,能够将一堆图片转化成视频.网上找了一些小软件,还有 win10 的照片自带的视频制作功能,都不是很满意. 又不想下载那些专业的视频剪辑软件大材小用. 然后找到 ...
- 神工鬼斧惟肖惟妙,M1 mac系统深度学习框架Pytorch的二次元动漫动画风格迁移滤镜AnimeGANv2+Ffmpeg(图片+视频)快速实践
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_201 前段时间,业界鼎鼎有名的动漫风格转化滤镜库AnimeGAN发布了最新的v2版本,一时间街谈巷议,风头无两.提起二次元,目前国 ...
- java批量转换图片格式
废话不多直接上代码,代码其实也不多.... package com.qiao.testImage; import java.awt.image.BufferedImage; import java.i ...
- 向EXECL文件中导入数据的同时插入图片
因为项目需要在导出数据到EXECL文档的同时还需要导出图片进去,在处理是遇到的一些问题,在此记录一下. 首先代码写好之后放测试服务器上去执行的时候报错了,报检索 COM 类工厂中 CLSID 为 {0 ...
- 基于OpenCv和swing的图片/视频展示Java实现
基于OpenCv和swing实现图片/视频的展示 图片的展示 swing展示图片,多为操作BufferedImage,这里要关注的核心是将Mat转为BufferedImage. 代码如下: publi ...
- 如何在数据表中存取图片 - 回复 "三足乌" 的问题
问题来源: http://www.cnblogs.com/del/archive/2009/05/28/1491186.html#1801853 准备工作:1.在空白窗体上添加: ClientData ...
- [转]RGB数据保存为BMP图片
转自:http://blog.csdn.net/yixianfeng41/article/details/52591585 一.BMP文件由文件头.位图信息头.颜色信息和图形数据四部分组成. 1.BM ...
- 使用 Qt 获取 UDP 数据并显示成图片(2)
本文首发于 BriFuture 的 个人博客 在我的前一篇文章 使用 Qt 获取 UDP 数据并显示成图片 中,我讲了如何用 Python 模拟发送数据,如何在 Qt 中高效的接收 UDP 数据包并将 ...
随机推荐
- 【ACM非算法部分】scanf()函数
scanf函数 格式说明符: %c 字符型 %d 十进制数 %i 读入十进制,八进制,十六进制数.输入的时候正常是十进制数,若输入0前缀的数将读入八进制,0x前缀读入16进制.若输 ...
- Yii中处理前后台登录新方法
我一开始的做法是在后台登录时设置一个isadmin的session,然后再前台登录时注销这个session,这样做只能辨别是前台登录还是后台登录,但做不到前后台一起登录,也即前台登录了后台就退出了,后 ...
- ⑤SpringBoot之定时任务
本文介绍SpringBoot定时任务的使用,springboot默认已经帮我们实行了,只需要添加相应的注解就可以实现. 1.pom配置文件 pom包里面只需要引入springboot starter包 ...
- Java开发过程中乱码问题理解
1.Java编译器(即编译成class文件时) 用的是unicode字符集.2.乱码主要是由于不同的字符集相互转换导致的,理论上各个字符的编码规则是不同的,是不能相互转换的,所以根本解决乱码的方法就是 ...
- maven环境配置详解,及maven项目的搭建及maven项目聚合
首先:Maven 3.2.1:不同版本中仓库中文件是不一样的,Maven运行,先找用户配置,再找全局配置 1. Maven全局配置:全局统一的配置文件,在maven的安装目录中 2. Maven用户配 ...
- 1108 Finding Average
题意:根据条件判定哪些数是合法的,哪些是不合法的.求其中合法的数的平均值. 思路:字符串处理函数,考虑到最后输出的时候需要控制格式,因此选用scanf()和printf().另外需要了解atof()函 ...
- AJAX验证此ID是否有对应的name
在表格输入一个ID,然后自动根据ID在数据库中查找是否有对应name 这是javascript部分,利用ajax验证 $(document).ready(function() { $("#c ...
- python学习(三) 使用字符串
第三章 使用字符串 ...
- ARM-Linux内核移植之(一)——内核启动流程分析
内核版本:2.6.22 为什么要采用这样一个较低的版本进行移植了,因为韦东山大牛说了,低版本的才能学到东西,越是高版本需要移植时做的工作量越少,学的东西越少. 内核启动分为三个阶段,第一是运行hea ...
- 完全卸载oracle11g步骤:
完全卸载oracle11g步骤:1. 开始->设置->控制面板->管理工具->服务 停止所有Oracle服务.2. 开始->程序->Oracle - OraHome ...