ORB-SLAM3的Local Mapping线程详解

Local Mapping线程是ORB-SLAM3的三大线程之一。

文章目录

    • 一、Local Mapping线程的主要流程
    • 二、Local Mapping线程主要作用
      • 1、插入关键帧
      • 2、剔除地图点
      • 3、生成新的地图点

一、Local Mapping线程的主要流程

关键帧是通过根据经验去添加一些约束给帧,然后输出关键帧,如果能被观测到更多特征点的话,那么我们就能把其作为关键帧。

第一部分是插入关键帧;
第二部分是去除地图点,不是所有的地图点都是好的,对地图点进行一个筛选;
第三部分,为了结果更优,生成一些新点;
第四部分,局部BA做优化;
第五部分,IMU初始化,IMU好的初值,测量数据对结果来说会有很大的促进左右;
第六部分,去除关键帧,前面冗余的关键帧进行筛选;
第七部分,对IMU尺度进行优化,优化重力方向,使结果更好。
ORB-SLAM3的Local Mapping线程详解_第1张图片

二、Local Mapping线程主要作用

加入关键帧和地图点到当前激活地图,删除冗余帧,并通过对当前帧的附近关键帧操作,利用视觉BA或视觉-惯性BA优化地图。此外,在惯性模式下,LocalMapping线程会利用最大后验估计(MAP)来初始化和优化IMU参数。

1、插入关键帧

将Tracking线程输出的关键帧插入共视图(CovisibilityGraph),其中节点是关键帧,边的权重为两个关键帧共视的地图点数量。

共视图中过多的边会占用计算资源,影响SLAM算法的实时性。一般通过设定阈值控制边的数量。

ORB-SLAM3的Local Mapping线程详解_第2张图片

共视图是由结点和边构成的无向加权图,结点是关键帧,边表示的共视的地图点的数量,比如K1、K2之间的权重是W12,表示他们能够共同看到地图点的数量。K1、K2、K3互为共视共视关系,他们都能看到共视图特征点的个数。如果边不加约束的话,如果K1和K2能够共同看到地图点的个数就一个,那么就会有很多这种边,只要超过1就能构成边,那么无形当中会占用计算资源,影响SLAM算法的实时性。
这种情况我们会对W权值,做一个阈值的设定,保证边的数量是一个合理的数量,不然会影响后面一系列的方法,对ORB-SLAM3算法而言,处理的最小单位就是关键帧,保证关键帧在合适的数量,同时边也在合适的数量

2、剔除地图点

并不是所有地图点都是有效的,在地图点背创建后的前3个关键帧的时间内,该点要经过严格检验以保证它能被跟踪。

一个地图点必须满足以下2个条件:

  • 跟踪到该地图点的帧数与预计可观测到该地图点云的帧数的`比值应该大于25%;
  • 从该地图点云创建起,到现在已经过了不小于2个关键帧,但观测到该地图点的关键帧不超过N个。若相机类型是单目,N取2,否则N取3。

3、生成新的地图点

ORB-SLAM3的Local Mapping线程详解_第3张图片

你可能感兴趣的:(ORB-SLAM,C/C++,ORB-SLAM3,Local,Mapping)