从rosbag中提取图片和数据

您所在的位置:网站首页 怎么从黄油中提取图片 从rosbag中提取图片和数据

从rosbag中提取图片和数据

2023-12-13 10:08| 来源: 网络整理| 查看: 265

目录 从rosbag中提取图片和数据1 提取图片1.1 用launch文件提取图片1.1.1 安装工具(一般不需要)1.1.2 直接创建roslaunch文件1.1.3 运行launch文件1.1.4 转移提取的文件1.1.5 批量修改文件名 1.2 用Python提取图片 2 提取数据为csv或txt格式2.1 命令行提取2.1.1 查看topic信息2.1.2 转换为csv格式 2.2 使用Python一次性从rosbag中提取多个csv文件 3 关于同步

从rosbag中提取图片和数据

本文只针对rosbag中包含了图片和数字(可以有多个topic),并需要分别提取不同的数据的情况。提取图片和数据分别介绍两种方法,一种是比较麻烦的方法,一种是利用Python写脚本直接提取。

1 提取图片 1.1 用launch文件提取图片

这种方法比较麻烦,提取后图片名是序号。这部分内容可以参考以下链接: https://blog.csdn.net/tlglove326/article/details/105385208

1.1.1 安装工具(一般不需要) roscd image_view rosmake image_view sudo apt-get install mjpegtools 1.1.2 直接创建roslaunch文件

先cd到rosbag所在文件夹,查看topic名称:

rosbag info xx.bag

创建ros laungh 文件,例如本文命名为:export.launch,文件内容如下:

注意只有两个地方需要修改: (1)$(find image_view)/test.bag处修改为rosbag的路径 (2)camera/image_raw是查看的topic的名字

1.1.3 运行launch文件

打开一个终端运行

roscore

打开另一个终端,cd到export.launch所在路径下,运行:

roslaunch export.launch 1.1.4 转移提取的文件

所提取的图片在~/.ros路径下,将其转移到目标文件中,如:

cd ~ mkdir image mv ~/.ros/*.jpg ~/image 1.1.5 批量修改文件名

提取之后图片的名字都是按照帧的顺序进行命名的,需要修改一下,这个网上有很多方法,这里不再赘述。

1.2 用Python提取图片

这种方法一步到位,操作简单 直接运行下面链接中的Python代码即可: https://blog.csdn.net/qq_22059843/article/details/103018216?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allfirst_rank_v2~rank_v25-3-103018216.nonecase 注意代码中有三个地方需要修改,包的地址/包的名称/目标文件夹。具体代码如下:

#coding:utf-8 import roslib; import rosbag import rospy import cv2 from sensor_msgs.msg import Image from cv_bridge import CvBridge from cv_bridge import CvBridgeError path='image/' #存放图片的位置 class ImageCreator(): def __init__(self): self.bridge = CvBridge() with rosbag.Bag('stat.bag', 'r') as bag: #要读取的bag文件; for topic,msg,t in bag.read_messages(): if topic == "/usb_cam/image_raw": #图像的topic; try: cv_image = self.bridge.imgmsg_to_cv2(msg,"bgr8") except CvBridgeError as e: print e timestr = "%.6f" % msg.header.stamp.to_sec() #%.6f表示小数点后带有6位,可根据精确度需要修改; image_name = timestr+ ".png" #图像命名:时间戳.jpg cv2.imwrite(path+image_name, cv_image) #保存; if __name__ == '__main__': #rospy.init_node(PKG) try: image_creator = ImageCreator() except rospy.ROSInterruptException: pass 2 提取数据为csv或txt格式

这个比较简单,两种方法都很简单

2.1 命令行提取 2.1.1 查看topic信息 rosbag info xx.bag 2.1.2 转换为csv格式 rostopic echo -b xxx.bag -p /topic > xxx.csv(或.txt)都可以

【注意】/topic是话题名称,xxx.csv是被转换成的名称,这两个地方需要修改

2.2 使用Python一次性从rosbag中提取多个csv文件

具体参考下面的链接: https://zhuanlan.zhihu.com/p/97148509

3 关于同步

注意,上述方法只能从原rosbag文件中提取出原本的topic,但是实际使用的过程中发现,尤其是当rosbag中包含多个topic的时候(比如多传感器数据),我们实际关心的是如何能够直接提取出同步好的图片和数据。这个需要用到Ros自带的时间同步滤波器,具体参见我的Github和另一篇博客: github : https://github.com/KatelynLiu/SynMultiSensors 博客 : https://blog.csdn.net/weixin_43977894/article/details/108423854

转载请声明出处



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3