核心功能是能够绘制相机的轨迹,或评估估计轨迹与真值的误差。支持多种数据集的轨迹格式(TUM、KITTI、EuRoC MAV、ROS的bag),同时支持这些数据格式之间进行相互转换。在此仅对其基本功能做简要介绍。
evo工具github地址
在终端使用安装命令即可:
注:需要安装一下相关的依赖
sudo apt install python-pip
pip install evo --upgrade --no-binary evo
or
pip install evo --upgrade --no-binary evo --user
pip install numpy --upgrade --user
格式转换的三种后缀指令:
不同数据的格式:
进行不同文件之间格式转换的命令:
evo_traj euroc data.csv --save_as_tum
然后会将17位数据的文件如图:
转化成符合TUM 形式的轨迹文件格式,8位格式文件,分别是“ timestamp x y z q_x q_y q_z q_w ”如下图:
跟上面的转换命令方式相似:
evo_traj tum traj_1.txt --save_as_kitti
evo_traj tum traj_1.txt --save_as_bag
例如以下的命令和所获得的图片:
evo_traj euroc v203_truth.csv --plot
例如evo自带的示例。
evo_traj kitti KITTI_00_ORB.txt KITTI_00_SPTAM.txt --ref=KITTI_00_gt.txt -p --plot_mode=xz
多轨迹输出需要注意将轨迹对齐,单目相机还可以进行尺度矫正。
绝对位姿误差,常被用作绝对轨迹误差,比较估计轨迹和参考轨迹并计算整个轨迹的统计数据,适用于测试轨迹的全局一致性。
命令语法:命令 格式 参考轨迹 估计轨迹 [可选项]
其中格式包括euroc、tum等数据格式,可选项有对齐命令、画图、保存结果等。
例如:使用evo_ape计算ORB-SLAM的结果轨迹和S-PTAM的轨迹之间的绝对姿态误差,其中KITTI_00_gt.txt是参考地面实况,并将单个结果绘制并保存到.zip文件中以供evo_res:
mkdir results
evo_ape kitti KITTI_00_gt.txt KITTI_00_ORB.txt -r full -va --plot --plot_mode xz --save_results results/ORB.zip
命令的含义为:计算考虑平移和旋转部分误差的ape,进行平移和旋转对齐,以详细模式显示,保存画图并保存计算结果。
命令运行后得到结果如下图所示
其中 -plot 或者 -p 的意思为绘图
其中 -r 表示ape所基于的姿态关系,上面的命令里面所选择的参数为 “ full ”,如果不添加-r/–pose_relation和可选项,则默认为trans_part。
其中 -v 表示verbose mode,即详细模式,-a表示采用SE(3) Umeyama对齐,其余可选项如下表所示。不加-s表示默认尺度对齐参数为1.0,即不进行尺度对齐。
(轨迹对齐-a与尺度缩放-s,这两个参数在 evo_traj、evo_ape、evo_rpe 里面都为可选参数)
也可以用 evo_ape 评估两个文件的绝对位姿误差,例如:
evo_ape euroc a.csv b.csv 或者 evo_ape kitti a.txt b.txt //evo支持 kitti、tum、euroc 这三个公开数据集格式
注:两个待比较的数据文件必须格式一致,都为kitti、tum或者euroc。
可以得到如下的结果:
其中参数:
注:可通过 evo_ape +数据格式 + --help 查看更多参数的含义以及如何使用。例如:
evo_ape tum --help
相对位姿误差不进行绝对位姿的比较,相对位姿误差比较运动(姿态增量)。相对位姿误差可以给出局部精度,例如slam系统每米的平移或者旋转漂移量。
命令语法:命令 格式 参考轨迹 估计轨迹 [可选项]
其中格式包括euroc、tum等数据格式,可选项有对齐命令、画图、保存结果等。
例如:
evo_rpe euroc data.csv V102.txt -r angle_deg --delta 1 --delta_unit m -va --plot --plot_mode xyz --save_plot ./VIO --save_results ./VIO.zip
命令的含义:求每米考虑旋转角的rpe,以详细模式显示并画图。结果如图所示
其中-r表示ape所基于的姿态关系。参数表示效果与 evo_ape 的意义相同。不添加也默认为 trans_part。
除了 -r 以外还有:
–d/–delta表示相对位姿之间的增量,–u/–delta_unit表示增量的单位。
可选参数为 [f, d, r, m],分别表示 [frames, deg, rad, meters]。
–d/–delta -u/–delta_unit 合起来表示衡量局部精度的单位,如每米,每弧度,每百米等。其中–delta_unit为 f 时,–delta的参数必须为整形,其余情况下可以为浮点型。–delta 默认为1,–delta_unit默认为 f 。
-va --plot --plot_mode xyz --save_plot ./VIO --save_results ./VIO.zip等同evo_ape中所讲。
当在命令中加上–all_pairs,则计算 rpe 时使用位置数据中所有的对而不是仅连续对,此时,可以通过-t/–delta_tol 控制 -all_pairs 模式下的相对增量的容差(relative delta tolerance)。需要注意 -all_pairs 下不能使用 -plot 函数。
注:可通过 evo_rpe +数据格式 + --help查看更多参数的含义以及如何使用。例如:
evo_rpe euroc --help
evo_res 可用于比较指标中的多个结果文件:
例如我们使用上面的 evo_ape/evo_rpe 的结果保存为.zip 文件后,可以利用evo_res对不同的结果进行比较,并生成图和表格保存。命令如下:
evo_res results/*.zip -p --save_table results/table.csv
注:evo_res --help 可查看可选参数含义。
[ERROR] Can’t align or sync without a reference
原因:没有引用导致无法对齐或同步,即无法使用 -a 或者 -s 。
解决方法:在evo的命令里面添加 --ref ,后面跟随需要进行平移和旋转的参考文件,同时保证数据格式ok即可。
[ERROR] TUM trajectory files must have 8 entries per row and no trailing delimiter at the end of the rows (space)
原因:生成的原始文件中偶尔存在空格等不是完全规范的tum结果文件。
解决方法:运行如下命令可以清除多余的空格。
cat results.txt | tr -s [:space:] > results_new.txt
[ERROR] TUM trajectory files must have 8 entries per row and no trailing delimiter at the end of the rows (space)
原因:对应的 tum 文件的数据的列数不是规定的八列(八列=时间戳+三维坐标+四元数)。
解决方法:编写代码将得到的数据结果变为八列。
注:为了使用evo进行绘图,需要格式准确,每一行数据需要顶格,数据间不能空格,需要删除多余空格,建议转换成逗号更保险。
[ERROR] found no matching timestamps between reference and test.txt with max. time diff 0.01 (s) and time offset 0.0 (s)
原因:两份需要做图的数据文件的时间戳对应不上。
解决方法:需要时间戳对应,或者把 txt 文件的时间戳改为 0、1、2、3…个数一样且对齐即可。
改列数和改时间戳代码可以参考此博文。