VSLAM框架:ORB_SLAM2采用ROS Bag获取数据

2023-05-16

ORB_SLAM2采用ROS Bag获取数据

  • 前言
  • 一、ROS bag数据
    • 1.ROS bag简介
    • 2.获取数据集
    • 3.查看数据集信息
  • 二、配置文件
    • 1.配置ros文件
    • 2.配置内参文件
    • 三、启动节点
    • 1.回放ROS bag数据集
    • 2.深度相机节点


前言

之前写了采用相机实时获取数据进行SLAM导航的相关内容,此处将采用ROS Bag获取数据进行SLAM建图的学习。

一、ROS bag数据

1.ROS bag简介

ROSBag 既可以指命令行中数据包相关命令,也可以指 c++/python 的 rosbag 库。它主要用于记录、回放、分析 rostopic 中的数据,可以将指定 rostopic 中的数据记录到 .bag 后缀的数据包中,便于对其中的数据进行离线分析和处理。

对于订阅某个 topic 的节点来说,它无法区分这个 topic 中的数据到底是实时获取的数据还是从 rosbag 中回放的数据。这有助于我们基于离线数据快速重现曾经的实际场景,进行可重复、低成本的分析和调试。

2.获取数据集

在之前的博文中,曾经介绍过ORB_SLAM2框架提供了基于真实道路的KITTI数据集采用双目、单目摄像头进行SLAM;提供了基于室内的 TUM数据集采用用RGB-D、单目摄像头实现SLAM;也提供了基于四轴飞行器采集的EuRoC数据集采用双目、单目摄像头实现SLAM。

此处以TUM数据集进行演示如何获取rosbag数据。打开TUM数据集的深度相机数据集下载网址(https://vision.in.tum.de/data/datasets/rgbd-dataset/download)
在这里插入图片描述
此处,可以在页面的正中间查看到数据集的相关信息,包括长度、大小等。点击Download一栏中蓝色字体tgz可以下载对应的数据集。然而此处下载的文件格式为压缩包格式tgz而非我们所需的ROS bag文件类型。点击右侧more info可以查看该数据集的详细信息。
在这里插入图片描述
在此处,即可选择下载ROSbag类型的数据集文件
在这里插入图片描述

3.查看数据集信息

下载完成数据集后,我们可以在命令行查看其详细的信息。

# 查看数据集信息
rosbag info xxxx

其中xxxx修改为所需查看的ROS bag名称。
在这里插入图片描述
此处可以看出,该数据集发布的彩色信息和深度信息分别为 **/camera/depth/image ** 和 /camera/rgb/image_color

二、配置文件

1.配置ros文件

由于ORB_SLAM2默认规定使用深度相机进行建图时,相机或数据集端发布的彩色信息和深度信息必须为 /camera/rgb/image_raw/camera/depth_registered/image_raw ,与ROS bag数据集上发布的地址不同,故而需要进行相关文件的修改。

# 至ORB_SLAM2功能包目录下
roscd ORB_SLAM2
gedit src/ros_rgbd.cc

在该文件内找到如下图第66行至69行内容,将其注释修改。
在这里插入图片描述
修改为如下内容

//修改前:
ros::NodeHandle nh;

message_filters::Subscriber<sensor_msgs::Image> rgb_sub(nh, "/camera/rgb/image_raw", 1);
message_filters::Subscriber<sensor_msgs::Image> depth_sub(nh, "/camera/depth_registered/image_raw", 1);


//修改后:
ros::NodeHandle nh("~");
// 添加param参数
std::string rgb_topic = nh.param<std::string>("rgb", "/camera/rgb/image_raw");
std::string depth_topic = nh.param<std::string>("depth", "/camera/depth_registered/image_raw");
//输出param参数内容
cout << "rgb: " << rgb_topic << endl;
cout << "depth: " << depth_topic << endl;
//订阅话题
message_filters::Subscriber<sensor_msgs::Image> rgb_sub(nh, rgb_topic, 1);
message_filters::Subscriber<sensor_msgs::Image> depth_sub(nh, depth_topic, 1);

该段修改将官方写死的订阅话题修改为两个参数,从而使得可以在调用时定义参数内容。主要使用方式如下:

# 						功能包	 节点						磁带文件									内参文件														_rgb参数内容											_depth参数内容
rosrun ORB_SLAM2 RGBD Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM2/Astra.yaml _rgb:=/camera/rgb/image_raw _depth:=/camera/depth_registered/image_raw

其中 _rgb 参数默认订阅为 /camera/rgb/image_raw ,而 _depth参数则默认为 /camera/depth_registered/image_raw

修改完成后,需要进行编译达到启动效果。

roscd ORB_SLAM2/
roscd ORB_SLAM2/
./build_ros.sh

编译成功截图如下:
在这里插入图片描述

2.配置内参文件

配置完成ros文件后,需要对内参文件进行修改。此处打开的相机内参文件为官方提供的TUM1.yaml。在下载ORB_SLAM2源码时,官方自带了如下三个深度相机的内参文件。
在这里插入图片描述
关于如何选择内参文件,需要根据你下载的ROS bag数据集进行判断,如我下载的文件名为rgbd_dataset_freiburg1_xyz.bag,文件名字所含数字为 1 ,故而使用的内参文件对应于TUM1。内参文件主要需要修改参数DepthMapFactor

# 进入ORB_SLAM2源码目录下
roscd ORB_SLAM2
cd ../../..
# 修改文件
cd Examples/RGB-D
cp TUM1.yaml TUM1_rosbag.yaml
gedit TUM!_rosbag.yaml

打开文件后,修改第35行参数值为1.0。
修改前:
在这里插入图片描述
修改后:
在这里插入图片描述

三、启动节点

1.回放ROS bag数据集

和使用相机实时获取数据一样,采用ROS bag读取数据需要先回放数据。

# Master
roscore
# 回放数据
rosbag play --pause -l rgbd_dataset_freiburg1_xyz.bag          

其中参数**–pause表示使用空格键进行控制回放,-l表示循环回放。此处我下载的ROS bag文件为rgbd_dataset_freiburg1_xyz.bag**,你在回放时应当修改为你对应需要回放的文件。 在这里插入图片描述
此处可以点击键盘上“S”键,使数据向前一步(step)。点击空格键可以控制开始或暂停。

2.深度相机节点

回放ROS bag数据集后,即可打开深度相机节点进行SLAM建图了。此处依旧以rgbd_dataset_freiburg1_xyz.bag 文件为例进行说明。启动代码如下

# 进入ORB_SLAM2源码目录下
roscd ORB_SLAM2
cd ../../..
# 启动节点
rosrun ORB_SLAM2 RGBD Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1_rosbag.yaml _rgb:=/camera/rgb/image_color _depth:=/camera/depth/image

此处说明启动节点的格式如下:

rosrun 功能包名 节点名 磁带文件 内参文件 _rgb:=/camera/rgb/image_color _depth:=/camera/depth/image

其中由于启动的相机为深度相机,故而节点为RGBD。此处通过命令rosbag info发现我所下载的数据集所发布的彩色信息和深度信息话题分别在 /camera/rgb/image_color/camera/depth/image ,故而指定参数 _rgb_depth内容如上。

启动相机节点后,在回放数据集出通过空格键控制回放开始。最终实现如下效果:
在这里插入图片描述

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

VSLAM框架:ORB_SLAM2采用ROS Bag获取数据 的相关文章

随机推荐

  • Postman如何设置成中文?(汉化)

    一 汉化补丁下载安装 点击下方这个链接 xff0c 进入gitee xff0c 在里面下载一个插件 我在写这篇文章的时候 xff0c 补丁包的最新版本号为 9 12 2 xff1a 下载 Postman 汉化补丁包 汉化补丁下载链接 xff
  • 记录:在ubuntu中以C语言实现json文件读取遇到的问题(1)(说不定会有2)

    4 12 记录在ubuntu中以C语言实现json文件读取遇到的问题 xff08 1 xff09 xff08 说不定会有2 xff09 暂记录遇到的问题及解决 xff0c 其中还有些原因没有搞明白 xff09 1 首先过程参考自一位大佬的博
  • 标量/向量/矩阵求导方法

    这篇博客源于在看论文时遇到了一个误差向量欧氏距离的求导 xff0c 如下 xff1a 在看了一堆资料后得出以下结论 xff1a 这个结论是怎么来的呢 xff1f 这就涉及标量 向量 矩阵的求导了 由于标量 向量都可以看做特殊的矩阵 xff0
  • 自学笔记:单片机蜂鸣器(包含程序)

    蜂鸣器的工作原理 xff08 搬运 xff09 蜂鸣器主要分为压电式蜂鸣器 无源蜂鸣器 和电磁式蜂鸣器 xff08 有源蜂鸣器 xff09 两种类型 压电式蜂鸣器 主要由多谐振荡器 压电蜂鸣片 阻抗匹配器及共鸣箱 外壳 等组成 多谐振荡器由
  • Invalid bound statement (not found):常见报错原因解决

    问题场景 xff1a 在SpringMVC项目中 xff0c 通过mapper接口加载映射文件 xff0c 完成数据库的操作 问题描述 报错 xff1a Invalid bound statement not found 原因分析 xff1
  • 记录一次策略模式优化代码案例

    策略模式优化案例 优化之前 优化之后 把原来的switch case 用接口方式实现 bean 注入采用map方式 key为 实现类的名称 xff0c value为实现类的bean xff0c 在所有bean注入之后执行init 方法 xf
  • 树莓派无屏幕连接

    无屏幕通过VNC显示树莓派远程桌面 我自己本来是有一个7寸屏幕的 xff0c 但是因为机器人那边需要看IP地址 xff0c 我就把屏幕装在机器上上面了 xff0c 只能vnc连接了 刷好系统的时候 xff0c 现在版本的树莓派是默认没有ss
  • SMPL论文解读和相关基础知识介绍

    SMPL论文解读和相关基础知识介绍 本文首发于微信公众号 视觉三维重建 欢迎大家关注公众号 和你分享计算机视觉算法工程师工作的点点滴滴 文章目录 SMPL论文解读和相关基础知识介绍 1 动画制作专业术语 2 SMPL 2 1 简介 2 2
  • 学术论文阅读方法

    文章目录 学术论文阅读过程大量阅读学术论文方法 xff1a 目的 xff1a 复现优秀论文提出创新点整理成文 看不懂怎么办幻灯博客视频课程代码 More研究生生活工作业务要求英语老师建议 近期基本完成机器学习和深度学习的学习 xff0c 开
  • 微信小程序未读消息右上角红点数字显示

    从weui中获得灵感 xff0c 稍微改造 xff0c 效果还不错 在消息数量为1 99时正常显示即可 xff0c 而大于99时显示99 43 使用wx if搞定 wxml部分 xff1a span class token tag span
  • [2022]李宏毅深度学习与机器学习第十五讲(必修)-Meta Learning

    2022 李宏毅深度学习与机器学习第十五讲 xff08 必修 xff09 Meta Learning 做笔记的目的Meta LearningML vs meta learningWhat is learnable in learning a
  • 浅谈esp8266

    esp8266 前言简单介绍esp8266esp8266的开发方式主流应用结语 前言 很早就听说了esp8266 xff0c 作为物联网上的入门级产品 xff0c 有一段时间曾在b站上掀起过一阵风潮 xff0c 什么用来获取显示b站粉丝量
  • 【无标题】

    一级标题1 QGC二次开发方法 手段 xff08 包括基本介绍 xff09 一级标题2 QGC编译过程步骤以及中遇到的问题和相应的解决办法 1 QGC二次开发方法 手段 xff08 包括基本介绍QGC和QT xff09 QGC二次开发工具
  • 实数插值方法及其 python 实现

    本文主要介绍两种常用的实数插值方法 xff1a 拉格朗日 xff08 Lagrange xff09 插值 以及 牛顿 xff08 Newton xff09 插值 及其python实现 运行效果如下 xff1a 目录 1 拉格朗日插值 2 牛
  • VS CMake 禁止警告

    cmake minimum required VERSION 3 0 project DiableWarn if WIN32 add compile options W4 add compile options wd4100 add com
  • Failed to read artifact descriptor for xxx:jar maven deploy的问题解决

    Failed to read artifact descriptor for xxx jar maven deploy的问题解决 问题描述问题分析可用方案 问题描述 我们项目使用的自定义jar包 xff0c 上传到私服仓库中 xff0c 其
  • 移动通信中的信道编码基础

    线性分组码 假设信源输出为有限域GF xff08 2 xff09 上连续的二元符号序列 xff0c 称为消息序列 在分组码中每一个消息分组含有k个信息比特 xff0c 一共有2k个不同的消息 xff0c 对应2k个不同的码字 所有码字的集合
  • 【Linux多线程服务端编程】| 【01】线程安全的对象生命期管理笔记

    文章目录 索引一 线程安全的对象生命期管理1 1 析构函数遇多线程1 2 对象销毁1 3 线程安全的observer多难1 4 原始指针有什么不好的地方1 5 shared ptr或weak ptr1 6 系统地避免指针错误1 7 应用到O
  • 计算机保研面试题总汇(网上搜集的题 自己写的答案)

    文章目录 计算机专业知识数学方向内容高数线代概率论 其他 计算机专业知识 哪些图算法中用到了动态规划的思想 xff1f Floyd算法 背包算法 TSP 进程之间的通信方式 管道Pipe 命名管道FIFO 消息队列MQ 共享存储 信号量 套
  • VSLAM框架:ORB_SLAM2采用ROS Bag获取数据

    ORB SLAM2采用ROS Bag获取数据 前言一 ROS bag数据1 ROS bag简介2 获取数据集3 查看数据集信息 二 配置文件1 配置ros文件2 配置内参文件三 启动节点1 回放ROS bag数据集2 深度相机节点 前言 之