文章目录
- 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
来查看详细的使用说明。:
-
evo_traj
: 计算和可视化轨迹误差(trajectory error
)和其他轨迹相关的指标。plot
: 可视化轨迹误差随时间变化的曲线。pdr
: 计算和可视化绝对轨迹误差(pose deviation rate
)指标。ape
: 计算和可视化绝对姿态误差(absolute pose error
)指标。
-
evo_ape
: 计算和可视化绝对姿态误差(absolute pose error
)指标。 -
evo_rpe
: 计算和可视化相对姿态误差(relative pose error
)指标。 -
evo_res
: 可视化误差分布和累积分布函数。 -
evo_config
: 生成和更新evo
工具的配置文件。 -
evo_play
: 可视化轨迹和图像数据。 -
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
)。其中比较常用的数据集包括:
-
TUM
RGB-D
数据集:包括Kinect v1
和v2
相机拍摄的RGB-D
图像和对应的真实轨迹数据。 -
TUM
Mono
数据集:包括单目相机拍摄的图像和对应的真实轨迹数据。 -
TUM
RGB
数据集:包括双目相机拍摄的图像和对应的真实轨迹数据。 -
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
执行的命令分成四部分:
- TUM单目模式的可执行文件
- 官方训练好的词袋
- 参数文件
- 单目图像数据集的路径
官方已在ORB_SLAM2/Examples/Monocular
文件夹目录下给出了TUM1.yaml
、TUM2.yaml
和TUM3.yaml
,本篇用对应的TUM1.yaml
TUM1.yaml
— freiburg1相关的相机参数TUM2.yaml
— freiburg2相关的相机参数TUM3.yaml
— freiburg3相关的相机参数
熟悉了执行命令和配置文件之后,执行以下命令,用TUM-rgbd_dataset_freiburg1_desk
数据集来运行ORB-SLAM2,其中PATH
是rgbd_dataset_freiburg1_desk
文件夹的存放目录:
# 在ORB-SLAM2工程目录下新开终端
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml PATH/rgbd_dataset_freiburg1_desk
运行后,会自动生成两个可视化页面,ORB-SLAM2 Current Frame
和 ORB-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-SLAM2
在Examples/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
,其中PATH
是rgbd_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 Frame
和 ORB-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
⭐️👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍🌔