⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tracker.h

📁 this is software for visual SLAM
💻 H
字号:
//-*- C++ -*-// Copyright 2008 Isis Innovation Limited// // This header declares the Tracker class.// The Tracker is one of main components of the system,// and is responsible for determining the pose of a camera// from a video feed. It uses the Map to track, and communicates // with the MapMaker (which runs in a different thread)// to help construct this map.//// Initially there is no map, so the Tracker also has a mode to // do simple patch tracking across a stereo pair. This is handled // by the TrackForInitialMap() method and associated sub-methods. // Once there is a map, TrackMap() is used.//// Externally, the tracker should be used by calling TrackFrame()// with every new input video frame. This then calls either // TrackForInitialMap() or TrackMap() as appropriate.//#ifndef __TRACKER_H#define __TRACKER_H#include "MapMaker.h"#include "ATANCamera.h"#include "MiniPatch.h"#include "Relocaliser.h"#include <sstream>#include <vector>#include <list>class TrackerData;struct Trail    // This struct is used for initial correspondences of the first stereo pair.{  MiniPatch mPatch;  CVD::ImageRef irCurrentPos;  CVD::ImageRef irInitialPos;};class Tracker{public:  Tracker(CVD::ImageRef irVideoSize, const ATANCamera &c, Map &m, MapMaker &mm);    // TrackFrame is the main working part of the tracker: call this every frame.  void TrackFrame(CVD::Image<CVD::byte> &imFrame, bool bDraw);   inline SE3 GetCurrentPose() { return mse3CamFromWorld;}    // Gets messages to be printed on-screen for the user.  std::string GetMessageForUser();  protected:  KeyFrame mCurrentKF;            // The current working frame as a keyframe struct    // The major components to which the tracker needs access:  Map &mMap;                      // The map, consisting of points and keyframes  MapMaker &mMapMaker;            // The class which maintains the map  ATANCamera mCamera;             // Projection model  Relocaliser mRelocaliser;       // Relocalisation module  CVD::ImageRef mirSize;          // Image size of whole image    void Reset();                   // Restart from scratch. Also tells the mapmaker to reset itself.  void RenderGrid();              // Draws the reference grid  // The following members are used for initial map tracking (to get the first stereo pair and correspondences):  void TrackForInitialMap();      // This is called by TrackFrame if there is not a map yet.  enum {TRAIL_TRACKING_NOT_STARTED, 	TRAIL_TRACKING_STARTED, 	TRAIL_TRACKING_COMPLETE} mnInitialStage;  // How far are we towards making the initial map?  void TrailTracking_Start();     // First frame of initial trail tracking. Called by TrackForInitialMap.  int  TrailTracking_Advance();   // Steady-state of initial trail tracking. Called by TrackForInitialMap.  std::list<Trail> mlTrails;      // Used by trail tracking  KeyFrame mFirstKF;              // First of the stereo pair  KeyFrame mPreviousFrameKF;      // Used by trail tracking to check married matches    // Methods for tracking the map once it has been made:  void TrackMap();                // Called by TrackFrame if there is a map.  void AssessTrackingQuality();   // Heuristics to choose between good, poor, bad.  void ApplyMotionModel();        // Decaying velocity motion model applied prior to TrackMap  void UpdateMotionModel();       // Motion model is updated after TrackMap  int SearchForPoints(std::vector<TrackerData*> &vTD, 		      int nRange, 		      int nFineIts);  // Finds points in the image  Vector<6> CalcPoseUpdate(std::vector<TrackerData*> vTD, 			   double dOverrideSigma = 0.0, 			   bool bMarkOutliers = false); // Updates pose from found points.  SE3 mse3CamFromWorld;           // Camera pose: this is what the tracker updates every frame.  SE3 mse3StartPos;               // What the camera pose was at the start of the frame.  Vector<6> mv6CameraVelocity;    // Motion model  double mdVelocityMagnitude;     // Used to decide on coarse tracking   double mdMSDScaledVelocityMagnitude; // Velocity magnitude scaled by relative scene depth.  bool mbDidCoarse;               // Did tracking use the coarse tracking stage?    bool mbDraw;                    // Should the tracker draw anything to OpenGL?    // Interface with map maker:  int mnFrame;                    // Frames processed since last reset  int mnLastKeyFrameDropped;      // Counter of last keyframe inserted.  void AddNewKeyFrame();          // Gives the current frame to the mapmaker to use as a keyframe    // Tracking quality control:  int manMeasAttempted[LEVELS];  int manMeasFound[LEVELS];  enum {BAD, DODGY, GOOD} mTrackingQuality;  int mnLostFrames;    // Relocalisation functions:  bool AttemptRecovery();         // Called by TrackFrame if tracking is lost.  bool mbJustRecoveredSoUseCoarse;// Always use coarse tracking after recovery!      // User interaction for initial tracking:  bool mbUserPressedSpacebar;  std::ostringstream mMessageForUser;    // GUI interface:  void GUICommandHandler(std::string sCommand, std::string sParams);  static void GUICommandCallBack(void* ptr, std::string sCommand, std::string sParams);  struct Command {std::string sCommand; std::string sParams; };  std::vector<Command> mvQueuedCommands;};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -