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

文章目录

  • [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不满足evotum数据格式要求。

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,其中PATHMH_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 FrameORB-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,其中PATHMH_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 FrameORB-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:

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

⭐️👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍🌔

相关推荐
INDEMIND1 个月前
INDEMIND:扫地机器人,保“鲜”不保“熟”
人工智能·vslam·扫地机器人·脏污识别
Gene_20225 个月前
三角形法恢复空间点深度
vslam
精彩文帅。5 个月前
EVO轨迹评估工具基本使用教程(学习记录)
evo·slam
坐望云起8 个月前
机器学习笔记 - 用于3D物体检测的KITTI数据集的使用及说明
自动驾驶·数据集·视觉里程计·立体视觉·光流·3d 对象检测·3d 对象跟踪
笨小古8 个月前
ORB-SLAM2实时彩色点云地图构建及保存
orb-slam2·slam
算法导航10 个月前
04 帧 Frame
orb-slam2·slam
算法导航10 个月前
03 地图点 MapPoint
orb-slam2·slam
INDEMIND1 年前
多场景通吃,INDEMIND视觉导航方案赋能服务机器人更多可能
人工智能·机器人·vslam·视觉导航
ZPILOTE1 年前
ORB-SLAM2算法12之单目初始化Initializer
vslam·orb-slam2·slam·initializer·单目初始化·基础矩阵·单应矩阵
ZPILOTE1 年前
ORB-SLAM2算法10之图像关键帧KeyFrame
vslam·orb-slam2·slam·图像关键帧·keyframe·共视图·地图点