目录
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<KeyFrame*>::const_iterator itKF=mvpLocalKeyFrames.begin(), itEndKF=mvpLocalKeyFrames.end(); itKF!=itEndKF; itKF++) { KeyFrame* pKF = *itKF; const vector<MapPoint*> vpMPs = pKF->GetMapPointMatches(); // step 2:将局部关键帧的地图点添加到mvpLocalMapPoints for(vector<MapPoint*>::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的变量防止局部地图点重复添加(多个帧可以观测到同一地图点)。