pose_ekf
KFD_PosVelOriAcc.hpp
Go to the documentation of this file.
1 #ifndef __KFD_POS_VEL_ORI_ACC_HPP__
2 #define __KFD_POS_VEL_ORI_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 = 15;
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  Eigen::Block<vector_t, 3, 1> _or_w;
26  Eigen::Block<vector_t, 3, 1> _w_i;
27 
28  public:
29  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
31  _x(vector_t::Zero()), _pos_w( _x.segment<3>(0) ), _vel_i( _x.segment<3>(3) ),_acc_i(_x.segment<3>(6)), _or_w(_x.segment<3>(9)), _w_i(_x.segment<3>(12)) {};
32 
33  vector_t& vector() {return _x;};
34  Eigen::Block<vector_t, 3, 1>& pos_world() {return _pos_w;}
35  Eigen::Block<vector_t, 3, 1>& vel_inertial() {return _vel_i;}
36  Eigen::Block<vector_t, 3, 1>& acc_inertial() {return _acc_i;}
37  Eigen::Block<vector_t, 3, 1>& or_w() {return _or_w;}
38  Eigen::Block<vector_t, 3, 1>& angular_velocity_inertial() {return _w_i;}
39  };
40 
42  {
43  public:
45  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
46 
47  static const unsigned int _POS_MEASUREMENT_SIZE = 3;
48  static const unsigned int _VEL_MEASUREMENT_SIZE = 3;
49  static const unsigned int _POS_DEGREE_OF_FREEDOM = 3;
50  static const unsigned int _VEL_DEGREE_OF_FREEDOM = 3;
51  static const unsigned int _ORI_MEASUREMENT_SIZE = 3;
52  static const unsigned int _ORI_DEGREE_OF_FREEDOM = 3;
53 
56 
58  //Eigen::Matrix<double, StatePosVelOriAcc::SIZE, StatePosVelOriAcc::SIZE> P;
59 
60  public:
62  Eigen::Vector3d velocity_inertial;
63  Eigen::Vector3d position_world;
64  Eigen::Quaterniond R_inertial_2_world;
65 
66 
67 
70 
72  Eigen::Matrix<double, StatePosVelOriAcc::SIZE, StatePosVelOriAcc::SIZE> Q;
73 
74 
75  public:
78 
80  void copyState ( const KFD_PosVelOriAcc& kfd );
81 
83  bool positionObservation( Eigen::Vector3d position, Eigen::Matrix3d covariance, float reject_position_threshol);
84 
86  bool velocityObservation(Eigen::Vector3d velocity_body, Eigen::Matrix3d covariance, float reject_velocity_threshol);
87 
89  bool orientationObservation( Eigen::Quaterniond orientation, Eigen::Matrix3d covariance, float reject_orientation_threshol);
90 
92  void setPosition( Eigen::Vector3d position, Eigen::Matrix3d covariance );
93 
95  void setOrientation( Eigen::Quaterniond orientation, Eigen::Matrix3d covariance );
96 
99  void correct_state();
100 
102  void predict(Eigen::Vector3d acc_intertial, Eigen::Vector3d angular_velocity, double dt,Eigen::Matrix<double, StatePosVelOriAcc::SIZE, StatePosVelOriAcc::SIZE> process_noise);
103 
105  Eigen::Vector3d getPosition();
106 
108  Eigen::Vector3d getVelocity();
109 
111  Eigen::Quaterniond getOrientationInertial2World();
112 
114  Eigen::Matrix3d getPositionCovariance();
115 
117  Eigen::Matrix3d getVelocityCovariance();
118 
120  Eigen::Matrix3d getOrientationCovariance();
121 
123  Eigen::Quaterniond angularCorrection();
124 
126  void init(const Eigen::Matrix<double, StatePosVelOriAcc::SIZE, StatePosVelOriAcc::SIZE> &P, const Eigen::Matrix<double,StatePosVelOriAcc::SIZE,1> &x);
127 
128 
129 
130 
131  };
132 }
133 
134 #endif
Eigen::Block< vector_t, 3, 1 > & pos_world()
Definition: KFD_PosVelOriAcc.hpp:34
Eigen::Block< vector_t, 3, 1 > & vel_inertial()
Definition: KFD_PosVelOriAcc.hpp:35
vector_t _x
Definition: KFD_PosVelOriAcc.hpp:21
Eigen::Block< vector_t, 3, 1 > _acc_i
Definition: KFD_PosVelOriAcc.hpp:24
Eigen::Block< vector_t, 3, 1 > _vel_i
Definition: KFD_PosVelOriAcc.hpp:23
Definition: EKFPosYawBiasT.hpp:11
Eigen::Matrix< double, SIZE, 1 > vector_t
Definition: KFD_PosVelOriAcc.hpp:18
Eigen::Block< vector_t, 3, 1 > & or_w()
Definition: KFD_PosVelOriAcc.hpp:37
Definition: KFD_PosVelOriAcc.hpp:14
Eigen::Block< vector_t, 3, 1 > & acc_inertial()
Definition: KFD_PosVelOriAcc.hpp:36
static const int SIZE
Definition: KFD_PosVelOriAcc.hpp:17
Eigen::Vector3d velocity_inertial
Definition: KFD_PosVelOriAcc.hpp:62
Eigen::Block< vector_t, 3, 1 > _pos_w
Definition: KFD_PosVelOriAcc.hpp:22
Eigen::Vector3d position_world
Definition: KFD_PosVelOriAcc.hpp:63
Eigen::Block< vector_t, 3, 1 > _or_w
Definition: KFD_PosVelOriAcc.hpp:25
EIGEN_MAKE_ALIGNED_OPERATOR_NEW StatePosVelOriAcc()
Definition: KFD_PosVelOriAcc.hpp:30
Eigen::Matrix< double, StatePosVelOriAcc::SIZE, StatePosVelOriAcc::SIZE > Q
Definition: KFD_PosVelOriAcc.hpp:72
Eigen::Block< vector_t, 3, 1 > _w_i
Definition: KFD_PosVelOriAcc.hpp:26
Definition: KFD_PosVelOriAcc.hpp:41
Definition: KalmanFilter.hpp:13
StatePosVelOriAcc x
Definition: KFD_PosVelOriAcc.hpp:55
KalmanFilter::KF< StatePosVelOriAcc::SIZE > * filter
Definition: KFD_PosVelOriAcc.hpp:69
vector_t & vector()
Definition: KFD_PosVelOriAcc.hpp:33
Eigen::Block< vector_t, 3, 1 > & angular_velocity_inertial()
Definition: KFD_PosVelOriAcc.hpp:38
Eigen::Quaterniond R_inertial_2_world
Definition: KFD_PosVelOriAcc.hpp:64