pose_ekf
KFD_PosVel.hpp
Go to the documentation of this file.
1 #ifndef __KFD_POS_VEL_HPP__
2 #define __KFD_POS_VEL_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 namespace pose_ekf {
13  {
14  public:
15  static const int SIZE = 6;
16  typedef Eigen::Matrix<double,SIZE,1> vector_t;
17 
18  protected:
19  vector_t _x;
20  Eigen::Block<vector_t, 3, 1> _pos_w;
21  Eigen::Block<vector_t, 3, 1> _vel_i;
22 
23 
24  public:
25  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
27  _x(vector_t::Zero()), _pos_w( _x.segment<3>(0) ), _vel_i( _x.segment<3>(3) ) {};
28 
29  vector_t& vector() {return _x;};
30  Eigen::Block<vector_t, 3, 1>& pos_world() {return _pos_w;}
31  Eigen::Block<vector_t, 3, 1>& vel_body() {return _vel_i;}
32 
33 
34  };
35 
36  class KFD_PosVel
37  {
38  public:
40  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
41 
42  static const unsigned int _POS_MEASUREMENT_SIZE = 3;
43  static const unsigned int _VEL_MEASUREMENT_SIZE = 3;
44  static const unsigned int _POS_DEGREE_OF_FREEDOM = 3;
45  static const unsigned int _VEL_DEGREE_OF_FREEDOM = 3;
46 
47 
50 
51  public:
52 
55 
57  Eigen::Matrix<double, StatePosVel::SIZE, StatePosVel::SIZE> Q;
58 
59  public:
60  KFD_PosVel();
61  ~KFD_PosVel();
62 
64  void copyState ( const KFD_PosVel& kfd );
65 
67  bool positionObservation( Eigen::Vector3d position, Eigen::Matrix3d covariance, float reject_position_threshol);
68 
70  bool velocityObservation(Eigen::Vector3d velocity, Eigen::Matrix3d covariance, float reject_velocity_threshol);
71 
73  bool positionZObservation(double z, double error, double rejection_threshold) ;
74 
76  void setPosition( Eigen::Vector3d position, Eigen::Matrix3d covariance );
77 
79  void setVelocity( Eigen::Vector3d velocity, Eigen::Matrix3d covariance );
80 
82  void predict(Eigen::Quaterniond R_body_2_world, double dt, Eigen::Matrix<double, StatePosVel::SIZE, StatePosVel::SIZE> process_noise);
83 
85  Eigen::Vector3d getPosition();
86 
88  Eigen::Vector3d getVelocity();
89 
91  Eigen::Matrix3d getPositionCovariance();
92 
94  Eigen::Matrix3d getVelocityCovariance();
95 
97  void init(const Eigen::Matrix<double, StatePosVel::SIZE, StatePosVel::SIZE> &P, const Eigen::Matrix<double,StatePosVel::SIZE,1> &x);
98  };
99 }
100 
101 #endif
Definition: KFD_PosVel.hpp:12
Eigen::Block< vector_t, 3, 1 > _vel_i
Definition: KFD_PosVel.hpp:21
static const int SIZE
Definition: KFD_PosVel.hpp:15
Definition: KFD_PosVel.hpp:36
Definition: EKFPosYawBiasT.hpp:11
Eigen::Matrix< double, StatePosVel::SIZE, StatePosVel::SIZE > Q
Definition: KFD_PosVel.hpp:57
StatePosVel x
Definition: KFD_PosVel.hpp:49
vector_t & vector()
Definition: KFD_PosVel.hpp:29
KalmanFilter::KF< StatePosVel::SIZE > * filter
Definition: KFD_PosVel.hpp:54
Eigen::Block< vector_t, 3, 1 > & pos_world()
Definition: KFD_PosVel.hpp:30
Eigen::Block< vector_t, 3, 1 > & vel_body()
Definition: KFD_PosVel.hpp:31
EIGEN_MAKE_ALIGNED_OPERATOR_NEW StatePosVel()
Definition: KFD_PosVel.hpp:26
Eigen::Matrix< double, SIZE, 1 > vector_t
Definition: KFD_PosVel.hpp:16
Eigen::Block< vector_t, 3, 1 > _pos_w
Definition: KFD_PosVel.hpp:20
vector_t _x
Definition: KFD_PosVel.hpp:19