轨迹参数(轨迹误差评估指标[APE/RPE]和EVO[TUM/KITTI])
Reference:
高翔 ,张涛 《视觉SLAM十四讲》 视觉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=1∑Nlog(Tgt,i−1Testi ,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=1∑Ntrans(Tgt,i−1Test ,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=1∑N−Δt∥log((Tgt,i−1Tgt,i+Δt))−1(Testi ,i−1Testi ,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=1∑N−Δt∥trans((Tgt,i−1Tgt,i+Δt))−1(Testi ,i−1Testi ,i+Δt))∥223. 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 xyzevo_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 主要是用来画轨迹、输出轨迹文件 、转换数据格式等功能。
绘制单个轨迹:
evo_traj euroc ground_truth.csv --plot
绘制多个轨迹:
evo_traj kitti KITTI_00_ORB.txt KITTI_00_SPTAM.txt --ref=KITTI_00_gt.txt -p --plot_mode=xz
轨迹尺度缩放
单目相机会存在尺度的不确定性,evo_traj 支持使用 -s或–correct_scale 参数进行Sim(3)上的对齐(旋转 、平移与尺度缩放 ,能非常方便的用于 RTK/GNSS 对轮齿脉冲的标定)格式转换
如将 EuRoC 转成 TUM 格式 ,输出为 data.tum:evo_traj euroc data.csv --save_as_tum
4.4 其他参数
–n_to_align n:对齐第一个轨迹前n个姿态 。创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!