ORB-SLAM3的Local Mapping线程详解

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

一、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、剔除地图点

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

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

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

3、生成新的地图点

在这里插入图片描述

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客范儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值