rosbag 包转TUM数据集

news2024/12/29 9:02:53

参考链接:
ROS学习:制作自己的TUM数据集

配置环境

1.安装ROS
参考我的博客
https://blog.csdn.net/qin_liang/article/details/127035615

2.查看rosbag中的topic

rosbag info xxx.bag

3.创建catkin_ws/src文件夹
在src下运行

catkin_create_pkg rosbag2tum roscpp std_msgs sensor_msgs  cv_bridge

4.进入生成的rosbag2tum里面的src
在src文件夹下创建bagToTUM.cpp文件:
(修改自己对应的rosbag包里面的节点)

#include <cv_bridge/cv_bridge.h>
#include <opencv2/opencv.hpp>
#include <ros/ros.h>
#include <iostream>
#include <chrono>
#include <string> 
using namespace std;

//设置一些保存路径
string Path = "/home/ql/pan1/Dataset/test/seq3/";
string pathRGB = Path + "rgb.txt";
string pathDepth = Path + "depth.txt";
string dataRGB = Path + "rgb/";
string dataDepth = Path + "depth/";
//设置图像topic名称
string depth_topic = "/zed2i/zed_node/depth/depth_registered";
string rgb_topic = "/zed2i/zed_node/left_raw/image_raw_color";

//保存图像路径至txt文件下
void savePath(string &path, string &type,double time){
   ofstream of;
   of.open(path, std::ios_base::app);
   if(of.fail()){
       ROS_INFO("Fail to opencv file!!");
   }else{
       of<<endl;
       of<<std::fixed<< time <<" "<< type <<time<<".png"; 
       of.close();
   }
}
//RGB图像回调函数
void GrabRGB(const sensor_msgs::ImageConstPtr& msg)
{
    cv_bridge::CvImageConstPtr cv_ptr;
    try
    {
       //保存图像及路径
        cv_ptr = cv_bridge::toCvShare(msg);
        //颜色通道转换
        cv::Mat bgrImage;
        // cvtColor(cv_ptr->image, bgrImage, CV_BGR2RGB);
        //cv::imshow("RGB", bgrImage);

        double time = cv_ptr->header.stamp.toSec();
        string type = "rgb/";
        savePath(pathRGB, type, time);
        std::ostringstream osf;
        osf<< dataRGB <<std::fixed <<time << ".png";//图像以时间戳命名
        // cv::imwrite(osf.str(), bgrImage);
        cv::imwrite(osf.str(), cv_ptr->image);
    }
    catch (cv_bridge::Exception& e)
    {
        ROS_ERROR("cv_bridge exception: %s", e.what());
        return;
    }
     //cv::waitKey(2);    
}

//深度图像回调函数
void GrabDepth(const sensor_msgs::ImageConstPtr& msg)
{
    cv_bridge::CvImageConstPtr cv_ptr;
    try
    {
        cv_ptr = cv_bridge::toCvShare(msg);
        //imshow("Depth", cv_ptr->image);
        double time = cv_ptr->header.stamp.toSec();
        string type = "depth/";
        savePath(pathDepth, type, time);
        std::ostringstream osf;
        osf<< dataDepth <<std::fixed  <<time << ".png";
        cv::imwrite(osf.str(), cv_ptr->image);
    }
    catch (cv_bridge::Exception& e)
    {
        ROS_ERROR("cv_bridge exception: %s", e.what());
        return;
    }
     //cv::waitKey(2);
}

//节点主函数
int main(int argc,char **argv)
{
    ros::init(argc,argv,"bagToTUM");
    ros::start();
    ofstream of;
    of.open(pathRGB, std::ios_base::app);
    if(of.fail()){
       ROS_INFO("Fail to opencv file!!");
    }else{
       of<<"#------------start a new dataset-----------------"; 
       of.close();
    }
    of.open(pathDepth, std::ios_base::app);
    if(of.fail()){
       ROS_INFO("Fail to opencv file!!");
    }else{
       of<<"#------------start a new dataset-----------------"; 
       of.close();
    }

    //订阅图像话题
    ROS_INFO("bagToTUM is ready.");
    ros::NodeHandle nodeHandler;
    ros::Subscriber subRGB = nodeHandler.subscribe(rgb_topic, 5, &GrabRGB);
    ros::Subscriber subDepth = nodeHandler.subscribe(depth_topic, 5, &GrabDepth);

    ros::spin();
    return 0;
}

5.配置rosbag2tum文件夹下的CMakeLists.txt

cmake_minimum_required(VERSION 3.0.2)
project(rosbag2tum)

find_package(catkin REQUIRED COMPONENTS
  cv_bridge
  roscpp
  sensor_msgs
  std_msgs
)

find_package(OpenCV 3.0 QUIET)
if(NOT OpenCV_FOUND)
   find_package(OpenCV 2.4.3 QUIET)
   if(NOT OpenCV_FOUND)
      message(FATAL_ERROR "OpenCV > 2.4.3 not found.")
   endif()
endif()

catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES rosbag2tum
  CATKIN_DEPENDS cv_bridge roscpp sensor_msgs std_msgs
#  DEPENDS system_lib
)

include_directories(
# include
  ${OpenCV_INCLUDE_DIRS}
  ${catkin_INCLUDE_DIRS}
)

# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

 add_executable(bag2tum src/bagToTUM.cpp)
 target_link_libraries(bag2tum ${catkin_LIBRARIES} ${OpenCV_LIBS})

5.在catkin_ws文件夹下运行

catkin_make

转化

运行之前先在输出的文件夹的位置创建好depth rgb文件夹

1.打开终端运行

roscore

2.在类似这样的文件夹/home/ql/pan1/catkin_ws/devel/lib/rosbag2tum下运行

./rosbag2tum

这个文件夹下必须有这个可执行文件
在这里插入图片描述
3.播放对应的bag包


rosbag play  xxx.bag  -r 0.5

这样就可以转化出对应的图片了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/994035.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

<OpenCV> Mat属性

OpenCV的图像数据类型可参考之前的博客&#xff1a;https://blog.csdn.net/thisiszdy/article/details/120238017 OpenCV-Mat类型的部分属性如下&#xff1a; size&#xff1a;矩阵的大小&#xff0c; s i z e ( c o l s , r o w s ) size(cols,rows) size(cols,rows)&#xf…

如何维持股市稳定?——股市定海神针

中国股市于1989年 开始&#xff0c;至今2023年&#xff0c; 已有30多个年头。而这30多年来&#xff0c;却有20多年钟情于3000点。 股市有赌性在&#xff0c;却也为数以千计的企业提供了养料&#xff0c;更关系着数以亿计的股民、以及企业员工的切身利益。 股市3000点&#xff…

(翻译)JavaFX高级教程:JavaFX2.0的FXML语言

原文地址http://download.oracle.com/javafx/2.0/fxml_get_started/jfxpub-fxml_get_started.htm FXML是JavaFX 2.0新引入的。你可能会问"What is FXML?" 和"Is FXML for me?" FXML 是基于XML的一种声明性标记语言&#xff0c;用来定义应用的用户接口。F…

区间DP 计数类DP 数位统计DP 状态压缩DP 树形DP 记忆化搜索

目录 区间DP石子合并分析思路代码实现 计数类DP整数划分完全背包DP的解法二维数组实现一维优化实现 另类DP状态表示的解法&#xff08;分拆数&#xff09;二维数组实现一维优化实现 数位统计DP计数问题注意代码实现 状态压缩DP蒙德里安的梦想实现思路朴素实现预处理优化实现 最…

【视频图像篇】FastStone Capture屏幕长截图软件

【视频图像篇】FastStone Capture屏幕长截图软件 FastStone Capture最常用的一款屏幕长截图软件—【蘇小沐】 文章目录 【视频图像篇】FastStone Capture屏幕长截图软件实验环境1、启动界面2、自定义工具栏3、自动保存 &#xff08;一&#xff09;长截图1、捕获滚动窗口2、捕获…

LINUX 文件基本管理

一、文件类型和根目录结构 1、文件类型 可以通过 ls -l 或者 ll来查看文件类型 可以根据显示&#xff0c;查看第一个字符&#xff0c;就表示文件类型。 - 字符&#xff1a;普通文件&#xff0c;类似于Windows的记事本。 d 字符&#xff1a;目录文件&#xff0c;类似于Wind…

认识异常【超详细】

文章目录 1. 异常的概念与体系结构1.1 异常的概念1.2 异常的体系结构1.3 异常的分类1. 编译时异常2. 运行时异常 2. 异常的处理2.1 防御式编程2.2 异常的抛出2.3 异常的捕获2.3.1 异常声明throws2.3.2 try-catch捕获并处理2.3.3 finally 2.4 异常的处理流程 3. 自定义异常类 1.…

常见缺少msvcp140.dll问题及解决方法,分享多种方法帮你解决

在日常使用电脑的过程中&#xff0c;我们可能会遇到各种问题&#xff0c;比如电脑提示msvcp140.dll文件丢失。这个问题通常是由于某些程序或游戏需要这个dll文件来正常运行&#xff0c;但是由于某种原因&#xff0c;这个文件被误删或者损坏了。那么&#xff0c;如何解决这个问题…

FFmpeg入门之简单介绍

FFmpeg是什么意思: Fast Forward Moving Picture Experts Group ffmpeg相关文档: Documentation FFmpeg ffmpeg源码下载: https://git.videolan.org/git/ffmpeg.git https://github.com/FFmpeg/FFmpeg.git FFmpeg能做什么? 多种媒体格式的封装与解封装 : 1.多种音…

五)Stable Diffussion使用教程:文生图之高清修复

上一篇我们说到图生图,这一篇来说说高清修复。 上一篇我们通过一个例子实现了图生图的功能,使用一张图片生成了另一种风格的图片。 然而,我们生成的图片质量不尽如人意。 虽然我们之前也提到设置分辨率、精炼提示词去提升画面质量等等,但是实际用下来发现,分辨率拉得太…

UMA 2 - Unity Multipurpose Avatar☀️六.Advanced Occlusion高级遮挡功能解决皮肤服饰穿模

文章目录 🟥 本节功能效果展示🟧 基础项目配置🟨 本节项目配置🟩 配置MeshHideAsset1️⃣ 创建MeshHideAsset2️⃣ 配置SlotDataAsset3️⃣ 配置遮挡信息🟦 将 MeshHideAsset 配置到 Recipe🟥 本节功能效果展示 未遮挡前的穿模问题: 遮挡后效果:

【以太网通信】MDIO 管理接口及控制器设计

MDIO 管理接口是以太网 MAC 和 PHY 之间的接口&#xff0c;用于管理/配置以太网 PHY 芯片。本文主要介绍 MDIO 管理接口定义&#xff0c;以及 MDIO 控制器设计。 目录 1 MDIO 管理接口 2 MDIO 控制器设计 1 MDIO 管理接口 MDIO 管理接口是以太网 MAC 和 PHY 之间的接口&#…

VS2010 Windows API 串口编程 (二)

目录 一串口通信基础 1.1串口通信原理与特点 1.2串口通信的传输方式 1.3串口通信的同步技术 1.4串行接口标准 二 API函数实现串口通信 2.1打开串口 2.1.1串口是否有驱动 2.1.2连接串口 2.1.3串口逻辑端口号大于10无法打开问题…

TCP原理(全网最详细)

一、确认应答&#xff08;可靠性机制&#xff09; TCP诞生的初衷就是可靠传输 可靠传输是TCP最核心的部分&#xff0c;TCP内部很多机制都是在保证可靠传输&#xff08;可以理解为发一条消息&#xff0c;上面显示已读未读&#xff0c;可靠传输就是发一条消息我知道对方是否收到…

【wordPress】WordPress删除index.php后缀【亲测有效】(手把手教学)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

BUUCTF test_your_nc

这是一题pwn入门题 使用linux中的file命令查看文件类型 file test64-bit告诉我们是64位程序 IDA64进行反编译 可以看到main函数中直接执行/bin/sh了 使用nc直接连接上面的地址 nc node4.buuoj.cn 28561然后就可以直接执行shell命令了 cat /flag

【Redis】深入探索 Redis 的数据类型 —— 哈希表 hash

文章目录 前言一、hash 类型相关命令1.1 HSET 和 HSETNX1.2 HGET 和 HMGET1.3 HKEYS、HVALS 和 HGETALL1.4 HEXISTS 和 HDEL1.5 HLEN1.6 HINCRBY 和 HINCRBYFLOAT1.7 哈希相关命令总结 二、hash 类型内部编码三、hash 类型的应用场景四、原生&#xff0c;序列化&#xff0c;哈希…

怎样去掉win11快捷方式的小箭头

前有创造注册表新值的方法,现在有了注册表加文件的方法 开始 先下载这个文件,里面有要用到的信息 下载 保存文件到电脑,并解压 有两个文件, 一个是 Remove_shortcut_arrow_icon.reg 一个是blank.ico 把第二个文件移动到 C:\Windows 文件夹, 然后点击打开文件, 如果提示是…

Windows11下Python安装GTK4

在Python下使用GTK无法直接使用pip安装PyGObject库 打卡MSYS终端&#xff0c;依次执行&#xff1a; pacman -Suy pacman -S mingw-w64-x86_64-gtk4 mingw-w64-x86_64-python3 mingw-w64-x86_64-python3-pip mingw-w64-x86_64-python3-gobject mingw-w64-x86_64-libadwaita min…

Kotlin File writeText appendText appendBytes readBytes readText

Kotlin File writeText appendText appendBytes readBytes readText import java.io.Filefun main(args: Array<String>) {val filePath "./myfile.txt"val file File(filePath)file.writeText("hello,") //如果原有文件有内容&#xff0c;将完全覆…