轨迹评估工具使用:evo安装以及学习

evo是一款用于视觉里程计和slam问题的轨迹评估工具。

核心功能是能够绘制相机的轨迹,或评估估计轨迹与真值的误差。支持多种数据集的轨迹格式(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

二、相关命令的使用——格式转换

格式转换的三种后缀指令:
格式转换
不同数据的格式:
文件格式
进行不同文件之间格式转换的命令:

  1. EuRoc的数据格式转换成TUM数据格式
    例如
    命令行:
	evo_traj euroc data.csv --save_as_tum

然后会将17位数据的文件如图:
17位转化成符合TUM 形式的轨迹文件格式,8位格式文件,分别是“ timestamp x y z q_x q_y q_z q_w ”如下图:
在这里插入图片描述

  1. TUM的数据格式转换成KITTI数据格式

跟上面的转换命令方式相似:

evo_traj tum traj_1.txt --save_as_kitti
  1. TUM的数据格式转换成Bag数据格式
evo_traj tum traj_1.txt  --save_as_bag

三、相关命令的使用——画图

3.1 画单个轨迹

例如以下的命令和所获得的图片:

 evo_traj euroc v203_truth.csv --plot

例如

3.2 画多个轨迹

例如evo自带的示例。

evo_traj kitti KITTI_00_ORB.txt KITTI_00_SPTAM.txt --ref=KITTI_00_gt.txt -p --plot_mode=xz

多轨迹输出需要注意将轨迹对齐,单目相机还可以进行尺度矫正。

四、Run a metric on trajectories(在轨迹上运行指标)相关命令

4.1 evo_ape

绝对位姿误差,常被用作绝对轨迹误差,比较估计轨迹和参考轨迹并计算整个轨迹的统计数据,适用于测试轨迹的全局一致性。
命令语法:命令 格式 参考轨迹 估计轨迹 [可选项]
其中格式包括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。
可以得到如下的结果:
结果
其中参数:

  • max:表示最大误差;
  • mean:平均误差;
  • median:误差中位数;
  • min:最小误差;
  • rmse:均方根误差;
  • sse:和方差、误差平方和;
  • std:标准差。

注:可通过 evo_ape +数据格式 + --help 查看更多参数的含义以及如何使用。例如:

evo_ape tum --help

4.2 evo_rpe

相对位姿误差不进行绝对位姿的比较,相对位姿误差比较运动(姿态增量)。相对位姿误差可以给出局部精度,例如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

五、Process multiple results from a metric(处理指标中的多个结果)

evo_res 可用于比较指标中的多个结果文件:

  • print infos and statistics (default)(打印信息和统计信息(默认))
  • plot the results(绘制结果)
  • save the statistics in a table(将统计信息保存在表中)

例如我们使用上面的 evo_ape/evo_rpe 的结果保存为.zip 文件后,可以利用evo_res对不同的结果进行比较,并生成图和表格保存。命令如下:

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

注:evo_res --help 可查看可选参数含义。

六、evo其他常用命令

  • evo_fig:重新打开序列化图的工具
  • evo_config:用于全局设置和配置文件操作的工具

其他命令

七、使用evo遇到的问题

报错指令

[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…个数一样且对齐即可。
改列数和改时间戳代码可以参考此博文

优秀参考博文

  1. SLAM精度测评——EVO;
  2. SLAM评估工具-EVO从安装到使用;
  3. EVO使用;
  4. 轨迹评估工具使用总结(一) evo从安装到入门;
  5. evo安装、evo使用方法详细介绍使用教程,SLAM轨迹精度评估工具,如何用来评估ORB-SLAM2生成的轨迹精度;

猜你喜欢

转载自blog.csdn.net/weixin_52303102/article/details/130742017
今日推荐