前言

         KITTI 格式是没有timestamp的,通过固定序列数来进行精度评估比较,而 TUM 格式中有时间戳,通过对齐时间戳来比较,会比较准,所以本次存储的evo数据格式采用 TUM 格式

  • KITTI格式: 为matrix4f格式的pose的前12位
  • TUM格式: 为time x y z qx qy qz qw

        注意:kitti 轨迹真值是按照相机坐标系 Cam 0(右x-下y-前z)来的,和其他坐标系存在转换关系。kitti 中的世界坐标系 是第一帧的 base_link 坐标系。

1.kitti数据集 Raw Data与00-10 Ground Truth的对应关系

 2,下载KITTI官方提供的真值和标定参数以及时间戳

        网址:Visual Odometry / SLAM Evaluation 2012

        calib.txt文件说明见  kitti数据集中calib.txt文件各参数含义

        下载好的数据如下:

3.下载evo中的kitti_poses_and_timestamps_to_trajectory.py文件

        链接:evo/contrib/kitti_poses_and_timestamps_to_trajectory.py

        将 对应的00.txt 和 times.txt 复制到该文件的同目录下

打开终端执行下列命令,将12列的 kitti 轨迹格式转换成8列的 tum 轨迹格式,得到tum格式的轨迹真值文件TUM_00_gt.txt

python3 kitti_poses_and_timestamps_to_trajectory.py 00.txt times.txt TUM_00_gt.txt

 4.使用 evo 的 evo_traj 命令绘制轨迹

evo_traj tum TUM_00_gt.txt -p

        其中 -p 表示显示绘图窗口 

5.SALM评价指标

evo_traj tum eee_01_gt.txt eee_01_prism.txt  --ref eee_01_gt.txt --t_max_diff 0.02 --align --plot --plot_mode xyz
命令 核心用途 -a/--align 参数要求 适用场景
evo_ape 计算绝对位姿误差(评估算法精度) 无需 --ref默认第一个文件为参考 量化评估 LIVO/SLAM 算法的全局精度
evo_traj 查看 / 对齐 / 转换轨迹文件(无误差计算) 必须加 --ref 指定参考文件 才能对齐 仅可视化轨迹、检查轨迹格式 / 对齐效果

        避坑指南:在用 evo 评估轨迹时,我们要特别注意时间戳匹配(--t_max_diff)对画图结果的影响。evo_trajevo_ape 的表现会有所不同:

  1. 当你使用 evo_traj 时: 它会显示完整的真值轨迹,但 SLAM 轨迹只显示匹配成功的部分。如果你发现真值很平滑,但 SLAM 轨迹变成了很多“突兀的折线”,这就说明匹配上的点太少了。因为中间丢失了大量数据,画图工具只能把相隔很远的几个点用直线硬连起来。这时候,你可以尝试把 --t_max_diff 的值改大一点,让更多的点参与匹配。

  2. 当你使用 evo_ape 时: 因为算误差必须“一对一”,它会把真值和 SLAM 轨迹里没匹配上的点全部删掉。所以如果匹配上的点很少,你会发现两条轨迹都变成了突兀的折线。解决办法是一样的:调大 --t_max_diff,让系统能捞回更多的匹配点,轨迹就会恢复正常了。

        查看 slam轨迹 和 真值轨迹 详细匹配情况的命令如下:

# evo_traj 查看slam轨迹和真值轨迹的匹配情况(默认--t_max_diff 0.01)
evo_traj tum eee_01_gt.txt eee_01_prism.txt  --ref eee_01_gt.txt --sync --verbose
evo_traj tum eee_01_gt.txt eee_01_prism.txt  --ref eee_01_gt.txt --sync --t_max_diff 0.01 --verbose

# evo_ape 查看slam轨迹和真值轨迹的匹配情况(需指定 t_max_diff 的具体值)
evo_ape tum eee_01_gt.txt eee_01_prism.txt  --align --t_max_diff 0.01 --verbose

①以上两者输出的匹配成功的帧数一致,说明 evo_traj 和 evo_ape 的匹配策略是一致的

 5.1 绝对轨迹:里程计估计轨迹和真实轨迹

evo_traj kitti ground_truth.txt laser_odom.txt -p

        5.2 绝对位姿误差(absolute pose error,APE

evo_ape kitti ground_truth.txt laser_odom.txt -r full --plot --plot_mode xyz
        ATE 用于衡量估计的轨迹与真实轨迹之间的误 差,可以非常直观地反映算法精度和轨迹全局一致性。 其中:
        -r {full,trans_part,rot_part,angle_deg,angle_rad,point_distance}:指定APE/RPE的计算基础,即基于完整位姿、平移部分、旋转部分、角度(度/弧度)或点之间的距离。       

         --plot_mode {xy,xz,yx,yz,zx,zy,xyz}:指定绘图时的投影轴。

        除此之外,常用的命令还有:

evo_ape kitti ground_truth.txt laser_odom.txt -r full --align --correct_scale --plot --plot_mode xyz
  • --align:对齐轨迹原点与方向
  • --correct_scale:修正估计轨迹的尺度(针对单目 VO 等无尺度场景)
  • max: Maximum(最大值)
  • mean: Mean(均值)
  • median: Median(中位数)
  • min: Minimum(最小值)
  • rmse: Root Mean Square Error(均方根误差):计算误差平方的均值后开根号得到的值,常用于衡量误差的总体水平。
  • sse: Sum of Squared Errors(误差平方和):所有误差值的平方和,表示误差的总体大小。
  • std: Standard Deviation(标准差)

注意:unit-less 表示无单位,也为使用的是“完整位姿”计算的APE。

        5.3 相对位姿 误差(relative pose error,RPE

evo_rpe kitti ground_truth.txt laser_odom.txt -r full --plot --plot_mode xyz
        RPE 用于衡量估计的相对位姿变换与真实相对位姿变换之间的误差,适合估计系统的漂
移。

5.4 统计图

evo_res results/*.zip -p --save_table results/table.csv

参考:

        evo:https://github.com/MichaelGrupp/evo?tab=readme-ov-file

        视觉SLAM基础:算法精度评价指标(ATE、RPE)

        轨迹误差评估指标[APE/RPE]和EVO[TUM/KITTI]

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐