39 const T* observation_data,
40 const T* process_covariance_data,
41 const T* default_measurement_covariance_data)
42 : state_transition_matrix_(
43 Eigen::Matrix<T,
N,
N,
Eigen::RowMajor>(state_transition_data)),
45 Eigen::Matrix<T,
K,
N,
Eigen::RowMajor>(observation_data)),
47 Eigen::Matrix<T,
N,
N,
Eigen::RowMajor>(process_covariance_data)),
48 default_measurement_covariance_(
Eigen::Matrix<T,
K,
K,
Eigen::RowMajor>(
49 default_measurement_covariance_data)) {}
51 KalmanFilter(
const Eigen::Matrix<T, N, N>& state_transition_matrix,
52 const Eigen::Matrix<T, K, N>& observation_matrix,
53 const Eigen::Matrix<T, N, N>& process_covariance,
54 const Eigen::Matrix<T, K, K>& default_measurement_covariance)
55 : state_transition_matrix_(state_transition_matrix),
56 observation_matrix_(observation_matrix),
57 process_covariance_(process_covariance),
58 default_measurement_covariance_(default_measurement_covariance) {}
69 void Update(
const Eigen::Matrix<T, K, 1>& measurement_mean,
70 const Eigen::Matrix<T, K, K>& measurement_covariance,
73 Eigen::Matrix<T, K, 1> innovation_mean =
74 measurement_mean - observation_matrix_ *
state->mean;
75 Eigen::Matrix<T, K, K> innovation_covariance =
76 observation_matrix_ *
state->covariance *
77 observation_matrix_.transpose() +
78 measurement_covariance;
81 Eigen::Matrix<T, 6, 2> kalman_gain =
state->covariance *
82 observation_matrix_.transpose() *
83 innovation_covariance.inverse();
86 state->mean += kalman_gain * innovation_mean;
87 state->covariance = (Eigen::Matrix<T, N, N>::Identity() -
88 kalman_gain * observation_matrix_) *