ORB-SLAM2学习笔记4之KITTI开源数据集运行ORB-SLAM2生成轨迹并用evo工具评估轨迹

文章目录

  • 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 数据下载需要先注册,登录账号后再下载)
ORB-SLAM2学习笔记4之KITTI开源数据集运行ORB-SLAM2生成轨迹并用evo工具评估轨迹_第1张图片
下载的data_odometry_gray.zip解压的data_odometry_gray文件夹里有左目图像image_0和右目图像image_1
当使用VSLAM单目模式时,仅用到image_0文件夹里的左目图片即可;
当使用VSLAM双目模式时,需要用到image_0image_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不满足evotum数据格式要求。

# 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

  1. 首先下载evo源码:https://github.com/MichaelGrupp/evo/tree/master,脚本就在evo/contrib文件夹下
  2. 下载后把data_odometry_poses/dataset/poses/00.txt文件和data_odometry_gray/dataset/sequences/00/times.txt文件复制到evo/contrib文件夹下
  3. 然后在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.yamlKITTI03.yamlKITTI04-12.yaml
本篇用对应的KITTI00-02.yaml

  • KITTI00-02.yaml00~02相关的参数文件
  • KITTI03.yaml03相关的参数文件
  • KITTI04-12.yaml04~12相关的参数文件

熟悉了执行命令之后,执行以下命令,用KITTI-data_odometry_gray数据集来运行ORB-SLAM2,其中PATHdata_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 FrameORB-SLAM2 Map Viewer
ORB-SLAM2学习笔记4之KITTI开源数据集运行ORB-SLAM2生成轨迹并用evo工具评估轨迹_第2张图片
ORB-SLAM2学习笔记4之KITTI开源数据集运行ORB-SLAM2生成轨迹并用evo工具评估轨迹_第3张图片

运行完毕后,还在该终端目录下保存了轨迹文件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

可视化界面:
ORB-SLAM2学习笔记4之KITTI开源数据集运行ORB-SLAM2生成轨迹并用evo工具评估轨迹_第4张图片

trajectories 结果图:(3D 可旋转查看)
ORB-SLAM2学习笔记4之KITTI开源数据集运行ORB-SLAM2生成轨迹并用evo工具评估轨迹_第5张图片

xyz_view示意图:
ORB-SLAM2学习笔记4之KITTI开源数据集运行ORB-SLAM2生成轨迹并用evo工具评估轨迹_第6张图片

rpy_view示意图:
ORB-SLAM2学习笔记4之KITTI开源数据集运行ORB-SLAM2生成轨迹并用evo工具评估轨迹_第7张图片

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

可视化界面:
ORB-SLAM2学习笔记4之KITTI开源数据集运行ORB-SLAM2生成轨迹并用evo工具评估轨迹_第8张图片

raw示意图:
ORB-SLAM2学习笔记4之KITTI开源数据集运行ORB-SLAM2生成轨迹并用evo工具评估轨迹_第9张图片

map示意图:(3D 可旋转查看)
ORB-SLAM2学习笔记4之KITTI开源数据集运行ORB-SLAM2生成轨迹并用evo工具评估轨迹_第10张图片

至此,成功用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.yamlKITTI03.yamlKITTI04-12.yaml
本篇用对应的KITTI00-02.yaml

  • KITTI00-02.yaml00~02相关的参数文件
  • KITTI03.yaml03相关的参数文件
  • KITTI04-12.yaml04~12相关的参数文件

熟悉了执行命令之后,执行以下命令,用KITTI-data_odometry_gray数据集来运行ORB-SLAM2,其中PATHdata_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 FrameORB-SLAM2 Map Viewer
ORB-SLAM2学习笔记4之KITTI开源数据集运行ORB-SLAM2生成轨迹并用evo工具评估轨迹_第11张图片
ORB-SLAM2学习笔记4之KITTI开源数据集运行ORB-SLAM2生成轨迹并用evo工具评估轨迹_第12张图片

运行完毕后,还在该终端目录下保存了轨迹文件CameraTrajectory.txt
但和单目ORB-SLAM2生成KeyFrameTrajectory.txtevo支持的tum格式不同,CameraTrajectory.txtevo支持的kitti格式

3.2 evo评估轨迹(kitti格式)

3.2.1 载入和对比轨迹

把刚刚生成的轨迹文件CameraTrajectory.txt复制data_odometry_poses/dataset/poses文件夹下,并且该文件夹下00.txtevo支持的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

可视化界面:
ORB-SLAM2学习笔记4之KITTI开源数据集运行ORB-SLAM2生成轨迹并用evo工具评估轨迹_第13张图片

trajectories 结果图:(3D 可旋转查看)
ORB-SLAM2学习笔记4之KITTI开源数据集运行ORB-SLAM2生成轨迹并用evo工具评估轨迹_第14张图片

xyz_view示意图:
ORB-SLAM2学习笔记4之KITTI开源数据集运行ORB-SLAM2生成轨迹并用evo工具评估轨迹_第15张图片

rpy_view示意图:
ORB-SLAM2学习笔记4之KITTI开源数据集运行ORB-SLAM2生成轨迹并用evo工具评估轨迹_第16张图片

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

可视化界面:
ORB-SLAM2学习笔记4之KITTI开源数据集运行ORB-SLAM2生成轨迹并用evo工具评估轨迹_第17张图片

raw示意图:
ORB-SLAM2学习笔记4之KITTI开源数据集运行ORB-SLAM2生成轨迹并用evo工具评估轨迹_第18张图片

map示意图:(3D 可旋转查看)
ORB-SLAM2学习笔记4之KITTI开源数据集运行ORB-SLAM2生成轨迹并用evo工具评估轨迹_第19张图片

至此,成功用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



须知少时凌云志,曾许人间第一流。



⭐️

你可能感兴趣的:(SLAM,#,V-SLAM,vslam,orb-slam2,视觉里程计,KITTI,evo,轨迹评估,evo_traj)