欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SLAM轨迹精度评估工具evo安装以及使用方法详细介绍,以及如何用来评估ORB-SLAM2生成的轨迹精度

程序员文章站 2022-04-16 20:36:36
...

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键就可以出现如下命令:
SLAM轨迹精度评估工具evo安装以及使用方法详细介绍,以及如何用来评估ORB-SLAM2生成的轨迹精度

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生成的轨迹精度
其中:

  • 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

输出为:
SLAM轨迹精度评估工具evo安装以及使用方法详细介绍,以及如何用来评估ORB-SLAM2生成的轨迹精度
该命令如果不添加任何参数项,那么就输出轨迹的相关信息。

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

evo_traj tum a.txt -p

效果如下:
SLAM轨迹精度评估工具evo安装以及使用方法详细介绍,以及如何用来评估ORB-SLAM2生成的轨迹精度
进一步当我们想要画两个或者两个以上的轨迹时:

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生成的轨迹精度