|
evo github 链接
0、安装
通过 PyPI :
pip install evo --upgrade --no-binary evo
装不上可以换源:
清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 华中理工大学:http://pypi.hustunique.com/ 山东理工大学:http://pypi.sdutlinux.org/ 豆瓣:http://pypi.douban.com/simple/
直接用 -i 命令指定源即可,比如:
pip install evo --upgrade --no-binary evo -i https://pypi.tuna.tsinghua.edu.cn/simple
也可以下载源码到本地,然后在根目录执行(如果用了kitti数据集,建议用这一种)
pip install --editable . --upgrade --no-binary evo
1、evo的命令工具
1.1 命令列表
两个指标命令,四个工具命令 指标命令:
evo_ape - absolute pose error 绝对位姿误差 evo_rpe - relative pose error 相对位姿误差
工具命令:
evo_traj - tool for analyzing, plotting or exporting one or more trajectories,最常用,绘制轨迹图,分析轨迹结果 evo_res - tool for comparing one or multiple result files from evo_ape or >evo_rpe,较常用,对结果进一步分析,比对一个或更多轨迹结果 evo_fig - (experimental) tool for re-opening serialized plots (saved with --serialize_plot) evo_config - tool for global settings and config file manipulation
1.2 轨迹格式转换
支持轨迹格式:(更详细的见文档)
‘TUM’ trajectory file: 时间戳+3D位置+四元数 [timestamp x y z q_x q_y q_z q_w] ‘KITTI’ pose files : 变换矩阵[a b c d e f g h i j k l] ‘EuRoC MAV’ (.csv groundtruth and TUM trajectory file) ROS and ROS2 话题:
geometry_msgs/PoseStamped geometry_msgs/TransformStamped geometry_msgs/PoseWithCovarianceStamped nav_msgs/Odometry TF
在跑源码的时候,可能会遇到代码输出格式与数据集格式不同的情况。evo也提供了转换工具: 可以使用 evo_traj + 轨迹文件 + –save_as_<other_format> 的命令进行格式转换
 例:
evo_traj euroc data.csv --save_as_tum
evo_traj tum traj_1.txt traj_2.txt traj_3.txt --save_as_kitti
evo_traj tum traj_1.txt traj_2.txt traj_3.txt --save_as_bag
1.3 对齐和转换
可以通过下面的指令将其他轨迹与参考轨迹(–ref指定的)对齐:
–align or -a = SE(3) Umeyama alignment (rotation, translation) –align --correct_scale or -as = Sim(3) Umeyama alignment (rotation, translation, scale) –correct_scale or -s = scale correction only
2、示例
下面分别展示官方和自己用ORB-SLAM2测试的结果
2.1 绘制多条轨迹
官方
假设KITTI_00_ORB.txt、KITTI_00_SPTAM.txt 分别是ORB-SLAM和S-PTAM在kitti sequence00下的估计结果; KITTI_00_gt.txt 为ground truth
evo_traj kitti KITTI_00_ORB.txt KITTI_00_SPTAM.txt --ref=KITTI_00_gt.txt -p --plot_mode=xz
-p / --plot 表示绘制轨迹; ** --plot_mode** 指定视图,如 xz 表示 x 轴和 z 轴处的 2D 视图;xyz 表示 3D 视图。 更详细的可以参考 evo/Plotting

ORB-SLAM2 以kitti sequence 00 为例:
ORB-SLAM生成的轨迹文件KeyFrameTrajectory.txt 是Tum格式的,Tum比Kitti格式包含更多信息,因此将Kitti的ground truth 转换为Tum的: 找到evo/contrib,里面有一个kitti_poses_and_timestamps_to_trajectory.py文件。把KITTI数据集下的00.txt和times.txt文件拷贝到该目录,运行如下命令得到kitti_00_gt.txt文件(直接就是Tum格式):
python3 kitti_poses_and_timestamps_to_trajectory.py 00.txt times.txt kitti_00_gt.txt
然后:
evo_traj tum KeyFrameTrajectory.txt --ref kitti_00_gt.txt -p --plot_mode xz --correct_scale --align

如果不带 align  如果不带 align 也不带 correct_scale: 
2.2 计算轨迹误差
使用evo_ape计算ORB-SLAM和S-PTAM两个轨迹的绝对姿态误差,绘制并将单个结果保存到.zip文件中以供evo_res:-a选项表示对齐两条轨迹,第5个参数中的-v选项表示输出轨迹对齐的详细信息(即对齐的平移、旋转);
官方
ORB Stereo 估计
mkdir results
evo_ape kitti KITTI_00_gt.txt KITTI_00_ORB.txt -va --plot --plot_mode xz --save_results results/ORB.zip

S-PTAM 估计
evo_ape kitti KITTI_00_gt.txt KITTI_00_SPTAM.txt -va --plot --plot_mode xz --save_results results/SPTAM.zip

-a 表示对齐两条轨迹; -v 表示输出轨迹对齐的详细信息(即对齐的平移、旋转);
ORB-SLAM2
evo_ape tum kitti_00_gt.txt KeyFrameTrajectory.txt --plot --correct_scale --align -v --save_results kitti_00_ape.zip


如果无法保存*.zip执行这句:
evo_config set save_traj_in_zip true
2.3 可视化误差结果
使用 evo_res 比较指标中的多个结果文件,即:
打印信息和统计信息(默认) 绘制结果 将统计信息保存在表中
evo_res results/*.zip -p --save_table results/table.csv

ORB-SLAM2
evo_res results/kitti_00_ape.zip -p --save_table results/kitti_00_apetable.csv

4、其他相关博客
evo轨迹评估工具使用 EVO使用方法详解
【SLAM】运行ORB-SLAM2并使用evo工具评估TUM/KITTI/EuRoC单目数据集【SLAM】运行ORB-SLAM2并使用evo工具评估TUM/KITTI/EuRoC单目数据集
|