/** * This file is part of ORB-SLAM2. * * Copyright (C) 2014-2016 Raúl Mur-Artal (University of Zaragoza) * For more information see * * ORB-SLAM2 is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * ORB-SLAM2 is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with ORB-SLAM2. If not, see . */ #ifndef MAPPOINT_H #define MAPPOINT_H #include "KeyFrame.h" #include "Frame.h" #include "Map.h" #include #include namespace ORB_SLAM2 { class KeyFrame; class Map; class Frame; class MapPoint { public: MapPoint(const cv::Mat &Pos, KeyFrame *pRefKF, Map *pMap); MapPoint(const cv::Mat &Pos, Map *pMap, Frame *pFrame, const int &idxF); void SetWorldPos(const cv::Mat &Pos); cv::Mat GetWorldPos(); cv::Mat GetNormal(); KeyFrame *GetReferenceKeyFrame(); std::map GetObservations(); int Observations(); void AddObservation(KeyFrame *pKF, size_t idx); void EraseObservation(KeyFrame *pKF); int GetIndexInKeyFrame(KeyFrame *pKF); bool IsInKeyFrame(KeyFrame *pKF); void SetBadFlag(); bool isBad(); void Replace(MapPoint *pMP); MapPoint *GetReplaced(); void IncreaseVisible(int n = 1); void IncreaseFound(int n = 1); float GetFoundRatio(); inline int GetFound() { return mnFound; } void ComputeDistinctiveDescriptors(); cv::Mat GetDescriptor(); void UpdateNormalAndDepth(); float GetMinDistanceInvariance(); float GetMaxDistanceInvariance(); int PredictScale(const float ¤tDist, KeyFrame *pKF); int PredictScale(const float ¤tDist, Frame *pF); public: long unsigned int mnId; static long unsigned int nNextId; long int mnFirstKFid; long int mnFirstFrame; int nObs; bool mbincar; // Variables used by the tracking float mTrackProjX; float mTrackProjY; float mTrackProjXR; bool mbTrackInView; int mnTrackScaleLevel; float mTrackViewCos; long unsigned int mnTrackReferenceForFrame; long unsigned int mnLastFrameSeen; // Variables used by local mapping long unsigned int mnBALocalForKF; long unsigned int mnFuseCandidateForKF; // Variables used by loop closing long unsigned int mnLoopPointForKF; long unsigned int mnCorrectedByKF; long unsigned int mnCorrectedReference; cv::Mat mPosGBA; long unsigned int mnBAGlobalForKF; static std::mutex mGlobalMutex; protected: // Position in absolute coordinates cv::Mat mWorldPos; // Keyframes observing the point and associated index in keyframe std::map mObservations; // Mean viewing direction cv::Mat mNormalVector; // Best descriptor to fast matching cv::Mat mDescriptor; // Reference KeyFrame KeyFrame *mpRefKF; // Tracking counters int mnVisible; int mnFound; // Bad flag (we do not currently erase MapPoint from memory) bool mbBad; MapPoint *mpReplaced; // Scale invariance distances float mfMinDistance; float mfMaxDistance; Map *mpMap; std::mutex mMutexPos; std::mutex mMutexFeatures; }; } // namespace ORB_SLAM #endif // MAPPOINT_H