MCPcopy Create free account
hub / github.com/UZ-SLAMLab/ORB_SLAM3 / SearchInNeighbors

Method SearchInNeighbors

src/LocalMapping.cc:714–823  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

712}
713
714void LocalMapping::SearchInNeighbors()
715{
716 // Retrieve neighbor keyframes
717 int nn = 10;
718 if(mbMonocular)
719 nn=30;
720 const vector<KeyFrame*> vpNeighKFs = mpCurrentKeyFrame->GetBestCovisibilityKeyFrames(nn);
721 vector<KeyFrame*> vpTargetKFs;
722 for(vector<KeyFrame*>::const_iterator vit=vpNeighKFs.begin(), vend=vpNeighKFs.end(); vit!=vend; vit++)
723 {
724 KeyFrame* pKFi = *vit;
725 if(pKFi->isBad() || pKFi->mnFuseTargetForKF == mpCurrentKeyFrame->mnId)
726 continue;
727 vpTargetKFs.push_back(pKFi);
728 pKFi->mnFuseTargetForKF = mpCurrentKeyFrame->mnId;
729 }
730
731 // Add some covisible of covisible
732 // Extend to some second neighbors if abort is not requested
733 for(int i=0, imax=vpTargetKFs.size(); i<imax; i++)
734 {
735 const vector<KeyFrame*> vpSecondNeighKFs = vpTargetKFs[i]->GetBestCovisibilityKeyFrames(20);
736 for(vector<KeyFrame*>::const_iterator vit2=vpSecondNeighKFs.begin(), vend2=vpSecondNeighKFs.end(); vit2!=vend2; vit2++)
737 {
738 KeyFrame* pKFi2 = *vit2;
739 if(pKFi2->isBad() || pKFi2->mnFuseTargetForKF==mpCurrentKeyFrame->mnId || pKFi2->mnId==mpCurrentKeyFrame->mnId)
740 continue;
741 vpTargetKFs.push_back(pKFi2);
742 pKFi2->mnFuseTargetForKF=mpCurrentKeyFrame->mnId;
743 }
744 if (mbAbortBA)
745 break;
746 }
747
748 // Extend to temporal neighbors
749 if(mbInertial)
750 {
751 KeyFrame* pKFi = mpCurrentKeyFrame->mPrevKF;
752 while(vpTargetKFs.size()<20 && pKFi)
753 {
754 if(pKFi->isBad() || pKFi->mnFuseTargetForKF==mpCurrentKeyFrame->mnId)
755 {
756 pKFi = pKFi->mPrevKF;
757 continue;
758 }
759 vpTargetKFs.push_back(pKFi);
760 pKFi->mnFuseTargetForKF=mpCurrentKeyFrame->mnId;
761 pKFi = pKFi->mPrevKF;
762 }
763 }
764
765 // Search matches by projection from current KF in target KFs
766 ORBmatcher matcher;
767 vector<MapPoint*> vpMapPointMatches = mpCurrentKeyFrame->GetMapPointMatches();
768 for(vector<KeyFrame*>::iterator vit=vpTargetKFs.begin(), vend=vpTargetKFs.end(); vit!=vend; vit++)
769 {
770 KeyFrame* pKFi = *vit;
771

Callers

nothing calls this directly

Calls 8

GetMapPointMatchesMethod · 0.80
FuseMethod · 0.80
UpdateNormalAndDepthMethod · 0.80
UpdateConnectionsMethod · 0.80
isBadMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected