3#include "KalmanFilterBase.h"
4#include "StateSpaceUtil.h"
20template <
int stateDim,
int inputDim,
int outputDim>
21class KalmanFilter :
public KalmanFilterBase<stateDim, inputDim> {
65 outputMat * P * outputMat.
transpose() + measurementCovariance;
76 return KalmanFilter(discA, discB, outputMat, stateCovariance, measurementCovariance,
119 stateCovariance, measurementCovariance);
124 outputMat * P * outputMat.
transpose() + measurementCovariance;
135 return KalmanFilter(systemMat, inputMat, outputMat, stateCovariance,
136 measurementCovariance, gainMatrix);
147 this->xHat = this->xHat + K * (measurement - C * this->xHat);
152 this->xHat = A * this->xHat + B * input;
153 this->P = A * this->P * A.
transpose() + Q;
171 : A(A), B(B), C(C), Q(Q), R(R), K(K) {}
TransposeReturnType transpose()
static const IdentityReturnType Identity()
Implements a Kalman Filter.
Definition KalmanFilter.h:21
static KalmanFilter createDiscrete(const Eigen::Matrix< double, stateDim, stateDim > &systemMat, const Eigen::Matrix< double, stateDim, inputDim > &inputMat, const Eigen::Matrix< double, outputDim, stateDim > &outputMat, const Eigen::Matrix< double, stateDim, 1 > &stateStdDevs, const Eigen::Matrix< double, outputDim, 1 > &measurementStdDevs, double dt)
Create a new Kalman Filter from a discrete-time state space model.
Definition KalmanFilter.h:97
void correct(const Eigen::Matrix< double, outputDim, 1 > &measurement)
Correct the state estimate with measurement data.
Definition KalmanFilter.h:146
static KalmanFilter createContinuous(const Eigen::Matrix< double, stateDim, stateDim > &systemMat, const Eigen::Matrix< double, stateDim, inputDim > &inputMat, const Eigen::Matrix< double, outputDim, stateDim > &outputMat, const Eigen::Matrix< double, stateDim, 1 > &stateStdDevs, const Eigen::Matrix< double, outputDim, 1 > &measurementStdDevs, double dt)
Create a new Kalman Filter from a continuous-time state space model.
Definition KalmanFilter.h:40
void predict(const Eigen::Matrix< double, inputDim, 1 > &input) override
Use the model to predict the next system state, given the current inputs.
Definition KalmanFilter.h:151
Eigen::Matrix< double, numStates, numStates > discreteToContinuous(const Eigen::Matrix< double, numStates, numStates > &A, double dt)
Convert a discrete time system matrix to continuous time.
Definition StateSpaceUtil.h:39
Eigen::Matrix< double, numStates, numStates > discretizeQ(const Eigen::Matrix< double, numStates, numStates > &contA, const Eigen::Matrix< double, numStates, numStates > &contQ, double dt)
Discretizes a continuous time additive process noise covariance matrix.
Definition StateSpaceUtil.h:154
Eigen::Matrix< double, size, size > createCovarianceMatrix(const Eigen::Matrix< double, size, 1 > &stdDevs)
Create a covariance matrix modelling independent variables with the given standard deviations.
Definition StateSpaceUtil.h:23
void continuousToDiscrete(Eigen::Matrix< double, numStates, numStates > &A, Eigen::Matrix< double, numStates, numInputs > &B, double dt)
Convert continuous time system and input matrices to discrete time.
Definition StateSpaceUtil.h:75
Eigen::Matrix< double, numStates, numStates > discretizeR(const Eigen::Matrix< double, numStates, numStates > &contR, double dt)
Discretizes a continuous time additive output noise covariance matrix.
Definition StateSpaceUtil.h:172