| 712 | } |
| 713 | |
| 714 | void 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 |
nothing calls this directly
no test coverage detected