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

文章目录

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

0 引言

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

1 KITTI数据集

1.1 下载数据

👉首先点击KITTI 开源数据官网
如下图,使用KITTI灰度图的数据集,点击Download odometry data set (grayscale, 22 GB)下载,并下载真值数据Download odometry ground truth poses (4 MB).
(tips: KITTI 数据下载需要先注册,登录账号后再下载)
请添加图片描述
下载的data_odometry_gray.zip解压的data_odometry_gray文件夹里有左目图像image_0和右目图像image_1
当使用VSLAM单目模式时,仅用到image_0文件夹里的左目图片即可;
当使用VSLAM双目模式时,需要用到image_0image_1两个文件夹里的图片。

.
└── dataset
    └── sequences
        ├── 00
        │   ├── calib.txt
        │   ├── image_0
        │   ├── image_1
        │   └── times.txt  # 时间戳文件
        ├── 01
        │   ├── calib.txt
        │   ├── image_0
        │   ├── image_1
        │   └── times.txt
        ├── 02
        │   ├── calib.txt
        │   ├── image_0
        │   ├── image_1
        │   └── times.txt

		...
        └── 21

68 directories, 44 files

下载的data_odometry_poses.zip解压的data_odometry_poses文件夹里

.
└── dataset
    └── poses
        ├── 00.txt  # 轨迹真值
        ├── 01.txt
        ├── 02.txt
        ├── 03.txt
		...
        └── 10.txt

2 directories, 11 files

⭐️⭐️⭐️本文用00数据集来测试单目ORB-SLAM2双目ORB-SLAM2.

1.2 真值轨迹格式转换

由于evo 载入轨迹有自己的数据格式要求(如下),刚刚下载的KITTI真值数据data_odometry_poses/dataset/poses/00.txt不满足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提供了转换脚本kitti_poses_and_timestamps_to_trajectory.py

  1. 首先下载evo源码:https://github.com/MichaelGrupp/evo/tree/master,脚本就在evo/contrib文件夹下
  2. 下载后把data_odometry_poses/dataset/poses/00.txt文件和data_odometry_gray/dataset/sequences/00/times.txt文件复制到evo/contrib文件夹下
  3. 然后在evo/contrib文件夹下新开终端,执行以下命令得到符合tum格式的真值数据 kitti_00_gt.txt ,可以用来evo来绘制该真值轨迹。
# 保存成 tum 格式
python3 kitti_poses_and_timestamps_to_trajectory.py 00.txt times.txt kitti_00_gt.txt

执行后,evo/contrib文件夹下生成一个kitti_00_gt.txt,并把kitti_00_gt.txt文件复制到data_odometry_poses/dataset/poses/文件夹下,evo评估轨迹时可以用

# evo/contrib 文件夹下
.
├── 00.txt
├── kitti_00_gt.txt  # tum 格式的真值轨迹
├── kitti_poses_and_timestamps_to_trajectory.py
├── multiply_timestamps.py
├── print_duplicate_timestamps.sh
├── README.md
├── record_tf_as_posestamped_bag.py
├── rename_est_name.py
└── times.txt

0 directories, 9 files

2 单目ORB-SLAM2

2.1 运行ORB-SLAM2

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

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

除了数据,ORB-SLAM2已经准备了其他3项。
并且官方给出了KITTI数据集的参数文件,在ORB_SLAM2/Examples/Monocular/文件夹下,分别是KITTI00-02.yamlKITTI03.yamlKITTI04-12.yaml
本篇用对应的KITTI00-02.yaml

  • KITTI00-02.yaml00~02相关的参数文件
  • KITTI03.yaml03相关的参数文件
  • KITTI04-12.yaml04~12相关的参数文件

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

# 在ORB-SLAM2工程目录下新开终端
./Examples/Monocular/mono_kitti Vocabulary/ORBvoc.txt Examples/Monocular/KITTI00-02.yaml PATH/data_odometry_gray/dataset/sequences/00

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

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

2.2 evo评估轨迹(tum格式)

2.2.1 载入和对比轨迹

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

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

运行后:

--------------------------------------------------------------------------------
name:	KeyFrameTrajectory
infos:	1765 poses, 3727.745m path length, 470.374s duration
--------------------------------------------------------------------------------
name:	kitti_00_gt
infos:	4541 poses, 3724.187m path length, 470.582s duration

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

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

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

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

2.2.2 计算绝对轨迹误差

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

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

运行后:

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

       max	1.534985
      mean	0.487913
    median	0.296975
       min	0.037318
      rmse	0.633808
       sse	709.023114
       std	0.404542

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

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

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

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

3 双目ORB-SLAM2

3.1 运行ORB-SLAM2

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

  • KITTI双目模式的可执行文件
  • 官方训练好的词袋
  • 参数文件
  • KITTI图像数据集的路径

除了数据,ORB-SLAM2已经准备了其他3项。
并且官方给出了KITTI数据集的参数文件,在ORB_SLAM2/Examples/Monocular/文件夹下,分别是KITTI00-02.yamlKITTI03.yamlKITTI04-12.yaml
本篇用对应的KITTI00-02.yaml

  • KITTI00-02.yaml00~02相关的参数文件
  • KITTI03.yaml03相关的参数文件
  • KITTI04-12.yaml04~12相关的参数文件

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

# 在ORB-SLAM2工程目录下新开终端
./Examples/Stereo/stereo_kitti Vocabulary/ORBvoc.txt Examples/Stereo/KITTI00-02.yaml PATH/data_odometry_gray/dataset/sequences/00

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

运行完毕后,还在该终端目录下保存了轨迹文件CameraTrajectory.txt
但和单目ORB-SLAM2生成KeyFrameTrajectory.txtevo支持的tum格式不同,CameraTrajectory.txtevo支持的kitti格式

3.2 evo评估轨迹(kitti格式)

3.2.1 载入和对比轨迹

把刚刚生成的轨迹文件CameraTrajectory.txt复制data_odometry_poses/dataset/poses文件夹下,并且该文件夹下00.txtevo支持的kitti格式的轨迹真值,然后执行以下命令来载入两个轨迹,并进行可视化对比:

evo_traj kitti CameraTrajectory.txt --ref=00.txt -p --plot_mode=xyz --align --correct_scale

运行后:

--------------------------------------------------------------------------------
name:	CameraTrajectory
infos:	4541 poses, 3722.505m path length
--------------------------------------------------------------------------------
name:	00
infos:	4541 poses, 3724.187m path length

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

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

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

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

3.2.2 计算绝对轨迹误差

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

evo_ape kitti CameraTrajectory.txt 00.txt -p -as

运行后:

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

       max	2.680975
      mean	0.821403
    median	0.777559
       min	0.154654
      rmse	0.881577
       sse	3529.167119
       std	0.320119

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

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

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

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

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工具评估轨迹

Reference:

  • https://github.com/raulmur/ORB_SLAM2
  • https://github.com/MichaelGrupp/evo
  • https://www.cvlibs.net/datasets/kitti/eval_odometry.php



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



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

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

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

相关文章

Microsoft Edge 浏览器的Bing Chat

微软公司持续发力,推出的产品 Bing Chat 与 ChatGPT 之间的竞争愈发激烈。如今,微软不仅不断更新 Edge 浏览器,还将 Bing Chat 内置在边栏中,方便用户快速访问。这一举措不禁让人想起,Edge 浏览器如今已经是一款名副其…

探索AI图像安全,助力可信AI发展

探索AI图像安全,助力可信AI发展 0. 前言1. 人工智能发展与安全挑战1.1 人工智能及其发展1.2 人工智能安全挑战 2. WAIC 2023 多模态基础大模型的可信 AI2.1 WAIC 2023 专题论坛2.2 走进合合信息 3. AI 图像安全3.1 图像篡改检测3.2 生成式图像鉴别3.3 OCR 对抗攻击技…

动态规划入门第1课

1、从计数到选择 ---- 递推与DP(动态规划) 2、从递归到记忆 ---- 子问题与去重复运算 3、动态规划的要点 第1题 网格路1(grid1) 小x住在左下角(0,0)处,小y在右上角(n,n)处。小x需要通过一段网格路才能到小y家。每次,小x可以选…

【学会动态规划】最小路径和(9)

目录 动态规划怎么学? 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后: 动态规划怎么学? 学习一个算法没有捷径,更何况是学习动态规划, 跟我…

视频增强技术-去噪

本文介绍了关于视频增强技术的相关方法包括传统方法和基于深度学习的方法,并给出了他们的对比实验结果,最后对它们简单的做了总结,文中有一些图片和总结来自于网上其他博主的文章,已在文中标记并给出了相关的原文链接,…

JAVA SE -- 第十天

(全部来自“韩顺平教育”) 一、枚举(enumeration,简写enum) 枚举是一组常量的集合 1、实现方式 a.自定义类实现枚举 b.使用enum关键字实现枚举 二、自定义类实现枚举 1、注意事项 ①不需要提供setXxx方法&#xff…

开源QianWei搭建音乐网站,并实现公网连接

开源QianWei搭建音乐网站,并实现公网连接 1、前言2、本地网页搭建2.1环境使用2.2 支持组建选择2.3 网页安装 3、本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4、公网访问测试5、结语 1、前言 音乐是我们生活和工作中不可或缺的调剂,它能让我们心…

155、基于STM32单片机老人防跌倒摔倒GSM短信报警系统ADXL345加速度设计(程序+原理图+PCB源文件+参考论文+硬件设计资料+元器件清单等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件方案 二、设计功能 三、实物图 四、原理图 五、PCB图 六、程序源码 资料包括: 需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。 单片机主芯片选…

【PostgreSQL内核学习(六)—— 工具使用学习】

工具使用学习 工具使用学习安装中出现的问题 声明:本文的工具学习内容来自于《小宇带你学pg内核分析》 工具的代码仓库链接为: https://github.com/shenyuflying/pgNodeGraph 此外,我还参考了以下文章: https://rng-songbaobao.bl…

Mac配置Latex环境教程2023

第一步:安装MacTex 官网:https://www.tug.org/mactex/ 第二步:安装编译器:Texpad xclient官网下载Texpad:https://xclient.info/s/texpad.html 第三步:开始使用 LeTex \documentclass{article}\begin{do…

rabbitmq模块启动报java.net.SocketException: socket closed的解决方法

问题 最近在接手一个项目时,使用的是spring-cloud微服务构架,mq消息消费模块是单独一个模块,但启动这个模块一直报如下错误: java.net.SocketException: socket closed 这个错误是这个模块注册不到nacos报的错,刚开…

在Debian 12 上安装 PHP 5.6, 7.4

环境:Debian 12 Debian 12 默认的PHP版本为 8.2 如果直接安装php7.4就出现下面的报错: sudo apt-get install libapache2-mod-php7.4 php7.4 php7.4-gd php7.4-opcache php7.4-mbstring php7.4-xml php7.4-json php7.4-zip php7.4-curl php7.4-imap p…

Spring使用注解存储Bean对象

文章目录 一. 配置扫描路径二. 使用注解储存Bean对象1. 使用五大类注解储存Bean2. 为什么要有五大类注解?3.4有关获取Bean参数的命名规则 三. 使用方法注解储存Bean对象1. 方法注解储存对象的用法2. Bean的重命名 在前一篇博客中( Spring项目创建与Bean…

RS485/RS232自由转ETHERNET/IP网关rs485和232接口一样吗

你是否曾经遇到过这样的问题:如何将ETHERNET/IP网络和RS485/RS232总线连接起来呢? 远创智控的YC-EIP-RS485/232通讯网关,自主研发的ETHERNET/IP从站功能,完美解决了这个难题。这款网关不仅可以将ETHERNET/IP网络和RS485/RS232总线…

访客报警定位管理系统:提升安全管理水平的创新解决方案

在当前日益复杂的安全环境下,保障人员安全、提高安全响应能力和管理效率成为了各行各业的首要任务。 作为一种先进的安全管理解决方案,访客报警定位管理系统凭借其独特的优势和广泛的应用场景,正逐渐成为各行业安全管理的重要工具。 那么&a…

「深度学习之优化算法」(十七)灰狼算法

1. 灰狼算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读)   灰狼算法(Grey Wolf Algorithm)是受灰狼群体捕猎行为启发而提出的算法。算法提出于2013年,仍是一个较新的算法。目前为止(2020)与之相关的论文也比较多,但多为算法的应用,应该仍有研究和改进的余…

数学建模-时间序列分析 实例

实例1销量数据预测和实例2人口数据预测实例3上证指数预测和实例4gdp增长率预测 数据-定义时间 不加置信区间清晰点 例二 实例3

性能测试-Jmeter之Linux下压力测试

我们在做测试的时候,有时候要运行很久,公司用的测试服务器一般都是linux,就可以运行在linux下面,linux下面不能像windows一样有图形化界面,那怎么运行脚本呢,就先在windows上把脚本做好,然后在l…

云计算和云架构是什么 有什么用途?

云计算是一种基于互联网的计算方式,它通过网络将计算资源(如计算能力、存储、网络带宽等)以服务的形式提供给用户,并允许用户根据需求进行灵活的资源调配和管理。云计算通常分为三个层次,即基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服…

Spring学习记录----十二、Spring IoC注解式开发

目录 十二、Spring IoC注解式开发 12.1 回顾注解 注解怎么定义,注解中的属性怎么定义? 注解怎么使用? 1--通过反射机制怎么读取注解? 代码 运行结果 2--通过反射机制怎么读取注解? 代码 运行结果 12.2 声明…