quater_ukf
ukf.hpp
Go to the documentation of this file.
1 
4 #ifndef _FILTER_UKF_HPP_
5 #define _FILTER_UKF_HPP_
6 
7 #include <iostream>
8 #include <Eigen/Geometry>
10 namespace filter
11 {
12 
13  using namespace Eigen;
14 
15  class ukf
16  {
17  public:
18  static const int UKFSTATEVECTORSIZE = 6;
19  static const int QUATERSIZE = 4;
20  static const int SIGPOINTSIZE = (2*ukf::UKFSTATEVECTORSIZE) + 1;
23  static const int NUMAXIS = 3;
27  EAST = 1,
28  WEST = 2
29  };
30 
31 
35  private:
36  double f, a, lambda;
37  Eigen::Matrix <double,ukf::UKFSTATEVECTORSIZE,1> x;
38  Eigen::Matrix <double,ukf::NUMAXIS,1> gtilde;
39  Eigen::Matrix <double,ukf::UKFSTATEVECTORSIZE, ukf::UKFSTATEVECTORSIZE> Px;
40  Eigen::Quaternion <double> at_q;
41  Eigen::Matrix <double,ukf::UKFSTATEVECTORSIZE, ukf::UKFSTATEVECTORSIZE> Q;
42  Eigen::Matrix <double,ukf::NUMAXIS, ukf::NUMAXIS> R;
43  Eigen::Matrix <double,ukf::UKFSTATEVECTORSIZE, ukf::SIGPOINTSIZE> sig_point;
44  Eigen::Matrix <Eigen::Quaternion <double>, ukf::SIGPOINTSIZE, 1> e_q;
45  Eigen::Matrix <Eigen::Quaternion <double>, ukf::SIGPOINTSIZE, 1> sig_q;
46  Eigen::Matrix <double,ukf::NUMAXIS, ukf::SIGPOINTSIZE> gamma;
47  Eigen::Matrix <double,ukf::NUMAXIS, 1> z_e;
48  Eigen::Matrix <double,ukf::NUMAXIS, 1> z_r;
49  Eigen::Matrix <double,ukf::NUMAXIS, 1> Nu;
50  Eigen::Matrix <double,ukf::NUMAXIS, ukf::NUMAXIS> Pzz;
51  Eigen::Matrix <double,ukf::NUMAXIS, ukf::NUMAXIS> Pnu;
52  Eigen::Matrix <double,ukf::UKFSTATEVECTORSIZE, ukf::NUMAXIS> Pxz;
53  Eigen::Matrix <double,ukf::UKFSTATEVECTORSIZE, ukf::NUMAXIS> K;
55  public:
56 
57 
66  Eigen::Matrix <double,ukf::UKFSTATEVECTORSIZE,1> getState();
67 
68 
77  Eigen::Quaternion <double> getAttitude();
78 
87  Eigen::Matrix <double, ukf::NUMAXIS, 1> getEuler();
88 
97  Eigen::Matrix <double,ukf::UKFSTATEVECTORSIZE,ukf::UKFSTATEVECTORSIZE> getCovariance();
98 
111  bool setAttitude (Eigen::Quaternion <double> *initq);
112 
113 
135  void Init (Matrix <double,ukf::UKFSTATEVECTORSIZE,1> *x_0, Eigen::Matrix <double, ukf::UKFSTATEVECTORSIZE, ukf::UKFSTATEVECTORSIZE> *P_0, Eigen::Matrix <double, ukf::UKFSTATEVECTORSIZE, ukf::UKFSTATEVECTORSIZE> *Q, Eigen::Matrix <double, ukf::NUMAXIS, ukf::NUMAXIS> *R,
136  Eigen::Quaternion <double> *at_q, double a, double f, double lambda, double g);
137 
149  double GravityModel (double latitude, double altitude);
150 
167  void SubstractEarthRotation(Eigen::Matrix <double, ukf::NUMAXIS, 1> *u, Eigen::Quaternion <double> *qb_g, double latitude);
168 
184  void Omega(Eigen::Quaternion< double >* quat, Eigen::Matrix< double, ukf::NUMAXIS , 1 >* angvelo, double dt);
185 
186 
201  void predict(Eigen::Matrix <double,ukf::NUMAXIS,1> *u, double dt);
202 
203 
204 
218  void update(Eigen::Matrix <double,ukf::NUMAXIS,1> *acc, Eigen::Matrix <double,ukf::NUMAXIS,1> *mag);
219 
232  void attitudeUpdate();
233 
234 
235 
236  };
237 
238 } // end namespace dummy_project
239 
240 #endif // _FILTER_UKF_HPP_
static const int UKFSTATEVECTORSIZE
Definition: ukf.hpp:18
Definition: ukf.cpp:51
DECLINATION_CONSTS
Definition: ukf.hpp:26
static const int SIGPOINTSIZE
Definition: ukf.hpp:20
Definition: ukf.hpp:15