クラスのMapPoint
入門
名前が示すように、MapPointのは、マップのポイントです。
現在のフレームのMapPointに対応する特徴点のクラスフレーム、可変mvpMapPointsのメンバー、すべての点で。
オプティマイザ:: PoseOptimization(&mCurrentFrame)関数を使用して追跡:: TrackLocalMap()において、現在のフレームの姿勢の最適化は、それぞれのMapPointの大域的最適化位置に基づいています。最適化の後、ちょうどまたポイントを特定し、現在のフレームの位置と向きを更新しないで良いですし、悪いポイントです。
これは、その後、観測値の数を増やすために、)追跡:: TrackLocalMap(中の各点の統計情報を更新します。
変数
mWorldPos
世界の三次元座標は、座標系
mDescriptor
観測ポイントディスクリプタのすべては、このフレームで最小記述子のすべてのフレームから中央値および他の記述子を指します。
mObservations&OBS
mObservations MapPointのは、ベクトル変数、フレームのこの時点で記録が観察されます。
MObservationsはlocalMap LocalKeyFrameを使用して決定した。限り、現在のフレーム内の特定の点が観察され得るように、キーフレームまたはキーフレーム(親の子供の隣)が密接フレームLocalKeyFrameに連結されている、すべての点がLocalKeyFrame LocalMapPointsあります。
mfMaxDistance
mfMaxDistanceのMapPointのは、スカラーで表すが、標準としてこの時点で最初に観察されたトラックのどのくらいの距離のこの時点で観察することができるORBmarcher決定における層の数、それは距離の範囲を超えた場合、記述子は影響を及ぼさないように。
mNormalVector
mNormalVector品種1 * 3は、マットであるこのフレームポイントで観察された各視野角の平均値です。
mTrackProj + ***
追跡に使用される以下の変数:
// Variables used by the tracking
float mTrackProjX;
float mTrackProjY;
float mTrackProjXR;
bool mbTrackInView;
int mnTrackScaleLevel;
float mTrackViewCos;
判定することにより、
- 特定の制限それ以前の観察に沿って距離かどうか
- 現在のフレーム内の地図中点は、画像内の通常の位置がある場合
- 現在のカメラに比べて、マップの中点は、深さが0未満である場合のポーズ
mbTrackInViewを決定するために、他の変数、1または0です。
- mTrackProjX:現在のピクチャに概してx座標
- mnTrackScaleLevel:拡大は、オーブの試合のために使用すべきです
- mTrackViewCos:観測の角度の値のcos
mnVisible&mnFound
mnVisibleは、intでフレームの数、すなわち、その時間mbTrackInView 1はORB一致することができない点を見つけるために、「理論的に可能」であるといい;
そしてmnFoundが実際に発見されました。
コード
#ifndef MAPPOINT_H
#define MAPPOINT_H
#include"KeyFrame.h"
#include"Frame.h"
#include"Map.h"
#include<opencv2/core/core.hpp>
#include<mutex>
#include "BoostArchiver.h"
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<KeyFrame*,size_t> 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:
// for serialization
MapPoint();
private:
// serialize is recommended to be private
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive &ar, const unsigned int version);
public:
long unsigned int mnId;
static long unsigned int nNextId;
long int mnFirstKFid;
long int mnFirstFrame;
int nObs;
// 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<KeyFrame*,size_t> 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