提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
EVO是SLAM中常用的精度评价工具之一,其原理来源于《A benchmark for the evaluation of RGB-D SLAM system》,其通过Umeyama原理实现轨迹对齐。EVO工具支持多种数据集的轨迹格式,如TUM、KITTI、EuRoC MAV以及ROS的bag文件,同时支持这些数据格式之间的相互转换;且其提供三种误差评估方式:绝对位姿误差(evo_ape)、相对位姿误差(evo_rpe)以及针对每个子序列的平均位姿误差。然而,目前EVO还存在若干问题,且未得到很好的解决。笔者之前对坐标系转换与精度评定的研究较多,对相关工作有一定的实践经验,希望能与各位学者探讨交流,有朝一日实现更加准确、客观的精度评价工具。
提示:以下是本篇文章正文内容,欢迎大佬批评指正。
一. EVO精度评估原理:
- 机器人解算的运动轨迹记为测量值 T r b {T}_{r}^{b} Trb, T r b {T}_{r}^{b} Trb表示机器人相对于本体坐标系的位置和姿态。
- 高精度测量系统(真值系统)记录的机器人轨迹为真值 T r g {T}_{r}^{g} Trg, T r g {T}_{r}^{g} Trg表示机器人相对于真值坐标系的位置和姿态。
- 要计算机器人的实时定位误差,需要根据实现
T
r
b
{T}_{r}^{b}
Trb和
T
r
g
{T}_{r}^{g}
Trg的坐标系统一。根据坐标系转换原理,可以将机器人定位算法得到的
T
r
b
{T}_{r}^{b}
Trb(如SLAM解算的定位结果)转换到真值坐标系下得到
T
′
r
g
{T'}_{r}^{g}
T′rg:
T ′ r g = s ∗ R b g ∗ T r b + t b g (1) {T'}_{r}^{g}=s*{R}_{b}^{g}*{T}_{r}^{b}+{t}_{b}^{g} \tag{1} T′rg=s∗Rbg∗Trb+tbg(1)
然后根据真值系统记录的机器人运动轨迹 T r g {T}_{r}^{g} Trg和公式{1}得到的 T ′ r g {T'}_{r}^{g} T′rg作差,即可得到机器人得到的实时定位误差(注意:这里认为 T r g {T}_{r}^{g} Trg和 T ′ r g {T'}_{r}^{g} T′rg时间对齐,在EVO源码中是通过判断 T r b {T}_{r}^{b} Trb和 T r g {T}_{r}^{g} Trg的时间戳是否小于设定的阈值即为时间对齐):
e r g = ∥ t ′ r g − t r g ∥ 2 (2) {e}_{r}^{g}={\left \|{t'}_{r}^{g}-{t}_{r}^{g} \right \|}_{2} \tag{2} erg= t′rg−trg 2(2)
注意: t r g {t}_{r}^{g} trg表示机器人在真值坐标系下的位置, T r g {T}_{r}^{g} Trg表示机器人在真值坐标系下的位置和姿态,这里计算定位误差只考虑位置。
二. EVO的核心和本质
EVO的核心:就是根据一系列的
t
r
b
{t}_{r}^{b}
trb和
t
r
g
{t}_{r}^{g}
trg,首先筛选出时间对齐的
t
r
b
{t}_{r}^{b}
trb和
t
r
g
{t}_{r}^{g}
trg点对,然后根据Umeyama原理计算本体坐标系到真值坐标系的位置
t
b
g
{t}_{b}^{g}
tbg,姿态
R
b
g
{R}_{b}^{g}
Rbg和尺度因子
s
s
s。其中,EVO中的s默认为1,一般在单目SLAM中才会通过-s的指令计算尺度因子
s
s
s。这其实与坐标系转换原理的七参数布尔莎法,罗德里格矩阵的坐标系转换方法等原理相同。(个人测试发现利用罗德里格矩阵的坐标系转换方法与Umeyama原理得到的
t
b
g
{t}_{b}^{g}
tbg和
R
b
g
{R}_{b}^{g}
Rbg相同)。
注意:
(1)EVO的本质就是求解本体坐标系到真值坐标系的位置
t
b
g
{t}_{b}^{g}
tbg,姿态
R
b
g
{R}_{b}^{g}
Rbg和尺度因子
s
s
s;
(2)EVO估计
t
b
g
{t}_{b}^{g}
tbg和
R
b
g
{R}_{b}^{g}
Rbg是利用了整个轨迹上时间对齐的
t
r
b
{t}_{r}^{b}
trb和
t
r
g
{t}_{r}^{g}
trg点对;
(3)这种计算方法其实有利有弊。优点在于利用整个轨迹的点对计算
t
b
g
{t}_{b}^{g}
tbg,
R
b
g
{R}_{b}^{g}
Rbg和
s
s
s时,观测量非常丰富,计算的结果更加准确;缺点也十分显著,其不能真实反映系统实际的实时定位误差。图1所示为evo计算得到的实时定位误差。但是实际上,系统从0时刻开始,实时定位误差应该为0,然后逐渐累积,这与实际情况并不十分符合。
三. EVO的显著缺陷
上文提到了EVO的显著缺点,其实很多学者并没有十分关注或者关注了但是没有想办法解决问题。因为,至少目前来看EVO仍是SLAM中精度评估最主流的工具之一,笔者其实很早就发现了这个问题,也一直想要去解决这个显著的缺陷,之前也写过一些复现和改进EVO的代码,但都是偏工程性的做法。至少目前想到的一些改进方法,还难以从理论和数学推导上完胜EVO,所以即使做出改进,也很难让多数学者信服和推广使用。但是,EVO的显著问题的确是实时客观存在的。
此外,EVO在计算RPE时候还会涉及到真值系统和本体坐标系统的姿态对齐问题,这会导致EVO计算的RPE误差增大,其解决方法类似于通过手眼标定原理实现真值系和本体系的重合。RPE的具体问题和改进方法日后会进一步更新补充。
因此,笔者日后非常想要做的一件事,是制作并开源一套更加客观、准确的SLAM精度评估工具。也欢迎有此想法的同学交流探讨。
四. SLAM精度评估的其他开源工具
1. viral_eval
新加坡南阳理工大学谢立华教授团队开源的一款基于Matlab实现的SLAM精度评估工具箱。画图还是比较漂亮的,在Windows/Ubuntu下用起来都比较方便,但是了解的人似乎比较少,可能他们之前很多工作都是基于UWB的多源传感器导航和SLAM。(下图展示几幅viral_eval工具的画图效果)
viral_eval
2. SLAM_Evaluation
上海交通大学邹丹平教授团队开源的EVO改进版SLAM_Evaluation,主要解决计算RPE时真值系和本体系不重合导致的计算误差较大的问题(本质上可以通过手眼标定的方法解决,但实际中会涉及到时间同步等比较复杂的工程问题)。
SLAM_Evaluation
3. 其他开源工具
后续会继续补充完善,敬请期待。
总结
EVO是SLAM中常用的精度评价工具之一,但其缺陷也十分显著。希望有朝一日能够制作并开源更加准确、客观的SLAM精度评价工具。欢迎各位大佬交流探讨。
参考文献
- Sturm J, Engelhard N, Endres F, et al. A benchmark for the evaluation of RGB-D SLAM systems[C]//2012 IEEE/RSJ international conference on intelligent robots and systems. IEEE, 2012: 573-580.
- https://github.com/ntu-aris/viral_eval
- https://github.com/SJTU-ViSYS/SLAM_Evaluation