ORB-SLAM笔记——(1)初识

Orb-slam是来自西班牙Zaragoza University的Raulmur博士最早于2015年开源的单目slam方案,并在随后开源的第二个版本中加入了双目以及RGBD相机的接口,使得整个框架更加系统化。对于每个学习slam技术的人来讲,ORB应该都不陌生,其中很多人更是把他作为开源框架学习的第一站。

现在比较成熟的slam方案基本分为特征点法和直接法两大阵营。直接法的话近几年比较具有代表性的莫过于TUM的JakobEngel在2014年开源的LSD-slam,他可以对三维环境进行半稠密的重建,这里说semi-dense是因为LSD并不是像传统意义讲的直接法那样关注图像中所有像素,而是只对像素梯度明显的位置进行估计。

另一边,基于学者和工程师们设计的各种特征以及描述这些特征的方法,如SIFT,SURF,HoG,DoG,Harr,ORB等等,我们对每帧图像进行稀疏特征的提取,并用这些信息去做SLAM的两大关键问题:定位以及建图。考虑到SLAM的一个非常关键而又重要的指标——速度,现在主流的特征点法slam基本都不会每帧提取特征点,用的更多的是先寻找一部分特征,然后用光流法去在下一帧跟踪这些特征。这是因为在2019年的今天,虽然即使相比于仅仅三四年前处理器的算力也已有着很大的提升,但这的确仍旧不够:SIFT特征仍旧不能实时计算,即使是速度提升了几个数量级,能够(勉强)满足实时性的ORB,我们会发现在运行过程中,计算用于帧间匹配的描述子占据前端大半时间。抛开计算描述子可用于后续查词典进行LoopDetection不谈,相比较于光流跟踪匹配帧间特征可真的是划不来。

但我们为什么还要学习ORB-SLAM这种纯特征法方案呢,直接学个更好用的不得了?不然不然,首先ORB的提出对特征点法来讲还是有里程碑式的意义的,他应该算是PTAM的一个全面升级版,在其跟踪-建图双线程架构的基础上变为跟踪,局部建图以及回环检测三线程,第二个开源版本在此基础上加入了全局优化的第四线程。虽然,咳咳,整个系统的大部分模块都是前人已有的工作,比较有亮点的个人工作应该只是在前端对FAST角点以及BRIEF描述子做了改进从而提出了ORB特征。但是,但是,但是!就比如说空客和波音,他们也都只是攒飞机的,难道他们就不牛逼了吗?虽然这样说有点极端,同时ORB在支持产品落地的路上也确实没有让人用着那么舒服,但其整体三线程的架构给了同行们很多启发,同时像我在开头所说到的,很多人从ORB开始学习开源架构这不是没道理的,当各位大体读过一遍ORB后真的会发现其代码风格真的非常受众,变量命名再到模块间的调度等等方面,不会让人有太多摸不着头脑的时候。尤其是当大家到后面阅读更多其它的开源架构,比如Jakob的另一大作DSO,或者是百度在去年开源的ICE-BA,其中运用了大量的继承,模板等相对进阶的知识,附加一大堆让人搞不懂的命名方法。诚然这些都是很优秀的作品,但用来做启蒙学习的确不是一个好的选择,尤其对很多C++还不是很熟就跳坑Slam的同学来说,难度更为尤甚。相比较之下,ORB无论对于处于实验室的研究生,还是对于业界中寻求鲁棒高效可落地方案的工程师们,ORB都是一个非常值得在研究初期就花一些功夫好好学习的框架之一。最后顺便说一下,Dr. Raulmur也凭借着ORB这样一个“攒起来的架子”,拿到了IEEE transaction on Robotics 2015 best paper award,确实得到了非常多的肯定。

在说了这么一堆有的没的之后,下一篇总结性博文我们来捋一捋ORB的pipeline。

(欢迎批评指正,若有幸被转发请标明出处)

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页