ORB-SLAM2 --- Tracking::UpdateLocalPoints函数

目录

1.函数作用

2.函数流程 

3.code 

4.函数解析 


1.函数作用

        更新局部关键点。先把局部地图清空,然后将局部关键帧的有效地图点添加到局部地图中。

2.函数流程 

        这是更新局部地图中的一个小函数,我们在Tracking::UpdateLocalKeyFrames更新了局部关键帧mvpLocalKeyFrames,并且更新了当前关键帧mCurrentFrame的参考关键帧为与当前关键帧共视程度最高的一个关键帧,我们在本文所讲函数中更新局部局部点。

        更新局部关键帧的函数解析在这里:

ORB-SLAM2 --- Tracking::UpdateLocalKeyFrames函数解析https://mp.csdn.net/mp_blog/creation/editor/128307627

3.code 

void Tracking::UpdateLocalPoints()
{
    // Step 1:清空局部地图点
    mvpLocalMapPoints.clear();

    // Step 2:遍历局部关键帧 mvpLocalKeyFrames
    for(vector::const_iterator itKF=mvpLocalKeyFrames.begin(), itEndKF=mvpLocalKeyFrames.end(); itKF!=itEndKF; itKF++)
    {
        KeyFrame* pKF = *itKF;
        const vector vpMPs = pKF->GetMapPointMatches();

        // step 2:将局部关键帧的地图点添加到mvpLocalMapPoints
        for(vector::const_iterator itMP=vpMPs.begin(), itEndMP=vpMPs.end(); itMP!=itEndMP; itMP++)
        {
            MapPoint* pMP = *itMP;
            if(!pMP)
                continue;
            // 用该地图点的成员变量mnTrackReferenceForFrame 记录当前帧的id
            // 表示它已经是当前帧的局部地图点了,可以防止重复添加局部地图点
            if(pMP->mnTrackReferenceForFrame==mCurrentFrame.mnId)
                continue;
            if(!pMP->isBad())
            {
                mvpLocalMapPoints.push_back(pMP);
                pMP->mnTrackReferenceForFrame=mCurrentFrame.mnId;
            }
        }
    }
}

4.函数解析 

        先清空局部地图点mvpLocalMapPoints

        遍历局部关键帧mvpLocalKeyFrames,对于每个局部关键帧,得到它的所有地图点。

        将局部关键帧的地图点添加到局部地图点里面,同样地,这里维护了一个mnTrackReferenceForFrame的变量防止局部地图点重复添加(多个帧可以观测到同一地图点)。

你可能感兴趣的:(orb-slam2,算法,c++,slam)