11 using namespace Eigen;
16 KalmanFilter3D::KalmanFilter3D(
double dt,
double processVariance,
double measurementVariance,
const VectorXd &
x) :
19 m_x = VectorXd::Zero(6);
21 m_P = MatrixXd::Identity(6, 6);
22 m_F = MatrixXd::Identity(6, 6);
23 for (
int i = 0; i < 3; ++i)
27 m_H = MatrixXd::Zero(3, 6);
28 m_H.block<3, 3>(0, 0) = MatrixXd::Identity(3, 3);
29 m_Q = MatrixXd::Zero(6, 6);
30 for (
int i = 0; i < 3; ++i)
32 m_Q(i, i) = (0.25 * dt * dt * dt * dt) * processVariance;
33 m_Q(i, i + 3) = (0.5 * dt * dt * dt) * processVariance;
34 m_Q(i + 3, i) = (0.5 * dt * dt * dt) * processVariance;
35 m_Q(i + 3, i + 3) = (dt * dt) * processVariance;
37 m_R = MatrixXd::Identity(3, 3) * measurementVariance;
62 MatrixXd K =
m_P *
m_H.transpose() * S.inverse();
64 m_P = (MatrixXd::Identity(6, 6) - K *
m_H) *
m_P;
85 return m_x.tail(3).normalized();
101 m_x = VectorXd::Zero(4);
103 m_P = MatrixXd::Identity(4, 4);
104 m_F = MatrixXd::Identity(4, 4);
105 for (
int i = 0; i < 2; ++i)
109 m_H = MatrixXd::Zero(2, 4);
110 m_H.block<2, 2>(0, 0) = MatrixXd::Identity(3, 3);
111 m_Q = MatrixXd::Zero(4, 4);
112 for (
int i = 0; i < 2; ++i)
114 m_Q(i, i) = (0.25 * dt * dt * dt * dt) * processVariance;
115 m_Q(i, i + 2) = (0.5 * dt * dt * dt) * processVariance;
116 m_Q(i + 2, i) = (0.5 * dt * dt * dt) * processVariance;
117 m_Q(i + 2, i + 2) = (dt * dt) * processVariance;
119 m_R = MatrixXd::Identity(2, 2) * measurementVariance;
144 MatrixXd K{
m_P *
m_H.transpose() * S.inverse()};
146 m_P = (MatrixXd::Identity(4, 4) - K *
m_H) *
m_P;
167 return m_x.tail(2).normalized();
Eigen::MatrixXd m_R
Measurement covariance matrix.
Eigen::MatrixXd m_P
Covariance matrix.
const Eigen::VectorXd & GetState() const
Get the current state vector.
const Eigen::VectorXd GetDirection() const
Get the current direction vector.
const Eigen::VectorXd GetPosition() const
Get the current position vector.
const Eigen::VectorXd & GetState() const
Get the current state vector.
Eigen::MatrixXd m_H
Measurement matrix.
Eigen::MatrixXd m_F
State transition matrix.
Eigen::VectorXd m_x
State vector (tracks position and 'velocity')
void Predict()
Uses the state transition matrix to predict the next state.
Eigen::VectorXd m_xTemp
Temporary state vector.
Eigen::MatrixXd m_P
Covariance matrix.
Eigen::VectorXd m_xTemp
Temporary state vector.
const Eigen::VectorXd GetDirection() const
Get the current direction vector.
Eigen::MatrixXd m_H
Measurement matrix.
const Eigen::VectorXd GetPosition() const
Get the current position vector.
KalmanFilter2D(double dt, double processVariance, double measurementVariance, const Eigen::VectorXd &x)
Default constructor.
const Eigen::VectorXd & GetTemporaryState() const
Get the temporary state vector.
~KalmanFilter3D()
Destructor.
Eigen::VectorXd m_x
State vector (tracks position and 'velocity')
Eigen::MatrixXd m_PTemp
Temporary covariance matrix.
Kalman filter for predicting 3D trajectories.
Eigen::MatrixXd m_PTemp
Temporary covariance matrix.
Eigen::MatrixXd m_F
State transition matrix.
~KalmanFilter2D()
Destructor.
void Predict()
Uses the state transition matrix to predict the next state.
Eigen::MatrixXd m_R
Measurement covariance matrix.
void Update(const Eigen::VectorXd &z)
Uses the measurement matrix to update the state estimate.
Eigen::MatrixXd m_Q
Process covariance matrix.
const Eigen::VectorXd & GetTemporaryState() const
Get the temporary state vector.
void Update(const Eigen::VectorXd &z)
Uses the measurement matrix to update the state estimate.
Eigen::MatrixXd m_Q
Process covariance matrix.