在 SLAM 相关论文中,有几个常用的算法评价指标,ATE(绝对轨迹误差)和 RPE(相对位姿误差)即为常见的指标。本文收集并整理了网络上的内容,对二者进行了总结。
ATE & RPE
1 定义
- 算法估计位姿:P1,...,Pn∈SE(3)
- 真实位姿:Q1,...,Qn∈SE(3)
- 下标 t 表示时间或帧,假设估计位姿和真实位姿各帧时间已经对齐,总帧数均为 n,Δ 表示帧间间隔时间。
2 相对位姿误差
相对位姿误差(Relative Pose Error,RPE)描述的是固定时间差 Δ 下,两帧位姿差相比真实位姿差的精度,相当于直接测量里程计的误差。第 i 帧的 RPE 定义如下:
RPEi=Ei≜(Qi−1Qi+Δ)−1(Pi−1Pi+Δ)(1)
已知总数 n 与间隔 Δ 的情况下,可以得到 m=n−Δ 个 RPE,然后可以用均方根误差 RMSE 统计这个误差,得到一个总体值:
RMSE(E1:n,Δ):=(m1i=1∑m∥∥∥ln((Qi−1Qi+Δ)−1(Pi−1Pi+Δ))∨∥∥∥2)21(2)
下式为平移部分的误差:
RMSE(E1:n,Δ):=(m1i=1∑m∥trans(Ei)∥2)21(3)
其中 trans(Ei) 代表取相对位姿误差中的平移部分。通常使用 RPE 的平移部分进行评价。如果有需要,也可以使用旋转部分,其中:
rot(Ei)=ln((QRi−1QRi+Δ)−1(PRi−1PRi+Δ))∨(4)
其中 QR 表示位姿 Q 的旋转部分。
也可以不使用 RMSE,直接使用平均值、中位数等来描述相对误差情况。
实际情况中,Δ 的选择有多种,为了综合衡量,可以计算所有 Δ 的 RMSE 平均值:
RMSE(E1:n)=n1Δ=1∑nRMSE(E1:n,Δ)(5)
这样计算复杂度很高,因此 TUM 数据集在提供的工具中,通过计算固定数量的 RPE 样本计算近似值。
3 绝对轨迹误差
绝对轨迹误差(Absolute Trajectory Error,ATE)是估计位姿和真实位姿的直接差值,可以直观反应算法精度和轨迹全局一致性。
需要注意的是,估计位姿和真实位姿通常不在同一坐标系中,因此需要先将两者对齐:
- 对于双目 SLAM 和 RGB-D 为尺度统一,通过最小二乘法计算一个从估计位姿到真实位姿的转换矩阵 S∈SE(3);
- 对于单目相机,具有尺度不确定性,需要计算估计位姿到真实位姿到相似转换矩阵 S∈Sim(2)。
因此,第 i 帧的 ATE 定义如下:
ATEi=Fi≜Qi−1SPi(6)
与 RPE 相似,使用 RMSE 统计 ATE:
RMSE(F1:n,Δ):=(m1i=1∑m∥trans(Fi)∥2)21(7)
同 RPE,也可以使用平均值、中位数等来反应 ATE 等情况。上述只描述了平移误差部分,旋转误差也可以使用与 RPE 相同的方式计算。
4 EVO
4.1 安装
1 2 3 4 5 6 7 8 9 10
| pip3 install evo --upgrade --no-library evo
git clone git@github.com:MichaelGrupp/evo.git cd evo pip3 install --editable . --upgrade --no-library evo
evo_ate -h
|
4.2 使用
(1)轨迹可视化
1
| evo_traj kitti KITTI_00_ORB.txt KITTI_oo_SPTAM.txt --ref=KITTI_00_gt.txt -p --plot_mode=xz
|
(2)APE
1
| evo_ape kitti KITTI_00_gt.txt KITTI_00_ORB.txt -va --plot --plot_mode=xz
|
(3)RPE
1
| evo_rpe tum fr2_desk_groundtrutr2_desk_ORB.txt -va --plot --plot_mode=xyz
|
(4)参数
选项 |
含义 |
-a, --align |
轨迹对齐 |
-s, --correct_scale |
尺度对齐 |
–sync |
通过时间戳关联轨迹 |
-p, --plot |
可视化轨迹 |
-v, --verbose |
命令行输出细节信息 |
–plot_mode |
轨迹可视化模式:xyz、xy、xz 等 |
–save_plot |
保存结果 |
(5)metrics 解析
前面提到位姿误差包含平移和旋转,在 evo 设置输出的误差项对应 option为 -r
或 --pose_relation
,对应如下模式:
option |
功能 |
full |
同时考虑旋转与平移误差,无单位 |
trans_part |
平移误差,单位为 m |
rot_part |
旋转误差,无单位 |
angle_deg |
旋转误差,单位为 degree |
angle_rad |
旋转误差,单位为 rad |
无单位 full 和 rot_part 的误差指标使用了矩阵的二范数:
errorfull=∥δTi−E∥errorrot=∥δRi−E∥(8)
其中 δTi 表示 GT 和估计位姿之间的变换矩阵,E 为单位阵。
附件
罗德里格斯公式
⇒R=cosθI+(1−cosθ)nnT+sinθn∧θ=arccos(2trace(R)−1)(9)
参考