pose_ekf
KFD_PosVelAcc.hpp
Go to the documentation of this file.
1 #ifndef __KFD_POS_VEL_ACC_HPP__
2 #define __KFD_POS_VEL_ACC_HPP__
3 
4 #include <Eigen/Core>
5 #include <Eigen/Geometry>
6 #include <Eigen/SVD>
7 #include "KalmanFilter.hpp"
8 
9 #include "FaultDetection.hpp"
10 
11 
12 
13 namespace pose_ekf {
15  {
16  public:
17  static const int SIZE = 9;
18  typedef Eigen::Matrix<double,SIZE,1> vector_t;
19 
20  protected:
22  Eigen::Block<vector_t, 3, 1> _pos_w;
23  Eigen::Block<vector_t, 3, 1> _vel_i;
24  Eigen::Block<vector_t, 3, 1> _acc_i;
25 
26  public:
27  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
29  _x(vector_t::Zero()), _pos_w( _x.segment<3>(0) ), _vel_i( _x.segment<3>(3) ),_acc_i(_x.segment<3>(6)) {};
30 
31  vector_t& vector() {return _x;};
32  Eigen::Block<vector_t, 3, 1>& pos_world() {return _pos_w;}
33  Eigen::Block<vector_t, 3, 1>& vel_world() {return _vel_i;}
34  Eigen::Block<vector_t, 3, 1>& acc_inertial() {return _acc_i;}
35 
36  };
37 
39  {
40  public:
42  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
43 
44  static const unsigned int _POS_MEASUREMENT_SIZE = 3;
45  static const unsigned int _VEL_MEASUREMENT_SIZE = 3;
46  static const unsigned int _POS_DEGREE_OF_FREEDOM = 3;
47  static const unsigned int _VEL_DEGREE_OF_FREEDOM = 3;
48 
49 
52 
53  public:
55  Eigen::Vector3d velocity_world;
56  Eigen::Vector3d position_world;
57 
58 
61 
63  Eigen::Matrix<double, StatePosVelAcc::SIZE, StatePosVelAcc::SIZE> Q;
64 
65  Eigen::Quaterniond R_input_to_world;
66 
67  public:
68  KFD_PosVelAcc();
70 
72  void copyState ( const KFD_PosVelAcc& kfd );
73 
75  bool positionObservation( Eigen::Vector3d position, Eigen::Matrix3d covariance, float reject_position_threshol);
76 
78  bool velocityObservation(Eigen::Vector3d velocity, Eigen::Matrix3d covariance, float reject_velocity_threshol);
79 
81  bool positionZObservation(double z, double error, double rejection_threshold) ;
82 
84  void setPosition( Eigen::Vector3d position, Eigen::Matrix3d covariance );
85 
88  void correct_state();
89 
91  void predict(Eigen::Vector3d acc, double dt, Eigen::Matrix<double, StatePosVelAcc::SIZE, StatePosVelAcc::SIZE> process_noise);
92 
93  void setRotation(Eigen::Quaterniond R);
94 
95  Eigen::Quaterniond getRotation(){ return R_input_to_world; }
96 
98  Eigen::Vector3d getPosition();
99 
101  Eigen::Vector3d getVelocity();
102 
103  Eigen::Vector3d getAccBias();
104 
106  Eigen::Matrix3d getPositionCovariance();
107 
109  Eigen::Matrix3d getVelocityCovariance();
110 
112  Eigen::Matrix3d getAccCovariance();
113 
115  void init(const Eigen::Matrix<double, StatePosVelAcc::SIZE, StatePosVelAcc::SIZE> &P, const Eigen::Matrix<double,StatePosVelAcc::SIZE,1> &x);
116 
117 
118 
119 
120  };
121 }
122 
123 #endif
Eigen::Quaterniond getRotation()
Definition: KFD_PosVelAcc.hpp:95
void predict(Eigen::Vector3d acc, double dt, Eigen::Matrix< double, StatePosVelAcc::SIZE, StatePosVelAcc::SIZE > process_noise)
Definition: KFD_PosVelAcc.cpp:25
Eigen::Matrix3d getVelocityCovariance()
Definition: KFD_PosVelAcc.cpp:199
Eigen::Block< vector_t, 3, 1 > _pos_w
Definition: KFD_PosVelAcc.hpp:22
void init(const Eigen::Matrix< double, StatePosVelAcc::SIZE, StatePosVelAcc::SIZE > &P, const Eigen::Matrix< double, StatePosVelAcc::SIZE, 1 > &x)
Definition: KFD_PosVelAcc.cpp:216
KFD_PosVelAcc()
Definition: KFD_PosVelAcc.cpp:10
Eigen::Matrix< double, SIZE, 1 > vector_t
Definition: KFD_PosVelAcc.hpp:18
Eigen::Block< vector_t, 3, 1 > _vel_i
Definition: KFD_PosVelAcc.hpp:23
void setPosition(Eigen::Vector3d position, Eigen::Matrix3d covariance)
Definition: KFD_PosVelAcc.cpp:142
static const unsigned int _VEL_DEGREE_OF_FREEDOM
Definition: KFD_PosVelAcc.hpp:47
Eigen::Block< vector_t, 3, 1 > & pos_world()
Definition: KFD_PosVelAcc.hpp:32
Eigen::Block< vector_t, 3, 1 > _acc_i
Definition: KFD_PosVelAcc.hpp:24
Definition: KFD_PosVelAcc.hpp:14
Eigen::Quaterniond R_input_to_world
Definition: KFD_PosVelAcc.hpp:65
Eigen::Vector3d position_world
Definition: KFD_PosVelAcc.hpp:56
vector_t _x
Definition: KFD_PosVelAcc.hpp:21
vector_t & vector()
Definition: KFD_PosVelAcc.hpp:31
void copyState(const KFD_PosVelAcc &kfd)
Definition: KFD_PosVelAcc.cpp:171
Eigen::Matrix3d getPositionCovariance()
Definition: KFD_PosVelAcc.cpp:194
~KFD_PosVelAcc()
Definition: KFD_PosVelAcc.cpp:19
Eigen::Vector3d getPosition()
Definition: KFD_PosVelAcc.cpp:184
Eigen::Matrix< double, StatePosVelAcc::SIZE, StatePosVelAcc::SIZE > Q
Definition: KFD_PosVelAcc.hpp:63
bool positionObservation(Eigen::Vector3d position, Eigen::Matrix3d covariance, float reject_position_threshol)
Definition: KFD_PosVelAcc.cpp:87
Eigen::Vector3d getVelocity()
Definition: KFD_PosVelAcc.cpp:189
void correct_state()
Definition: KFD_PosVelAcc.cpp:156
Eigen::Vector3d getAccBias()
Definition: KFD_PosVelAcc.cpp:209
static EIGEN_MAKE_ALIGNED_OPERATOR_NEW const unsigned int _POS_MEASUREMENT_SIZE
Definition: KFD_PosVelAcc.hpp:44
static const int SIZE
Definition: KFD_PosVelAcc.hpp:17
Eigen::Block< vector_t, 3, 1 > & vel_world()
Definition: KFD_PosVelAcc.hpp:33
Definition: KFD_PosVelAcc.hpp:38
Eigen::Block< vector_t, 3, 1 > & acc_inertial()
Definition: KFD_PosVelAcc.hpp:34
Definition: KalmanFilter.hpp:13
void setRotation(Eigen::Quaterniond R)
Definition: KFD_PosVelAcc.cpp:82
EIGEN_MAKE_ALIGNED_OPERATOR_NEW StatePosVelAcc()
Definition: KFD_PosVelAcc.hpp:28
KalmanFilter::KF< StatePosVelAcc::SIZE > * filter
Definition: KFD_PosVelAcc.hpp:60
bool velocityObservation(Eigen::Vector3d velocity, Eigen::Matrix3d covariance, float reject_velocity_threshol)
Definition: KFD_PosVelAcc.cpp:107
bool positionZObservation(double z, double error, double rejection_threshold)
Definition: KFD_PosVelAcc.cpp:125
static const unsigned int _VEL_MEASUREMENT_SIZE
Definition: KFD_PosVelAcc.hpp:45
StatePosVelAcc x
Definition: KFD_PosVelAcc.hpp:51
Eigen::Vector3d velocity_world
Definition: KFD_PosVelAcc.hpp:55
Eigen::Matrix3d getAccCovariance()
Definition: KFD_PosVelAcc.cpp:204
static const unsigned int _POS_DEGREE_OF_FREEDOM
Definition: KFD_PosVelAcc.hpp:46