0


用evo工具分析ORB-SLAM2运行TUM,KITTI,EuRoC数据集轨迹

目录


前言

在ORB-SLAM2的学习过程中,不可避免的会用到这些数据集来运行程序,并且还会将运行轨迹与相机真实轨迹作对比,下面就介绍使用evo工具分析SLAM常用TUM,KITTI,EuRoC数据集。SLAM数据集TUM,KITTI,EuRoC数据集的下载地址与真实轨迹文件的查找总结的博客链接。


一、evo工具的安装

可以使用evo工具将.csv文件形式的轨迹文件转换为TUM形式的轨迹文件。

evo_traj euroc data.csv --save_as_tum

evo工具安装(参考链接),打开终端输入

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

二、运行TUM数据集

TUM数据集官网下载地址,TUM数据集里面有深度图像和RGB图像。当使用单目模式时,仅用到

rgb

文件夹里的图片;当使用RGB-D模式时,需要用到

depth

rgb

两个文件夹里的图片,而且需要

associate.py

脚本文件关联 RGB 图像和深度图像(下面会说到)。
在这里插入图片描述
下面以

rgbd_dataset_freiburg3_long_office_household

数据集为例

1.TUM单目数据集

执行这个命令:

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER

。将

TUMX.yaml

改为

TUM1.yaml

TUM2.yaml

TUM3.yaml

,分别用于

freiburg1

freiburg2

freiburg3

序列。将

PATH_TO_SEQUENCE_FOLDER

改为解压好的数据集文件夹路径。简单来说命令分为四个部分:1.TUM单目模式执行文件 2.训练好的词袋 3.参数文件 4.解压好的数据集路径
切换到 ORB_SLAM2/ 下,在终端里输入(对应路径改成自己的)

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM3.yaml /home/d/文档/数据集/TUM数据集/rgbd_dataset_freiburg3_long_office_household

2.TUM RGB-D数据集

在这步中我们需要使用RGB 图像和深度图像的关联文件,ORB-SLAM2的作者在

examples/RGB-D/associations/

路径下提供了某些序列的关联文件。
我们也可以使用 python 脚本

associate.py

(associate.py下载地址)关联 RGB 图像和深度图像。

associate.py

脚本放到下载并且解压好的

rgbd_dataset_freiburg3_long_office_household/

路径下,执行以下命令

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

接下来执行这个命令:

./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUMX.yaml PATH_TO_SEQUENCE_FOLDER ASSOCIATIONS_FILE

。将

TUMX.yaml

改为

TUM1.yaml

TUM2.yaml

TUM3.yaml

,分别用于

freiburg1

freiburg2

freiburg3

序列。将

PATH_TO_SEQUENCE_FOLDER

改为解压好的数据集文件夹路径。将

ASSOCIATIONS_FILE

改为相应关联文件的路径。简单来说命令分为五个部分:1.TUM RGB-D执行文件 2.训练好的词袋 3.参数文件 4.解压好的数据集路径 5.关联文件路径
切换到 ORB_SLAM2/ 下,在终端里输入(对应路径改成自己的)

./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM3.yaml /home/d/文档/数据集/TUM数据集/rgbd_dataset_freiburg3_long_office_household /home/d/文档/数据集/TUM数据集/rgbd_dataset_freiburg3_long_office_household/associations.txt

三、运行KITTI数据集

KITTI数据集官网下载地址,使用灰度图像的KITTI数据集,里面有左目图像(image_0)和右目图像(image_1)。当使用单目模式时,仅用到

image_0

文件夹里的左目图片;当使用双目模式时,需要用到

image_0

image_1

两个文件夹里的图片。
在这里插入图片描述

下面以

00

数据集为例

1.KITTI单目数据集

执行这个命令:

./Examples/Monocular/mono_kitti Vocabulary/ORBvoc.txt Examples/Monocular/KITTIX.yaml PATH_TO_DATASET_FOLDER/dataset/sequences/SEQUENCE_NUMBER

。将

KITTIX.yaml

改为

KITTI00-02.yaml

KITTI03.yaml

KITTI04-12.yaml

,分别用于

序列0到2

序列3

序列4到12

。将

PATH_TO_DATASET_FOLDER

改为解压好的数据集文件夹路径。将

SEQUENCE_NUMBER

改为00、01、02,…, 11 简单来说命令分为四个部分:1.KITTI单目模式执行文件 2.训练好的词袋 3.参数文件 4.解压好的数据集路径
切换到 ORB_SLAM2/ 下,在终端里输入(对应路径改成自己的)

./Examples/Monocular/mono_kitti Vocabulary/ORBvoc.txt Examples/Monocular/KITTI00-02.yaml /home/d/文档/数据集/Kitti数据集/00

2.KITTI双目数据集

执行这个命令:

./Examples/Stereo/stereo_kitti Vocabulary/ORBvoc.txt Examples/Stereo/KITTIX.yaml PATH_TO_DATASET_FOLDER/dataset/sequences/SEQUENCE_NUMBER

。将

KITTIX.yaml

改为

KITTI00-02.yaml

KITTI03.yaml

KITTI04-12.yaml

,分别用于

序列0到2

序列3

序列4到12

。将

PATH_TO_DATASET_FOLDER

改为解压好的数据集文件夹路径。将

SEQUENCE_NUMBER

改为00、01、02,…, 11 简单来说命令分为四个部分:1.KITTI单目模式执行文件 2.训练好的词袋 3.参数文件 4.解压好的数据集路径
切换到 ORB_SLAM2/ 下,在终端里输入(对应路径改成自己的)

./Examples/Stereo/stereo_kitti Vocabulary/ORBvoc.txt Examples/Stereo/KITTI00-02.yaml /home/d/文档/数据集/Kitti数据集/00

四、运行EuRoC数据集

EuRoC数据集官网下载地址,EuRoC数据集里面有左目图像(cam0)和右目图像(cam1)。当使用单目模式时,仅用到

cam0

文件夹里的左目图片;当使用双目模式时,需要用到

cam0

cam1

两个文件夹里的图片。
在这里插入图片描述

下面以

MH_01_easy

数据集为例

1.EuRoC单目数据集

对 V1 和 V2 序列执行以下第一个命令,或对 MH 序列执行第二个命令。根据要运行的数据集更改

PATH_TO_SEQUENCE_FOLDER

和序列。

./Examples/Monocular/mono_euroc Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml PATH_TO_SEQUENCE/mav0/cam0/data Examples/Monocular/EuRoC_TimeStamps/SEQUENCE.txt 
./Examples/Monocular/mono_euroc Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml PATH_TO_SEQUENCE/cam0/data Examples/Monocular/EuRoC_TimeStamps/SEQUENCE.txt 

PATH_TO_SEQUENCE

改为解压好的数据集文件夹路径。将

SEQUENCE

改为对应数据集的序列文件 **简单来说命令分为五个部分:1.EuRoC单目模式执行文件 2.训练好的词袋 3.参数文件 4.解压好的数据集左目图像路径 5.对应的序列文件 **
切换到 ORB_SLAM2/ 下,在终端里输入(对应路径改成自己的)

./Examples/Monocular/mono_euroc Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml /home/d/文档/数据集/EuRoc数据集/MH_01_easy/mav0/cam0/data Examples/Monocular/EuRoC_TimeStamps/MH01.txt 

2.EuRoC双目数据集

对 V1 和 V2 序列执行以下第一个命令,或对 MH 序列执行第二个命令。根据要运行的数据集更改

PATH_TO_SEQUENCE_FOLDER

SEQUENCE

./Examples/Stereo/stereo_euroc Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml PATH_TO_SEQUENCE/mav0/cam0/data PATH_TO_SEQUENCE/mav0/cam1/data Examples/Stereo/EuRoC_TimeStamps/SEQUENCE.txt
./Examples/Stereo/stereo_euroc Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml PATH_TO_SEQUENCE/cam0/data PATH_TO_SEQUENCE/cam1/data Examples/Stereo/EuRoC_TimeStamps/SEQUENCE.txt 

PATH_TO_SEQUENCE

改为解压好的数据集文件夹路径。将

SEQUENCE

改为对应数据集的序列文件 **简单来说命令分为六个部分:1.EuRoC单目模式执行文件 2.训练好的词袋 3.参数文件 4.解压好的数据集左目图像路径 5.解压好的数据集右目图像路径 6.对应的序列文件 **
切换到 ORB_SLAM2/ 下,在终端里输入(对应路径改成自己的)

./Examples/Stereo/stereo_euroc Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml /home/d/文档/数据集/EuRoc数据集/MH_01_easy/mav0/cam0/data /home/d/文档/数据集/EuRoc数据集/MH_01_easy/mav0/cam1/data Examples/Stereo/EuRoC_TimeStamps/MH01.txt

五、使用evo工具分析

1.常用指令

TUM

数据集的

rgbd_dataset_freiburg3_long_office_household

为例介绍

绘制单个轨迹

evo_traj tum groundtruth.txt -p

在这里插入图片描述

绘制多个轨迹

evo_traj tum CameraTrajectory_TUM.txt groundtruth.txt -p

在这里插入图片描述
上面的轨迹在旋转和平移上不对齐,可以通过

--ref

参数指定参考轨迹,并且添加参数

-a

来对其轨迹

evo_traj tum CameraTrajectory_TUM.txt --ref=groundtruth.txt -p -a

在这里插入图片描述
由于单目相机会存在尺度的不确定性,所以在仅使用

-a

不够

evo_traj tum KeyFrameTrajectory_TUM.txt --ref=groundtruth.txt -p -a

在这里插入图片描述
还需要添加一个参数

-s

进行尺度上面的对齐

evo_traj tum KeyFrameTrajectory_TUM.txt --ref=groundtruth.txt -p -a -s

在这里插入图片描述
或者直接使用参数

-as

同时使用旋转和平移以及尺度上面的对齐

evo_traj tum KeyFrameTrajectory_TUM.txt --ref=groundtruth.txt -p -as

在这里插入图片描述
通过观察,上面的轨迹在Z轴上面变化不大,可以添加参数

--plot_mode=xy

将轨迹压缩在

xy

平面上

evo_traj tum  CameraTrajectory_TUM.txt --ref=groundtruth.txt -p --plot_mode=xy -as

在这里插入图片描述
通过上面的过程,我们 常用的画轨迹指令

evo_traj tum XXX.txt --ref=XXX.txt -p -as
evo_traj tum  XXX.txt --ref=XXX.txt -p --plot_mode=xy -as

计算绝对位姿误差
大多数中论文的指标为测量绝对误差, 在进行评估时,若经过了缩放,在命令行中应将真实轨迹(参考轨迹)放在估计轨迹(计算轨迹)前方,避免在缩放时参考轨迹错误而造成误差被错误缩放。

evo_ape tum groundtruth.txt CameraTrajectory_TUM.txt -p --plot_mode=xy -as
max

:表示最大误差;

mean

:平均误差;

median

:误差中位数;

min

:最小误差;

rmse

:均方根误差;

sse

:和方差、误差平方和;

std

:标准差。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

evo_rpe

指令是计算相对位姿误差,参数与上面的计算绝对位姿误差一致,因为不常用,就不介绍了

2.用evo工具分析TUM

画轨迹

evo_traj tum  CameraTrajectory_TUM.txt --ref=groundtruth.txt -p --plot_mode=xy -as

在这里插入图片描述

计算绝对位姿误差
在进行评估时,若经过了缩放,在命令行中应将真实轨迹(参考轨迹)放在估计轨迹(计算轨迹)前方,避免在缩放时参考轨迹错误而造成误差被错误缩放。

evo_ape tum groundtruth.txt CameraTrajectory_TUM.txt -p --plot_mode=xy -as
max

:表示最大误差;

mean

:平均误差;

median

:误差中位数;

min

:最小误差;

rmse

:均方根误差;

sse

:和方差、误差平方和;

std

:标准差。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.用evo工具分析KITTI

ORB-SLAM2以单目模式运行KITTI数据集保存的轨迹文件格式是TUM格式的,使用evo工具不能将KITTI格式的轨迹转换成TUM格式的轨迹,但是能将TUM格式的轨迹转换成KITTI格式的轨迹(参考链接)
使用下面的命令将TUM格式的轨迹转化成KITTI格式的

evo_traj tum KeyFrameTrajectory_TUM.txt --save_as_kitti

画轨迹

evo_traj kitti  CameraTrajectory_KITTI.txt --ref=00.txt -p --plot_mode=xz -as

在这里插入图片描述

计算绝对位姿误差
在进行评估时,若经过了缩放,在命令行中应将真实轨迹(参考轨迹)放在估计轨迹(计算轨迹)前方,避免在缩放时参考轨迹错误而造成误差被错误缩放。

evo_ape kitti 00.txt CameraTrajectory_KITTI.txt -p --plot_mode=xz -as
max

:表示最大误差;

mean

:平均误差;

median

:误差中位数;

min

:最小误差;

rmse

:均方根误差;

sse

:和方差、误差平方和;

std

:标准差。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.用evo工具分析EuRoC

ORB-SLAM2运行EuRoC数据集保存的轨迹文件格式是TUM格式的,使用evo工具能将EuRoC格式的轨迹转换成TUM格式的轨迹,(参考链接)
使用下面的命令将EuRoC格式的轨迹转化成TUM格式的

evo_traj euroc data.csv --save_as_tum

画轨迹

evo_traj tum  CameraTrajectory_TUM.txt --ref=data.tum -p -as

在这里插入图片描述

计算绝对位姿误差
在进行评估时,若经过了缩放,在命令行中应将真实轨迹(参考轨迹)放在估计轨迹(计算轨迹)前方,避免在缩放时参考轨迹错误而造成误差被错误缩放。

evo_ape tum data.tum CameraTrajectory_TUM.txt -p -as
max

:表示最大误差;

mean

:平均误差;

median

:误差中位数;

min

:最小误差;

rmse

:均方根误差;

sse

:和方差、误差平方和;

std

:标准差。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


本文转载自: https://blog.csdn.net/m0_60355964/article/details/126044512
版权归原作者 m0_60355964 所有, 如有侵权,请联系我们删除。

“用evo工具分析ORB-SLAM2运行TUM,KITTI,EuRoC数据集轨迹”的评论:

还没有评论