Reference:

  1. 高翔,张涛 《视觉SLAM十四讲》
  2. 视觉SLAM基础:算法精度评价指标(ATE、RPE)

在实际工程中,我们经常需要评估一个算法的估计轨迹与真实轨迹的差异来评价算法的精度。真实轨迹往往通过某些更高精度的系统获得,而估计轨迹则是由待评价的算法计算得到的。考虑一条估计轨迹 T e s t i , i T_{esti,i} Testi,i 和真实轨迹 T g t , i T_{gt,i} Tgt,i,其中 i = 1 , ⋅ ⋅ ⋅ , N i=1,\cdot\cdot\cdot,N i=1,,N,那么我们可以定义一些误差指标来描述它们之间的差别。

1. ATE/APE

《视觉SLAM十四讲》上的命名感觉跟 EVO 稍微有一点点区别,比如绝对轨迹误差(Absolute Trajectory Error, ATE)
A T E a l l = 1 N ∑ i = 1 N ∥ log ⁡ ( T g t , i − 1 T esti  , i ) ∨ ∥ 2 2 , \mathrm{ATE}_{\mathrm{all}}=\sqrt{\frac{1}{N} \sum_{i=1}^N\left\|\log \left(T_{\mathrm{gt}, i}^{-1} T_{\text {esti }, i}\right)^{\vee}\right\|_2^2}, ATEall=N1i=1N log(Tgt,i1Testi ,i) 22 ,这玩意儿应该就是 EVO 中的 绝对位姿误差(Absolute Pose Error, APE),后面这个概念统称 APE。

这个公式实际上是每个位姿李代数的均方根误差(Root-Mean-Squared Error, RMSE)。这种误差可以刻画两条轨迹的旋转和平移误差。同时,也有的地方仅考虑平移误差,从而可以定义绝对平移误差(Absolute Translational Error, ATE)
A T E trans  = 1 N ∑ i = 1 N ∥ trans ⁡ ( T g t , i − 1 T est  , i ) ∥ 2 2 \mathrm{ATE}_{\text {trans }}=\sqrt{\frac{1}{N} \sum_{i=1}^N\left\|\operatorname{trans}\left(\boldsymbol{T}_{\mathrm{gt}, i}^{-1} \boldsymbol{T}_{\text {est }, i}\right)\right\|_2^2} ATEtrans =N1i=1N trans(Tgt,i1Test ,i) 22 其中 trans 表示取括号内部变量的平移部分。因为从整条轨迹上看,旋转出现误差后,随后的轨迹在瓶以上也会出现误差,所以两种指标在实际中都适用。

2. RPE

RPE 定义的是相对的误差。例如,考虑 i i i 时刻到 i + Δ t i+\Delta t i+Δt 时刻的运动,那么相对位姿误差(Relative Pose Error, RPE)可定义为:
R P E all  = 1 N − Δ t ∑ i = 1 N − Δ t ∥ log ⁡ ( ( T g t , i − 1 T g t , i + Δ t ) ) − 1 ( T esti  , i − 1 T esti  , i + Δ t ) ) ∨ ∥ 2 2 , \mathrm{RPE}_{\text {all }}=\sqrt{\left.\frac{1}{N-\Delta t} \sum_{i=1}^{N-\Delta t} \| \log \left(\left(T_{\mathrm{gt}, i}^{-1} T_{\mathrm{gt}, i+\Delta t}\right)\right)^{-1}\left(T_{\text {esti }, i}^{-1} T_{\text {esti }, i+\Delta t}\right)\right)^{\vee} \|_2^2,} RPEall =NΔt1i=1NΔtlog((Tgt,i1Tgt,i+Δt))1(Testi ,i1Testi ,i+Δt))22, 同样地,也可只取平移部分:
R P E trans  = 1 N − Δ t ∑ i = 1 N − Δ t ∥ trans ⁡ ( ( T g t , i − 1 T g t , i + Δ t ) ) − 1 ( T esti  , i − 1 T esti  , i + Δ t ) ) ∥ 2 2 \mathrm{RPE}_{\text {trans }}=\sqrt{\left.\frac{1}{N-\Delta t} \sum_{i=1}^{N-\Delta t} \| \operatorname{trans}\left(\left(\boldsymbol{T}_{\mathrm{gt}, i}^{-1} \boldsymbol{T}_{\mathrm{gt}, i+\Delta t}\right)\right)^{-1}\left(T_{\text {esti }, i}^{-1} T_{\text {esti }, i+\Delta t}\right)\right) \|_2^2} RPEtrans =NΔt1i=1NΔttrans((Tgt,i1Tgt,i+Δt))1(Testi ,i1Testi ,i+Δt))22

3. SLAM 轨迹保存格式

3.1 TUM

TUM 数据集格式:timestamp tx ty tz qx qy qz qw
在这里插入图片描述

3.2 KITTI

KITTI 数据集格式:一行 12 12 12 个数据,表示 Pose(R+t),可能还有另一个文件存放 timestamp
在这里插入图片描述

4. EVO

使用示例如下:

evo_ape kitti ground_truth.txt laser_odom.txt -r full --plot --plot_mode xyz
evo_rpe kitti ground_truth.txt laser_odom.txt -r trans_part --delta 100 --plot --plot_mode xyz

evo_ape 的默认形式是 -r trans_part,即计算的是这里的 ATE,想要计算 APE,可以使用 -r full。

-r 用法:

  • -r full:表示同时考虑旋转和平移误差得到的ape,无单位(unit-less);
  • -r trans_part:表示考虑平移部分得到的ape,单位为m;
  • -r rot_part:表示考虑旋转部分得到的ape,无单位(unit-less);
  • -r angle_deg:表示考虑旋转角得到的ape,单位°(deg);
  • -r angle_rad:表示考虑旋转角得到的ape,单位弧度(rad);

4.1 评估指标

  • max:表示最大误差;
  • mean:平均误差;
  • median:误差中位数;
  • min:最小误差;
  • rmse:均方根误差;
  • sse:和方差、误差平方和;
  • std:标准差

4.2 使用

可以先使用 EVO 仓库中自带的数据尝试

4.2.1 轨迹可视化

cd test/data
evo_traj kitti KITTI_00_ORB.txt KITTI_00_SPTAM.txt --ref=KITTI_00_gt.txt -p --plot_mode=xz

其中:

  • –ref=ground_truth.txt:指明参考轨迹即真实轨迹;
  • –plot-p:表示画图;
  • –plot_mode xy:表示图像投影在xoy平面上,其余可选参数为:xz,yx,yz,zx,zy,xyz。

4.2.2 APE

evo_ape kitti KITTI_00_gt.txt KITTI_00_ORB.txt -va --plot --plot_mode xz --save_plot ./tra1plot --save_results ./tra1.zip

其中:

  • -v–verbose:指明输出文件数据的相关信息;
  • -a–align:指明对轨迹进行配准;
  • –save_plot ./tra1plot:表示保存生成的图片,./tra1plot 这里写自己保存的地址;
  • –save_results ./tra1.zip:表示保存计算结果,./tra1.zip 这里写自己保存的地址。

4.2.3 RPE

evo_rpe tum fr2_desk_groundtruth.txt fr2_desk_ORB.txt -va --plot --plot_mode xyz

4.3 其他常用命令

evo_traj - 用于分析,绘制或导出一个或多个轨迹的工具
evo_res - 用于比较evo_ape或evo_rpe一个或多个结果文件的evo_rpe
evo_fig - 用于重新打开序列化图的(实验性)工具(使用–serialize_plot保存)
evo_config - 全局设置和配置文件操作的工具

4.3.1 evo_traj

evo_traj 主要是用来画轨迹、输出轨迹文件、转换数据格式等功能。

  1. 绘制单个轨迹:

    evo_traj euroc ground_truth.csv --plot

  2. 绘制多个轨迹:

    evo_traj kitti KITTI_00_ORB.txt KITTI_00_SPTAM.txt --ref=KITTI_00_gt.txt -p --plot_mode=xz

  1. 轨迹尺度缩放
    单目相机会存在尺度的不确定性,evo_traj 支持使用 -s–correct_scale 参数进行Sim(3)上的对齐(旋转、平移与尺度缩放,能非常方便的用于 RTK/GNSS 对轮齿脉冲的标定

  2. 格式转换
    如将 EuRoC 转成 TUM 格式,输出为 data.tum:

    evo_traj euroc data.csv --save_as_tum

4.4 其他参数

  • --n_to_align n:对齐第一个轨迹前n个姿态。

4.5 EVO 常见问题

  1. EVO 录数据时经常会出现以下错误:
    [ERROR] TUM trajectory files must have 8 entries per row and no trailing delimiter at the end of the rows (space).
    请添加图片描述注意除了格式需要正确外,每行末尾不要有空格。
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐