开源SLAM方案评价与比较

谁说我不能喝 提交于 2020-01-28 04:03:56

一、简介

网上开源框架较多,本篇博客选择为人熟知的三个框架,orb-slam2,viorb(清华大学王京版本),vins-mono。在自己的笔记本上运行Euroc数据集,并采用evo和matlab来评价他们的性能。

  1. orb-slam2网址:https://github.com/raulmur/ORB_SLAM2
  2. viorb网址:https://github.com/jingpang/LearnVIORB
  3. vins-mono网址:https://github.com/HKUST-Aerial-Robotics/VINS-Mono
  4. Euroc数据集网址:https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets
  5. evo网址:https://github.com/MichaelGrupp/evo

注:

  1. 数据集选择 MH_01_easy ,MH_03_medium,MH_05_difficult
  2. 运行环境为ubuntu16.04 ros Kinetic
  3. 处理器为Intel®Core™ i5-4210U CPU @1.7GHz
  4. 内存容量为16G

二、EVO安装及测试

2.1 安装evo(可根据以上链接参考官网教程)
终端输入如下指令:

Sudo apt install python-pip
Pip install evo --upgrade --no-binary evo --user

2.2 测试
在数据集目录下打开终端,或
cd /media/chengjun/Passport/Eurocdaset/MH_01_easy/mav0/state_groundtruth_estimate0(这是我移动硬盘中MH_01_easy 数据集的路径)
终端输入如下指令:

evo_traj euroc data.csv –plot

其中data.csv为参考系统采集的数据
成功运行截图如下:
在这里插入图片描述

三、运行数据集

3.1 ORB-SLAM2
在ROS环境下分别将MH_01_easy , MH_03_medium, MH_05_difficult数据集送入orb-slam2方案中,分别在三个终端运行如下命令。

roscore
rosrun ORB_SLAM2 Stereo Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml true
rosbag play --pause /media/chengjun/Passport/Eurocdaset/XX.bag 	/cam0/image_raw:=/camera/left/image_raw /cam1/image_raw:=/camera/right/image_raw

运行截图如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
运行完之后会生成FrameTrajectory_KITTI_Format.txt , FrameTrajectory_TUM_Format.txt , KeyFrameTrajectory_TUM_Format.txt文件,本文选择 FrameTrajectory_TUM_Format.txt进行评价。

3.2 VIORB
分别将MH_01_easy ,MH_03_medium,MH_05_difficult数据集送入viorb方案中,分别在两个终端下运行如下命令。

roslaunch Examples/ROS/ORB_VIO/launch/testeuroc.launch
rosbag play /media/chengjun/Passport/Eurocdaset/MH_01_easy.bag

运行截图如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
viorb输出的轨迹和oeb-slam2不同,它并非标准的tum格式文件,这里我用matlab做了一下处理,按照tum格式提取出“timestamp tx ty tz qx qy qz qw”几列数据。
之后在用evo评价的过程当中,出现以下报错:(被这个问题困扰了一段时间)

[ERROR] TUM trajectory files must have 8 entries per row and no trailing delimiter at the end of the rows (space)

应该是每行数据结尾或开头存在空格,导致evo报错。(可参考本人上一篇博客)终端输入如下命令即可解决此问题:

cat results.txt | tr -s [:space:] > results_new.txt

VINS-MONO
分别将MH_01_easy ,MH_03_medium,MH_05_difficult数据集送入Vins-mono方案中,分别打开三个终端。

roslaunch vins_estimator euroc.launch 
roslaunch vins_estimator vins_rviz.launch
rosbag play /media/chengjun/Passport/Eurocdaset/MH_01_easy.bag

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
原始的vins_mono输出轨迹是无法用evo评价的,还是因为格式不对,我在源码中做了改动,将pose_graph.cpp中的if(SAVE_LOOP_PATH){…}改动如下。
原版本

if (SAVE_LOOP_PATH)
{
   ofstream loop_path_file(VINS_RESULT_PATH, ios::app);
   loop_path_file.setf(ios::fixed, ios::floatfield);
   loop_path_file.precision(0);
   loop_path_file << (*it)->time_stamp * 1e9 << " ";
   loop_path_file.precision(5);
   loop_path_file  << P.x() << ","
         << P.y() << ","
         << P.z() << ","
         << Q.w() << ","
         << Q.x() << ","
         << Q.y() << ","
         << Q.z() << ","
         << endl;
   loop_path_file.close();
}

改版:

if (SAVE_LOOP_PATH)
{
   ofstream loop_path_file(VINS_RESULT_PATH, ios::app);
   loop_path_file.setf(ios::fixed, ios::floatfield);
   loop_path_file.precision(6); //时间戳精度
   loop_path_file << (*it)->time_stamp << " ";
   loop_path_file.precision(9); //位姿精度
   loop_path_file  << P.x() << " "
         << P.y() << " "
         << P.z() << " "
         << Q.x() << " "
         << Q.y() << " "
         << Q.z() << " "
   	   << Q.w() << ""
         << endl;
   loop_path_file.close();
}

四、APE,RPE计算并绘图

用EVO评价ATE(绝对位姿误差),RPE(相对位姿误差),首先将 EuRoC 数据集中 .csv 文件形式的 groundtruth 转换为 TUM 形式的轨迹文件。(如果格式不统一将无法评价,会出现各种错误)转换命令如下:

evo_traj euroc data.csv --save_as_tum

TUM 形式的轨迹文件格式:
每行8个数,用空格分隔,包含时间戳(单位:秒)、位置和旋转(四元素表示)
timestamp x y z q_x q_y q_z q_w

4.1 MH_01_easy数据集
4.1.1 ORB-SLAM2
1) APE

输入如下指令

evo_ape tum data.tum FrameTrajectory_TUM_Format.txt -va --plot --plot_mode xz --save_results results/orbslam_MH01.zip

终端打印结果:

       max	1.113401
      mean	0.353434
    median	0.252514
       min	0.035743
      rmse	0.404936
       sse	234.973862
       std	0.197631

在这里插入图片描述
在这里插入图片描述2) RPE

运行指令如下:

evo_rpe tum data.tum FrameTrajectory_TUM_Format.txt -r angle_deg --delta 1 --delta_unit m -va --plot --plot_mode xz --save_plot ./orbslam_MH01plot --save_results ./orbslam_MH01.zip

终端打印结果:

       max	  60.199544
      mean	    13.238829
    median	    7.799912
       min	  0.757630
      rmse	  18.165707
       sse	  27059.419543
       std	  12.438904

画图如下:
在这里插入图片描述在这里插入图片描述
4.1.2 VIORB
1) APE
运行指令如下:

evo_ape tum data.tum result_new.txt -va --plot --plot_mode xz --save_results results/viorb_MH01.zip

终端打印结果:

       max	 0.189119
      mean   0.087045
    median   0.089040
       min	 0.017692
      rmse	 0.096279
       sse	 1.603644
       std	 0.041143

画图如下:
在这里插入图片描述在这里插入图片描述
2) RPE

运行指令如下:

evo_rpe tum data.tum result_new.txt -r angle_deg --delta 1 --delta_unit m -va --plot --plot_mode xz --save_plot ./viorb_MH01plot --save_results ./viorb_MH01.zip

终端打印结果如下:

       max	  0.386955
      mean	    0.107066
    median	    0.100100
       min	  0.008053
      rmse	    0.132134
       sse	  0.907890
       std    0.077436

画图如下:
在这里插入图片描述
在这里插入图片描述
4.1.3 Vins-mono

1) APE
运行指令:
evo_ape tum data.tum vins_result_loop.txt -va --plot --plot_mode xz --save_results results/vinsmono_MH01.zip

终端打印结果:

   max	   0.158527
  mean	   0.065242
median	   0.061928
   min	   0.002101
  rmse	   0.072769
   sse	   4.162072
   std	   0.032230

画图如下:
在这里插入图片描述
在这里插入图片描述
2) RPE
运行指令:

evo_rpe tum data.tum vins_result_loop.txt -r angle_deg --delta 1 --delta_unit m -va --plot --plot_mode xz --save_plot ./vinsmono_MH01plot --save_results ./vinsmono_MH01.zip

终端打印结果:

       max	   1.021268
      mean	   0.176637
    median	   0.123731
       min	   0.011836
      rmse	   0.246504
       sse	   4.375030
       std	   0.171941

画图如下:
在这里插入图片描述
在这里插入图片描述
4.2 MH_03_medium数据集(运行指令和上述一样,但是要修改对应数据集的名称)
4.2.1 ORB-SLAM2
1) APE

终端打印结果:

       max	  1.061202
      mean    0.111301
    median	   0.056120
       min	  0.009595
      rmse    0.176068
       sse	  29.883937
       std	  0.136426

画图如下:
在这里插入图片描述
在这里插入图片描述
2)RPE
终端打印结果:

       max	  111.690464
      mean	    15.040676
    median	    10.132911
       min	  1.439042
      rmse	    22.873176
       sse	  53887.766924
       std	  17.232535

画图如下:
在这里插入图片描述
在这里插入图片描述
4.2.2 VIORB
1) APE
终端打印结果:

       max	 0.104126
      mean	  0.039126
    median	  0.039083
       min	 0.003429
      rmse	 0.043359
       sse	 0.259436
       std	 0.018685

画图如下:
在这里插入图片描述
在这里插入图片描述
2) RPE
终端打印结果:

      max	   0.316922
     mean	   0.083542
   median	   0.074673
      min	   0.013891
     rmse	   0.098279
      sse     0.647133
      std	   0.051763

画图如下:
在这里插入图片描述
在这里插入图片描述
4.2.3 Vins-mono

1) APE
终端打印结果:

	   max	    0.173256
      mean	    0.065392
    median	    0.057324
       min	    0.003779
      rmse	    0.073921
       sse	    3.885096
       std	    0.034470

画图如下:
在这里插入图片描述
在这里插入图片描述
2) RPE
终端打印结果

       max	  1.107526
      mean	    0.129639
    median	    0.100093
       min	  0.010756
      rmse	  0.182452
       sse	  3.794913
       std	  0.128384

画图如下:
在这里插入图片描述
在这里插入图片描述
4.3 MH_05_difficult数据集(运行指令和上述一样,但是要修改对应数据集的名称)

4.3.1 ORB-SLAM2
1)APE
终端打印结果:

       max	 0.394046
      mean 0.226045
    median  0.232689
       min	 0.042808
      rmse	 0.236454
       sse	 56.413871
       std	 0.069387

绘图显示如下:
在这里插入图片描述
在这里插入图片描述
2) RPE
终端打印结果:

       max	  55.212829
      mean	    9.444248
    median	    4.749272
       min	  0.081534
      rmse	  14.280667
       sse	  18354.370652
       std	  10.711845

画图如下:
在这里插入图片描述
在这里插入图片描述
4.3.2 VIORB

1) APE
终端打印结果:

       max	 0.280075
      mean	  0.164725
    median	  0.160054
       min	 0.042744
      rmse	 0.174695
       sse	 4.486188
       std	 0.058171

画图如下:
在这里插入图片描述
在这里插入图片描述
2) RPE
终端打印结果:

       max	  0.116591
      mean	    0.052993
    median	    0.048396
       min	  0.008256
      rmse	  0.059098
       sse	  0.220034
       std	  0.026160

画图如下:
在这里插入图片描述
在这里插入图片描述
4.3.3 Vins-mono

1) APE
终端打印结果:

       max	  0.403776
      mean	    0.176394
    median	    0.147831
       min	  0.014606
      rmse	  0.197973
       sse	  24.142979
       std	  0.089880

画图如下:
在这里插入图片描述
在这里插入图片描述
2) RPE
终端打印结果:

       max	      1.448455
      mean	      0.111824
    median	      0.069696
       min	      0.015246
      rmse	      0.204431
       sse	      3.594113
       std	      0.171136

画图如下:
在这里插入图片描述
在这里插入图片描述

五、evo_res 进行结果比较

进行ATE和RPE评价之后会产生.zip文件。我们将这些.zip文件放到同一级目录下,通过evo_res对三者结果进行比较评价。
运行指令如下:
1) APE

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

结果如下:
1.1) MH_01_easy数据集
在这里插入图片描述 画图如下:
在这里插入图片描述
1.2) MH_03_medium数据集
在这里插入图片描述
画图如下:
在这里插入图片描述
1.3) MH_05_difficult数据集
在这里插入图片描述画图如下:
在这里插入图片描述
2) RPE

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

结果如下:
2.1) MH_01_easy数据集
在这里插入图片描述
在这里插入图片描述

2.2) MH_03_medium数据集
在这里插入图片描述画图如下:
在这里插入图片描述
2.3) MH_05_difficult数据集
在这里插入图片描述
画图如下:
在这里插入图片描述

友情提示:代码下载需要C币,请事先判断是否对您有帮助,谨慎下载哦!!!

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!