利用ROS工具从bag包中提取图片和.csv文件
时间:2020-03-24
本文章向大家介绍利用ROS工具从bag包中提取图片和.csv文件,主要包括利用ROS工具从bag包中提取图片和.csv文件使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.查看bag文件中topic、内容:
rosbag info xx.bag
2.安装图片处理工具
sudo apt-get install ffmpeg
3. 新建存储图片的文件夹cam0,执行如下命令:
rosrun image_view extract_images _sec_per_frame:=0.01 image:=/mynteye/left/image_mono
这种方式提取的图片的名称是从0依次排序的,若想提取为图片名是时间戳的需要手写一个.py文件,利用python回放。下面是我的.py文件。
# coding:utf-8 #!/usr/bin/python # Extract images from a bag file. #PKG = 'beginner_tutorials' import roslib #roslib.load_manifest(PKG) import rosbag import rospy import decimal import cv2 from sensor_msgs.msg import Image from cv_bridge import CvBridge from cv_bridge import CvBridgeError # Reading bag filename from command line or roslaunch parameter. #import os #import sys camera0_path = '/home/ubuntu/code/dataset/loop/cam0/data/' camera1_path = '/home/ubuntu/code/dataset/loop/cam1/data/' class ImageCreator(): def __init__(self): self.bridge = CvBridge() with rosbag.Bag('/home/ubuntu/code/dataset/looppp/loop.bag', 'r') as bag: #要读取的bag文件; for topic,msg,t in bag.read_messages(): if topic == "/mynteye/left/image_mono": #图像的topic; try: cv_image = self.bridge.imgmsg_to_cv2(msg,"bgr8") except CvBridgeError as e: print e timestr = msg.header.stamp.to_sec() #%.6f表示小数点后带有6位,可根据精确度需要修改; timer = 100000000 * timestr image_name = "%d" % timer + ".png" #图像命名:时间戳.png cv2.imwrite(camera0_path + image_name, cv_image) #保存; elif topic == "/mynteye/right/image_mono": #图像的topic; try: cv_image = self.bridge.imgmsg_to_cv2(msg,"bgr8") except CvBridgeError as e: print e timestr = msg.header.stamp.to_sec() #%.6f表示小数点后带有6位,可根据精确度需要修改; timer = 100000000 * timestr image_name = "%d" % timer + ".png" #图像命名:时间戳.png cv2.imwrite(camera1_path + image_name, cv_image) #保存; if __name__ == '__main__': #rospy.init_node(PKG) try: image_creator = ImageCreator() except rospy.ROSInterruptException: pass
4. 打开.bag文件所在位置,执行如下命令:
rosbag play xx.bag
5.将非图片数据提取为.csv格式存储:
rostopic echo -b xx.bag -p /mynteye/left/image_mono > cam0data.csv rostopic echo -b xx.bag -p /mynteye/right/image_mono > cam1data.csv rostopic echo -b xx.bag -p /mynteye/imu/imu_raw > imudata.csv
ubuntu
原文地址:https://www.cnblogs.com/Yanfang20180701/p/12559521.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 聊一聊:一道 Promise 链式调用的题目
- linux编译运行c++程序
- Python的运算符 (下)
- 深入理解JVM(③)Java的锁优化
- Spring 基于 Java 的配置 - 如何不用Beans.xml照样描述bean之间的依赖关系
- Spring 中的事件处理
- Vim安装插件管理器Vundle
- Ubuntu下为vim安装YouCompleteMe插件
- 单机部署k8s
- VIM个性化配置(一)
- Django+Vue开发生鲜电商平台之6.使用Vue实现商品类别和商品数据前台显示
- 【程序源代码】基于Python开发的Markdown在线文档系统
- 深度学习Pytorch检测实战 - Notes - 第4章 两阶经典检测器:Faster RCNN
- Numpy中的两个乱序函数
- PerfDog4.0探索,支持用户自建web云