本文介绍了如何使用evo工具来绘制ORB_SLAM2的轨迹图和进行ATE\RPE评估。

参考博客:SLAM轨迹精度评价工具evo简介与使用

1. 说明

为了让SLAM建图的结果能够更好的展示出来,我们可以使用github开源的evo工具集[1]来对ORB_SLAM2生成的相机轨迹进行绘制,展现出绘制后的结果图。同时进行ape和rpe评估,评估结果也是我们SLAM系统和其他SLAM系统进行对比的重要指标。

github开源地址:https://github.com/MichaelGrupp/evo

2. 工具安装

evo工具可以直接使用pip来安装,命令如下,使用了清华镜像源。

1
pip install evo -i https://pypi.tuna.tsinghua.edu.cn/simple

第一次安装的时候报错了,提示是缺少了Fortran compiler。

1
2
3
4
customize UnixCCompiler
customize UnixCCompiler using build_clib
building 'dfftpack' library
error: library dfftpack has Fortran sources but no Fortran compiler found

咨询GPT后,说是需要安装gfortran包

1
sudo apt-get install -y gfortran

如果安装gfortran的时候连不上ports.ubuntu.com站点,可以使用如下命令修改镜像源。

1
sudo sed -i 's#ports.ubuntu.com#mirrors.ustc.edu.cn/ubuntu-ports#g' /etc/apt/sources.list

默认情况下pip会把evo工具安装在用户家目录下,所以需要把这个目录放入PATH中才能使用evo命令。

1
export PATH=$PATH:$HOME/.local/bin/

3. 工具使用

3.1. 轨迹绘制

绘制轨迹的命令如下,这里的参数包含了ORB_SLAM2运行后产生的相机轨迹结果CameraTrajectory.txt,以及用作参考(ref)的TUM数据集groundtruth真实值。同时提供-a选项来对齐相机轨迹结果和TUM数据集对真实值,--plot参数代表我们当前需要做的操作是显示轨迹图。

1
2
3
4
evo_traj tum \
CameraTrajectory.txt \
--ref=datasets/TUM/rgbd_dataset_freiburg1_desk/groundtruth.txt \
--plot -a

运行效果如下,可以看到蓝色的是我们运行出来的结果,灰色虚线是TUM数据集的真实值,二者基本拟合,效果不错。

image.png

图中出现了一个报错,会导致我们没有办法挪动GUI中的图像(本来是可以3D挪动的)

1
QStandardPaths: wrong ownership on runtime directory /run/user/1000, 1000 instead of 0

解决办法就是修改下面两个目录的权限

1
2
sudo chown root:root /run/user/1000
sudo chmod 700 /run/user/1000

修改之后重新启动工具,就可以正常显示并且移动了

image.png

3.2. ATE\RPE评估

除了绘制轨迹图外,evo工具还可以用来输出ORB_SLAM2运行结果的绝对位姿误差ATE,对应的命令是evo_ape。如果要显示相对位姿误差RPE就用evo_rpe命令。

本文只涉及evo工具使用,关于ATE和RPE这两个指标的含义,可以去参考TUM针对SLAM系统性能评估的论文:A benchmark for the evaluation of RGB-D SLAM systems[2]

在我参考的evo工具使用博客中有下面这一句话:

大多数中论文的指标为测量绝对误差,在进行评估时,若经过了缩放,在命令行中应将真实轨迹(参考轨迹)放在估计轨迹(计算轨迹)前方,避免在缩放时参考轨迹错误而造成误差被错误缩放。

说人话就是在使用这两个位姿评估命令的时候,groundtruth必须要在CameraTrajectory之前传入。示例命令如下:

1
2
3
4
evo_ape tum \
datasets/TUM/rgbd_dataset_freiburg1_desk/groundtruth.txt \
CameraTrajectory.txt \
--plot -as

运行之后会绘制出一张APE的结果图,展现了整体的APE波动。

image.png

终端中会显示各项指标的计算结果:

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

下面这个是ORB_SLAM2针对tum fr1/desk序列的的运行结果

1
2
3
4
5
6
7
8
9
10
APE w.r.t. translation part (m)
(with Sim(3) Umeyama alignment)

max 0.070657
mean 0.012891
median 0.010890
min 0.001658
rmse 0.015674
sse 0.140522
std 0.008916

一般情况下,在论文中可以直接使用RMSE这个均方根误差来作为SLAM系统精度的对比指标,该指标越低代表系统误差越低,也就是系统越优秀。

4. The end

本文对evo工具的简单介绍就到这里啦。


  1. Grupp M. evo: Python package for the evaluation of odometry and SLAM [EB/OL]. https://github.com/MichaelGrupp/evo, 2017. ↩︎

  2. J. Sturm, N. Engelhard, F. Endres, W. Burgard and D. Cremers, “A benchmark for the evaluation of RGB-D SLAM systems,” 2012 IEEE/RSJ International Conference on Intelligent Robots and Systems, Vilamoura-Algarve, Portugal, 2012, pp. 573-580, doi: 10.1109/IROS.2012.6385773. ↩︎