SLAM的轨迹评价是衡量定位精度的一个关键部分。以下是针对SLAM轨迹定义以及评价指标定义两方面展开:
轨迹
目前常用的轨迹描述文件包括:kitti、tum。
kitti 格式
KITTI是一个公开的数据集,主要用于自动驾驶和计算机视觉领域的研究。它由德国卡尔斯鲁厄理工学院(Karlsruhe Institute of Technology)和丰田研究所(TOYOTA Technological Institute at Chicago)联合创建。
同时,KITTI提供了一个在线评估服务器,允许研究者提交他们的算法结果并与其他方法进行比较。
但是,实际上 kitti 不是一种真正的轨迹格式,因为它没有时间戳 - 它只包含姿势。这意味着当要将此格式的两个文件与指标进行比较时必须小心,因为姿势的数量必须完全相同。
文件的每一行都包含 3x4 齐次姿势矩阵 SE(4) 矩阵的前 3 行,这些矩阵展平为一行,每个值用空格分隔。例如,这个姿势矩阵:
a b c d
e f g h
i j k l
0 0 0 1
在 txt 文件中的展开形式为:
a b c d e f g h i j k l
tum 格式
TUM 是德国慕尼黑工业大学的英文缩写。因为其提供了一系列的数据集和基准测试,尤其是针对视觉测距和SLAM技术。其中,TUM RGB-D 数据集是一个非常流行的数据集,它提供了从RGB-D相机捕获的数据,用于评估各种视觉测距和SLAM方法。
其中,每行有 8 个条目,包含时间戳(以秒为单位)、位置和方向(以四元数为单位),每个值用空格分隔:
timestamp x y z q_x q_y q_z q_w
评价指标
常用评估轨迹误差的方式有两种:绝对轨迹误差(ATE)与相对轨迹误差(RPE)
绝对轨迹误差(ATE )
ATE 考虑了估计轨迹和真实轨迹之间的全局误差。首先,我们需要对齐估计的轨迹与真实轨迹。通常,这可以通过找到最佳的刚体变换(平移和旋转)来实现。
其中:
- :从估计轨迹到真实轨迹的最佳刚体变换(包括旋转和平移)。
- :估计轨迹的第 个位置。
- :真实轨迹的第 个位置。
- :轨迹中的位置点的总数。
- 表示欧氏范数。
在计算ATE之前,确保估计轨迹和真实轨迹具有相同的时间戳,并已经进行了恰当的对齐。
相对轨迹误差(RPE )
RPE 与ATE(绝对轨迹误差)不同,RTE更关心局部轨迹的精度和连续性,而不是整个轨迹的全局误差。
RTE通常通过计算两个相邻的位姿之间的相对运动来得到。给定一个时间窗口长度 Δt,RTE会对所有相距 Δt 的位姿对进行评估,以评估这些位姿对之间的相对误差。
相对轨迹误差(RTE)可以定义为所有对应相对位姿变换之间的误差的均值或均方根:
其中:
- :从估计轨迹中第i个位姿到第i+Δt个位姿的相对变换。
- :从真实轨迹中第i个位姿到第i+Δt个位姿的相对变换。
- :轨迹中的位姿点的总数。
- :表示位姿之间的差异操作,通常是指SE(3)空间中的位姿之间的相对变换。
evo工具
evo 工具是一个用于评估测程法和SLAM的Python包
安装:
pip install evo --upgrade --no-binary evo
绘制 kitti 数据
计算 APE 的同时绘制轨迹误差图
evo_ape kitti KITTI_00_gt.txt KITTI_00_ORB.txt -va --plot --plot_mode xz
同时绘制多条曲线
evo_traj kitti KITTI_00_ORB.txt KITTI_00_SPTAM.txt --ref=KITTI_00_gt.txt -p --plot_mode=xz
绘制 TUM 数据
计算 APE 的同时绘制轨迹误差图
evo_ape tum fr2_desk_groundtruth.txt fr2_desk_ORB.txt -va --plot --plot_mode xz
同时绘制多条曲线
evo_traj tum freiburg1_xyz-ORB_kf_mono.txt freiburg1_xyz-rgbdslam.txt --ref=freiburg1_xyz-groundtruth.txt -va --plot --plot_mode xy
评论区