ORB-SLAM2学习笔记2之TUM开源数据运行ORB-SLAM2生成轨迹并用evo工具评估轨迹

文章目录

  • 0 引言
  • 1 evo工具
    • 1.1 简介
    • 1.2 常用命令
    • 1.3 安装
  • 2 TUM数据
  • 3 单目ORB-SLAM2
    • 3.1 运行ORB-SLAM2
    • 3.2 evo评估轨迹
      • 3.2.1 载入和对比轨迹
      • 3.2.2 计算绝对位姿误差
  • 4 RGB-D ORB-SLAM2
    • 4.1 运行ORB-SLAM2
    • 4.2 evo评估轨迹
      • 4.2.1 载入和对比轨迹
      • 4.2.2 计算绝对轨迹误差
  • ORB-SLAM2学习笔记系列:

0 引言

ORB-SLAM2学习笔记1 已成功编译安装ORB-SLAM2到本地,本篇目的是用TUM开源数据来运行ORB-SLAM2,并生成轨迹,最后用evo评估工具来评估ORB-SLAM2生成的轨迹和真值轨迹。

1 evo工具

1.1 简介

evo工具是用于评估视觉SLAM(Simultaneous Localization and Mapping)系统的开源Python工具包。evo"EValuation of Odometry"的简称,它提供了一系列可视化和数值化的评估指标,用于比较和分析不同SLAM算法的性能。

evo工具支持多种输入格式,包括轨迹文件(如KITTI、EuRoC等数据集格式)、ROS话题和TUM RGB-D数据集。它可以计算轨迹误差、绝对轨迹误差、相对尺度误差、绝对尺度误差、姿态误差等多种评估指标,并提供了多种可视化展示方式,如误差随时间变化曲线、误差分布直方图、误差累积分布函数等。

evo工具的设计目的是为了方便SLAM算法的研究和比较,它已被广泛应用于学术研究和工业应用中。

1.2 常用命令

evo工具包含许多命令和选项,以下是一些常用的命令指令,每个命令还包含许多选项和参数,可以通过在命令后加上--help来查看详细的使用说明。:

  1. evo_traj: 计算和可视化轨迹误差(trajectory error)和其他轨迹相关的指标。

    • plot: 可视化轨迹误差随时间变化的曲线。
    • pdr: 计算和可视化绝对轨迹误差(pose deviation rate)指标。
    • ape: 计算和可视化绝对姿态误差(absolute pose error)指标。
  2. evo_ape: 计算和可视化绝对姿态误差(absolute pose error)指标。

  3. evo_rpe: 计算和可视化相对姿态误差(relative pose error)指标。

  4. evo_res: 可视化误差分布和累积分布函数。

  5. evo_config: 生成和更新evo工具的配置文件。

  6. evo_play: 可视化轨迹和图像数据。

  7. evo_fig: 可视化轨迹误差和其他指标的图表。

1.3 安装

evo工具需要Python3.6或更高版本,并且需要一些依赖包:

pip install numpy scipy matplotlib pandas seaborn pyyaml Pillow

evo 便捷安装命令:

pip install evo --upgrade --no-binary evo

安装完成后,可通过 evo --help 来查看是否安装成功。

usage: evo [-h] {pkg,cat_log} ...positional arguments:{pkg,cat_log}optional arguments:-h, --help     show this help message and exit

2 TUM数据

TUM数据集是一个流行的视觉SLAM(Simultaneous Localization and Mapping)算法评估数据集,由德国慕尼黑工业大学(Technical University of Munich,简称TUM)的计算机视觉组维护和发布。该数据集包括多种类型的传感器数据,包括单目、双目、RGB-D相机和激光雷达等,适用于多种视觉SLAM算法的评估和比较。

TUM数据集包含多个子数据集,每个子数据集都包括相应的传感器数据和对应的真实轨迹(ground truth trajectory)。其中比较常用的数据集包括:

  1. TUM RGB-D数据集:包括Kinect v1v2相机拍摄的RGB-D图像和对应的真实轨迹数据。

  2. TUM Mono数据集:包括单目相机拍摄的图像和对应的真实轨迹数据。

  3. TUM RGB数据集:包括双目相机拍摄的图像和对应的真实轨迹数据。

  4. TUM VI数据集:包括IMU和单目相机的数据以及对应的真实轨迹数据。

👉 TUM数据集:https://cvg.cit.tum.de/data/datasets/rgbd-dataset/download

本篇先以Mono的数据集来测试,比如freiburg1_desk .

请添加图片描述
下载rgbd_dataset_freiburg1_desk.tgz解压后的rgbd_dataset_freiburg1_desk文件夹tree:

.
├── accelerometer.txt
├── depth # 深度图文件夹
├── depth.txt
├── groundtruth.txt  # 轨迹的真值
├── rgb  # rgb图像文件夹
└── rgb.txt2 directories, 4 files

3 单目ORB-SLAM2

3.1 运行ORB-SLAM2

ORB-SLAM2执行的命令分成四部分:

  1. TUM单目模式的可执行文件
  2. 官方训练好的词袋
  3. 参数文件
  4. 单目图像数据集的路径

官方已在ORB_SLAM2/Examples/Monocular文件夹目录下给出了TUM1.yamlTUM2.yamlTUM3.yaml,本篇用对应的TUM1.yaml

  • TUM1.yaml — freiburg1相关的相机参数
  • TUM2.yaml — freiburg2相关的相机参数
  • TUM3.yaml — freiburg3相关的相机参数

熟悉了执行命令和配置文件之后,执行以下命令,用TUM-rgbd_dataset_freiburg1_desk数据集来运行ORB-SLAM2,其中PATHrgbd_dataset_freiburg1_desk文件夹的存放目录:

# 在ORB-SLAM2工程目录下新开终端
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml PATH/rgbd_dataset_freiburg1_desk

运行后,会自动生成两个可视化页面,ORB-SLAM2 Current FrameORB-SLAM2 Map Viewer

请添加图片描述
请添加图片描述
运行完毕后,还在该终端目录下保存了轨迹文件KeyFrameTrajectory.txt

3.2 evo评估轨迹

3.2.1 载入和对比轨迹

把刚刚生成的轨迹文件KeyFrameTrajectory.txt,复制到rgbd_dataset_freiburg1_desk文件夹下,已有的groundtruth.txt 是轨迹真值,然后执行以下命令来载入两个轨迹,并进行可视化对比:

evo_traj tum KeyFrameTrajectory.txt --ref=groundtruth.txt -p --plot_mode=xyz --align --correct_scale

可视化界面:
请添加图片描述
trajectories 结果图:(3D 可旋转查看)
请添加图片描述
xyz_view示意图:
请添加图片描述
rpy_view示意图:
请添加图片描述

3.2.2 计算绝对位姿误差

evo工具还支持计算绝对位姿误差,用以下命令:

evo_ape tum KeyFrameTrajectory.txt groundtruth.txt -p -as
# max:表示最大误差;mean:平均误差;median:误差中位数;min:最小误差;rmse:均方根误差;sse:和方差、误差平方和;std:标准差

运行后:

APE w.r.t. translation part (m)
(with Sim(3) Umeyama alignment)max	0.037075mean	0.011193median	0.009728min	0.001007rmse	0.013045sse	0.012933std	0.006700

可视化界面:
请添加图片描述
raw示意图:
请添加图片描述
map示意图:(3D 可旋转查看)
请添加图片描述
至此,成功用evo评估工具来评估单目ORB-SLAM2生成的TUM开源数据轨迹和真值轨迹。

4 RGB-D ORB-SLAM2

4.1 运行ORB-SLAM2

RGB-D版的ORB-SLAM2需要输入RGB 图像和depth深度图像,也需要两者的关联文件,官方ORB-SLAM2Examples/RGB-D/associations/文件夹下提供了某些开源数据的关联文件。
当然也可以使用python 脚本associate.py关联 RGB 图像和depth深度图像。
associate.py脚本放到下载并且解压好的rgbd_dataset_freiburg1_desk文件夹下,然后运行脚本来获得关联文件associations.txt

python associate.py rgb.txt depth.txt > associations.txt

生成的associations.txt结果文件包含如下所示的RGB图像时间戳、RGB图像相对路径、depth深度图像时间戳和depth深度图像相对路径:

1305031453.359684 rgb/1305031453.359684.png 1305031453.374112 depth/1305031453.374112.png
1305031453.391690 rgb/1305031453.391690.png 1305031453.404816 depth/1305031453.404816.png
1305031453.423683 rgb/1305031453.423683.png 1305031453.436941 depth/1305031453.436941.png
...

类似单目的ORB-SLAM2,再增加关联文件,执行以下命令,同样用TUM-rgbd_dataset_freiburg1_desk数据集来运行ORB-SLAM2,其中PATHrgbd_dataset_freiburg1_desk文件夹的存放目录:

# 在ORB-SLAM2工程目录下新开终端
./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml PATH/rgbd_dataset_freiburg1_desk PATH/rgbd_dataset_freiburg1_desk/associations.txt 

运行后,会自动生成两个可视化页面,ORB-SLAM2 Current FrameORB-SLAM2 Map Viewer
请添加图片描述
请添加图片描述
运行完毕后,还在该终端目录下保存了轨迹文件KeyFrameTrajectory.txt

4.2 evo评估轨迹

4.2.1 载入和对比轨迹

把刚刚生成的轨迹文件KeyFrameTrajectory.txt,复制到rgbd_dataset_freiburg1_desk文件夹下,已有的groundtruth.txt 是轨迹真值,然后执行以下命令来载入两个轨迹,并进行可视化对比:

evo_traj tum KeyFrameTrajectory.txt --ref=groundtruth.txt -p --plot_mode=xyz --align --correct_scale

可视化界面:
请添加图片描述
trajectories 结果图:(3D 可旋转查看)
请添加图片描述
xyz_view示意图:
请添加图片描述

rpy_view示意图:
请添加图片描述

4.2.2 计算绝对轨迹误差

evo工具还支持计算绝对位姿误差,用以下命令:

evo_ape tum KeyFrameTrajectory.txt groundtruth.txt -p -as
# max:表示最大误差;mean:平均误差;median:误差中位数;min:最小误差;rmse:均方根误差;sse:和方差、误差平方和;std:标准差

运行后:

APE w.r.t. translation part (m)
(with Sim(3) Umeyama alignment)max	0.038386mean	0.014992median	0.013090min	0.003838rmse	0.017071sse	0.016320std	0.008165

可视化界面:
请添加图片描述

raw示意图:
请添加图片描述

map示意图:(3D 可旋转查看)
请添加图片描述
至此,成功用evo评估工具来评估RGB-D ORB-SLAM2生成的TUM开源数据轨迹和真值轨迹。

ORB-SLAM2学习笔记系列:

ORB-SLAM2学习笔记1之Ubuntu20.04+ROS-noetic安装ORB-SLAM2

Reference:

  • https://github.com/raulmur/ORB_SLAM2
  • https://github.com/MichaelGrupp/evo
  • https://cvg.cit.tum.de/data/datasets/rgbd-dataset/download



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



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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2003-Can‘t connect to Mysql server on ‘xxx‘ (10060 “Unknown error“)

Navicat连接 阿里云 服务器MySQL5.7数据库报错 解决办法: 进入数据库执行以下sql 1.允许root用户远程连接 GRANT ALL PRIVILEGES ON *.* TO root% IDENTIFIED BY 数据库密码 WITH GRANT OPTION; 2.刷新权限 FLUSH PRIVILEGES;3.执行quit退出数据库 quit; 4.…

uniapp连接到微信小程序

第一次使用uniapp连接到微信小程序,但是出现了define is not defined问题,让人头疼,出现这个问题的原因是 调试基础库 版本过高导致的! 解决办法: 点击设置,选择项目设置。,会进入到如下界面&a…

mac M1 安装nacos

背景 m1不支持本地安装,只能用docker : “由于 rocksdb 暂不支持 M1 平台,所以使用 Zulu JDK 的小伙伴们运行 Nacos 2.x 版本会报错,网上通用的解决方案是使用 Oracle JDK 来运行 Nacos 2.x 版本,但对于强迫症的我来说…

Windows VScode如何配置与使用git?

当我们在VScode中编写代码后,需要提交到git仓库时,但是我们又不想切换到git的命令行窗口,我们可以在VScode中配置git,然后就可以很方便快捷的把代码提交到仓库中。 1. 官网下载安装Git命令行工具 根据自己的电脑系统&#xff0c…

选择正确的负载均衡器:LVS还是Nginx?

选择正确的负载均衡器:LVS还是Nginx? 博主简介一、前言二、什么是LVS?2.1、LVS的架构 三、什么是Nginx?3.1、Nginx 特性3.2、Nginx 架构 四、LVS和Nginx的区别五、总结 博主简介 💡一个热爱分享高性能服务器后台开发知…

高级测试工程师求职之路:从笔试到面试,我经历了什么?

最近行业里有个苦涩的笑话:公司扛过了之前的三年,没扛过摘下最近的一年,真是让人想笑又笑不出来。年前听说政策的变化,大家都满怀希望觉得年后行情一片大好,工作岗位激增,至少能有更多的机会拥抱未来。然而…

CAP原则的一致性、可用性、分区容错性

2000年,Eric Brewer在ACM PODC分布式计算原理专题讨论会上首次提出CAP原则。后来,麻省理工学院的两位科学家(赛斯吉尔伯特和南希林奇)证明了CAP原则的正确性。目前,CAP原则被大型公司广泛采纳,例如Amazon公司。 CAP原则又称CAP定…

【Go】vscode 安装go环境gopls失败

项目场景: 想要在VSCode安装go环境,但是gopls下载失败,导致vscode无法使用language server 问题描述 自动下载失败,在打开命令面板(CtrlshiftP)之后,输入go install/update 下载也失败 $ g…

java通过url获取视频时长(无需下载文件)

1、导入架包 <!-- jave 核心依赖 --><dependency><groupId>ws.schild</groupId><artifactId>jave-core</artifactId><version>2.4.6</version></dependency><!-- 根据不同操作系统引入不同FFmpeg包 --><!-- wi…

数据库应用:CentOS 7离线安装MySQL与Nginx

目录 一、理论 1.安装依赖 二、实验 1.离线安装MySQL与Nginx 2.离线安装Nginx 三、问题 1.执行nginx -v命令报错 四、总结 一、理论 1.安装依赖 &#xff08;1&#xff09;概念 安装依赖是指在软件开发中&#xff0c;为了运行或者编译一个程序或者库&#xff0c;在计…

css:横向滚动布局

效果&#xff1a; 实现代码&#xff1a; <template><div class"index_div"><div class"container"><div class"flexBox"><div class"flex_item" v-for"item in topMenu" :key"item.id&quo…

JVM回收算法(标记-清除算法, 复制算法, 标记-整理算法)

1.标记-清除算法 最基础的算法&#xff0c;分为两个阶段&#xff0c;“标记”和“清除” 原理&#xff1a; - 标记阶段&#xff1a;collector从mutator根对象开始进行遍历&#xff0c;对从mutator根对象可以访问到的对象都打上一个标识&#xff0c;一般是在对象的header中&am…