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

news2024/11/25 16:42:16

文章目录

  • 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到本地,本篇目的是用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.txt

2 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 groundtruth.txt KeyFrameTrajectory.txt -p -as
# max:表示最大误差;mean:平均误差;median:误差中位数;min:最小误差;rmse:均方根误差;sse:和方差、误差平方和;std:标准差

运行后:

APE w.r.t. translation part (m)
(with Sim(3) Umeyama alignment)

       max	0.037075
      mean	0.011193
    median	0.009728
       min	0.001007
      rmse	0.013045
       sse	0.012933
       std	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 groundtruth.txt KeyFrameTrajectory.txt -p -as
# max:表示最大误差;mean:平均误差;median:误差中位数;min:最小误差;rmse:均方根误差;sse:和方差、误差平方和;std:标准差

运行后:

APE w.r.t. translation part (m)
(with Sim(3) Umeyama alignment)

       max	0.038386
      mean	0.014992
    median	0.013090
       min	0.003838
      rmse	0.017071
       sse	0.016320
       std	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.coloradmin.cn/o/746744.html

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

相关文章

软件工程——第12章面向对象实现知识点整理

本专栏是博主个人笔记,主要目的是利用碎片化的时间来记忆软工知识点,特此声明! 文章目录 1. 面向对象语言技术的特点? 2.选择面向对象程序设计语言时主要应该考虑哪些因素? 3.面向对象设计结果只能用面向对象语言实…

第三方ipad电容笔哪个品牌好用?平板电容笔推荐

可能很多人都认为,苹果原装的电容笔,是不可取代,但我认为,这还要看个人的预算,以及实际的需求。苹果Pencil对于那些不太讲究画质的用户来说实在是太贵了,要是我们仅用于书写上,其实我们可以用平…

尚硅谷Docker实战教程-笔记13【高级篇,Docker轻量级可视化工具Portainer】

尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址:尚硅谷Docker实战教程(docker教程天花板)_哔哩哔哩_bilibili 尚硅谷Docker实战教程-笔记01【基础篇,Docker理念简介、官网介绍、平台入门图解、平台架构图解】…

Python 自学 day01 变量,变量命名规则,一些语法

1. Python 的变量的知识 1.1 Python 编程命令的读取时从上到下的。 1.2 Python 变量的命名规则: 1.2.1变量名只能包含字母、数字和下划线。变量名能以字母或下划线打头,但不能以数字打 头。例如,可将变量命名为message…

BATJ 面试 Java 岗:精选 1200+ 面试题及答案

Z 认为,对于 Java 面试以及进阶的最佳学习方法莫过于刷题博客书籍总结,前三者 LZ 将淋漓尽致地挥毫于这篇文章中,至于总结在于个人,实际上越到后面你会发现面试并不难,其次就是在刷题的过程中有没有去思考,…

网络安全(黑客技术)自学路线笔记

一、什么是黑客? 黑客泛指IT技术主攻渗透窃取攻击技术的电脑高手,现阶段黑客所需要掌握的远远不止这些。 二、为什么要学习黑客技术? 其实,网络信息空间安全已经成为海陆空之外的第四大战场,除了国与国之间的博弈&am…

stm32 mpu6050 cubemx 卡尔曼滤波法读取角度

文章目录 前言一、cubemx配置二、mpu6050文件移植mpu6050.cmpu6050.h 三、主函数 前言 本文简述使用mpu6050读取原始数据后解算出角度。 网上大多都是dmp库来解算,但是这种情况操作起来相对复杂。 更方便的方法是使用卡尔曼滤波法来解算出角度,好处是代…

2023网络安全常见面试题汇总(附答案解析+配套资料)

以下为网络安全各个方向涉及的面试题,星数越多代表问题出现的几率越大,祝各位都能找到满意的工作。 注:所有的资料都整理成了PDF,面试题和答案将会持续更新,因为无论如何也不可能覆盖所有的面试题。 目录 一、渗透测试…

ELK 企业级日志分析系统(三)

ELK 一、Zookeeper理论部分zookeeper的定义与工作机制zookeeper的特点Zookeeper 数据结构Zookeeper 应用场景Zookeeper 选举机制 二、zookeeper部署实验三、Kafka消息队列为什么需要消息队列(MQ)使用消息队列的好处消息队列的两种模式 Kafka 定义Kafka 简…

layui树形菜单的实现

前言 继续上一篇博客的内容,在原来代码的基础上实现树形菜单功能 一. 树形菜单是什么? 在layui中,树形菜单是通过 Tree 组件实现的。Tree 组件提供了一种树形结构展示数据的方式,常用于显示层级结构的菜单、目录等。开发者可以…

虚拟机中安装RabbitMQ及使用(超详细)

目录 1. 安装Socat 2. 安装Erlang 3. 安装RabbitMQ 4. 开启管理界面及配置 5. 启动 6. 配置虚拟主机及用户 6.1. 用户角色 6.2. Virtual Hosts配置 6.2.1. 创建Virtual Hosts 6.2.2. 设置Virtual Hosts权限 1. 安装Socat 在线安装依赖环境: yum install g…

数据结构【二叉树】

数据结构之二叉树 二叉树的定义二叉树的5种基本形态二叉树的抽象类型定义二叉树的特殊类型二叉树的性质二叉树的存储结构1、顺序存储2、链式存储 遍历二叉树前序遍历中序遍历后序遍历遍历算法的分析 线索二叉树 二叉树的定义 在数据结构中,二叉树是n(n&…

uniapp 封装公共方法(无需每个页面引用,直接调用)

封装方法: 1. 在根目录下建立common文件夹 创建com.js 2.在main.js中挂载(写在定义vue之后) import $com from /common/com.js Vue.prototype.$com $com 3.在com.js中按照以下格式定义方法 export default {//定义需要的方法 } 4.使用 click"$com.已经定义的方法名&q…

分布式定时任务xxl-Job

目录 前言 项目介绍 1.源码目录介绍 2 “调度数据库”配置 3 架构设计 3.1 设计思想 5.3.3 架构图 实战 1.服务端部署 2.执行端配置 3.任务开发 3.1 基于方法注解任务 3.2 基于api任务 3.3 分片广播任务 4.任务执行 4.1 单任务执行 4.2 子任务执行 4.3 分片广…

高并发的哲学原理(二)-- Apache 的性能瓶颈与 Nginx 的性能优势

每一名后端开发可能都知道 Nginx 比 Apache 性能强,但是为什么强,强在哪里,接下来我们动手实验解答这个问题。 Nginx 利用了新的 Linux kernel API Nginx 利用了 Linux 内核引入的 epoll 事件驱动 API,大幅降低了海量 TCP 连接下…

IDEA+springboot+ssm+layui+mysql高校宿舍管理系统源码

IDEAspringbootssmlayuimysql高校宿舍管理系统源码 一、系统介绍1.环境配置 二、系统展示1. 管理员登录2.宿舍列表3.预分配宿舍4.宿舍分配信息5. 留校管理6. 报修管理7. 留言管理8.卫生管理9.我的宿舍10.我的报修11.卫生检查记录12.离校登记13.留校申请14.返校登记15.留言板16.…

IDEA+springboot + ssm +shiro+ easyui +mysql实现的进销存系统

IDEAspringboot ssm shiro easyui mysql实现的进销存系统 一、系统介绍1.环境配置 二、系统展示1. 管理员登录2.首页3.修改密码4.系统日志5. 用户管理6. 角色管理7. 进货入库8.退货出库9.进货单据查询10.退货单据查询11.当前库存查询12.销售出库13.客户退货14. 销售单据查询15…

消息中间件选型RabbitMQ基础入门

1. 消息中间件(MQ) 1.1 概述 消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构 目前使用较多的消息队列有ActiveMQ&#xff…

使用 Docker 在 Windows、Mac 和 Linux 系统轻松部署 PostgreSQL 数据库

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

本地运行Segment Anything

按原项目GitHub - facebookresearch/segment-anything: The repository provides code for running inference with the SegmentAnything Model (SAM), links for downloading the trained model checkpoints, and example notebooks that show how to use the model.步骤 Ins…