SLAM 精度的评估有两个最重要的指标,即绝对轨迹误差(ATE)和相对位姿误差(RPE)的
均方根误差(RMSE):
绝对轨迹误差:直接计算相机位姿的真实值与 SLAM 系统的估计值之间的差值,首先将真实
值与估计值的时间戳对齐,然后计算每对位姿之间的差值,适合于评估 SLAM 系统的性能。
相对位姿误差:用于计算两个相同时间戳上相机位姿的真实值与 SLAM 算法的估计值之间每
隔一段时间位姿变化量之间的差值,也可以理解为位姿真实值与与估计值的实时比较。该标
准适合于估计系统的漂移。
端到端误差(回环误差):一段存在回环的轨迹里,SLAM 算法估算的轨迹起点与终点之间
的距离差值。
二 评估工具
evo是一款用于视觉里程计和 slam 问题的轨迹评估工具。核心功能是能够绘制相机的轨迹,
或评估估计轨迹与真值的误差。支持多种数据集的轨迹格式(TUM、KITTI、EuRoC MAV、
ROS 的 bag),同时支持这些数据格式之间进行相互转换。在此仅对其基本功能做简要介绍。
1.evo 安装方法
该工具目前被托管在 github 上了,其项目地址为 https://github.com/MichaelGrupp/evo。
作者提供了两种安装方法。推荐使用 pip 工具进行安装,只需要一行代码即可,将如下代码
复制到你的终端中运行
pip install evo --upgrade --no-binary evo
2.evo 使用方法
evo 工具主要有如下六个命令:
evo_ape - 用于评估绝对轨迹误差;
evo_rpe- 用于评估相对位姿误差;
46
cvlife.net evo_traj - 这个主要是用来画轨迹、输出轨迹文件、转换数据格式等功能;
evo_config - 这个主要用于 evo 工具全局设置和配置文件操作;
evo_res- 比较来自 evo_ape 或 evo_rpe 生成的一个或多个结果文件的工具;
evo_fig - 用于重新打开序列化图(使用–serialize_plot 保存);
2.1 evo_ape 用法
该命令用于评估两条轨迹的绝对位姿误差,最简单的使用方法为:
evo_ape kitti a.txt b.txt
解释:如上命令的意思是,比较 kitti 数据集格式的 a.txt 和 b.txt 文件的绝对误差精度。如果
你要比较的数据集格式为 euroc,那么此时可以使用如下命令:
evo_ape euroc a.csv b.csv
evo 共支持 kitti、tum、euroc 这三个公开数据集格式。
需要注意两个待比较的数据文件必须格式一致,都为 kitti、tum 或者 euroc
当你使用上面的命令之后,会在你的终端中产生如下类型的结果:
其中:
max:表示最大误差;
mean:平均误差;
median:误差中位数;
min:最小误差;
rmse:均方根误差;
sse:和方差、误差平方和;
std:标准差。
evo_ape 命令后面可以添加的参数有很多,使用如下命令查看参数解析:
evo_ape kitti -h
同样的是你还可以使用:
evo_ape tum -h
下面示范一个常用的用法,当我们获得单目 SLAM 生成的轨迹文件时,此时我们需要和真实
轨迹进行对比,但是我们知道单目 SLAM 是没有尺度的,所以两个轨迹一定不会一样大,所
以我们需要对轨迹进行 sim(3)相似变换,那么 evo 就会自动的对轨迹的位移、旋转、尺度进
行对齐,完成这个任务的代码如下:
evo_ape tum data.tum CameraTrajectory.txt -aps
解释:参数-a、-s、-p 即为选择的参数,分别表示进行轨迹的对齐和尺度修正,以及-p 表
示画图误差的图和两个轨迹的图。
2.2 evo_rpe 用法
该命令用于比较两个轨迹之间的相对轨迹误差,也就是两个时间戳相同时刻的轨迹轨迹误
47
cvlife.net 差,更具体来说,两组轨迹持续时间相同,但是采样频率不同,那么之间就会有一些少量的
相同时间戳,那么这些相同的时间戳就可以进行一对一比较误差。同样的这些误差也会有平
均误差、最大、最小误差等等结果。命令使用方法如下:
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
效果如下:
进一步当我们想要画两个或者两个以上的轨迹时:
48
cvlife.net 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_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"
49
cvlife.net ],
"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
参考 https://www.guyuehome.com/37988
https://blog.csdn.net/u011341856/article/details/104594392
https://blog.csdn.net/qq_42601453/article/details/121024209