ATE & RPE

在 SLAM 相关论文中,有几个常用的算法评价指标,ATE(绝对轨迹误差)和 RPE(相对位姿误差)即为常见的指标。本文收集并整理了网络上的内容,对二者进行了总结。

ATE & RPE

1 定义

  • 算法估计位姿:P1,...,PnSE(3)P_1, ..., P_n \in SE(3)
  • 真实位姿:Q1,...,QnSE(3)Q_1, ..., Q_n \in SE(3)
  • 下标 tt 表示时间或帧,假设估计位姿和真实位姿各帧时间已经对齐,总帧数均为 nnΔ\Delta 表示帧间间隔时间。

2 相对位姿误差

相对位姿误差(Relative Pose Error,RPE)描述的是固定时间差 Δ\Delta 下,两帧位姿差相比真实位姿差的精度,相当于直接测量里程计的误差。第 ii 帧的 RPE 定义如下:

RPEi=Ei(Qi1Qi+Δ)1(Pi1Pi+Δ)(1)RPE_i = E_i \triangleq (Q_i^{-1} Q_{i+\Delta})^{-1} (P_i^{-1} P_{i + \Delta}) \tag{1}

已知总数 nn 与间隔 Δ\Delta 的情况下,可以得到 m=nΔm = n - \Delta 个 RPE,然后可以用均方根误差 RMSE 统计这个误差,得到一个总体值:

RMSE(E1:n,Δ):=(1mi=1mln((Qi1Qi+Δ)1(Pi1Pi+Δ))2)12(2)RMSE(E_{1:n}, \Delta) := \left( \frac{1}{m} \sum_{i=1}^m \left\| \ln \left( (Q_i^{-1} Q_{i+\Delta})^{-1} (P_i^{-1} P_{i + \Delta}) \right)^{\vee} \right\|^2 \right)^{\frac{1}{2}} \tag{2}

下式为平移部分的误差:

RMSE(E1:n,Δ):=(1mi=1mtrans(Ei)2)12(3)RMSE(E_{1:n}, \Delta) := \left( \frac{1}{m} \sum_{i=1}^m \| \operatorname{trans}(E_i) \|^2 \right)^{\frac{1}{2}} \tag{3}

其中 trans(Ei)\operatorname{trans}(E_i) 代表取相对位姿误差中的平移部分。通常使用 RPE 的平移部分进行评价。如果有需要,也可以使用旋转部分,其中:

rot(Ei)=ln((QRi1QRi+Δ)1(PRi1PRi+Δ))(4)\operatorname{rot}(E_i) = \ln \left( ({}^Q R_i^{-1} {}^Q R_{i+\Delta})^{-1} ({}^P R_i^{-1} {}^P R_{i + \Delta}) \right)^{\vee} \tag{4}

其中 QR{}^Q R 表示位姿 QQ 的旋转部分。

也可以不使用 RMSE,直接使用平均值、中位数等来描述相对误差情况。

实际情况中,Δ\Delta 的选择有多种,为了综合衡量,可以计算所有 Δ\Delta 的 RMSE 平均值:

RMSE(E1:n)=1nΔ=1nRMSE(E1:n,Δ)(5)RMSE(E_{1:n}) = \frac{1}{n} \sum_{\Delta=1}^n RMSE(E_{1:n}, \Delta) \tag{5}

这样计算复杂度很高,因此 TUM 数据集在提供的工具中,通过计算固定数量的 RPE 样本计算近似值。

3 绝对轨迹误差

绝对轨迹误差(Absolute Trajectory Error,ATE)是估计位姿和真实位姿的直接差值,可以直观反应算法精度和轨迹全局一致性。

需要注意的是,估计位姿和真实位姿通常不在同一坐标系中,因此需要先将两者对齐:

  • 对于双目 SLAM 和 RGB-D 为尺度统一,通过最小二乘法计算一个从估计位姿到真实位姿的转换矩阵 SSE(3)S \in SE(3)
  • 对于单目相机,具有尺度不确定性,需要计算估计位姿到真实位姿到相似转换矩阵 SSim(2)S \in Sim(2)

因此,第 ii 帧的 ATE 定义如下:

ATEi=FiQi1SPi(6)ATE_i = F_i \triangleq Q_i^{-1} S P_i \tag{6}

与 RPE 相似,使用 RMSE 统计 ATE:

RMSE(F1:n,Δ):=(1mi=1mtrans(Fi)2)12(7)RMSE(F_{1:n}, \Delta) := \left( \frac{1}{m} \sum_{i=1}^m \| \operatorname{trans}(F_i) \|^2 \right)^{\frac{1}{2}} \tag{7}

同 RPE,也可以使用平均值、中位数等来反应 ATE 等情况。上述只描述了平移误差部分,旋转误差也可以使用与 RPE 相同的方式计算。

4 EVO

4.1 安装

1
2
3
4
5
6
7
8
9
10
# pip installation
pip3 install evo --upgrade --no-library evo

# source code installation
git clone git@github.com:MichaelGrupp/evo.git
cd evo
pip3 install --editable . --upgrade --no-library evo

# check successful installation
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=δTiEerrorrot=δRiE(8)error_{full} = \| \delta T_i - E \| \\ error_{rot} = \| \delta R_i - E \| \tag{8}

其中 δTi\delta T_i 表示 GT 和估计位姿之间的变换矩阵,EE 为单位阵。

附件

罗德里格斯公式

  • 注:旋转向量的二范数为旋转角的大小。

R=cosθI+(1cosθ)nnT+sinθnθ=arccos(trace(R)12)(9)\begin{aligned} &R = \cos \theta I + (1 - \cos \theta)n n^T + \sin \theta n^{\wedge} \\ \Rightarrow &\theta = \arccos \left( \frac{\operatorname{trace}(R) - 1}{2} \right) \end{aligned} \tag{9}

参考