Biorbd
KalmanRecons.h
1 #ifndef BIORBD_RIGIDBODY_KALMAN_RECONS_H
2 #define BIORBD_RIGIDBODY_KALMAN_RECONS_H
3 
4 #include <memory>
5 #include <vector>
6 #include "biorbdConfig.h"
7 
8 
9 namespace biorbd {
10 class Model;
11 
12 namespace utils {
13 class Matrix;
14 class Vector;
15 }
16 
17 namespace rigidbody {
18 class GeneralizedCoordinates;
19 class GeneralizedVelocity;
20 class GeneralizedAcceleration;
21 
26 public:
34  double frequency = 100,
35  double noiseFactor = 1e-10,
36  double errorFactor = 1e-5);
37 
41  double acquisitionFrequency() const;
42 
46  double noiseFactor() const;
47 
51  double errorFactor() const;
52 
53 private:
54  double m_acquisitionFrequency;
55  double m_noiseFactor;
56  double m_errorFactor;
57 };
58 
62 class BIORBD_API KalmanRecons
63 {
64 public:
65 
66  // Constructor
67 
71  KalmanRecons();
72 
80  biorbd::Model& model,
81  unsigned int nbMeasure,
82  KalmanParam params = KalmanParam());
83 
87  virtual ~KalmanRecons();
88 
93  void DeepCopy(const biorbd::rigidbody::KalmanRecons& other);
94 
95 
102  void getState(
106 
113  void setInitState(
115  const biorbd::rigidbody::GeneralizedVelocity *Qdot = nullptr,
116  const biorbd::rigidbody::GeneralizedAcceleration *Qddot = nullptr);
117 
121  virtual void reconstructFrame() = 0;
122 
123 protected:
127  virtual void initialize();
128 
136  biorbd::utils::Matrix evolutionMatrix(
137  const unsigned int m,
138  unsigned int n,
139  double Te);
140 
147  biorbd::utils::Matrix processNoiseMatrix(
148  const unsigned int nbQ,
149  double Te);
150 
157  biorbd::utils::Matrix measurementNoiseMatrix(
158  const unsigned int nbT,
159  double val);
160 
167  biorbd::utils::Matrix initCovariance(
168  const unsigned int nbQ,
169  double val);
170 
177  const unsigned int nbQ);
178 
186  void iteration(
187  biorbd::utils::Vector measure,
188  const biorbd::utils::Vector &projectedMeasure,
189  const biorbd::utils::Matrix &Hessian,
190  const std::vector<unsigned int> &occlusion = std::vector<unsigned int>());
191 
198  virtual void manageOcclusionDuringIteration(
199  biorbd::utils::Matrix &InvTp,
200  biorbd::utils::Vector &measure,
201  const std::vector<unsigned int> &occlusion);
202 
203  // Variables attributes
204  std::shared_ptr<KalmanParam> m_params;
205  std::shared_ptr<double> m_Te;
206  std::shared_ptr<unsigned int> m_nbDof;
207  std::shared_ptr<unsigned int> m_nMeasure;
208 
209  // Kalman filter attributes
210  std::shared_ptr<biorbd::utils::Vector> m_xp;
211  std::shared_ptr<biorbd::utils::Matrix> m_A;
212  std::shared_ptr<biorbd::utils::Matrix> m_Q;
213  std::shared_ptr<biorbd::utils::Matrix> m_R;
214  std::shared_ptr<biorbd::utils::Matrix> m_Pp;
215 
216 };
217 
218 }}
219 
220 #endif // BIORBD_RIGIDBODY_KALMAN_RECONS_H
biorbd::utils::Vector
Wrapper of the Eigen VectorXd.
Definition: Vector.h:20
biorbd::rigidbody::KalmanRecons::m_nbDof
std::shared_ptr< unsigned int > m_nbDof
Number of states.
Definition: KalmanRecons.h:206
biorbd::rigidbody::KalmanParam::KalmanParam
KalmanParam(double frequency=100, double noiseFactor=1e-10, double errorFactor=1e-5)
Set the Kalman filter parameters.
Definition: KalmanRecons.cpp:220
biorbd::rigidbody::KalmanParam
Parameters of the reconstruction.
Definition: KalmanRecons.h:25
biorbd::rigidbody::KalmanParam::noiseFactor
double noiseFactor() const
Return the noise factor.
Definition: KalmanRecons.cpp:232
biorbd::rigidbody::GeneralizedCoordinates
Class GeneralizedCoordinates.
Definition: GeneralizedCoordinates.h:15
biorbd::rigidbody::KalmanRecons::reconstructFrame
virtual void reconstructFrame()=0
Proceed to one iteration of the Kalman filter.
biorbd::Model
The actual musculoskeletal model that holds everything in biorbd.
Definition: BiorbdModel.h:78
biorbd::rigidbody::KalmanRecons::m_xp
std::shared_ptr< biorbd::utils::Vector > m_xp
State vector.
Definition: KalmanRecons.h:210
biorbd::rigidbody::KalmanRecons::m_Te
std::shared_ptr< double > m_Te
Inherent parameter to the frequency.
Definition: KalmanRecons.h:205
biorbd::utils::Matrix
A wrapper for the Eigen::MatrixXd.
Definition: Matrix.h:21
biorbd::rigidbody::GeneralizedAcceleration
Class GeneralizedAcceleration.
Definition: GeneralizedAcceleration.h:15
biorbd::rigidbody::KalmanParam::errorFactor
double errorFactor() const
Return the error factor.
Definition: KalmanRecons.cpp:237
biorbd::rigidbody::KalmanRecons
Class Kinematic reconstruction algorithm using an Extended Kalman Filter.
Definition: KalmanRecons.h:63
biorbd::rigidbody::KalmanParam::acquisitionFrequency
double acquisitionFrequency() const
Return the acquisition frequency.
Definition: KalmanRecons.cpp:228
biorbd::rigidbody::KalmanRecons::m_params
std::shared_ptr< KalmanParam > m_params
The parameters of the Kalman filter.
Definition: KalmanRecons.h:204
biorbd::rigidbody::KalmanRecons::m_nMeasure
std::shared_ptr< unsigned int > m_nMeasure
Number of measurements.
Definition: KalmanRecons.h:207
biorbd::rigidbody::KalmanRecons::m_Pp
std::shared_ptr< biorbd::utils::Matrix > m_Pp
Covariance matrix.
Definition: KalmanRecons.h:214
biorbd::rigidbody::KalmanRecons::m_A
std::shared_ptr< biorbd::utils::Matrix > m_A
Evolution matrix.
Definition: KalmanRecons.h:211
biorbd::rigidbody::GeneralizedVelocity
Class GeneralizedVelocity.
Definition: GeneralizedVelocity.h:15
biorbd::rigidbody::KalmanRecons::m_R
std::shared_ptr< biorbd::utils::Matrix > m_R
Matrix of the noise on the measurements.
Definition: KalmanRecons.h:213
biorbd::rigidbody::KalmanRecons::m_Q
std::shared_ptr< biorbd::utils::Matrix > m_Q
Noise matrix.
Definition: KalmanRecons.h:212