1 #include <StateEstimator/Kalman.hh>
3 #include <Base/Common/BIASpragma.hh>
12 SystemStateDim_=MeasurementDim_=0;
20 Init(SystemMatrix, MeasurementMatrix, InitialSystemState,
21 InitialSystemCovariance);
32 State_ = InitialSystemState;
33 Covariance_ = InitialSystemCovariance;
34 SystemStateDim_ = InitialSystemState.
size();
35 MeasurementDim_ = MeasurementMatrix.
num_rows();
39 H_ = MeasurementMatrix;
42 Identity_.
newsize(SystemStateDim_, SystemStateDim_);
43 Identity_.SetIdentity();
45 BIASASSERT(A_.num_cols()==SystemStateDim_);
46 BIASASSERT(A_.num_rows()==SystemStateDim_);
48 BIASASSERT(H_.num_cols()==SystemStateDim_);
53 BIASASSERT(A_.num_cols()!=0);
54 BIASASSERT(A_.num_rows()!=0);
56 Covariance_ = A_ * Covariance_ * AT_ + ProcessCovariance;
64 BIASASSERT(A_.num_cols()==SystemStateDim_);
65 BIASASSERT(A_.num_rows()==SystemStateDim_);
69 Predict(ProcessCovariance);
75 BIASASSERT(Measurement.
size()==MeasurementDim_);
76 BIASASSERT(MeasurementCovariance.
num_cols()==MeasurementDim_);
77 BIASASSERT(MeasurementCovariance.
num_rows()==MeasurementDim_);
80 denominator = H_ * Covariance_ * HT_ + MeasurementCovariance;
82 inv = svd_.Invert(denominator);
85 K = Covariance_ * HT_ * inv;
87 State_ = State_ + K*(Measurement - H_*State_);
89 Covariance_ = (Identity_ - K * H_) * Covariance_;
Subscript num_cols() const
Matrix< T > Transpose() const
transpose function, storing data destination matrix
void Init(const Matrix< double > &SystemMatrix, const Matrix< double > &MeasurementMatrix, const Vector< double > &InitialSystemState, const Matrix< double > &InitialSystemCovariance)
Matrix< T > & newsize(Subscript M, Subscript N)
void Update(const Vector< double > &Measurement, const Matrix< double > &MeasurementCovariance)
Calculates the update step.
void Predict(const Matrix< double > &ProcessCovariance)
Calculates the prediction using the system matrix A.
Subscript num_rows() const