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

news2024/11/28 12:48:46

文章目录

  • 0 引言
  • 1 EuRoc数据集
    • 1.1 下载数据
    • 1.2 真值轨迹格式转换
  • 2 单目ORB-SLAM2
    • 2.1 运行ORB-SLAM2
    • 2.2 evo评估轨迹
      • 2.2.1 载入和对比轨迹
      • 2.2.2 计算绝对轨迹误差
  • 3 双目ORB-SLAM2
    • 3.1 运行ORB-SLAM2
    • 3.2 evo评估轨迹
      • 3.2.1 载入和对比轨迹
      • 3.2.2 计算绝对轨迹误差
  • ORB-SLAM2学习笔记系列:

0 引言

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

1 EuRoc数据集

1.1 下载数据

👉首先点击EuRoc开源数据官网
如下图,可自行选择一组数据下载,以下用第一组的Machine Hall 01为数据用例。
请添加图片描述
其中ASL_Dataset_Format 中的 state_groundtruth_estimate0 中是evo需要用到的真值。

.
├── ASL_Dataset_Format
│   └── MH_01_easy
│       └── mav0
│           ├── body.yaml
│           ├── cam0
│           │   ├── data
│           │   ├── data.csv
│           │   └── sensor.yaml
│           ├── cam1
│           │   ├── data
│           │   ├── data.csv
│           │   └── sensor.yaml
│           ├── imu0
│           │   ├── data.csv
│           │   └── sensor.yaml
│           ├── leica0
│           │   ├── data.csv
│           │   └── sensor.yaml
│           └── state_groundtruth_estimate0
│               ├── data.csv
│               └── sensor.yaml
└── ROS bag
    ├── MH_01_easy.bag

1.2 真值轨迹格式转换

由于evo 载入轨迹有自己的数据格式要求(如下),刚刚下载的EuRoc真值数据state_groundtruth_estimate0/data.csv不满足evotum数据格式要求。

# tum 数据格式 参考 https://cvg.cit.tum.de/data/datasets/rgbd-dataset/tools
(time, t x , t y , t z , q x , q y , q z , q w )时间、位置、姿态四元数

但好在evo提供了转换工具,在state_groundtruth_estimate0文件夹下新开终端,执行 evo_traj euroc data.csv --save_as_tum 即可得到符合tum格式的真值数据data.tum ,可以用evo来绘制该真值轨迹。

# 保存成.tum
evo_traj euroc data.csv --save_as_tum

执行后,evo_traj euroc data.csv --save_as_tum文件夹下生成一个data.tum

.
├── data.csv
├── data.tum # 转换的data.tum
└── sensor.yaml

2 单目ORB-SLAM2

2.1 运行ORB-SLAM2

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

  • EuRoc单目模式的可执行文件
  • 官方训练好的词袋
  • 参数文件
  • 单目图像数据集的路径
  • 对应的序列文件

除了数据,ORB-SLAM2已经准备了其他4项,其中参数文件在ORB_SLAM2/Examples/Monocular/EuRoC.yaml,序列文件在Examples/Monocular/EuRoC_TimeStamps/MH01.txt

熟悉了执行命令之后,执行以下命令,用EuRoc-Machine Hall 01数据集来运行ORB-SLAM2,其中PATHMH_01_easy文件夹的存放目录:

# 在ORB-SLAM2工程目录下新开终端
./Examples/Monocular/mono_euroc Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml PATH/MH_01_easy/mav0/cam0/data Examples/Monocular/EuRoC_TimeStamps/MH01.txt

运行后,会自动生成两个可视化页面,ORB-SLAM2 Current FrameORB-SLAM2 Map Viewer
请添加图片描述
请添加图片描述

运行完毕后,还在该终端目录下保存了轨迹文件KeyFrameTrajectory.txt

2.2 evo评估轨迹

2.2.1 载入和对比轨迹

把刚刚生成的轨迹文件KeyFrameTrajectory.txt复制MH_01_easy/mav0/state_groundtruth_estimate0文件夹下,1.2小节已转换的data.tum是轨迹真值,然后执行以下命令来载入两个轨迹,并进行可视化对比:

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

运行后:

name:	KeyFrameTrajectory
infos:	219 poses, 73.595m path length, 174.850s duration
--------------------------------------------------------------------------------
name:	data
infos:	36382 poses, 80.626m path length, 181.905s duration

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

trajectories 结果图:(3D 可旋转查看)
请添加图片描述

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

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

2.2.2 计算绝对轨迹误差

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

evo_ape tum KeyFrameTrajectory.txt data.tum -p -as

运行后:

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

       max	0.120919
      mean	0.040675
    median	0.037146
       min	0.005794
      rmse	0.045519
       sse	0.453756
       std	0.020432

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

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

map示意图:(3D 可旋转查看)
请添加图片描述

至此,成功用evo评估工具来评估单目ORB-SLAM2生成的EuRoc开源数据轨迹和真值轨迹。

3 双目ORB-SLAM2

3.1 运行ORB-SLAM2

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

  • EuRoc双目模式的可执行文件
  • 官方训练好的词袋
  • 参数文件
  • 左目图像数据集的路径
  • 右目图像数据集的路径
  • 对应的序列文件

除了左右目数据,ORB-SLAM2已经准备了其他4项,其中参数文件在ORB_SLAM2/Examples/Monocular/EuRoC.yaml,序列文件在Examples/Monocular/EuRoC_TimeStamps/MH01.txt

熟悉了执行命令之后,执行以下命令,用EuRoc-Machine Hall 01数据集中的左目cam0右目cam1来运行ORB-SLAM2,其中PATHMH_01_easy文件夹的存放目录:

# 在ORB-SLAM2工程目录下新开终端
./Examples/Stereo/stereo_euroc Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml PATH/MH_01_easy/mav0/cam0/data PATH/MH_01_easy/mav0/cam1/data Examples/Stereo/EuRoC_TimeStamps/MH01.txt

运行后,会自动生成两个可视化页面,ORB-SLAM2 Current FrameORB-SLAM2 Map Viewer
请添加图片描述
请添加图片描述

运行完毕后,还在该终端目录下保存了轨迹文件CameraTrajectory.txt

3.2 evo评估轨迹

3.2.1 载入和对比轨迹

把刚刚生成的轨迹文件CameraTrajectory.txt复制MH_01_easy/mav0/state_groundtruth_estimate0文件夹下,1.2小节已转换的data.tum是轨迹真值,然后执行以下命令来载入两个轨迹,并进行可视化对比:

evo_traj tum CameraTrajectory.txt --ref=data.tum -p --plot_mode=xyz --align --correct_scale

运行后:

--------------------------------------------------------------------------------
name:	CameraTrajectory
infos:	3638 poses, 81.287m path length, 181.850s duration
--------------------------------------------------------------------------------
name:	data
infos:	36382 poses, 80.626m path length, 181.905s duration

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

trajectories 结果图:(3D 可旋转查看)
请添加图片描述

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

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

3.2.2 计算绝对轨迹误差

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

evo_ape tum CameraTrajectory.txt data.tum -p -as

运行后:

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

       max	0.081526
      mean	0.027178
    median	0.022538
       min	0.001520
      rmse	0.033796
       sse	4.155190
       std	0.020088

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

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

map示意图:(3D 可旋转查看)
请添加图片描述

至此,成功用evo评估工具来评估双目ORB-SLAM2生成的EuRoc开源数据轨迹和真值轨迹。

ORB-SLAM2学习笔记系列:

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

Reference:

  • https://github.com/raulmur/ORB_SLAM2
  • https://github.com/MichaelGrupp/evo
  • https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets



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



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

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

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

相关文章

Spark(28):Spark Shuffle解析

目录 0. 相关文章链接 1. ShuffleMapStage与ResultStage 2. HashShuffle解析 2.1. 未优化的HashShuffle 2.2. 优化后的 HashShuffle 3. SortShuffle解析 3.1. 普通SortShuffle 3.2. bypass SortShuffle 0. 相关文章链接 Spark文章汇总 1. ShuffleMapStage与ResultSta…

C语言实现通讯录【文件版】——存档联系人信息

我真的无法对一个追逐梦想的少年生恨 目录 一、源码阅读注意事项 二、文件读取函数及文件读写规则 1.打开文件 2.读写文件 3.关闭文件 大家好,我是纪宁。 上篇文章向大家如何用C语言实现动态版的通讯录,这篇文章将介绍如何用C语言将通讯录的信息写…

2快速入门Spring基于XML的方式注册第一个组件

基于XML的方式注册第一个组件 开发步骤 第一步:创建Maven工程配置生成的pom.xml文件, 添加spring context基础依赖和junit依赖(注意根据Spring官方文档描述,Spring6需要JDK版本17) 当添加Spring的基础依赖spring context之后,Maven会自动关联并引入其…

【嵌入式项目】南海无线通信系统的射频子系统

前言 射频子系统是无线通行系统的重要组成部分之一。 射频子系统主要由天线、射频前端和调制解调器组成。其工作原理如下: 1. 发送端将数字信号转换成高频模拟信号:无线通行系统的控制中心或读卡器产生的一组数字信号需要通过数模转换器将其转换为模拟…

图纸加密软件哪些可以用?哪个好?

图纸加密软件是一种用于保护和加密图纸文件的工具。它们可以对图纸文件进行加密,以确保只有授权的人可以访问和查看这些文件。 图纸加密软件通常提供了多种加密算法和安全性措施,以确保图纸的保密性和安全性。此外,一些图纸加密软件还提供了…

Postman:postman多接口顺序执行

Runner的使用 postman不仅可以单独运行某个接口,postman的 Runner模块可以运行多个接口,可以实现真正意义上的自动化接口测试 Runner的主要功能如下 按顺序调用接口,执行用例; 批量发送请求; 对接口数据进行参数化…

程序员最常用的6大技术博客排行榜

自互联网发展以来,程序员越来越多,相对应的博客、论坛、社区也五花八门,难以抉择。这么多年用过不少博客平台,以下是我总结的一些程序员常用的技术博客网站。 1、CSDN CSDN博客是专业的IT技术发表平台,流量大、资源多…

欧美暖通现状大解析!涂鸦智慧暖通方案,强大的数据管理能力为你打造爆品

作为现代建筑领域中不可或缺的一部分,暖通行业近两年的增长远超行业人士的预期。主要原因在于全球高温频发、能源问题越发突出,各国政府、科技巨头对新能源产业、节能减排等绿色环保产业给予了极大关注和资金投入。 IMARC Group 数据显示,202…

FL Studio是什么软件?FL Studio2023最新更新内容

FL Studio是什么软件 FL Studio是由比利时软件公司Image-Line开发的音乐制作软件,它拥有丰富的音效、合成器、采样器、鼓机等工具。FL Studio支持多种音频文件格式,包括MIDI、MP3、WAV、OGG等,可以帮助用户自由地进行音乐创作。 FL Studio界…

在After Effects 加速渲染的 21个技巧,记得收藏!

如何减少After Effects 渲染时间? 1.升级内存 减少渲染时间的一种有效方法是升级 RAM(随机存取存储器)。RAM 在渲染过程中起着至关重要的作用,因为它存储并快速访问渲染任务所需的数据。增加系统中的 RAM 量可提供更多的数据存储…

【基础架构】刚果商城(congomall)

刚果商城(congomall) 整体架构 公共规约组件 congomall-base-spring-boot-starter META-INF/spring.factories 自动装配 org.springframework.boot.autoconfigure.EnableAutoConfigurationorg.opengoofy.congomall.springboot.starter.base.config.ApplicationBaseAutoConfi…

Webpack原理与实战 --- Webpack 核心特性

如何使用 Webpack 实现模块化打包? 对模块化打包方案或工具的设想或者说是诉求: 能够将散落的模块打包到一起;能够编译代码中的新特性;能够支持不同种类的前端资源模块。 其中最为主流的就是 Webpack、Parcel 和 Rollup 以 We…

Lottie源代码解析

Lottie-iOS Lottie动画的原理: 一个完整动画View,是由很多个子Layer 组成,而每个子Layer主要通过shapes(形状),masks(蒙版),transform三大部分进行动画。Lottie框架通过…

jdk9以上反射报错 , jib 镜像打包添加配置

错误信息: unable to make protected final java.lang.class java.lang.classloader.defineclass 在IDEA中添加: --add-opens java.base/java.langALL-UNNAMED 即可启动 如果用了jib-maven-plugin 发布镜像, 怎么配置这个参数进去呢&…

多表查询进阶

首先两表如下所示 两表结构如下 查询要求 1 所有有门派的人员信息 select *from t_emp right join t_dept on t_emp.deptIdt_dept.id; 2 列出所有用户,并显示其机构信息 select t_emp.name,t_dept.id,t_dept.deptName,t_dept.address,t_dept.CEO from t_emp l…

深蓝学院C++基础与深度解析笔记 第 12 章 类进阶

深蓝学院C基础与深度解析笔记 第 12 章 类进阶 1. 运算符重载 ● 使用 operator 关键字引入重载函数: – 重载不能发明新的运算,不能改变运算的优先级与结合性,通常不改变运算含义 – 函数参数个数与运算操作数个数相同,至少一…

C++模拟实现unordered_map和unordered_set(哈希)

目录 一、unordered系列关联式容器 1.1 unordered_map 1.1.1 unordered_map 1.1.2 unordered_map接口说明 1. unordered_map的容量 2. unordered_map的迭代器 3.unordered_map的元素访问 4. unordered_map的查询 5. unordered_map的修改操作 6. unordered_map的桶操作…

ros::catkin_create_pkg

用下面的命令即可 catkin_create_pkg first_pkg rospy roscpp std_msg -m ur-email-name

HBase(一)HBase v2.2 高可用多节点搭建

最近刚刚完成了HBase相关的一个项目,作为项目的技术负责人,完成了大部分的项目部署,特性调研工作,以此系列文章作为上一阶段工作的总结. 前言 其实目前就大多数做应用的情况来讲,我们并不需要去自己搭建一套HBase的集群,现有的很多云厂商提供的服务已经极大的方便日常的应用使…

接口测试工具——Postman使用详解

目录 Postman简介 Postman主界面 菜单栏 工具栏 请求管理区 环境管理区 请求设计区 发送请求 发送GET请求 Postman发送GET请求 发送表单格式POST请求 发送JSON格式POST请求 发送XML格式POST请求 发送文件上传类型的请求 响应 环境和变量 环境变量设置 环境变量…