开源SLAM方案评价与比较:ORB-SLAM2,VIORB,VINS-MONO

  • 一、简介
  • 二、EVO安装及测试
  • 三、运行数据集
  • 四、APE,RPE计算并绘图
  • 五、evo_res 进行结果比较

一、简介

网上开源框架较多,本篇博客选择为人熟知的三个框架,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.113401mean    0.353434median  0.252514min 0.035743rmse    0.404936sse 234.973862std   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.199544mean     13.238829median     7.799912min   0.757630rmse    18.165707sse    27059.419543std     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.189119mean   0.087045median   0.089040min     0.017692rmse    0.096279sse     1.603644std     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.386955mean      0.107066median      0.100100min   0.008053rmse      0.132134sse   0.907890std    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.158527mean    0.065242
median     0.061928min     0.002101rmse    0.072769sse     4.162072std     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.021268mean    0.176637median      0.123731min     0.011836rmse    0.246504sse     4.375030std     0.171941

画图如下:


4.2 MH_03_medium数据集(运行指令和上述一样,但是要修改对应数据集的名称)
4.2.1 ORB-SLAM2
1) APE

终端打印结果:

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

画图如下:


2)RPE
终端打印结果:

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

画图如下:


4.2.2 VIORB
1) APE
终端打印结果:

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

画图如下:


2) RPE
终端打印结果:

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

画图如下:


4.2.3 Vins-mono

1) APE
终端打印结果:

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

画图如下:


2) RPE
终端打印结果

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

画图如下:


4.3 MH_05_difficult数据集(运行指令和上述一样,但是要修改对应数据集的名称)

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

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

绘图显示如下:


2) RPE
终端打印结果:

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

画图如下:


4.3.2 VIORB

1) APE
终端打印结果:

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

画图如下:


2) RPE
终端打印结果:

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

画图如下:


4.3.3 Vins-mono

1) APE
终端打印结果:

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

画图如下:


2) RPE
终端打印结果:

       max         1.448455mean        0.111824median          0.069696min         0.015246rmse        0.204431sse         3.594113std         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币,请事先判断是否对您有帮助,谨慎下载哦!!!

开源SLAM方案评价与比较相关推荐

  1. 视觉SLAM方案整理及摄像头选型调研(他首推ZED)

    他首推ZED,让我想起李ji也是用的ZED 摘自:https://mp.weixin.qq.com/s/BHFxSbGab_TVr_PxG17VaA 视觉SLAM方案整理及硬件选型调研 新机器视觉 7 ...

  2. 视觉SLAM方案分类及选型调研

    经典视觉SLAM框架 SLAM至今已历经三十多年的研究,这里给出经典视觉SLAM框架,这个框架本身及其包含的算法已经基本定型,并且已经在许多视觉程序库和机器人程序库中提供. 我们把整个视觉 SLAM ...

  3. 超全总结!视觉SLAM方案整理及硬件选型(附项目地址)

    编辑丨智东西公开课 本文已获CSDN博主「Mega_Li」授权发布,如需转载请与原作者联系.原文链接:https://blog.csdn.net/lwx309025167/article/detail ...

  4. java开源图像处理ku_83 项开源视觉 SLAM 方案够你用了吗?

    原标题:83 项开源视觉 SLAM 方案够你用了吗? 公众号:3D视觉工坊 主要关注:3D视觉算法.SLAM.vSLAM.计算机视觉.深度学习.自动驾驶.图像处理以及技术干货分享 运营者和嘉宾介绍:运 ...

  5. 使用开源激光SLAM方案LIO-SAM运行KITTI数据集,如有用,请评论雷锋

    第一次写博客~ LIOSAM作为优秀的激光slam方案,当然想尝试着运行更多数据啦,然而没有发现类似的方法分享到底如何实现,在B站看到有伙伴发布了测试视频,但是仍然没有写出方法.所以我跑通了之后记录一 ...

  6. 常见不同3D激光SLAM方案对比

    不同SLAM方案对比 一.测试的SLAM方案 本次我共测试了github上开源的8种方案,按照特点可分为 特点 方案 纯Lidar A-LOAM(港科大版本的LOAM),hdl_graph_slam, ...

  7. 【NLP】讯飞英文学术论文分类挑战赛Top10开源多方案--2 数据分析

    目录 相关信息 1 赛题 2 数据分析 2.1 加载数据 2.2 查看缺失值 2.3 标签分布 2.4 文本长度 2.5 标题摘要合并后字符长度 3 总结 相关信息 [NLP]讯飞英文学术论文分类挑战 ...

  8. Mule,目前综合状态最良好的开源ESB方案

    原文地址: http://blog.csdn.net/calvinxiu/archive/2007/06/19/1657989.aspx ,版权所有,转载请保留原文链接,谢谢.-- 江南白衣 Mule ...

  9. Mule,目前综合状态最良好的开源ESB方案引文

    Mule,目前综合状态最良好的开源ESB方案收藏 http://blog.csdn.net/zhangliulin/archive/2007/10/16/1826703.aspx 新一篇: 设计一个美 ...

最新文章

  1. Linux的文件管理
  2. 1、C++招聘笔试--C++中的C
  3. LIST-PROCESSING命令的使用
  4. springboot整合jdbc
  5. 【若依(ruoyi)】table定制列宽
  6. Python之30秒就能学会的漂亮短程序代码
  7. struts 模块化开发学习
  8. 编译log4cplus-2.0.x备忘录
  9. 树莓派3显示服务器SSH拒绝了密码,脚本封杀尝试树莓派SSH密码的来源IP
  10. 考研笔记-物理层协议
  11. 配电脑时什么配置可以缩水?
  12. 使用WinIO库实现保护模式下的IO和内存读写(_inp,_outp)
  13. flowable设计器节点属性扩展_gooflow设计器API说明书
  14. java 微信公众号消息推送 微信发送消息
  15. wintc的安装方法
  16. android高德地图清除marker,删除多个点标记-点标记-示例中心-JS API 示例 | 高德地图API...
  17. python中float和double有什么区别_关于C++:float和double的区别是什么?
  18. scala 相关基础知识
  19. Xshell光标消失
  20. 冒泡排序保姆级心得分享

热门文章

  1. C++重温笔记(一): C++再初识
  2. 让秒杀狂欢更从容:大促背后的数据库(下篇)
  3. echarts.js 官网
  4. 每日单词20110602
  5. 完整的系统帮助类Utils
  6. 有关Android导览(Android Navigation component)
  7. java 详细教程AXIS调用webservice(直接上代码)
  8. 语音转文字软件哪个好?快来看看这几个软件
  9. 计算机通讯技术的专业有哪些,通信类包括哪些专业
  10. 【机器学习】花卉识别01