123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332 |
- #ifndef TRACKING_H
- #define TRACKING_H
- #include<opencv2/core/core.hpp>
- #include<opencv2/features2d/features2d.hpp>
- #include <opencv2/video/tracking.hpp>
- #include"Viewer.h"
- #include"FrameDrawer.h"
- #include"Atlas.h"
- #include"LocalMapping.h"
- #include"LoopClosing.h"
- #include"Frame.h"
- #include "ORBVocabulary.h"
- #include"KeyFrameDatabase.h"
- #include"ORBextractor.h"
- #include "Initializer.h"
- #include "MapDrawer.h"
- #include "System.h"
- #include "ImuTypes.h"
- #include "GeometricCamera.h"
- #include <mutex>
- #include <unordered_set>
- namespace ORB_SLAM3
- {
- class Viewer;
- class FrameDrawer;
- class Atlas;
- class LocalMapping;
- class LoopClosing;
- class System;
- class Tracking
- {
- public:
- Tracking(System* pSys, ORBVocabulary* pVoc, FrameDrawer* pFrameDrawer, MapDrawer* pMapDrawer, Atlas* pAtlas,
- KeyFrameDatabase* pKFDB, const string &strSettingPath, const int sensor, const string &_nameSeq=std::string());
- ~Tracking();
-
- cv::Mat GrabImageStereo(const cv::Mat &imRectLeft,const cv::Mat &imRectRight, const double ×tamp, string filename);
- cv::Mat GrabImageRGBD(const cv::Mat &imRGB,const cv::Mat &imD, const double ×tamp, string filename);
- cv::Mat GrabImageMonocular(const cv::Mat &im, const double ×tamp, string filename);
-
- void GrabImuData(const IMU::Point &imuMeasurement);
- void SetLocalMapper(LocalMapping* pLocalMapper);
- void SetLoopClosing(LoopClosing* pLoopClosing);
- void SetViewer(Viewer* pViewer);
- void SetStepByStep(bool bSet);
-
-
- void ChangeCalibration(const string &strSettingPath);
-
- void InformOnlyTracking(const bool &flag);
- void UpdateFrameIMU(const float s, const IMU::Bias &b, KeyFrame* pCurrentKeyFrame);
- KeyFrame* GetLastKeyFrame()
- {
- return mpLastKeyFrame;
- }
- void CreateMapInAtlas();
- std::mutex mMutexTracks;
-
- void NewDataset();
- int GetNumberDataset();
- int GetMatchesInliers();
- public:
-
- enum eTrackingState{
- SYSTEM_NOT_READY=-1,
- NO_IMAGES_YET=0,
- NOT_INITIALIZED=1,
- OK=2,
- RECENTLY_LOST=3,
- LOST=4,
- OK_KLT=5
- };
- eTrackingState mState;
- eTrackingState mLastProcessedState;
-
- int mSensor;
-
- Frame mCurrentFrame;
- Frame mLastFrame;
- cv::Mat mImGray;
-
- std::vector<int> mvIniLastMatches;
- std::vector<int> mvIniMatches;
- std::vector<cv::Point2f> mvbPrevMatched;
- std::vector<cv::Point3f> mvIniP3D;
- Frame mInitialFrame;
-
-
- list<cv::Mat> mlRelativeFramePoses;
- list<KeyFrame*> mlpReferences;
- list<double> mlFrameTimes;
- list<bool> mlbLost;
-
- int mTrackedFr;
- bool mbStep;
-
- bool mbOnlyTracking;
- void Reset(bool bLocMap = false);
- void ResetActiveMap(bool bLocMap = false);
- float mMeanTrack;
- bool mbInitWith3KFs;
- double t0;
- double t0vis;
- double t0IMU;
- vector<MapPoint*> GetLocalMapMPS();
-
- bool mbNeedRectify;
-
-
- bool mbWriteStats;
- protected:
-
- void Track();
-
- void StereoInitialization();
-
- void MonocularInitialization();
- void CreateNewMapPoints();
- cv::Mat ComputeF12(KeyFrame *&pKF1, KeyFrame *&pKF2);
- void CreateInitialMapMonocular();
- void CheckReplacedInLastFrame();
- bool TrackReferenceKeyFrame();
- void UpdateLastFrame();
- bool TrackWithMotionModel();
- bool PredictStateIMU();
- bool Relocalization();
- void UpdateLocalMap();
- void UpdateLocalPoints();
- void UpdateLocalKeyFrames();
- bool TrackLocalMap();
- bool TrackLocalMap_old();
- void SearchLocalPoints();
- bool NeedNewKeyFrame();
- void CreateNewKeyFrame();
-
- void PreintegrateIMU();
-
- void ResetFrameIMU();
- void ComputeGyroBias(const vector<Frame*> &vpFs, float &bwx, float &bwy, float &bwz);
- void ComputeVelocitiesAccBias(const vector<Frame*> &vpFs, float &bax, float &bay, float &baz);
- bool mbMapUpdated;
-
- IMU::Preintegrated *mpImuPreintegratedFromLastKF;
-
- std::list<IMU::Point> mlQueueImuData;
-
- std::vector<IMU::Point> mvImuFromLastFrame;
- std::mutex mMutexImuQueue;
-
- IMU::Calib *mpImuCalib;
-
- IMU::Bias mLastBias;
-
-
-
-
- bool mbVO;
-
- LocalMapping* mpLocalMapper;
- LoopClosing* mpLoopClosing;
-
- ORBextractor* mpORBextractorLeft, *mpORBextractorRight;
- ORBextractor* mpIniORBextractor;
-
- ORBVocabulary* mpORBVocabulary;
- KeyFrameDatabase* mpKeyFrameDB;
-
- Initializer* mpInitializer;
- bool mbSetInit;
-
- KeyFrame* mpReferenceKF;
- std::vector<KeyFrame*> mvpLocalKeyFrames;
- std::vector<MapPoint*> mvpLocalMapPoints;
-
-
- System* mpSystem;
-
-
- Viewer* mpViewer;
- FrameDrawer* mpFrameDrawer;
- MapDrawer* mpMapDrawer;
- bool bStepByStep;
-
- Atlas* mpAtlas;
-
- cv::Mat mK;
- cv::Mat mDistCoef;
- float mbf;
-
- int mMinFrames;
- int mMaxFrames;
- int mnFirstImuFrameId;
- int mnFramesToResetIMU;
-
-
-
- float mThDepth;
-
- float mDepthMapFactor;
-
- int mnMatchesInliers;
-
- KeyFrame* mpLastKeyFrame;
- unsigned int mnLastKeyFrameId;
- unsigned int mnLastRelocFrameId;
- double mTimeStampLost;
- double time_recently_lost;
- unsigned int mnFirstFrameId;
- unsigned int mnInitialFrameId;
- unsigned int mnLastInitFrameId;
- bool mbCreatedMap;
-
- cv::Mat mVelocity;
-
- bool mbRGB;
- list<MapPoint*> mlpTemporalPoints;
-
- int mnNumDataset;
- ofstream f_track_stats;
- ofstream f_track_times;
- double mTime_PreIntIMU;
- double mTime_PosePred;
- double mTime_LocalMapTrack;
- double mTime_NewKF_Dec;
- GeometricCamera* mpCamera, *mpCamera2;
- int initID, lastID;
- cv::Mat mTlr;
- public:
- cv::Mat mImRight;
- };
- }
- #endif
|