文章目录
- [0 引言](#0 引言)
- [1 EuRoc数据集](#1 EuRoc数据集)
-
- [1.1 下载数据](#1.1 下载数据)
- [1.2 真值轨迹格式转换](#1.2 真值轨迹格式转换)
- [2 单目ORB-SLAM2](#2 单目ORB-SLAM2)
-
- [2.1 运行ORB-SLAM2](#2.1 运行ORB-SLAM2)
- [2.2 evo评估轨迹](#2.2 evo评估轨迹)
-
- [2.2.1 载入和对比轨迹](#2.2.1 载入和对比轨迹)
- [2.2.2 计算绝对轨迹误差](#2.2.2 计算绝对轨迹误差)
- [3 双目ORB-SLAM2](#3 双目ORB-SLAM2)
-
- [3.1 运行ORB-SLAM2](#3.1 运行ORB-SLAM2)
- [3.2 evo评估轨迹](#3.2 evo评估轨迹)
-
- [3.2.1 载入和对比轨迹](#3.2.1 载入和对比轨迹)
- [3.2.2 计算绝对轨迹误差](#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
不满足evo
的tum
数据格式要求。
shell
# 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
来绘制该真值轨迹。
bash
# 保存成.tum
evo_traj euroc data.csv --save_as_tum
执行后,evo_traj euroc data.csv --save_as_tum
文件夹下生成一个data.tum
shell
.
├── 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
,其中PATH
是MH_01_easy
文件夹的存放目录:
bash
# 在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 Frame
和 ORB-SLAM2 Map Viewer
运行完毕后,还在该终端目录下保存了轨迹文件KeyFrameTrajectory.txt
2.2 evo评估轨迹
2.2.1 载入和对比轨迹
把刚刚生成的轨迹文件KeyFrameTrajectory.txt
,复制 到MH_01_easy/mav0/state_groundtruth_estimate0
文件夹下,1.2
小节已转换的data.tum
是轨迹真值,然后执行以下命令来载入两个轨迹,并进行可视化对比:
bash
evo_traj tum KeyFrameTrajectory.txt --ref=data.tum -p --plot_mode=xyz --align --correct_scale
运行后:
bash
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
工具还支持计算绝对位姿误差,用以下命令:
bash
evo_ape tum KeyFrameTrajectory.txt data.tum -p -as
运行后:
bash
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
,其中PATH
是MH_01_easy
文件夹的存放目录:
bash
# 在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 Frame
和 ORB-SLAM2 Map Viewer
运行完毕后,还在该终端目录下保存了轨迹文件CameraTrajectory.txt
3.2 evo评估轨迹
3.2.1 载入和对比轨迹
把刚刚生成的轨迹文件CameraTrajectory.txt
,复制 到MH_01_easy/mav0/state_groundtruth_estimate0
文件夹下,1.2
小节已转换的data.tum
是轨迹真值,然后执行以下命令来载入两个轨迹,并进行可视化对比:
bash
evo_traj tum CameraTrajectory.txt --ref=data.tum -p --plot_mode=xyz --align --correct_scale
运行后:
bash
--------------------------------------------------------------------------------
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
工具还支持计算绝对位姿误差,用以下命令:
bash
evo_ape tum CameraTrajectory.txt data.tum -p -as
运行后:
bash
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学习笔记系列:
Reference:
- https://github.com/raulmur/ORB_SLAM2
- https://github.com/MichaelGrupp/evo
- https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets
须知少时凌云志,曾许人间第一流。
⭐️👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍🌔