ORB-SLAM2学习笔记5之EuRoc、TUM和KITTI开源数据运行ROS版ORB-SLAM2生成轨迹

文章目录

  • 0 引言
  • 1 数据预处理
    • 1.1 EuRoc数据
    • 1.2 TUM数据
    • 1.3 KITTI数据
  • 2 代码修改
    • 2.1 单目
    • 2.2 双目
    • 2.3 RGB-D
  • 3 运行ROS版ORB-SLAM2
    • 3.1 单目
    • 3.2 双目
    • 3.3 RGB-D
  • ORB-SLAM2学习笔记系列:

0 引言

ORB-SLAM2学习笔记1已成功编译安装ROS版本ORB-SLAM2到本地,本篇目的是用EuRoc、TUM、KITTI开源数据来运行ROSORB-SLAM2,并生成轨迹。

1 数据预处理

1.1 EuRoc数据

👉 EuRoc开源数据已经支持rosbag的数据包下载,如下图,直接点击对应的link下载即可,本文以Machine Hall 01为例:
请添加图片描述
下载的Machine Hall 01数据包,用rosbag info MH_01_easy.bag 命令查看:

path:        MH_01_easy.bag
version:     2.0
duration:    3:06s (186s)
start:       Jun 25 2014 03:02:59.81 (1403636579.81)
end:         Jun 25 2014 03:06:06.70 (1403636766.70)
size:        2.5 GB
messages:    47283
compression: none [2456/2456 chunks]
types:       geometry_msgs/PointStamped [c63aecb41bfdfd6b7e1fac37c7cbe7bf]
             sensor_msgs/Image          [060021388200f6f0f447d0fcd9c64743]
             sensor_msgs/Imu            [6a62c6daae103f4ff57a132d6f95cec2]
topics:      /cam0/image_raw    3682 msgs    : sensor_msgs/Image         
             /cam1/image_raw    3682 msgs    : sensor_msgs/Image         
             /imu0             36820 msgs    : sensor_msgs/Imu           
             /leica/position    3099 msgs    : geometry_msgs/PointStamped

1.2 TUM数据

👉 TUM开源数据已经支持rosbag的数据包下载,如下图,直接点击对应的ROS bag下载即可,本文以freiburg1_desk为例:
请添加图片描述
下载的freiburg1_desk数据包,用rosbag info rgbd_dataset_freiburg1_desk.bag 命令查看:

path:         rgbd_dataset_freiburg1_desk.bag
version:      2.0
duration:     23.8s
start:        May 10 2011 20:44:09.56 (1305031449.56)
end:          May 10 2011 20:44:33.32 (1305031473.32)
size:         371.7 MB
messages:     19893
compression:  bz2 [1210/1210 chunks; 29.85%]
uncompressed:   1.2 GB @ 52.3 MB/s
compressed:   370.9 MB @ 15.6 MB/s (29.85%)
types:        sensor_msgs/CameraInfo         [c9a58c1b0b154e0e6da7578cb991d214]
              sensor_msgs/Image              [060021388200f6f0f447d0fcd9c64743]
              sensor_msgs/Imu                [6a62c6daae103f4ff57a132d6f95cec2]
              tf/tfMessage                   [94810edda583a504dfda3829e70d7eec]
              visualization_msgs/MarkerArray [f10fe193d6fac1bf68fad5d31da421a7]
topics:       /camera/depth/camera_info     595 msgs    : sensor_msgs/CameraInfo        
              /camera/depth/image           595 msgs    : sensor_msgs/Image             
              /camera/rgb/camera_info       613 msgs    : sensor_msgs/CameraInfo        
              /camera/rgb/image_color       613 msgs    : sensor_msgs/Image             
              /cortex_marker_array         2360 msgs    : visualization_msgs/MarkerArray
              /imu                        11815 msgs    : sensor_msgs/Imu               
              /tf                          3302 msgs    : tf/tfMessage

1.3 KITTI数据

👉 KITTI开源数据是不支持rosbag的数据包下载,ORB-SLAM2学习笔记4 中已经下载非ROS版的KITTI数据data_odometry_poses,但本文又需要用rosbag的数据包,所以需要转换图片,时间戳等数据信息为rosbag数据包。

👉 推荐一个转换脚本:https://gitee.com/zengtaiping/image2rosbag_KITTIodometry
下载转换的脚本:

git clone https://gitee.com/zengtaiping/image2rosbag_KITTIodometry.git

下载后,进入到文件夹中,可发现如下的文件tree:

.
├── img2bag_kitti_MonoBag.py 
├── img2bag_kitti_odo.py      
├── img2bag_kitti_StereoBag.py # kitti转换成双目rosbag
├── kitti_republish.launch
└── README.md

0 directories, 5 files

然后执行如下命令(PATHdata_odometry_gray存放的路径,KITTI_StereoBag_seq00.bag可自行命名)来转换KITTI数据为rosbag数据,以下为 KITTI data_odometry_poses 中的 00 组数据,转换成双目rosbag为例:(也可用其他脚本转换成单目rosbag等)

python img2bag_kitti_StereoBag.py PATH/data_odometry_gray/dataset/sequences/00 KITTI_StereoBag_seq00.bag PATH/data_odometry_gray/dataset/sequences/00/times.txt

等待片刻,用命令rosbag info KITTI_StereoBag_seq00.bag 查看生成的rosbag

path:        KITTI_StereoBag_seq00.bag
version:     2.0
duration:    7:50s (470s)
start:       Jan 01 1970 08:00:00.00 (0.00)
end:         Jan 01 1970 08:07:50.58 (470.58)
size:        3.9 GB
messages:    9082
compression: none [4541/4541 chunks]
types:       sensor_msgs/Image [060021388200f6f0f447d0fcd9c64743]
topics:      camera/left/image_raw    4541 msgs    : sensor_msgs/Image
             camera/right/image_raw   4541 msgs    : sensor_msgs/Image

2 代码修改

由于ROS版本ORB-SLAM2中的图像topic都写死了,所以主要修改对应的图像topic名字为对应的开源数据图像topic的名字。

切记每次修改或统一修改后,执行./build_ros.sh重新编译。

2.1 单目

打开ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/ros_mono.cc文件,以使用EuRoc数据中的cam0图像topic名字 /cam0/image_raw为例,如下所示,大概在第64行代码处修改即可。

ros::NodeHandle nodeHandler;
// ros::Subscriber sub = nodeHandler.subscribe("/camera/image_raw", 1, &ImageGrabber::GrabImage,&igb);
ros::Subscriber sub = nodeHandler.subscribe("/cam0/image_raw", 1, &ImageGrabber::GrabImage,&igb);

2.2 双目

打开ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/ros_stereo.cc文件,以使用EuRoc数据中的cam0图像topic名字 /cam0/image_rawcam1图像topic名字 /cam1/image_raw为例,如下所示,大概在第112、113行代码处修改即可。

ros::NodeHandle nh;

// message_filters::Subscriber<sensor_msgs::Image> left_sub(nh, "/camera/left/image_raw", 1);
// message_filters::Subscriber<sensor_msgs::Image> right_sub(nh, "camera/right/image_raw", 1);
message_filters::Subscriber<sensor_msgs::Image> left_sub(nh, "/cam0/image_raw", 1);
message_filters::Subscriber<sensor_msgs::Image> right_sub(nh, "/cam1/image_raw", 1);

2.3 RGB-D

打开ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/ros_rgbd.cc文件,以使用TUM数据中的rgb彩色图像topic名字 /camera/rgb/image_colordepth深度图像topic名字 /camera/depth/image为例,如下所示,大概在第68、69行代码处修改即可。

// 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);
message_filters::Subscriber<sensor_msgs::Image> rgb_sub(nh, "/camera/rgb/image_color", 1);
message_filters::Subscriber<sensor_msgs::Image> depth_sub(nh, "/camera/depth/image", 1);

3 运行ROS版ORB-SLAM2

3.1 单目

以使用EuRoc数据中的cam0图像topic名字 /cam0/image_raw为例,修改代码后,重新执行./build_ros.sh,然后执行以下ROS版本命令:

# 新开终端1
roscore
# 新开终端2   ORB-SLAM2工程目录下执行
rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml
# 新开终端3    MH_01_easy.bag 存放目录下执行
rosbag play MH_01_easy.bag

执行后,两个可视化页面ORB-SLAM2 Current FrameORB-SLAM2 Map Viewer开始有数据输入,如下图:
请添加图片描述
请添加图片描述
数据回放完毕后,还在该终端目录下保存了轨迹文件KeyFrameTrajectory.txt

3.2 双目

以使用1.3中转换的KITTI rosbag数据为例,左目图像topic名字 camera/left/image_raw右目图像topic名字 camera/right/image_raw为例,修改代码后,重新执行./build_ros.sh,然后执行以下ROS版本命令:

# 新开终端1
roscore
# 新开终端2   ORB-SLAM2工程目录下执行
rosrun ORB_SLAM2 Stereo Vocabulary/ORBvoc.txt Examples/Stereo/KITTI00-02.yaml false
# 新开终端3    MH_01_easy.bag 存放目录下执行
rosbag play KITTI_StereoBag_seq00.bag

执行后,两个可视化页面ORB-SLAM2 Current FrameORB-SLAM2 Map Viewer开始有数据输入,如下图:
请添加图片描述
请添加图片描述
数据回放完毕后,还在该终端目录下保存了三个文件:

Saving keyframe trajectory to KeyFrameTrajectory_TUM_Format.txt ...

trajectory saved!

Saving camera trajectory to FrameTrajectory_TUM_Format.txt ...

trajectory saved!

Saving camera trajectory to FrameTrajectory_KITTI_Format.txt ...

trajectory saved!

3.3 RGB-D

以使用TUM数据中的rgb彩色图像topic名字 /camera/rgb/image_colordepth深度图像topic名字 /camera/depth/image为例,修改代码后,重新执行./build_ros.sh,然后执行以下ROS版本命令:

# 新开终端1
roscore
# 新开终端2   ORB-SLAM2工程目录下执行
rosrun ORB_SLAM2 RGBD Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml
# 新开终端3    MH_01_easy.bag 存放目录下执行
rosbag play rgbd_dataset_freiburg1_desk.bag

执行后,两个可视化页面ORB-SLAM2 Current FrameORB-SLAM2 Map Viewer开始有数据输入,如下图,Map Viewer 可视化有问题,轨迹在中心处聚集:
请添加图片描述
仔细排查后,TUM 官网已经说明,如果用的是16-bit PNG图片数据,factor=5000,但如果用的是 32-bit ROS bag数据,factor=1

factor = 5000 # for the 16-bit PNG files
# OR: factor = 1 # for the 32-bit float images in the ROS bag files

所以打开对应的Examples/RGB-D/TUM1.yaml文件,修改DepthMapFactor参数为 1.0

# Deptmap values factor
# DepthMapFactor: 5000.0
DepthMapFactor: 1.0

然后重新执行rosrun ORB_SLAM2 RGBD Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yamlrosbag play rgbd_dataset_freiburg1_desk.bag ,如下图,Map Viewer可视化问题解决:
请添加图片描述
请添加图片描述
数据回放完毕后,还在该终端目录下保存了轨迹文件KeyFrameTrajectory.txt

至此,成功用EuRoc、TUM、KITTI开源数据来运行ROSORB-SLAM2,并生成轨迹。

此外,如果需要用evo评估工具来评估ROSORB-SLAM2生成的轨迹和真值轨迹,可参考之前的ORB-SLAM2学习笔记。

ORB-SLAM2学习笔记系列:

  • ORB-SLAM2学习笔记1之Ubuntu20.04+ROS-noetic安装ORB-SLAM2
  • ORB-SLAM2学习笔记2之TUM开源数据运行ORB-SLAM2生成轨迹并用evo工具评估轨迹
  • ORB-SLAM2学习笔记3之EuRoc开源数据集运行ORB-SLAM2生成轨迹并用evo工具评估轨迹
  • ORB-SLAM2学习笔记4之KITTI开源数据集运行ORB-SLAM2生成轨迹并用evo工具评估轨迹

Reference:

  • https://gitee.com/zengtaiping/image2rosbag_KITTIodometry
  • https://cvg.cit.tum.de/data/datasets/rgbd-dataset/file_formats#intrinsic_camera_calibration_of_the_kinect



须知少时凌云志,曾许人间第一流。



⭐️👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍🌔

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL高级教程第三章

SQL CREATE DATABASE 语句 CREATE DATABASE 语句 CREATE DATABASE 用于创建数据库。 SQL CREATE DATABASE 语法 CREATE DATABASE database_name SQL CREATE DATABASE 实例 现在我们希望创建一个名为 "my_db" 的数据库。 我们使用下面的 CREATE DATABASE 语句&…

2023云曦期中复现

目录 SIGNIN 新猫和老鼠 baby_sql SIGNIN 签到抓包 新猫和老鼠 看到反序列化 来分析一下 <?php //flag is in flag.php highlight_file(__FILE__); error_reporting(0);class mouse { public $v;public function __toString(){echo "Good. You caught the mouse:&…

5.1.tensorRT基础(2)-正确导出onnx的介绍,使得onnx问题尽量少

目录 前言1. 正确导出ONNX总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习 tensorRT 基础-正确导出 onnx 的介绍&#xff0…

飞书ChatGPT机器人 – 打造智能问答助手实现无障碍交流

文章目录 前言环境列表1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 前言 在飞书中创建chatGPT机器人并且对话&#xff0c;在下面操作步骤中…

基于DeepFace模型设计的人脸识别软件

完整资料进入【数字空间】查看——baidu搜索"writebug" 人脸识别软件(无外部API) V2.0 基于DeepFace模型设计的人脸识别软件 V1.0 基于PCA模型设计的人脸识别软件 V2.0 更新时间&#xff1a;2018-08-15 在观看了吴恩达老师的“深度学习课程”&#xff0c;了解了深…

2023/7/23周报

目录 摘要 论文阅读 1、题目和现存问题 2、问题阐述及相关定义 3、LGDL模型框架 4、实验准备 5、实验过程 深度学习 1、GCN简单分类任务 2、文献引用数据分类案例 3、将时序型数据构建为图数据格式 总结 摘要 本周在论文阅读上&#xff0c;对基于图神经网络与深度…

【蓝牙AVDTP A2DP协议】

蓝牙AVDTP A2DP 一.AVDTP1.1 AVDTP概念1.2 Source Sink整体框架1.3 AVDTP术语1.3.2 Stream1.3.2 SRC and Sink1.3.3 INT and ACP1.3.4 SEP&#xff1a; 1.4 AVDTP体系1.4.1 体系概括1.4.2 Transport Services 1.5 Signaling Procedures1.5.1 General Requirements1.5.2 Transac…

关于Arduino IDE库文件存放路径问题总结(双版本)

在开发过程中,如果不注意,库文件存放路径很乱,如果在转移系统环境时,容易忘记备份。编译过程中出现多个可用引用包的位置,为了解决这些问题,要明白各文件夹的默认路径在哪,区别在哪,如有了解不对的地方请指正。 IDE安装目录(默认C盘,自定义可以其他盘符下)IDE升级可…

2023华为OD统一考试(B卷)题库清单(持续收录中)以及考点说明

目录 专栏导读2023 B卷 “新加题”&#xff08;100分值&#xff09;2023Q2 100分2023Q2 200分2023Q1 100分2023Q1 200分2022Q4 100分2022Q4 200分牛客练习题 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》。 刷的越多&…

PALO ALTO NETWORKS 的新一代防火墙如何保护企业安全

轻松采用创新技术、阻止网络攻击得逞并专注更重要的工作 IT 的快速发展已改变网络边界的面貌。数据无处不在&#xff0c;用户可随时随地从各类设备访问这些数据。同时&#xff0c;IT 团队正在采用云、分析和自动化来加速新应用的交付以及推动业务发展。这些根本性的转变带来了…

11 简单的Thymeleaf语法

11.1 spring-boot环境准备 重要依赖&#xff1a; <!--thymeleaf--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> 11.2 转发消息不转义 就是如…

Vue3状态管理库Pinia——核心概念(Store、State、Getter、Action)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

iClient3D for CesiumWebGL入门之使用vscode以服务方式运行调试

作者&#xff1a;超图研究院技术支持中心-于丁 iClient3D for Cesium&WebGL入门之使用vscode以服务方式运行调试 相信大家第一次使用SuperMap iClient3D for Cesium或SuperMap iClient3D for WebGL的时候&#xff0c;都遇到过和我一样的事情&#xff1a; 在文件夹中直接打…

Android Studio 提示 Failed to initialize editor问题的解决

Android Studio 从2018的版本升级到2021年的版本后&#xff0c;无法预览xml。我查了很久&#xff0c;最后发现是Gradle的版本和工具不匹配&#xff0c;按照开发工具的提示&#xff0c;升级版本即可&#xff0c;我的是从3.2.1升级到了4.2.2

生产者消费者模型

生产者消费者模型 文章目录 生产者消费者模型概念原则优点 基于BlockingQueue的生产者消费者模型BlockingQueue模拟实现单生产者消费者模型基于计算任务和存储任务的生产者消费者模型 概念 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题生产者和消费者彼…

C++ 单例模式(介绍+实现)

文章目录 一. 设计模式二. 单例模式三. 饿汉模式四. 懒汉模式结束语 一. 设计模式 单例模式是一种设计模式 设计模式(Design Pattern)是一套被反复使用&#xff0c;多数人知晓的&#xff0c;经过分类的&#xff0c;代码设计经验的总结。 为什么要有设计模式 就像人类历史发展会…

python机器学习(三)特征预处理、鸢尾花案例--分类、线性回归、代价函数、梯度下降法、使用numpy、sklearn实现一元线性回归

K-近邻算法(K-Nearest Neighboor) 特征预处理 数据预处理的过程。数据存在不同的量纲、数据中存在离群值&#xff0c;需要稳定的转换数据&#xff0c;处理好的数据才能更好的去训练模型&#xff0c;减少误差的出现。 标准化 数据集的标准化对scikit-learn中实现的大多数机器…

遥感目标检测(3)-DAL(Dynamic Anchor Learning for Object Detection)

目录 一、概述 二、背景 三、建议 1、旋转RetinaNet 2、动态锚框分布 3、匹配敏感损失 四、实验 一、概述 由于选择正样本锚框进行回归&#xff0c;不一定能够定位真实的GT&#xff0c;而部分负样本回归甚至可以回归到真实的GT&#xff0c;说明相当多的负样本锚框有着准…

【自启动配置】Ubuntu 设置开机自启动脚本

Ubuntu 开机运行的脚本和当前操作系统运行的级别有关&#xff0c;OS 的运行级别大概分为七个 目录 1、查看 OS 运行级别 2、创建自启动脚本 3、添加软链接 1、查看 OS 运行级别 输入命令 runlevel 查看当前系统运行级别。当前系统的运行级别为 5 2、创建自启动脚本 在 /et…

ZooKeeper原理剖析

1.ZooKeeper简介 ZooKeeper是一个分布式、高可用性的协调服务。在大数据产品中主要提供两个功能&#xff1a; 帮助系统避免单点故障&#xff0c;建立可靠的应用程序。提供分布式协作服务和维护配置信息。 2.ZooKeeper结构 ZooKeeper集群中的节点分为三种角色&#xff1a;Le…