一起研究ORB-SLAM(三)--LocalMapping和LooplClosing线程

来源:互联网 发布:以利天诚大数据比赛 编辑:程序博客网 时间:2024/05/18 02:21

转载自:一起研究ORB-SLAM(三)--LocalMapping和LoopClosing线程

上两篇文章主要介绍了ORB-SLAM中最重要的三个线程中的一个,今天这篇文章介绍最后一个线程,这个介绍完事了之后,就开始介绍里头的算法了!!!  依然是上一篇的问题,能告诉我ORB-SLAM中主要的三个线程是什么吗? 

Tracking LocalMapping 和 LocalClosing 。 
一起研究ORB-SLAM(一)--结构和入口 

一起研究ORB-SLAM(二)---Tracking线程 


 
小莱姆:师兄,能透露下这篇文章的具体细节吗? 
师兄:可以啊,上面一段不是说过了嘛,还来问我!! 


从现在开始进入正题了,首先介绍LocalMapping ,主要是以流程为主,并没有涉及到太多算法方面的内容,也就是说没有什么公式了,从这篇之后会逐渐给大家带进数学的世界~ 


LocalMaping线程 


该线程中的KeyFrame是通过Tracking线程送进来的

第一个函数的作用是检查这个队列是否为空队列,若是为空阻塞,不为空继续走 
第二个函数: ProcessNewKeyFrame() 主要作用是更新关键点与关键帧的关联,确定哪些关键点与关键帧是有关系的。 
第三个部分,用来剔除不好的观测点。 三个原则: 
a.       关键点质量不好的点 
b.       应该观测到,但是没有观测到的比值,若是小于25%则被认为是不好的点。 
c.       观测到该点的关键帧的数量太少。 
第四部分,运动过程中,共同观测到匹配点,通过三角化恢复一些MapPoints,单目通过三角化的方法生成,而双目通过反投影的方法。 
  
第五部分,MapPoints融合,如下图所示:
该过程中,首先判断生成的关键点与原有的点的位置是否重合,若是重合或接近进行优化,在ORB-SLAM中多数点被做移除,通过原始的估计出移动的位姿状态,并把不好的剔除掉,通过这个过程会把匹配点做的越来越少,则单目通过三角化,双目通过反投影的方式进行新的MapPoint的创建。
以上五步是一个循环的步骤,然后进行局部优化处理,然后对关键帧进行剔除,保留下90% MapPoints点能被的关键帧(至少三个)观测到被保留。
LoopClosing线程(闭环检测)
该线程的数据主要是通过LocalMapping送进来的

  
  
首先去取出一帧进行处理,检查当前帧是否距离上一次的闭环检测超过10帧,若是超过,继续下一次的闭环检测。主要过程是根据当前帧相连的,使用BOW算法计算当前的最低得分。主要是为了算出一个阈值,进行自适应处理,如下图所示的一个连接分组的形式。

1 2 3 4 10 都是闭环的候选帧,则通过图可以在,节点23相连  所以 13为一组,以此类推。最后10为单独的一组。 
算出最低分之后,以最低分作为阈值,进行闭环检测,若是小于该组的最低得分,则被认为不是闭环的候选位置。如下所示,是闭环候选帧的检测流程。 
检测闭环的过程可以概述为如下过程:

最后处理完事了,还有许多的帧,然后进行连续性检测,若是连续的三是相邻的,则被认为是回环的点。然后继续优化的过程,主要使用Sim3算法进行优化。 


下一篇SIM(3)算法哦!!!  接受数学的洗礼吧!!
0 0
原创粉丝点击