#ifndef state_INC #define state_INC #include #include #include #include #include "body.h" #include "camera.h" #include "feature.h" #include "types.h" #include "vision.h" #define MAXFEATURES 40 #define MINFEATURES 30 #define COVBIAS 2e-5 //#define FASTMOTIONMODEL // Uncomment this to perform motion model update on all features at once #define DORANSAC /* */ //#define INLIERTEST /* */ using Eigen::Dynamic; using Eigen::Matrix; using Eigen::MatrixXd; using Eigen::Quaterniond; using Eigen::Vector2d; using Eigen::Vector3d; using std::cout; using std::cerr; using std::endl; using std::vector; /* * ===================================================================================== * Class: State * Description: * ===================================================================================== */ class State { public: EIGEN_MAKE_ALIGNED_OPERATOR_NEW /* ==================== LIFECYCLE ======================================= */ State (); /* constructor */ /* ==================== ACCESSORS ======================================= */ Matrix asVector(); bool exists(int id); int rowById(int id); int iById(int id); Feature *featureById(int id); #if STATESIZE==13 MatrixXd F(const Vector3d &w, double dt); MatrixXd H ( const vector &z ); MatrixXd blockSI( const vector &z ); Quaterniond qhat(); void featuresAsMeasurements(vector &yk, const Camera &cam); #else MatrixXd F(const Quaterniond &q, const Vector3d &w, double dt); MatrixXd H ( const Quaterniond &q, const vector &z ); MatrixXd blockSI( const vector &z, const Quaterniond &q); void featuresAsMeasurements(vector &yk, const Camera &cam, const Quaterniond &q); #endif int Hrows( const vector &z ); MatrixXd Q(double dt); MatrixXd R( const vector &z ); Matrix Pxx(); Matrix Pxy(int id); Matrix Pyy(int id); Matrix L(); /* ==================== MUTATORS ======================================= */ void accelerometer_bias(const Vector3d &b); void asVector(const Matrix &m); void pos(const UTM &utm); #if STATESIZE==13 void doMeasurements( vector &z, Vision &viz, Camera &cam); void handle_measurements( const vector & z); void kalmanUpdate( const MatrixXd &h, const MatrixXd &S, const vector &z); void motionModel(const Vector3d &acc, const Vector3d &ang, const double dt); MatrixXd partialUpdate( const MatrixXd &h, const MatrixXd &S, const vector &z); void Pkk1 ( const Vector3d &ang, const double dt); void ransacUpdate(vector &z); void quaternion_covariance(const Matrix &covq); void qhat(const Quaterniond &q); #else void doMeasurements( vector &z, Vision &viz, const Quaterniond &q, Camera &cam); void handle_measurements( const vector & z, const Quaterniond &q); void kalmanUpdate( const MatrixXd &h, const MatrixXd &S, const vector &z, const Quaterniond &q); void motionModel(const Vector3d &acc, const Vector3d &ang, const Quaterniond &q, const double dt); MatrixXd partialUpdate( const MatrixXd &h, const MatrixXd &S, const vector &z, const Quaterniond &q ); void Pkk1 ( const Vector3d &ang, const Quaterniond &q, const double dt); void ransacUpdate(vector &z, const Quaterniond &q); #endif void initializePi(int i, const Matrix &Pi); void position_covariance(const Matrix &p); std::list::iterator removeFeature(std::list::iterator &i, bool bl); std::list::iterator removeFeature ( int id, bool bl ); void velocity_covariance(const Matrix &p); void vel(const Matrix &v); /* ==================== OPERATORS ======================================= */ #if STATESIZE==13 Matrix innovation( const vector &z); #else Matrix innovation( const vector &z, const Quaterniond &q); #endif void unicsv(const double time); protected: /* ==================== METHODS ======================================= */ /* ==================== DATA MEMBERS ======================================= */ private: /* ==================== METHODS ======================================= */ #if STATESIZE==13 void addFeatures(vector &F, double z); #else void addFeatures(vector &F, const Quaterniond &q, double z); #endif void expandP ( const Matrix3d &Pi); void shrinkP( int i ); /* ==================== DATA MEMBERS ======================================= */ Body *body; //Matrix P; Matrix P; char utm_c; int utm_i; std::list features; vector blacklist; }; /* ----- end of class State ----- */ #endif /* ----- #ifndef state_INC ----- */