mad-location-manager-lib 1.0
Library for fusing GPS and ENU accelerometer data
Loading...
Searching...
No Matches
kalman.h
Go to the documentation of this file.
1#ifndef KALMAN_H
2#define KALMAN_H
3
4#include <Eigen/Eigen>
5#include <cstddef>
6
17template <size_t state_d, size_t measure_d, size_t control_d>
19{
20#define mtx_t Eigen::Matrix
21 protected:
22 /*these matrices should be provided by user*/
30
31 /*these matrices will be calculated*/
40
41 /*auxiliary matrices*/
45
46 // predict
47 void estimate()
48 {
49 // Xk|k-1 = Fk*Xk-1|k-1 + Bk*Uk
50 Xk_km1 = F * Xk_k + B * Uk;
51 // Pk|k-1 = Fk*Pk-1|k-1*Fk(t) + Qk
52 Pk_km1 = F * Pk_k * F.transpose() + Q;
53 }
54
55 // update
56 void correct()
57 {
58 // Yk = Zk - Hk*Xk|k-1
59 Yk = Zk - H * Xk_km1;
60 // Sk = Rk + Hk*Pk|k-1*Hk(t)
61 Sk = R + H * Pk_km1 * H.transpose();
62
63 // Kk = Pk|k-1*Hk(t)*Sk(inv)
64 K = Pk_km1 * H.transpose() * Sk.inverse();
65 // xk|k = xk|k-1 + Kk*Yk
66 Xk_k = Xk_km1 + K * Yk;
67
68 // Pk|k = (I - Kk*Hk) * Pk|k-1 * (I - Kk*Hk).t() + (K * R * K.t())
69 Pk_k = (I - K * H) * Pk_km1 * (I - K * H).transpose() +
70 (K * R * K.transpose());
71
72 // Yk|k = Zk - Hk*Xk|k
73 Yk_k = Zk - H * Xk_k;
74 }
75
76#undef mtx_t
77};
79
80#endif // KALMAN_H
Template-based Kalman filter implementation.
Definition kalman.h:19
mtx_t< double, measure_d, 1 > Yk_k
updated (current) state
Definition kalman.h:38
mtx_t< double, state_d, 1 > Xk_km1
actual measured values vector
Definition kalman.h:32
void estimate()
Definition kalman.h:47
mtx_t< double, state_d, state_d > I
updated estimate covariance
Definition kalman.h:42
mtx_t< double, measure_d, measure_d > Sk
measurement innovation
Definition kalman.h:35
void correct()
Definition kalman.h:56
mtx_t< double, state_d, 1 > Xk_k
Kalman gain.
Definition kalman.h:37
mtx_t< double, state_d, state_d > Q
control matrix
Definition kalman.h:26
mtx_t< double, measure_d, state_d > H
state transition model
Definition kalman.h:24
mtx_t< double, control_d, 1 > Uk
observation noise covariance
Definition kalman.h:28
mtx_t< double, state_d, state_d > Pk_k
post fit residual
Definition kalman.h:39
mtx_t< double, measure_d, 1 > Yk
predicted estimate covariance
Definition kalman.h:34
mtx_t< double, state_d, state_d > F
Definition kalman.h:23
mtx_t< double, state_d, control_d > B
observation model
Definition kalman.h:25
mtx_t< double, state_d, state_d > Pk_km1
predicted state estimate
Definition kalman.h:33
kalman_filter()
Definition kalman.h:43
mtx_t< double, measure_d, measure_d > R
process noise covariance
Definition kalman.h:27
mtx_t< double, state_d, measure_d > K
innovation covariance
Definition kalman.h:36
mtx_t< double, measure_d, 1 > Zk
control vector
Definition kalman.h:29
#define mtx_t
Definition kalman.h:20