ROSBAG解析bag包教程

2023-05-16

一. 软件安装教程
1. 安装rosbag:https://www.cnblogs.com/arkenstone/p/6676203.html
2. 安装mjepgtools和ffmpeg
$ sudo apt-get install mjepgtools
$ sudo apt-get install ffmpeg

 

二. 数据解析教程
1. 打开命令行,输入roscore,保持窗口不动
2. 打开第二个命令行窗口,输入rosbag info $.bag(bag的路径),获取信息如下,记住topic中的信息。    /image_raw对应图片topic;/points_raw对应点云的topic;

path:        /home/cuicuizhang/Downloads/orign-data/data2/2020-07-29-15-58-56.bag
version:     2.0
duration:    2.9s
start:       Jul 29 2020 15:58:56.38 (1596009536.38)
end:         Jul 29 2020 15:58:59.26 (1596009539.26)
size:        221.5 MB
messages:    102
compression: none [102/102 chunks]
types:       sensor_msgs/Image       [060021388200f6f0f447d0fcd9c64743]
             sensor_msgs/PointCloud2 [1158d486dd51d683ce2f1be655c3c181]
topics:      /image_raw    73 msgs    : sensor_msgs/Image      
             /points_raw   29 msgs    : sensor_msgs/PointCloud2


3. 解析图片:
    3.1 将命令行窗口路径切换到图片保存的目录下         

cd /home/cuicuizhang/Downloads/orign-data/data1/image

    3.2 在该命令行下输入:rosrun pcl_ros pointcloud_to_pcd input:=<topic>

example:rosrun pcl_ros pointcloud_to_pcd input:=/image_raw

    3.3 新开第三个命令行窗口,输入:rosbag play $.bag      

example: rosbag play /home/cuicuizhang/Downloads/orign-data/data2/2020-07-29-15-58-56.bag

    3.4 图片数据已经保存在/home/cuicuizhang/Downloads/orign-data/data1/image目录下

 

4. 解析pcd:
    4.1 将命令行窗口路径切换到图片保存的目录下         

 cd /home/cuicuizhang/Downloads/orign-data/data1/pcd

    4.2 在该命令行下输入:rosrun pcl_ros pointcloud_to_pcd input:=<topic>          

example:rosrun pcl_ros pointcloud_to_pcd input:=/points_raw

    4.3 新开第三个命令行窗口,输入:rosbag play $.bag          

example: rosbag play /home/cuicuizhang/Downloads/orign-data/data2/2020-07-29-15-58-56.bag

    4.4 图片数据已经保存在/home/cuicuizhang/Downloads/orign-data/data1/pcd目录下

 

5. 解析跟pcd对应的图片:

 5.1 提取带时间戳的图片

# 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 = '/media/cuicuizhang/hold/2020.8.14bag/pics/01/img/'  # 存放图片的位置
 
 
class ImageCreator():
 
    def __init__(self):
        self.bridge = CvBridge()
        with rosbag.Bag('/media/cuicuizhang/hold/2020.8.14bag/01.bag', 'r') as bag:  # 要读取的bag文件;
            for topic, msg, t in bag.read_messages():
                if topic == "/image_raw":  # 图像的topic;
                    try:
                        cv_image = self.bridge.imgmsg_to_cv2(msg, "bgr8")
                    except CvBridgeError as e:
                        print e
                    timestr = "%.9f" % msg.header.stamp.to_sec()
                    # %.6f表示小数点后带有6位,可根据精确度需要修改;
                    image_name = timestr + ".jpg"  # 图像命名:时间戳.jpg
                    print (path + image_name)
                    cv2.imwrite(path + image_name, cv_image)  # 保存;
 
 
if __name__ == '__main__':
 
    # rospy.init_node(PKG)
 
    try:
        image_creator = ImageCreator()
    except rospy.ROSInterruptException:
        pass

  5.2 找到与pcd最近的时间戳的图片,重命名

import numpy as np
 
img_path_list = "/media/cuicuizhang/hold/2020.8.14bag/pics/06/jpg.txt"
pcd_path_list = "/media/cuicuizhang/hold/2020.8.14bag/pics/06/pcd.txt"
img_to_pcd_list = "/media/cuicuizhang/hold/2020.8.14bag/pics/06/jp.sh"
 
img_list = []
pcd_list = []
with open(img_path_list) as fimg:
    lines = fimg.readlines()
    for line in lines:
        img_list.append(line.strip().split('.jpg')[0])
 
with open(pcd_path_list) as fpcd:
    lines = fpcd.readlines()
    for line in lines:
        pcd_list.append(line.strip().split('.pcd')[0])
 
 
with open(img_to_pcd_list,'w') as fw:
 
    for pcd in pcd_list:
        print("pcd:", pcd)
        idx = np.searchsorted(img_list, pcd) - 1
        mask = idx >= 0
        if idx + 1 < len(img_list) and abs(float(img_list[idx])-float(pcd))>abs(float(img_list[idx+1])-float(pcd)):
            mask = idx+1
        else:
            mask = idx
        print("img:",img_list[mask])
        fw.write("cp img/")
        fw.write(img_list[mask])
        fw.write('.jpg ')
        fw.write('img_correct/')
        fw.write(pcd)
        fw.write(".jpg")
        fw.write('\n')


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROSBAG解析bag包教程 的相关文章

随机推荐

  • esp32s2 tinyusb vendor device小总结

    usb 802 11 wifi网卡 xff0c 遇到点问题 对tinyusb的架构有一点小了解了 发送路径 xff1a 用户调用tud vendor write urb msg urb len 启动传输 tud vendor write g
  • Java面试回报率最高的5本书!别再傻傻的看入门到放弃系列了!

    二八定律工欲善其事 xff0c 必先利其器读一本好书 如果你是一名 程序猿 xff0c 那么你肯定免不了准备各种面试 毕竟无论校招还是社招都是要经过严格的面试流程 xff0c 才能入职 可能每个人准备面试的方法也不一样 xff0c 但是读一
  • 2020互联网大厂硕士生薪资出炉!来源OfferShow爆料整理!

    今天和大家聊一聊 2020 届秋招硕士生开发岗位的薪资情况 最近看网上有人爆料 2020 互联网大厂校招硕士生的薪资情况 xff0c 这份榜单中包含了 10 家公司 xff0c 其中有 4 家是我秋招中拿到 offer 且谈过薪资的 榜单中
  • nvidia nx平台HDMIDP输出红色噪声调试记录

    1 前言 使用定制板 Jetpack版本是4 4 1 L4T 32 4 4 使用以下命令 当同时通过nvoverlaysink输出视频到HDMI DP时 在整个DP屏幕上出现红色噪声错误 gst launch 1 0 videotestsr
  • 没有实习我是不是就拿不到大厂offer了吗?---校招答疑

    可能是快放寒假了 xff0c 也可能是再有 2 3 个月就要进入 2020 年春招 xff08 应届生春季校招和暑期实习生招聘 xff09 了 越来越多的同学开始问实习的事情了 我认识的 20 届的同学有已经日常实习两个月以上的 xff0c
  • 最新42道计算机网络面试题!-- 附答案

    写在前面 计算机网络 计算机操作系统这两个 兄弟 是所有开发岗位都需要 结拜 的 xff0c 不管你是 Java C 43 43 还是测试 对于后端开发的童鞋来说 xff0c 计算机网络的重要性不亚于语言基础 xff0c 毕竟平时开发经常会
  • 秋招没拿到心仪offer,春招还有机会吗?该如何准备?

    最近很多秋招不理想或者考研不理想的同学问我这样一个问题 xff1a 互联网公司春招还有没有机会 xff1f 其实我相信大部分同学问这个问题的时候 xff0c 心里都是有答案的 xff0c 只不过想找一个他认为可以让他安心的人说出这个答案 那
  • 使用Filezilla Server软件配置FTP的全过程

    博主秋招提前批已拿百度 字节跳动 拼多多 顺丰等公司的offer xff0c 可加微信 xff1a pcwl Java 一起交流秋招面试经验 xff0c 可获得博主的秋招简历和复习笔记 使用Filezilla Server软件配置FTP的全
  • JAVA的四类八种基本数据类型

    先说明两个词汇的基本概念 xff1a bit xff08 位 xff09 xff1a 位是计算机中存储数据的最小单位 xff0c 指二进制数中的一个位数 xff0c 其值为 0 或 1 byte xff08 字节 xff09 xff1a 字
  • 集线器、交换机与路由器有什么区别?

    转发自 xff1a https mp weixin qq com s YXWBw3aFTSEFvkg oN9eQA 我相信我们都玩过一款特别火的游戏 xff1a 帝国时代 小时候想要玩帝国时代 xff0c 需要到软件城购买盗版光盘安装 xf
  • 【leetcode】第5题:最长回文子串

    目 录 一 暴力解法 二 动态规划 三 中心扩展法 四 Manacher 算法 先说明几个概念 xff1a 1 子串 xff1a 小于等于原字符串长度 xff0c 由原字符串中任意个连续 字符组成的子序列 xff1b 2 回文 xff1a
  • 字符串的排列与组合【Java 递归实现】

    我们在笔试中经常会遇到需要对字符串进行排列或者组合的题目 本篇文章对字符串的排列和组合进行递归版本的实现 如果你有更简单易懂的方法 xff0c 一定要在评论区留下来 1 字符串的组合 子序列 题目 xff1a 输入一个字符串 xff0c 输
  • 【手撕代码】多个线程交替打印

    目 录 xff1a 方法一 xff1a 锁实现 推荐 方法二 xff1a 信号量 semaphore 实现 推荐 方法三 xff1a wait notify 实现 方法四 xff1a 使用 Lock Condition 实现 面试的过程中
  • 【搞定算法】找出数组中出现次数大于数组长度一半和 N/K 的数

    博主秋招提前批已拿百度 字节跳动 拼多多 顺丰等公司的offer xff0c 可加微信 xff1a pcwl Java 一起交流秋招面试经验 目 录 xff1a 1 找出数组中出现次数大于数组长度一半的数 2 找出数组中出现次数大于数组长度
  • NVIDIA Jetson Nano 电源适配器 (供电)

    1 Jetson Nano 供电 Jetson Nano 的 micro USB 接口支持 2A 的电流 xff0c DC 供电接口支持 4A 电流 MicroUSB 在安全范围内的最大承载电流为 2A 实际项目中 CPU 满载 43 GP
  • 【搞定算法】常见算法题分类总览

    博主秋招提前批已拿百度 字节跳动 拼多多 顺丰等公司的offer xff0c 可加微信 xff1a pcwl Java 一起交流秋招面试经验 xff0c 可获得博主的秋招简历和复习笔记 完善中 由于本人平时刷题比较零散 xff0c 有时候找
  • 堆、栈的储存内容

    Java的JVM的内存可分为3个区 xff1a 堆 heap 栈 stack 和方法区 method 堆区 1 存储的全部是对象 xff0c 每个对象都包含一个与之对应的class的信息 class的目的是得到操作指令 2 jvm只有一个堆
  • 某32位系统下, C++程序,请计算sizeof 的值.

    某32 位系统下 C 43 43 程序 xff0c 请计算 sizeof 的值 void Foo 1 char str 100 cout lt lt 34 Foo 1 34 lt lt sizeof str lt lt endl char
  • python-pcl安装及使用

    在开始前 xff0c 先说明一下 xff0c pcl的库安装不简单 xff0c 不仅需要pip安装 xff0c 还需要安装C 43 43 的pcl库 xff0c 所以整个流程会比较漫长 鉴于官方参考网站的python pcl太麻烦 xff0
  • ROSBAG解析bag包教程

    一 软件安装教程 1 安装rosbag xff1a https www cnblogs com arkenstone p 6676203 html 2 安装mjepgtools和ffmpeg sudo apt get install mje