最近在看orb-slam,orb-slam方案在slam领域的地位就不用说了,我花了三天大概理清了一下代码的逻辑和思路。具体的细节还没有仔细去看,由于本人也是刚刚学完高博的视觉slam十四讲,所以有一些地方有错误的还望批评指正。另外我参考的资料除了论文以外,还有在泡泡机器人上面找到的吴博和冯兵两位老师的视频以及PPT,非常感谢泡泡机器人这个平台,学习到了很多知识!
首先还是看论文里面的这幅图,当时就没有太在意,后来才发现这幅图的逻辑非常的清晰,真的是非常的好,另外orb-slam的代码逻辑也非常的清晰,Local Mapping和Loop Closing线程里面都有一个run函数,可以很直观的找到每一步在做一些什么事情。
我看了吴博老师的ppt感觉也是非常的清晰,所以为了加强自己的记忆,我就把吴博的整个流程图自己又画了一遍,虽然画的不是特别好,但是加深了一下记忆,我觉得加强了自己的理解也是非常不错的。另外在冯兵老师的PPT里面,我找到了可以比较快理清关于frame,feature,map point之间关系的图。
然后接下来就是代码的流程图以及我个人参考各路博客资料整理的一些说明吧。后面的我主要是看的单目的,所以双目和立体的都没看,以下针对的都是单目情况。
这个就是一个相当于预处理的一个过程,在这里提到了一个单目初始化,是一个非常重要的东西,ORB-SLAM通过自动单目初始化。
在单目构造帧的时候,如果此时未进行初始化,那么提取的特征数将会是已经进行初始化之后特征数的2倍。在进行单目初始化的时候,有两种方案,分别是计算单应矩阵和基础矩阵的R,t,然后对两个矩阵进行分值评估,根据分值确定选择哪一种方案。具体的计算方案如下: