33template <
typename Scalar,
int N,
int U,
typename DynamicsFunc>
35 const Eigen::Matrix<Scalar, U, 1> &u,
37 const Eigen::Matrix<double, N, N> &F,
42 predicted.
x = f(state.x, u);
45 auto F_scalar = F.template cast<Scalar>();
46 predicted.
P = F_scalar * state.P * F_scalar.transpose() +
47 noise.
Q.template cast<Scalar>();
59template <
typename Scalar,
int N,
typename DynamicsFunc>
62 const Eigen::Matrix<double, N, N> &F,
67 predicted.
x = f(state.x);
70 auto F_scalar = F.template cast<Scalar>();
71 predicted.
P = F_scalar * state.P * F_scalar.transpose() +
72 noise.
Q.template cast<Scalar>();
102template <
typename Scalar,
int N,
int M,
typename MeasurementFunc>
104 const Eigen::Matrix<Scalar, M, 1> &z,
106 const Eigen::Matrix<double, M, N> &H,
109 auto H_scalar = H.template cast<Scalar>();
110 auto R_scalar = noise.
R.template cast<Scalar>();
113 Eigen::Matrix<Scalar, M, 1> z_pred = h(state.x);
116 Eigen::Matrix<Scalar, M, M> S =
117 H_scalar * state.P * H_scalar.transpose() + R_scalar;
120 Eigen::Matrix<Scalar, N, M> K =
121 state.P * H_scalar.transpose() * S.inverse();
124 Eigen::Matrix<Scalar, M, 1> innovation = z - z_pred;
128 updated.
x = state.x + K * innovation;
131 Eigen::Matrix<Scalar, N, N> I = Eigen::Matrix<Scalar, N, N>::Identity();
132 updated.
P = (I - K * H_scalar) * state.P;
147template <
typename Scalar,
int N,
int U,
int M,
typename DynamicsFunc,
148 typename MeasurementFunc>
151 const Eigen::Matrix<Scalar, M, 1> &z, DynamicsFunc f, MeasurementFunc h,
152 const Eigen::Matrix<double, N, N> &F,
const Eigen::Matrix<double, M, N> &H,
Definition EstimationTypes.hpp:8
FilterState< Scalar, N > ekf_update(const FilterState< Scalar, N > &state, const Eigen::Matrix< Scalar, M, 1 > &z, MeasurementFunc h, const Eigen::Matrix< double, M, N > &H, const MeasurementNoise< M > &noise)
Extended Kalman filter update step.
Definition ExtendedKF.hpp:103
FilterState< Scalar, N > ekf_predict(const FilterState< Scalar, N > &state, const Eigen::Matrix< Scalar, U, 1 > &u, DynamicsFunc f, const Eigen::Matrix< double, N, N > &F, const ProcessNoise< N > &noise)
Extended Kalman filter predict step.
Definition ExtendedKF.hpp:34
FilterState< Scalar, N > ekf_step(const FilterState< Scalar, N > &state, const Eigen::Matrix< Scalar, U, 1 > &u, const Eigen::Matrix< Scalar, M, 1 > &z, DynamicsFunc f, MeasurementFunc h, const Eigen::Matrix< double, N, N > &F, const Eigen::Matrix< double, M, N > &H, const ProcessNoise< N > &Q, const MeasurementNoise< M > &R)
Combined EKF step (predict + update).
Definition ExtendedKF.hpp:149
Filter state container holding estimate and covariance.
Definition EstimationTypes.hpp:20
Eigen::Matrix< Scalar, N, 1 > x
State estimate.
Definition EstimationTypes.hpp:21
Eigen::Matrix< Scalar, N, N > P
State covariance.
Definition EstimationTypes.hpp:22
Measurement noise specification.
Definition EstimationTypes.hpp:79
Eigen::Matrix< double, M, M > R
Measurement noise covariance.
Definition EstimationTypes.hpp:80
Process noise specification.
Definition EstimationTypes.hpp:46
Eigen::Matrix< double, N, N > Q
Process noise covariance.
Definition EstimationTypes.hpp:47