使用evo绘制kitti数据集轨迹真值
打开终端执行下列命令,将12列的 kitti 轨迹格式转换成8列的 tum 轨迹格式,得到tum格式的轨迹真挚值文件TUM_00_gt.txt。将 对应的00.txt 和 times.txt 复制到该文件的同目录下。calib.txt文件说明见。
前言
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_traj 和 evo_ape 的表现会有所不同:
-
当你使用
evo_traj时: 它会显示完整的真值轨迹,但 SLAM 轨迹只显示匹配成功的部分。如果你发现真值很平滑,但 SLAM 轨迹变成了很多“突兀的折线”,这就说明匹配上的点太少了。因为中间丢失了大量数据,画图工具只能把相隔很远的几个点用直线硬连起来。这时候,你可以尝试把--t_max_diff的值改大一点,让更多的点参与匹配。 -
当你使用
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
-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



5.4 统计图
evo_res results/*.zip -p --save_table results/table.csv

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




所有评论(0)