系统版本:Ubuntu20.04
ROS版本:Noetic
EVO是用于处理、评估和比较里程计和SLAM算法的轨迹输出的工具。
注意:本文的评测是在kitti数据集下进行评测,其他的数据集也支持评测。
安装EVO,可以执行下面这条命令。
pip install evo --upgrade --no-binary evo
evo工具主要有6个常用命令
evo_ape:用于评估绝对位姿误差
evo_rpe:用于评估相对位姿误差
evo_traj:用于画轨迹、输出轨迹文件、转换轨迹数据格式
evo_res:比较来自evo_ape和evo_rpe生成的一个或多个结果文件的工具
evo_fig:(不常用)用于重新打开序列化图
evo_config:(不常用)evo工具全局设置和配置文件操作
1.evo_ape
评价的是绝对误差随路程的累计,是一个累积量。
用于评估两个轨迹的绝对轨迹误差,最简单的使用方法如下:
evo_ape kitti 1.txt 2.txt
执行命令后,结果如下图:
上述命令运行之后会在终端输出统计信息(单位:米),其中
max:最大误差
mean:误差均值
median:误差中位数
min:最小误差
rmse:均方根误差
sse:方差
std:标准差
发现一个问题,就是运行结果中只给出了数据,没有给出数据图,显得不直接明了,可执行下面的命令解决。
evo_ape kitti 1.txt 2.txt -r full --plot --plot_mode xyz
-r表示ape所基于的姿态关系
-r/–pose_relation可选参数 含义
full 表示同时考虑旋转和平移误差得到的ape,无单位(unit-less)
trans_part 考虑平移部分得到的ape,单位为m
rot_part 考虑旋转部分得到的ape,无单位(unit-less)
angle_deg 考虑旋转角得到的ape,单位°(deg)
angle_rad 考虑旋转角得到的ape,单位弧度(rad)
不添加-r/–pose_relation和可选项,则默认为trans_par
-plot表示画图
–plot_mode选择画图模式,二维图或者三维图,可选参数为[xy, xz, yx, yz, zx, zy, xyz],默认为xyz。
-save_results表示存储结果
存储结果可以手动储存,也可自动储存。自动储存的命令如下:
evo_ape kitti 1.txt 2.txt -r full --plot --plot_mode xyz --save_plot ./trajecoty --save_results ./result.zip
其中,./trajecoty表示结果储存的目录 ./result.zip表示结果文件的命名。
结果如下:
此外
v表示verbose mode,详细模式
-a表示采用SE(3) Umeyama对齐,其余可选项如下所示
不加表示默认尺度对齐参数为1.0,即不进行尺度对齐。
命令 含义
–align/-a 采用SE(3) Umeyama对齐,只处理平移和旋转
–align --correct_scale/-as 采用Sim(3) Umeyama对齐,同时处理平移旋转和尺度
–correct_scale/-s 仅对齐尺度
例如,下面这条指令:
evo_ape kitti 1.txt 2.txt -r full -vas --plot --plot_mode xyz --save_plot ./trajecoty --save_results ./result.zip
2.evo_rpe
相对位姿误差不进行绝对位姿的比较,相对位姿误差比较运动(姿态增量)。相对位姿误差可以给出局部精度,例如slam系统每米的平移或者旋转漂移量。
一个例子:
evo_rpe kitti ground_truth.txt laser_odom.txt -r trans_part --delta 100 --plot --plot_mode xyz
其中,其中--delta 100表示的是每隔100米统计一次误差,这样统计的其实就是误差的百分比,和kitti的odometry榜单中的距离误差指标就可以直接对应了。
运行的结果如下:
注:数据效果不是很好。
-r表示ape所基于的姿态关系
-r/–pose_relation可选参数 含义
full 表示同时考虑旋转和平移误差得到的ape,无单位(unit-less)
trans_part 考虑平移部分得到的ape,单位为m
rot_part 考虑旋转部分得到的ape,无单位(unit-less)
angle_deg 考虑旋转角得到的ape,单位°(deg)
angle_rad 考虑旋转角得到的ape,单位弧度(rad)
v表示verbose mode,详细模式
-a表示采用SE(3) Umeyama对齐,其余可选项如下所示
不加表示默认尺度对齐参数为1.0,即不进行尺度对齐。
命令 含义
–align/-a 采用SE(3) Umeyama对齐,只处理平移和旋转
–align --correct_scale/-as 采用Sim(3) Umeyama对齐,同时处理平移旋转和尺度
–correct_scale/-s 仅对齐尺度
-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。
一个例子:
evo_rpe euroc MH_data3.csv pose_graphloop.txt -r angle_deg --delta 1 --delta_unit m -va --plot --plot_mode xyz --save_plot ./VINSplot --save_results ./VINS.zip
命令的含义为 求每米考虑旋转角的rpe,以详细模式显示并画图。
3.evo_traj
最基本的命令,用于画出轨迹、输出轨迹文件、进行轨迹之间的转换。在使用前需要给出轨迹的数据标准。一个例子:
evo_traj kitti ground_truth.txt --plot --plot_mode xyz
实际运行效果:
常用的就这几个。