evo是一款用于SLAM轨迹精度的评估工具。核心功能是(1)能够绘制(传感器运动)轨迹,(2)评估估计轨迹与真值(ground truth)的误差。evo支持多种数据集的轨迹格式(TUM、KITT、EuRoC MAV、ROS的bag),同时支持这些数据格式之间进行相互转换。在此仅对其基本功能做简要介绍。
目录
1. evo的安装(evo共有两种安装方式)
1.1 采用pip安装,直接安装最新的稳定发行版(在翻墙的情况下可以使用)
1.2 源码安装 ,下载源码进行安装(必须翻墙,要不然装不上)
2. 基础指令
2.1 轨迹对齐
2.2 轨迹尺度缩放
3. 精度测评
3.1 evo_ape
3.2 evo_rpe
3.3 evo_res进行结果比较
3.4 格式互相转换
4. 评价指标和评价工具对比
1. ATE:Absolute Trajectory Error 绝对轨迹误差(使用evo)
参数说明
2. RPE:Relative Pose Error 相对位姿误差(使用evo)
参数说明
3. RPE和RRE(使用 KITTI_odometry_evaluation_tool)
示例命令
参数说明
综述
5. ORB-SLAM2 (Stereo)和DynSLAM (Stereo)中的应用
1. evo的安装(evo共有两种安装方式)
1.1 采用pip安装,直接安装最新的稳定发行版(在翻墙的情况下可以使用)
输入代码:
# 遇到网络不好中断,就多试几次(但是一定要翻墙)
pip install evo --upgrade --no-binary evo
这个命令来来回回执行了很多次,差不多一个小时才装上。
运行pip安装命令显示pip未安装,用如下代码解决
sudo apt install python-pip
1.2 源码安装 ,下载源码进行安装(必须翻墙,要不然装不上)
首先切换到你的目录
下载evo源码:
git clone https://github.com/MichaelGrupp/evo.git
cd到evo目录下
pip install --user evo --upgrade --no-binary evo //有一个12.8MB的文件下载,要消耗一些时间,也有可能time out(不翻墙不行)
pip install evo --upgrade 如果有提示你的pip版本低,那么就通过下面的指令升级
pip python -m pip install --upgrade pip
安装时会自动安装相关依赖项。
安装完毕后,在命令行输入evo,若显示了相关信息,则表明安装成功。若提示"command not found"也不用惊慌,很多人遇到这种问题,重启电脑即可找到evo相应指令。
2. 基础指令
evo绘制轨迹的指令为:evo_traj,后跟必要参数有:数据的格式(tum / kitti / bag / euroc等)+ 轨迹文件。轨迹文件可以有多个,例如:
evo_traj tum traj1.txt traj2.txt
这个指令只是显示轨迹的基本信息,若要绘制轨迹,则增加可选参数 -p 或 --plot
evo_traj tum traj1.txt –p
2.1 轨迹对齐
我们时常需要将估计轨迹与真实轨迹同时绘制,可采用指令:
evo_traj tum realTraj.txt estTraj.txt -p
存储时轨迹多为相对位置变化,所以绘制出的轨迹在初始位置上存在一定的位置和角度偏移。
这时我们采用对齐指令将两条轨迹进行对齐。为此我们需要通过--ref参数指定参考轨迹,并增加参数-a(或--align)进行对齐(旋转与平移)
evo_traj tum estTraj.txt --ref realTraj.txt -p -a
2.2 轨迹尺度缩放
单目相机会存在尺度的不确定性,evo_traj 支持使用-s(或 --correct_scale)参数进行Sim(3)上的对齐(旋转、平移与尺度缩放)帮助?
可以在命令行通过-h参数查看当前evo指令的参数及相关说明。例如:
evo_traj tum –h
3. 精度测评
3.1 evo_ape
evo_ape 绝对位姿误差(absolute pose error),用于整体评估整条轨迹的全局一致性;
注意evo_ape默认情况下计算的是ATE(相当于默认加了参数-r tran_part),如果想计算APE,可以加上参数-r full
evo_ape kitti KITTI_00_gt.txt KITTI_00_ORB.txt -va --plot --plot_mode xz --save_results results/ORB.zip
绝对位姿误差,用于比较估计轨迹和参考轨迹并计算整个轨迹的统计数据,常用于评估测试轨迹的全局一致性。这里还是以kitti为例,tum和euroc格式相同。
evo_ape kitti ground_truth.txt tra1.txt -r full -va --plot --plot_mode xyz --save_plot ./tra1plot --save_results ./tra1.zip
kitti表明处理的是kitti数据集的相关结果,这里也可以替换为tum和euroc;
ground_truth.txt代表真实轨迹的数据;
tra1.txt代表估计轨迹的数据;
-r full表示同时考虑旋转和平移误差得到的ape,无单位(unit-less);
另外: -r trans_part表示考虑平移部分得到的ape,单位为m;
-r rot_part表示考虑旋转部分得到的ape,无单位(unit-less);
-r angle_deg表示考虑旋转角得到的ape,单位°(deg);
-r angle_rad表示考虑旋转角得到的ape,单位弧度(rad);
-va包含两部分;1.-v或--verbose指明输出文件数据的相关信息;2.-a或--align指明对轨迹进行配准; --plot表示画图;
--plot_mode xy表示图像投影在xoy平面上,其余可选参数为:xz,yx,yz,zx,zy,xyz;
--save_plot ./tra1plot表示保存生成的图片,./tra1plot这里写自己保存的地址;
--save_results ./tra1.zip表示保存计算结果,./tra1.zip这里写自己保存的地址;
3.2 evo_rpe
evo_rpe 相对位姿误差(relative pose error),用于评价轨迹局部的准确性。
相对位姿误差不进行绝对位姿的比较,相对位姿误差比较运动(姿态增量)。相对位姿误差可以给出局部精度,例如SLAM系统每米的平移或者旋转漂移量。这里还是以kitti为例,tum和euroc格式相同。
evo_rpe kitti ground_truth.txt tra1.txt -r full -va --plot --plot_mode xyz --save_plot ./tra1plot --save_results ./tra1.zip
kitti表明处理的是kitti数据集的相关结果,这里也可以替换为tum和euroc;
ground_truth.txt代表真实轨迹的数据;
tra1.txt代表估计轨迹的数据;
-r full表示同时考虑旋转和平移误差得到的ape,无单位(unit-less);
另外:
-r trans_part表示考虑平移部分得到的ape,单位为m;
-r rot_part表示考虑旋转部分得到的ape,无单位(unit-less);
-r angle_deg表示考虑旋转角得到的ape,单位°(deg);
-r angle_rad表示考虑旋转角得到的ape,单位弧度(rad);
-va包含两部分;1.-v或--verbose指明输出文件数据的相关信息;2.-a或--align指明对轨迹进行配准;
--plot表示画图;
--plot_mode xy表示图像投影在xoy平面上,其余可选参数为:xz,yx,yz,zx,zy,xyz;
--save_plot ./tra1plot表示保存生成的图片,./tra1plot这里写自己保存的地址;
--save_results ./tra1.zip表示保存计算结果,./tra1.zip这里写自己保存的地址;
3.3 evo_res进行结果比较
在使用evo_ape或evo_rpe将结果保存为.zip文件后,可以利用evo_res对不同的结果进行比较。
evo_res //*/test/.zip -p --save_table ///test/table.csv///test/.zip是之前使用ape或rpe生成的压缩包的地址; -p表示画图; --save_table //*/test/table.csv表示将统计指标保存在csv文件中;
3.4 格式互相转换
example1 EuRoC→TUM,输出为data.tum
evo_traj euroc data.csv --save_as_tum
example1 EuRoC→kitti,输出为data.kitti
evo_traj tum traj_1.txt traj_2.txt traj_3.txt --save_as_kitti
TUM数据集格式
timestamp tx ty tz qx qy qz qw
(每行有8个元素,结尾没有空格,时间以秒为单位)
EuRoci数据集
timestamp,px,py,pz,qw,qx,qy,qz,vx,vy,vz,bwx,bwy,bwz,bax,bay,baz
(每行17个元素,逗号隔开,时间以纳秒为单位)
KTTI数据集
r11 r12 r13 tx r21 r22 r23 ty r31 r32 r33 tz
存储变换矩阵的前三行(每行12元素,空格隔开)没有时间
EuRoc的数据格式转化成TUM数据格式
evo_traj euroc data.csv --save_as_tum
TUM数据转换成kitti格式
evo_traj tum traj_1.txt traj_2.txt traj_3.txt --save_as_kitti
TUM数据转换成bag格式
evo_traj tum traj_1.txt traj_2.txt traj_3.txt --save_as_bag
4. 评价指标和评价工具对比
evo | KITTI_odometry_evaluation_tool | |
ATE [m] | ✔ | ✖ |
RPE [%] | ✔ | ✔ |
RRE [deg/m] | ✖ | ✔ |
1. ATE:Absolute Trajectory Error 绝对轨迹误差(使用evo)
绝对轨迹误差(ATE)是估计位姿和真实位姿的直接差值,可以非常直观地反映算法的精度和轨迹的全局一致性(ATE只包含平移的误差)。在evo中,有关于ATE的指令。注意,evo_ape
默认情况下计算的是ATE(相当于默认加了参数-r trans_part
),如果想计算APE,可以加上参数-r full
。
evo_ape kitti ground_truth.txt tra1.txt -r full -va --plot --plot_mode xyz --save_plot ./tra1plot --save_results ./tra1.zip
参数说明
kitti
:表明处理的是kitti数据集的相关结果,这里也可以替换为tum和euroc。ground_truth.txt
:代表真实轨迹的数据。tra1.txt
:代表估计轨迹的数据。-r full
:表示同时考虑旋转和平移误差得到的ATE,无单位(unit-less)。- 另外:
-r trans_part
:表示仅考虑平移部分得到的ATE,单位为米(m)。-r rot_part
:表示仅考虑旋转部分得到的ATE,无单位(unit-less)。-r angle_deg
:表示考虑旋转角得到的ATE,单位为度(deg)。-r angle_rad
:表示考虑旋转角得到的ATE,单位为弧度(rad)。
- 另外:
-va
:包含两部分:-v
或--verbose
:指明输出文件数据的相关信息。-a
或--align
:指明对轨迹进行配准。
--plot
:表示生成图像。--plot_mode xyz
:表示图像投影在xoy平面上,其余可选参数为:xz, yx, yz, zx, zy, xyz。--save_plot ./tra1plot
:表示保存生成的图片,./tra1plot
这里写自己保存的地址。--save_results ./tra1.zip
:表示保存计算结果,./tra1.zip
这里写自己保存的地址。
2. RPE:Relative Pose Error 相对位姿误差(使用evo)
相对位姿误差(RPE)是为了估计机器人每一步的精度。RPE包含两部分误差:旋转误差和平移误差。通常,使用平移误差进行评价已足够,但如果需要,旋转角的误差也可以进行统计。RPE的整体大小通常使用均方根误差(RMSE,Root Mean Squared Error)进行衡量,即平方后求均值再开根号。
evo_rpe kitti ground_truth.txt tra1.txt -r full -va --plot --plot_mode xyz --save_plot ./tra1plot --save_results ./tra1.zip
参数说明
kitti
:表明处理的是kitti数据集的相关结果,这里也可以替换为tum和euroc。ground_truth.txt
:代表真实轨迹的数据。tra1.txt
:代表估计轨迹的数据。-r full
:表示同时考虑旋转和平移误差得到的RPE,无单位(unit-less)。- 另外:
-r trans_part
:表示仅考虑平移部分得到的RPE,单位为米(m)。-r rot_part
:表示仅考虑旋转部分得到的RPE,无单位(unit-less)。-r angle_deg
:表示考虑旋转角得到的RPE,单位为度(deg)。-r angle_rad
:表示考虑旋转角得到的RPE,单位为弧度(rad)。
- 另外:
-va
:包含两部分:-v
或--verbose
:指明输出文件数据的相关信息。-a
或--align
:指明对轨迹进行配准。
--plot
:表示生成图像。--plot_mode xyz
:表示图像投影在xoy平面上,其余可选参数为:xz, yx, yz, zx, zy, xyz。--save_plot ./tra1plot
:表示保存生成的图片,./tra1plot
这里写自己保存的地址。--save_results ./tra1.zip
:表示保存计算结果,./tra1.zip
这里写自己保存的地址。
3. RPE和RRE(使用 KITTI_odometry_evaluation_tool)
使用KITTI_odometry_evaluation_tool可以计算相对位姿误差(RPE)和相对旋转误差(RRE)。举例如下:
python evaluation.py --result_dir=./data/ --eva_seqs=09_pred,10_pred
参数说明
--result_dir=./data/
:指定结果目录。--eva_seqs=09_pred,10_pred
:指定要评估的序列。
5. ORB-SLAM2 (Stereo)和DynSLAM (Stereo)中的应用
RPE[%]以及RRE[deg/100m]:定义参考论文VSO: Visual Semantic Odometry
显示轨迹
evo_traj tum GroundTruth.txt OurAlgorithm.txt A_LOAM_Traj.txt -p
evo_traj tum GroundTruth.txt OurAlgorithm.txt A_LOAM_Traj.txt --plot --plot_mode xz