开源SLAM方案评价与比较

一、简介

网上开源框架较多,本篇博客选择为人熟知的三个框架,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币,请事先判断是否对您有帮助,谨慎下载哦!!!

  • 11
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
激光与视觉融合语义SLAM开源代码是一种利用激光雷达和视觉传感器提供的数据进行同时定位与地图构建的技术。该技术结合了激光雷达提供的高精度地图和视觉传感器提供的语义信息,能够在环境中同时进行定位和目标识别。这种技术的开源代码使得研究者和开发者可以更好地理解和应用该算法。 激光与视觉融合语义SLAM开源代码的主要优点是可以利用激光雷达和视觉传感器的互补性,提高地图构建的准确性和重建的视觉效果。激光雷达能够提供精确的地图结构和距离信息,而视觉传感器则能够提供更丰富的语义信息。激光与视觉融合语义SLAM开源代码能够将两者的数据进行融合,利用激光雷达的高精度地图信息进行优化,并通过视觉传感器的语义信息实现更准确和完整的地图重建。 开源代码使得研究者可以自由地访问和利用这些算法,从而加快研究进展和技术推广。通过开源代码,研究者可以根据自己的需求和实际情况进行定制和修改,以适应不同的应用场景和硬件设备。此外,开源代码还能够促进学术界和工业界之间的交流与合作,推动SLAM技术的发展和应用。 总之,激光与视觉融合语义SLAM开源代码是一项重要的技术,能够实现在同时定位与地图构建过程中的高精度地图和丰富语义信息的完美融合。通过开源代码的共享,促进了该技术的发展和推广,为研究者和开发者提供了更好的工具和资源,推动了SLAM技术在不同领域的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值