kalman-filter-base.hpp
Go to the documentation of this file.
1 
22 #ifndef KALMANFILTERBASEHPP
23 #define KALMANFILTERBASEHPP
24 
25 #include <state-observation/api.h>
28 
29 namespace stateObservation
30 {
31 
50 class STATE_OBSERVATION_DLLAPI KalmanFilterBase : public ZeroDelayObserver, protected StateVectorArithmetics
51 {
52 public:
54  typedef Matrix Amatrix;
55 
57  typedef Matrix Cmatrix;
58 
60  typedef Matrix Qmatrix;
61 
63  typedef Matrix Rmatrix;
64 
66  typedef Matrix Pmatrix;
67 
68  typedef Eigen::LLT<Pmatrix> LLTPMatrix;
69 
72 
75 
78 
83  KalmanFilterBase(Index n, Index m, Index p = 0);
84 
99  KalmanFilterBase(Index n, Index nt, Index m, Index mt, Index p);
100 
102  virtual void setA(const Amatrix & A);
103 
104  virtual Matrix getA() const;
105 
107  virtual void clearA();
108 
110  virtual void setC(const Cmatrix & C);
111 
112  virtual Matrix getC() const;
113 
115  virtual void clearC();
116 
118  virtual void setR(const Rmatrix & R);
119  inline void setMeasurementCovariance(const Rmatrix & R)
120  {
121  setR(R);
122  }
123 
125  virtual Matrix getR() const;
127  {
128  return getR();
129  }
130 
132  virtual void clearR();
133 
135  virtual void setQ(const Qmatrix & Q);
136  inline void setProcessCovariance(const Qmatrix & Q)
137  {
138  setQ(Q);
139  }
140 
142  virtual Matrix getQ() const;
144  {
145  return getQ();
146  }
147 
149  virtual void clearQ();
150 
152  virtual void setStateCovariance(const Pmatrix & P);
153 
156  virtual void clearStates();
157 
160  virtual void clearStateCovariance();
161 
163  virtual Pmatrix getStateCovariance() const;
164 
166  virtual void reset();
167 
169  Amatrix getAmatrixConstant(double c) const;
170 
172  Amatrix getAmatrixRandom() const;
173 
175  Amatrix getAmatrixZero() const;
176 
178  Amatrix getAmatrixIdentity() const;
179 
181  bool checkAmatrix(const Amatrix &) const;
182 
184  Cmatrix getCmatrixConstant(double c) const;
185 
187  Cmatrix getCmatrixRandom() const;
188 
190  Cmatrix getCmatrixZero() const;
191 
193  bool checkCmatrix(const Cmatrix &) const;
194 
196  Qmatrix getQmatrixConstant(double c) const;
197 
199  Qmatrix getQmatrixRandom() const;
200 
202  Qmatrix getQmatrixZero() const;
203 
205  Qmatrix getQmatrixIdentity() const;
206 
208  bool checkQmatrix(const Qmatrix &) const;
209 
211  Rmatrix getRmatrixConstant(double c) const;
212 
214  Rmatrix getRmatrixRandom() const;
215 
217  Rmatrix getRmatrixZero() const;
218 
220  Rmatrix getRmatrixIdentity() const;
221 
223  bool checkRmatrix(const Rmatrix &) const;
224 
226  Pmatrix getPmatrixConstant(double c) const;
227 
229  Pmatrix getPmatrixRandom() const;
230 
232  Pmatrix getPmatrixZero() const;
233 
235  Pmatrix getPmatrixIdentity() const;
236 
238  bool checkPmatrix(const Pmatrix &) const;
239 
241  virtual StateVectorTan stateTangentVectorConstant(double c) const;
242 
244  virtual StateVectorTan stateTangentVectorRandom() const;
245 
247  virtual StateVectorTan stateTangentVectorZero() const;
248 
250  virtual bool checkStateTangentVector(const StateVectorTan & v) const;
251 
253  virtual MeasureVectorTan measureTangentVectorConstant(double c) const;
254 
256  virtual MeasureVectorTan measureTangentVectorRandom() const;
257 
259  virtual MeasureVectorTan measureTangentVectorZero() const;
260 
262  virtual bool checkMeasureTangentVector(const MeasureVectorTan &) const;
263 
267  virtual void setStateSize(Index n);
268 
274  virtual void setStateSize(Index n, Index nt);
275 
279  virtual void setMeasureSize(Index m);
280 
286  virtual void setMeasureSize(Index m, Index mt);
287 
289  virtual MeasureVector getSimulatedMeasurement(TimeIndex k);
290 
292  virtual const StateVector & getInnovation();
293 
298  inline const StateVector & updateStatePrediction();
299 
304  inline MeasureVector updateStateAndMeasurementPrediction();
305 
307  const StateVector & getLastPrediction() const;
308 
310  const MeasureVector & getLastPredictedMeasurement() const;
311 
313  const MeasureVector & getLastMeasurement() const;
314 
316  const Matrix & getLastGain() const;
317 
320  void setStateArithmetics(StateVectorArithmetics * arith);
321 
322 protected:
325 
328 
330  typedef Matrix Kmatrix;
331 
333  virtual StateVector oneStepEstimation_();
334 
336  virtual StateVector prediction_(TimeIndex k) = 0;
337 
339  virtual MeasureVector simulateSensor_(const StateVector & x, TimeIndex k) = 0;
340 
342  virtual MeasureVector predictSensor_(TimeIndex k);
343 
346 
349 
352 
355 
358 
361 
364 
367 
369  {
370  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
380  } oc_;
381 
383 
384 public:
385  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
386 };
387 
389 {
390  prediction_(this->x_.getTime() + 1);
391  return xbar_();
392 }
393 
395 {
397  predictSensor_(this->x_.getTime() + 1);
398  return ybar_();
399 }
400 
401 } // namespace stateObservation
402 
403 #endif // KALMANFILTERBASEHPP
stateObservation::Vector
Eigen::VectorXd Vector
Dynamic sized scalar vector.
Definition: definitions.hpp:76
stateObservation::KalmanFilterBase::predictSensor_
virtual MeasureVector predictSensor_(TimeIndex k)
Predicts the sensor measurement,.
stateObservation::KalmanFilterBase::optimizationContainer::pbar
EIGEN_MAKE_ALIGNED_OPERATOR_NEW Matrix pbar
Definition: kalman-filter-base.hpp:371
stateObservation::KalmanFilterBase::setProcessCovariance
void setProcessCovariance(const Qmatrix &Q)
Definition: kalman-filter-base.hpp:136
stateObservation::KalmanFilterBase::innovation_
Vector innovation_
Vector containing the inovation of the Kalman filter.
Definition: kalman-filter-base.hpp:366
stateObservation::KalmanFilterBase::q_
Matrix q_
Container for the process noise covariance matrice.
Definition: kalman-filter-base.hpp:351
stateObservation::ObserverBase::StateVector
Vector StateVector
StateVector is the type of state vector.
Definition: observer-base.hpp:42
stateObservation::KalmanFilterBase::optimizationContainer
Definition: kalman-filter-base.hpp:368
stateObservation::KalmanFilterBase::pr_
Matrix pr_
Container for the covariance matrix of the estimation error.
Definition: kalman-filter-base.hpp:357
stateObservation::IndexedMatrixT::getTime
TimeIndex getTime() const
Get the time index.
stateObservation::StateVectorArithmetics
This class is used to customize the way the difference between measurements, the state update functio...
Definition: state-vector-arithmetics.hpp:27
stateObservation::KalmanFilterBase::optimizationContainer::mKc
Matrix mKc
Definition: kalman-filter-base.hpp:379
stateObservation::ZeroDelayObserver::x_
IndexedVector x_
while the measurements and iputs are put in lists
Definition: zero-delay-observer.hpp:194
stateObservation::KalmanFilterBase::Kmatrix
Matrix Kmatrix
The type of Kalman gain matrix.
Definition: kalman-filter-base.hpp:330
stateObservation::KalmanFilterBase::optimizationContainer::inoMeasCovLLT
LLTPMatrix inoMeasCovLLT
Definition: kalman-filter-base.hpp:376
stateObservation::KalmanFilterBase::a_
Matrix a_
Containers for the jacobian matrix of the process.
Definition: kalman-filter-base.hpp:345
stateObservation::KalmanFilterBase::Cmatrix
Matrix Cmatrix
The type of the jacobian dh/dx.
Definition: kalman-filter-base.hpp:57
state-vector-arithmetics.hpp
stateObservation::KalmanFilterBase::Amatrix
Matrix Amatrix
The type of the jacobian df/dx.
Definition: kalman-filter-base.hpp:54
stateObservation::KalmanFilterBase::c_
Matrix c_
Containers for the jacobian matrix of the measurement.
Definition: kalman-filter-base.hpp:348
stateObservation::KalmanFilterBase::getMeasurementCovariance
Matrix getMeasurementCovariance() const
Definition: kalman-filter-base.hpp:126
stateObservation::KalmanFilterBase::ybar_
IndexedVector ybar_
container for the prediction of the sensor
Definition: kalman-filter-base.hpp:363
stateObservation::KalmanFilterBase::xbar_
IndexedVector xbar_
container for the prediction
Definition: kalman-filter-base.hpp:360
stateObservation::KalmanFilterBase::setMeasurementCovariance
void setMeasurementCovariance(const Rmatrix &R)
Definition: kalman-filter-base.hpp:119
stateObservation::KalmanFilterBase
It mostly implements the equations of Kalman filtering It is suitablle by derivation to be used incas...
Definition: kalman-filter-base.hpp:50
stateObservation::KalmanFilterBase::mt_
Index mt_
the size of tangent space of the measurement space
Definition: kalman-filter-base.hpp:327
stateObservation::KalmanFilterBase::nt_
Index nt_
the size of tangent space of the state space
Definition: kalman-filter-base.hpp:324
stateObservation::Matrix
Eigen::MatrixXd Matrix
Dynamic sized Matrix.
Definition: definitions.hpp:100
stateObservation::KalmanFilterBase::Rmatrix
Matrix Rmatrix
The type of the covariance matrix of the measurement noise w.
Definition: kalman-filter-base.hpp:63
stateObservation::ObserverBase::MeasureVector
Vector MeasureVector
MeasureVector is the type of measurements vector.
Definition: observer-base.hpp:45
stateObservation::KalmanFilterBase::optimizationContainer::inoMeas
Vector inoMeas
Definition: kalman-filter-base.hpp:373
stateObservation::TimeIndex
long int TimeIndex
Definition: definitions.hpp:139
stateObservation::KalmanFilterBase::getProcessCovariance
Matrix getProcessCovariance() const
Definition: kalman-filter-base.hpp:143
stateObservation::KalmanFilterBase::arithm_
StateVectorArithmetics * arithm_
Definition: kalman-filter-base.hpp:382
stateObservation::KalmanFilterBase::optimizationContainer::inoMeasCovInverse
Matrix inoMeasCovInverse
Definition: kalman-filter-base.hpp:375
stateObservation::hrp2::m
constexpr double m
mass of the robot
Definition: hrp2.hpp:36
stateObservation::KalmanFilterBase::StateVectorTan
Vector StateVectorTan
StateVector is the type of state tangent vector.
Definition: kalman-filter-base.hpp:71
stateObservation::Index
Eigen::Index Index
Definition: definitions.hpp:138
stateObservation::KalmanFilterBase::optimizationContainer::t
Matrix t
Definition: kalman-filter-base.hpp:378
stateObservation::KalmanFilterBase::updateStateAndMeasurementPrediction
MeasureVector updateStateAndMeasurementPrediction()
Definition: kalman-filter-base.hpp:394
stateObservation::KalmanFilterBase::Qmatrix
Matrix Qmatrix
The type of the covariance matrix of the process noise v.
Definition: kalman-filter-base.hpp:60
stateObservation::KalmanFilterBase::MeasureVectorTan
Vector MeasureVectorTan
MeasureVector is the type of measurement tanegnt vector.
Definition: kalman-filter-base.hpp:74
stateObservation::KalmanFilterBase::prediction_
virtual StateVector prediction_(TimeIndex k)=0
The abstract method to overload to implement f(x,u)
stateObservation::KalmanFilterBase::LLTPMatrix
Eigen::LLT< Pmatrix > LLTPMatrix
Definition: kalman-filter-base.hpp:68
stateObservation::KalmanFilterBase::updateStatePrediction
const StateVector & updateStatePrediction()
Definition: kalman-filter-base.hpp:388
zero-delay-observer.hpp
Defines the base class of online zero delay observers. Zero delay observers are the classical state o...
stateObservation::IndexedMatrixT< Vector >
stateObservation::KalmanFilterBase::optimizationContainer::kGain
Matrix kGain
Definition: kalman-filter-base.hpp:377
stateObservation
Definition: bidim-elastic-inv-pendulum-dyn-sys.hpp:20
stateObservation::KalmanFilterBase::r_
Matrix r_
Container for the measurement noise covariance matrice.
Definition: kalman-filter-base.hpp:354
stateObservation::ZeroDelayObserver
Defines the base class of online zero delay observers. Zero delay observers are the classical state o...
Definition: zero-delay-observer.hpp:43
stateObservation::KalmanFilterBase::Pmatrix
Matrix Pmatrix
The type of the covariance matrix of the state estimation error.
Definition: kalman-filter-base.hpp:66
stateObservation::KalmanFilterBase::optimizationContainer::xhat
Vector xhat
Definition: kalman-filter-base.hpp:372
stateObservation::KalmanFilterBase::optimizationContainer::inoMeasCov
Matrix inoMeasCov
Definition: kalman-filter-base.hpp:374