SLAM轨迹精度评估工具evo安装以及使用方法详细介绍,如何用来评估ORB-SLAM2生成的轨迹精度,评估激光雷达SLAM与视觉SLAM的轨迹精度,量化SLAM的误差

evo在视觉SLAM中是一个极为有用的工具,对于论文党、科研党、工程党都非常有帮助,它可以用于评估SLAM输出的轨迹的精度,可以自动生成均值、方差、轨迹等等信息的图或者表,总之评估SLAM精度用它足以。
  
  它目前支持的公开数据集格式有:“TUM”、“KITTI”、“EuRoC MAV"以及"ROS bagfile”。如果你使用的数据集格式为这些中的某一种,那么你无须额外的数据格式处理,就可以直接使用evo进行精度相关内容评估。

1.evo安装方法

该工具目前被托管在github上了,其项目地址为https://github.com/MichaelGrupp/evo。

作者提供了两种安装方法,这里我推荐使用pip工具进行安装,非常方便,只需要一行代码即可,将如下代码复制到你的终端中运行

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

注意:如果一直提示下载失败,或者出现下载速度过慢等问题,那是因为pip工具默认的下载地址为国外的服务器,你需要将源地址改为国内,具体操作方法可以参考我的这篇博客《解决Linux,Ubuntu下使用python包管理工具pip命令安装和下载包速度很慢、失败或者connection timeout等问题》,修改源之后基本上就可以毫无问题的安装好了。

没有报错,则evo就算安装成功了,此时你打开终端输入evo,然后按Tab键就可以出现如下命令,如果没有出现重启电脑就行了:
在这里插入图片描述

2.evo使用方法

evo工具主要有如下六个常用命令:

  • evo_ape - 用于评估绝对位姿误差;
  • evo_rpe- 用于评估相对位姿误差;
  • evo_traj - 这个主要是用来画轨迹、输出轨迹文件、转换数据格式等功能;
  • evo_res- 比较来自evo_ape或evo_rpe生成的一个或多个结果文件的工具;
  • evo_fig - (实验)工具,用于重新打开序列化图(使用–serialize_plot保存);
  • evo_config - 这个主要用于evo工具全局设置和配置文件操作。

2.1 evo_ape用法

下面让我们来看第一个命令evo_ape如何使用,该命令用于评估两条轨迹的绝对位姿误差,最简单的使用方法为:

evo_ape kitti a.txt b.txt

解释:如上命令的意思是,比较kitti数据集格式的a.txt和b.txt文件的绝对误差精度。如果你要比较的数据集格式为euroc,那么此时可以使用如下命令:

evo_ape euroc  a.csv b.csv

evo共支持kittitumeuroc这三个公开数据集格式。

需要注意两个待比较的数据文件必须格式一致,都为kitti、tum或者euroc!

当你使用上面的命令之后,会在你的终端中产生如下类型的结果:
SLAM轨迹精度评估工具evo安装以及使用方法详细介绍,如何用来评估ORB-SLAM2生成的轨迹精度,评估激光雷达SLAM与视觉SLAM的轨迹精度,量化SLAM的误差_第1张图片
其中:

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

以上即为一个evo_ape的最简单用法,命令还可以添加一些参数,从而完成不同的功能:
evo_ape命令后面可以添加的参数有很多,你可以使用如下命令进行查看:

evo_ape kitti -h 

解释:该命令就是表示evo_ape命令在kitti数据集下,可以选择的参数介绍,介绍的还是很详细的,我感觉你直接就能看懂。

同样的是你还可以使用:

evo_ape tum -h 

下面示范一个常用的用法,当我们获得单目SLAM生成的轨迹文件时,此时我们需要和真实轨迹进行对比,但是我们知道单目SLAM是没有尺度的,所以两个轨迹一定不会一样大,所以我们需要对轨迹进行sim(3)相似变换,那么evo就会自动的对轨迹的位移、旋转、尺度进行对齐,完成这个任务的代码如下:

evo_ape tum data.tum CameraTrajectory.txt -a -p -s

解释:参数-a-s-p即为选择的参数,分别表示进行轨迹的匹配和尺度修正,以及-p表示画图误差的图和两个轨迹的图。

2.2 evo_rpe用法

该命令用于比较两个轨迹之间的相对轨迹误差,也就是两个时间戳相同时刻的轨迹轨迹误差,更具体来说,两组轨迹持续时间相同,但是采样频率不同,那么之间就会有一些少量的相同时间戳,那么这些相同的时间戳就可以进行一对一比较误差。同样的这些误差也会有平均误差、最大、最小误差等等结果。命令使用方法如下:

evo_rpe xxx a.txt b.txt

evo_rpe命令依然可以添加一些可选参数项,你同样可以使用如下命令查看可选参数的具体介绍和用法:

evo_rpe xxx -h

解释:其中xxx为tum、kitti、euroc、rosbag中的一种

2.3 evo_traj用法

该命令evo_traj命令十分有用,它主要用于画轨迹图、表格,转换数据格式等等操作。

下面我们来看一个简单的用法:

evo_traj tum a.txt

输出为:
在这里插入图片描述
该命令如果不添加任何参数项,那么就输出轨迹的相关信息。

我们只要简单的添加一个参数-p或者--plot即可看到轨迹的图形,命令如下:

evo_traj tum a.txt -p

效果如下:
SLAM轨迹精度评估工具evo安装以及使用方法详细介绍,如何用来评估ORB-SLAM2生成的轨迹精度,评估激光雷达SLAM与视觉SLAM的轨迹精度,量化SLAM的误差_第2张图片
进一步当我们想要画两个或者两个以上的轨迹时:

evo_traj tum a.txt b.txt c.txt -p

如果我们想要两个轨迹匹配到同一个原点那么可以使用参数如下:

evo_traj tum a.txt b.txt c.txt -p --align_origin 

又比如下面的命令:

evo_traj kitti 0.txt 1.txt --ref=0.txt -p --plot_mode=xz

解释:上面命令中参数--ref表示设置轨迹为参考,--plot_mode=xz表示轨迹投影到xz轴显示。

还有一些额外的可选项,它们很有用,你可以通过-h选项查看参数的介绍和用法。

2.4 evo_config用法

evo_config命令并不怎么常用,多数情况下,我们正常使用是不需要额外设置evo的一些配置项的。

你可以使用如下命令,查看evo默认的一些系统参数设置:

evo_config show --brief

运行上面的命令之后,你的终端上就可以输出如下信息:

{
    "console_logging_format": "%(message)s", 
    "euler_angle_sequence": "sxyz", 
    "global_logfile_enabled": false, 
    "plot_axis_marker_scale": 0.0, 
    "plot_backend": "Qt5Agg", 
    "plot_export_format": "pdf", 
    "plot_figsize": [
        6, 
        6
    ], 
    "plot_fontfamily": "sans-serif", 
    "plot_fontscale": 1.0, 
    "plot_invert_xaxis": false, 
    "plot_invert_yaxis": false, 
    "plot_linewidth": 1.5, 
    "plot_multi_cmap": "none", 
    "plot_reference_alpha": 0.5, 
    "plot_reference_color": "black", 
    "plot_reference_linestyle": "--", 
    "plot_seaborn_palette": "deep6", 
    "plot_seaborn_style": "darkgrid", 
    "plot_split": false, 
    "plot_statistics": [
        "rmse", 
        "median", 
        "mean", 
        "std", 
        "min", 
        "max"
    ], 
    "plot_texsystem": "pdflatex", 
    "plot_trajectory_alpha": 0.75, 
    "plot_trajectory_cmap": "jet", 
    "plot_trajectory_linestyle": "-", 
    "plot_usetex": false, 
    "plot_xyz_realistic": true, 
    "ros_map_alpha_value": 1.0, 
    "ros_map_unknown_cell_value": 205, 
    "save_traj_in_zip": false, 
    "table_export_data": "stats", 
    "table_export_format": "csv", 
    "table_export_transpose": true
}

如果你想要对某一项参数进行修改,比如你想修改输出的图像格式,你可以使用如下命令:

evo_config set plot_export_format png

又比如你想做如下的操作:
1.将画图背景更改成白色网格

evo_config set plot_seaborn_style whitegrid

2.将字体改为衬线型并调为1.2倍大小

evo_config set plot_fontfamily serif plot_fontscale 1.2 

3.将画图所使用的线型改为 -

evo_config set plot_reference_linestyle - 

4.将所画图的图像大小调整为10 9(宽 高)

evo_config set plot_figsize 10 9 

5.当你想要将配置还原为默认时,只需要使用命令:

evo_config reset

当你对evo的使用有一个大致的理解之后,我觉得你再摸索和使用就会方便很多,当你看完本篇博客之后,如果你还想进一步了解它更细致的使用,你可以浏览的evo在github上的wiki,网址为:https://github.com/MichaelGrupp/evo/wiki

3.evo在ORB-SLAM2中的用法演示

下面演示一个真实使用场景。

其实用法很简单,ORB-SLAM2产生的轨迹文件为CameraTrajectory.txt,我们要想对它进行轨迹精度评估,第一步首先需要确定轨迹的数据格式,可以很容易发现它保存的数据格式与tum一致,如果想要评估精度ORB-SLAM2精度,就需要先将真实轨迹转换成tum格式,实际操作过程为:

例如,如果我们使用EuRoc数据做SLAM:

1.首先,将EuRoc数据集的真实轨迹转换成tum格式,使用如下命令:

evo_traj euroc data.csv --save_as_tum 

2.然后,将ORB-SLAM2生成的轨迹和转换格式之后的EuRoc轨迹进行误差对比:

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

效果如下:
SLAM轨迹精度评估工具evo安装以及使用方法详细介绍,如何用来评估ORB-SLAM2生成的轨迹精度,评估激光雷达SLAM与视觉SLAM的轨迹精度,量化SLAM的误差_第3张图片

4.评估激光雷达SLAM轨迹与单目视觉SLAM轨迹精度

当你需要评估视觉SLAM与激光SLAM的轨迹精度时。
(1)你的激光雷达与相机是捆绑在一起。此时相机和激光雷达理论上一定具有形状一样的轨迹,不管你是把哪个轨迹作为参考轨迹,你都需要做如下操作:

  • 将激光雷达的轨迹保存为tum数据格式(timestamp x y z q_x q_y q_z q_w),千万不要保存为kitti数据集的格式,因为没有时间戳,无法进行尺度修正和对齐变换。激光雷达轨迹和相机轨迹要在时间戳和轨迹起终点上都对齐。做法是:删减激光雷达的轨迹使得起点和终点和相机轨迹是一样的,然后将相机轨迹的初始位置对应的时间设置为激光雷达的开始时间,终点时间也依次设置,并记录你激光雷达轨迹的每一个位置对应的时间。这么设置的目的就是为了后续两个轨迹的匹配。
  • 使用evo进行轨迹显示或者计算误差等操作,可以参考如下命令。
evo_traj tum a.txt b.txt --ref=a.txt --correct_scale -a -p

-a:轨迹对齐;
--correct_scale:修正尺度。

(2)相机和激光雷达分别不同次测量。首先要保证两种轨迹是走的同样的路线,形状上不要有太大的差异。然后按照(1)中的方法进行轨迹和时间戳的对齐,然后进行evo评估操作。

参考资料

  1. https://github.com/MichaelGrupp/evo/wiki(这个是evo的权威资料)

如果觉得有用,感谢打赏!(厚着脸皮,贴上二维码,哈哈)
SLAM轨迹精度评估工具evo安装以及使用方法详细介绍,如何用来评估ORB-SLAM2生成的轨迹精度,评估激光雷达SLAM与视觉SLAM的轨迹精度,量化SLAM的误差_第4张图片

你可能感兴趣的:(SLAM相关算法,linux,ubuntu,slam,3d成像)