文章目录
- 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
⭐️👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍🌔