SLAM精度评定工具——EVO使用方法详解

系统版本: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

实际运行效果:

常用的就这几个。

### 使用evo评估ORB-SLAM轨迹时可能出现的错误及其解决方案 在使用 `evo` 对由 ORB-SLAM 或其变体生成的轨迹进行评估时,可能会遇到一些常见的问题。以下是可能的原因以及对应的解决方法: #### 1. 数据格式不匹配 如果输入到 `evo` 的轨迹文件未按照指定的数据格式准备,则可能导致解析失败或报错。例如,TUM 格式的轨迹文件应严格遵循时间戳和位姿矩阵的形式。 - **验证 TUM 文件格式**: 确保 `KeyFrameTrajectory.txt` 中每一行都具有如下结构: `<timestamp> <tx> <ty> <tz> <qx> <qy> <qz> <qw>`[^1] 时间戳需为浮点数表示秒级单位;平移分量 `(tx, ty, tz)` 和四元数姿态 `(qx, qy, qz, qw)` 需精确无误。 - **修正命令中的路径参数**: 如果引用了错误的参考文件(如 `-ref=data.tum`),则会引发比较操作失败。确认 `data.tum` 是正确的地面真值文件,并放置在同一目录下[^2]。 --- #### 2. 尺度校正选项冲突 当启用自动尺度校正 (`--correct_scale`) 参数时,若估计轨迹与真实轨迹之间的初始比例关系无法计算成功,也可能触发错误。 - **禁用尺度校正尝试重新执行**: 移除 `--correct_scale` 并观察是否仍存在异常行为。部分 SLAM 方法已内置固定尺度假设,无需额外调整。 ```bash evo_traj tum KeyFrameTrajectory.txt --ref=data.tum -p --plot_mode xyz -a ``` --- #### 3. 轨迹长度不足或缺失同步帧 某些情况下,由于 ORB-SLAM 输出的关键帧数量较少或者未能完全覆盖整个序列范围,导致对比分析中断。 - **扩展关键帧采样密度**: 修改 ORB-SLAM 设置以增加保存更多中间状态的信息频率。具体可查阅配置文档中关于地图更新策略的部分。 - **检查两份数据的时间轴一致性**: 利用可视化工具初步排查是否存在显著偏移现象。 --- #### 4. 安装依赖项版本兼容性问题 最后一种可能性来源于本地安装环境本身存在问题——比如 Python 库版本过旧影响脚本正常运作。 - 更新至最新稳定发行版并重复上述流程即可排除此类隐患。 ```python pip install --upgrade evo ``` --- ### 总结 综上所述,在利用 evo 工具完成对 ORB-SLAM 结果质量定量描述前,务必仔细核验各个环节设置准确性,包括但不限于源码编译过程、实验素材选取标准等方面因素共同作用下的最终表现效果。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值