当前位置:   article > 正文

SLAM精度评估—evo_slam实时性评估

slam实时性评估

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安装,直接安装最新的稳定发行版(在翻墙的情况下可以使用)

输入代码:

  1. # 遇到网络不好中断,就多试几次(但是一定要翻墙)
  2. 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.txtp

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/747808
推荐阅读
相关标签
  

闽ICP备14008679号