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

转载自:一起研究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  都是闭环的候选帧,则通过图可以在,节点 2 3 相连    所以  1 3 为一组,以此类推。最后 10 为单独的一组。  
算出最低分之后,以最低分作为阈值,进行闭环检测,若是小于该组的最低得分,则被认为不是闭环的候选位置。如下所示,是闭环候选帧的检测流程。  
检测闭环的过程可以概述为如下过程:

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


下一篇SIM(3)算法哦!!!  接受数学的洗礼吧!!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值