ORB-SLAM2学习笔记1 已成功编译安装ORB-SLAM2
到本地,本篇目的是用KITTI
开源数据来运行ORB-SLAM2
,并生成轨迹,最后用evo
评估工具来评估ORB-SLAM2
生成的轨迹和真值轨迹。
首先点击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
.
由于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
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
把刚刚生成的轨迹文件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
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
至此,成功用evo
评估工具来评估单目ORB-SLAM2
生成的KITTI
开源数据轨迹和真值轨迹。
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
格式
把刚刚生成的轨迹文件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
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
至此,成功用evo
评估工具来评估双目ORB-SLAM2
生成的KITTI
开源数据轨迹和真值轨迹。
Reference:
⭐️