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:
21  vector_t _x;
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();
69  ~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
Eigen::Block< vector_t, 3, 1 > _pos_w
Definition: KFD_PosVelAcc.hpp:22
Definition: EKFPosYawBiasT.hpp:11
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
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
Boost_DIR Bsymbolic functions z
Definition: CMakeCache.txt:72
vector_t _x
Definition: KFD_PosVelAcc.hpp:21
vector_t & vector()
Definition: KFD_PosVelAcc.hpp:31
Eigen::Matrix< double, StatePosVelAcc::SIZE, StatePosVelAcc::SIZE > Q
Definition: KFD_PosVelAcc.hpp:63
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
EIGEN_MAKE_ALIGNED_OPERATOR_NEW StatePosVelAcc()
Definition: KFD_PosVelAcc.hpp:28
KalmanFilter::KF< StatePosVelAcc::SIZE > * filter
Definition: KFD_PosVelAcc.hpp:60
StatePosVelAcc x
Definition: KFD_PosVelAcc.hpp:51
Eigen::Vector3d velocity_world
Definition: KFD_PosVelAcc.hpp:55