使用evo工具评估ORB_SLAM2在TUM数据集上的运行轨迹

一、安装evo工具

最新的evo工具支持的Python环境为Python 3.8+,有下面两种方法安装最新版本的evo:

1.命令行利用pip工具直接安装

pip install evo --upgrade --no-binary evo

2.源代码安装

git clone https://github.com/MichaelGrupp/evo.git
cd evo
pip install --editable . --upgrade --no-binary evo

在这里插入图片描述

二、运行RGB-D基准数据集

1.下载TUM数据集

TUM数据集官网下载地址,TUM数据集里面有深度图像和RGB图像。当使用单目模式时,仅用到rgb文件夹里的图片;当使用RGB-D模式时,需要用到depth和rgb两个文件夹里的图片,而且需要associate.py脚本文件关联 RGB 图像和深度图像。我们以rgbd_dataset_freiburg3_long_office_household数据集为例。

2.关联rgb图像和depth图像

在这步中我们需要使用RGB 图像和深度图像的关联文件,ORB-SLAM2的作者在examples/RGB-D/associations/路径下提供了某些序列的关联文件。我们也可以使用 TUM官网提供的python 脚本associate.py关联 RGB 图像和深度图像。将associate.py脚本放到下载并且解压好的rgbd_dataset_freiburg3_long_office_household/路径下,执行以下命令:

python associate.py rgb.txt depth.txt > associations.txt

上面命令的含义就是对齐彩色图像和深度图像的时间戳,然后关联结果写入到associations.txt中。

3.运行rgb-d数据集

接下来执行运行命令,最熟悉不过了:

./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUMX.yaml PATH_TO_SEQUENCE_FOLDER ASSOCIATIONS_FILE

将TUMX.yaml改为TUM1.yaml,TUM2.yaml或TUM3.yaml,分别用于freiburg1,freiburg2和freiburg3序列。将PATH_TO_SEQUENCE_FOLDER改为解压好的数据集文件夹路径。将ASSOCIATIONS_FILE改为相应关联文件的路径。

简单来说命令分为五个部分:

  1. TUM RGB-D可执行文件
  2. 训练好的词袋
  3. 参数文件
  4. 解压好的数据集路径
  5. 关联文件路径

在这里插入图片描述
rgbd_tum程序运行完成之后,会保存相机和关键帧轨迹文件到ORB_SLAM2根目录下。

在这里插入图片描述

三、使用evo评估

1.常用指令

绘制单个轨迹,groundtruth.txt是数据集的真实轨迹,-p表示绘制图像。

evo_traj tum groundtruth.txt -p

三维空间中数据集中相机的真实轨迹图像,存在闭环,单位是m。
在这里插入图片描述

xyz坐标系的视图,显示各个时间下相机的x、y、z坐标,纵轴单位为m,横轴单位为s。
在这里插入图片描述

rpy视图,显示各个时间下相机的r、p、y坐标,纵轴单位为deg,横轴单位为s。

在这里插入图片描述

绘制多个轨迹:真实轨迹和刚刚运行得到的相机轨迹。

evo_traj tum groundtruth.txt CameraTrajectory.txt -p

在这里插入图片描述

上面的轨迹在旋转和平移上不对齐,可以通过--ref参数指定参考轨迹,并且添加参数-a来对齐轨迹

evo_traj tum --ref=groundtruth.txt CameraTrajectory.txt -p -a

可以看到运行轨迹和真实轨迹几乎一致,看不出来又两根线,ORB_SLAM2强大的后端优化和闭环在这里就体现出来了。
在这里插入图片描述

轨迹图都如此的吻合,xyz坐标必然也很精确,相比而言z坐标误差较大。

在这里插入图片描述
rpy坐标下,y很精确,r和p有较大误差。

在这里插入图片描述

如果是单目程序,还需要添加一个参数-s进行尺度上面的对齐

evo_traj tum --ref=groundtruth.txt CameraTrajectory.txt -p -a -s

或者直接使用参数-as同时使用旋转和平移以及尺度上面的对齐

evo_traj tum --ref=groundtruth.txt CameraTrajectory.txt -p -as

通过观察,上面的轨迹在x和y轴上面变化不大,可以添加参数--plot_mode=xz将轨迹压缩在xz平面上。

evo_traj tum --ref=groundtruth.txt CameraTrajectory.txt -p -as --plot_mode=xz

在这里插入图片描述

大多数情况下,还是选择将轨迹投影到xy平面上,就是俯视图。

在这里插入图片描述

通过上面的实践,我们总结常用的命令格式如下:

evo_traj tum --ref=groundtruth.txt CameraTrajectory.txt -p -as
evo_traj tum --ref=groundtruth.txt CameraTrajectory.txt -p -as --plot_mode=xy

2.绝对轨迹误差

evo_ape tum groundtruth.txt CameraTrajectory.txt -p -as

max:表示最大误差;mean:平均误差;median:误差中位数;min:最小误差;rmse:均方根误差;sse:和方差/误差平方和;std:标准差。

APE w.r.t. translation part (m)
(with Sim(3) Umeyama alignment)

   max	0.025939
  mean	0.009091
median	0.008388
   min	0.000931
  rmse	0.009895
   sse	0.243401
   std	0.003906

在这里插入图片描述
在这里插入图片描述

3.相对位姿误差

和绝对轨迹误差参数相同,使用相机轨迹的原因在于它包含了关键帧轨迹,反映的是全局一致的地图。

evo_rpe tum groundtruth.txt CameraTrajectory.txt -p -as
RPE w.r.t. translation part (m)
for delta = 1 (frames) using consecutive pairs
(with Sim(3) Umeyama alignment)

       max	0.030021
      mean	0.004404
    median	0.003749
       min	0.000176
      rmse	0.005210
       sse	0.067444
       std	0.002783

在这里插入图片描述
在这里插入图片描述

照片本质上是拍照时的场景在相机的成像平面上留下的一个投影。它以二维的形式反映了三维的世界。显然,这个过程丢掉了场景的一个维度,也就是所谓的深度(或距离)。

猜你喜欢

转载自blog.csdn.net/qq_42257666/article/details/130196559