文章目录
- 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_0和image_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不满足evo 的tum数据格式要求。
# 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。
- 首先下载
evo源码:https://github.com/MichaelGrupp/evo/tree/master,脚本就在evo/contrib文件夹下 - 下载后把
data_odometry_poses/dataset/poses/00.txt文件和data_odometry_gray/dataset/sequences/00/times.txt文件复制到evo/contrib文件夹下 - 然后在
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.yaml、KITTI03.yaml、KITTI04-12.yaml
本篇用对应的KITTI00-02.yaml
KITTI00-02.yaml—00~02相关的参数文件KITTI03.yaml—03相关的参数文件KITTI04-12.yaml—04~12相关的参数文件
熟悉了执行命令之后,执行以下命令,用KITTI-data_odometry_gray数据集来运行ORB-SLAM2,其中PATH是data_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 Frame 和 ORB-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.yaml、KITTI03.yaml、KITTI04-12.yaml
本篇用对应的KITTI00-02.yaml
KITTI00-02.yaml—00~02相关的参数文件KITTI03.yaml—03相关的参数文件KITTI04-12.yaml—04~12相关的参数文件
熟悉了执行命令之后,执行以下命令,用KITTI-data_odometry_gray数据集来运行ORB-SLAM2,其中PATH是data_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 Frame 和 ORB-SLAM2 Map Viewer


运行完毕后,还在该终端目录下保存了轨迹文件CameraTrajectory.txt
但和单目ORB-SLAM2生成KeyFrameTrajectory.txt是evo支持的tum格式不同,CameraTrajectory.txt是evo支持的kitti格式
3.2 evo评估轨迹(kitti格式)
3.2.1 载入和对比轨迹
把刚刚生成的轨迹文件CameraTrajectory.txt 也复制到data_odometry_poses/dataset/poses文件夹下,并且该文件夹下00.txt是evo支持的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
⭐️👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍🌔



















