本文主要是介绍ORB-SLAM3的Local Mapping线程详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Local Mapping线程是ORB-SLAM3的三大线程之一。
文章目录
- 一、Local Mapping线程的主要流程
- 二、Local Mapping线程主要作用
- 1、插入关键帧
- 2、剔除地图点
一、Local Mapping线程的主要流程
关键帧是通过根据经验去添加一些约束给帧,然后输出关键帧,如果能被观测到更多特征点的话,那么我们就能把其作为关键帧。
第一部分是插入关键帧;
第二部分是去除地图点,不是所有的地图点都是好的,对地图点进行一个筛选;
第三部分,为了结果更优,生成一些新点;
第四部分,局部BA做优化;
第五部分,IMU初始化,IMU好的初值,测量数据对结果来说会有很大的促进左右;
第六部分,去除关键帧,前面冗余的关键帧进行筛选;
第七部分,对IMU尺度进行优化,优化重力方向,使结果更好。
二、Local Mapping线程主要作用
加入关键帧和地图点到当前激活地图,删除冗余帧,并通过对当前帧的附近关键帧操作,利用视觉BA或视觉-惯性BA优化地图。此外,在惯性模式下,LocalMapping线程会利用最大后验估计(MAP)来初始化和优化IMU参数。
1、插入关键帧
将Tracking线程输出的关键帧插入共视图(CovisibilityGraph)
,其中节点是关键帧,边的权重为两个关键帧共视的地图点数量。
共视图中过多的边会占用计算资源,影响SLAM算法的实时性。一般通过设定阈值控制边的数量。
共视图是由结点和边构成的无向加权图,结点是关键帧,边表示的共视的地图点的数量,比如K1、K2之间的权重是W12,表示他们能够共同看到地图点的数量。K1、K2、K3互为共视共视关系,他们都能看到共视图特征点的个数。如果边不加约束的话,如果K1和K2能够共同看到地图点的个数就一个,那么就会有很多这种边,只要超过1就能构成边,那么无形当中会占用计算资源,影响SLAM算法的实时性。
这种情况我们会对W权值,做一个阈值的设定,保证边的数量是一个合理的数量,不然会影响后面一系列的方法,对ORB-SLAM3算法而言,处理的最小单位就是关键帧,保证关键帧在合适的数量,同时边也在合适的数量
2、剔除地图点
这篇关于ORB-SLAM3的Local Mapping线程详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!