一起研究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 都是闭环的候选帧,则通过图可以在,节点1 与2、3相连 所以 1与3、3 为一组,以此类推。最后10为单独的一组。
算出最低分之后,以最低分作为阈值,进行闭环检测,若是小于该组的最低得分,则被认为不是闭环的候选位置。如下所示,是闭环候选帧的检测流程。
检测闭环的过程可以概述为如下过程:
最后处理完事了,还有许多的帧,然后进行连续性检测,若是连续的三是相邻的,则被认为是回环的点。然后继续优化的过程,主要使用Sim3算法进行优化。
下一篇SIM(3)算法哦!!! 接受数学的洗礼吧!!
0 0
- 一起研究ORB-SLAM(三)--LocalMapping和LooplClosing线程
- 一起研究ORB-SLAM(二)---Tracking线程
- 一起研究ORB-SLAM(一)---结构和入口
- 一起研究ORB-SLAM(四)--程序结构
- ORB-SLAM(三)地图初始化
- ORB-SLAM(三)地图初始化
- ORB-SLAM(三)地图初始化
- SLAM:使用G2O-ORB-SLAM(编译)
- SLAM:使用G2O-ORB-SLAM(编译)
- SLAM代码(ORB-SLAM阅读)
- SLAM代码(ORB-SLAM阅读2)
- ORB-SLAM(五)优化
- ORB-SLAM(一)简介
- ORB-SLAM(二)性能
- ORB-SLAM(四)追踪
- ORB-SLAM(五)优化
- ORB-SLAM(一)简介
- ORB-SLAM(二)性能
- Swift基础语法(常量变量、数据类型、元组、可选、断言)
- BZOJ4131
- HDU-1575-Tr A【矩阵快速幂】
- 【record】11.7..11.13
- 霍夫变换圆,直线检测[微记]
- 一起研究ORB-SLAM(三)--LocalMapping和LooplClosing线程
- Flatbuffers使用
- GSON对java对象的相互转换
- linux中的线程
- 批量将PowerDesigner中表字段由小写变成大写
- go语言学习基础简介
- [Java]读取文件方法大全
- Eclipse中导入外部jar包
- 正则表达式简单应用1