From e43d9f01fcc9ac7c7c070b493378661f02f854f6 Mon Sep 17 00:00:00 2001 From: Martin Miller Date: Tue, 4 Apr 2017 13:07:15 -0500 Subject: Update statesize and remove quaternion input. Rather than use FULLSTATE define, we define STATESIZE, which removes a lot of the preprocessor ifdefs. This should be done in Body and Feature also. Quaterniond was removed as an input to methods when STATESIZE==13 and it is instead accessed from the body state. --- src/state.h | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) (limited to 'src/state.h') diff --git a/src/state.h b/src/state.h index a7f7df5..f330b67 100644 --- a/src/state.h +++ b/src/state.h @@ -15,7 +15,7 @@ //#define FASTMOTIONMODEL // Uncomment this to perform motion model update on all features at once #define DORANSAC /* */ //#define INLIERTEST /* */ - +#define STATESIZE 13 /* Set to 13 for quaternion estimation, or 9 for quaternion as input */ using Eigen::Dynamic; using Eigen::Matrix; using Eigen::MatrixXd; @@ -44,14 +44,20 @@ class State 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 std::vector &z ); + MatrixXd blockSI( const std::vector &z ); +#else MatrixXd F(const Quaterniond &q, const Vector3d &w, double dt); MatrixXd H ( const Quaterniond &q, const std::vector &z ); + MatrixXd blockSI( const std::vector &z, const Quaterniond &q); +#endif int Hrows( const std::vector &z ); MatrixXd Q(double dt); MatrixXd R( const std::vector &z ); - MatrixXd blockSI( const std::vector &z, const Quaterniond &q); - Matrix Pxx(); - Matrix Pxy(int id); + Matrix Pxx(); + Matrix Pxy(int id); Matrix Pyy(int id); Matrix L(); @@ -59,16 +65,27 @@ class State void accelerometer_bias(const Vector3d &b); void asVector(const Matrix &m); void pos(const UTM &utm); +#if STATESIZE==13 + void handle_measurements( const std::vector & z); + void kalmanUpdate( const MatrixXd &h, const MatrixXd &S, + const std::vector &z); + void motionModel(const Vector3d &acc, const Vector3d &ang, const double dt); + MatrixXd partialUpdate( const MatrixXd &h, const MatrixXd &S, + const std::vector &z); + void Pkk1 ( const Vector3d &ang, const double dt); + void ransacUpdate(std::vector &z); +#else void handle_measurements( const std::vector & z, const Quaterniond &q); - void initializePi(int i, const Matrix &Pi); void kalmanUpdate( const MatrixXd &h, const MatrixXd &S, const std::vector &z, const Quaterniond &q); - void ransacUpdate(std::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 std::vector &z, const Quaterniond &q ); void Pkk1 ( const Vector3d &ang, const Quaterniond &q, const double dt); + void ransacUpdate(std::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 ); @@ -76,7 +93,11 @@ class State void vel(const Matrix &v); /* ==================== OPERATORS ======================================= */ +#if STATESIZE==13 + Matrix innovation( const std::vector &z); +#else Matrix innovation( const std::vector &z, const Quaterniond &q); +#endif void unicsv(); protected: @@ -86,7 +107,11 @@ class State private: /* ==================== METHODS ======================================= */ +#if STATESIZE==13 + void addFeatures(std::vector &F, double z); +#else void addFeatures(std::vector &F, const Quaterniond &q, double z); +#endif void expandP ( const Matrix3d &Pi); void shrinkP( int i ); -- cgit v1.1