LocalMapping线程具体为一个run线程函数,其主要流程为:
- 插入关键帧
- 剔除不合格MapPoints
- 生成新MapPoints并局部BA
- 删除冗余关键帧
- 当前帧加入闭环队列中
void LocalMapping::Run()
{
mbFinished = false;
while(1)
{
// Tracking will see that Local Mapping is busy
// 告诉Tracking,LocalMapping正处于繁忙状态,
// LocalMapping线程处理的关键帧都是Tracking线程发过的
// 在LocalMapping线程还没有处理完关键帧之前Tracking线程最好不要发送太快
SetAcceptKeyFrames(false);
// Check if there are keyframes in the queue
// 等待处理的关键帧列表不为空
if(CheckNewKeyFrames())
{
// BoW conversion and insertion in Map
// VI-A keyframe insertion
// 计算关键帧特征点的BoW映射,将关键帧插入地图
ProcessNewKeyFrame();
// Check recent MapPoints