|
|
|
@ -10,7 +10,7 @@ |
|
|
|
|
#include "locationd_yawrate.h" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Localizer::update_state(const Eigen::Matrix<double, 1, 4> &C, const double R, double current_time, double meas) { |
|
|
|
|
void Localizer::update_state(const Eigen::Matrix<double, 1, 2> &C, const double R, double current_time, double meas) { |
|
|
|
|
double dt = current_time - prev_update_time; |
|
|
|
|
|
|
|
|
|
if (dt < 0) { |
|
|
|
@ -19,18 +19,12 @@ void Localizer::update_state(const Eigen::Matrix<double, 1, 4> &C, const double |
|
|
|
|
prev_update_time = current_time; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
A << |
|
|
|
|
1, 0, 0, 0, |
|
|
|
|
0, 1, 0, 0, |
|
|
|
|
0, 0, 1, 0, |
|
|
|
|
0, 0, 0, 1; |
|
|
|
|
|
|
|
|
|
x = A * x; |
|
|
|
|
P = A * P * A.transpose() + dt * Q; |
|
|
|
|
|
|
|
|
|
double y = meas - C * x; |
|
|
|
|
double S = R + C * P * C.transpose(); |
|
|
|
|
Eigen::Vector4d K = P * C.transpose() * (1.0 / S); |
|
|
|
|
Eigen::Vector2d K = P * C.transpose() * (1.0 / S); |
|
|
|
|
x = x + K * y; |
|
|
|
|
P = (I - K * C) * P; |
|
|
|
|
} |
|
|
|
@ -63,27 +57,25 @@ void Localizer::handle_controls_state(cereal::ControlsState::Reader controls_sta |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Localizer::Localizer() { |
|
|
|
|
// States: [yaw rate, yaw rate diff, gyro bias, gyro bias diff]
|
|
|
|
|
I << |
|
|
|
|
1, 0, 0, 0, |
|
|
|
|
0, 1, 0, 0, |
|
|
|
|
0, 0, 1, 0, |
|
|
|
|
0, 0, 0, 1; |
|
|
|
|
// States: [yaw rate, gyro bias]
|
|
|
|
|
A << |
|
|
|
|
1, 0, |
|
|
|
|
0, 1; |
|
|
|
|
|
|
|
|
|
Q << |
|
|
|
|
pow(.1, 2.0), 0, 0, 0, |
|
|
|
|
0, 0, 0, 0, |
|
|
|
|
0, 0, pow(0.005/ 100.0, 2.0), 0, |
|
|
|
|
0, 0, 0, 0; |
|
|
|
|
pow(.1, 2.0), 0, |
|
|
|
|
0, pow(0.005/ 100.0, 2.0), |
|
|
|
|
P << |
|
|
|
|
pow(10000.0, 2.0), 0, 0, 0, |
|
|
|
|
0, pow(10000.0, 2.0), 0, 0, |
|
|
|
|
0, 0, pow(10000.0, 2.0), 0, |
|
|
|
|
0, 0, 0, pow(10000.0, 2.0); |
|
|
|
|
|
|
|
|
|
C_posenet << 1, 0, 0, 0; |
|
|
|
|
C_gyro << 1, 0, 1, 0; |
|
|
|
|
x << 0, 0, 0, 0; |
|
|
|
|
pow(10000.0, 2.0), 0, |
|
|
|
|
0, pow(10000.0, 2.0); |
|
|
|
|
|
|
|
|
|
I << |
|
|
|
|
1, 0, |
|
|
|
|
0, 1; |
|
|
|
|
|
|
|
|
|
C_posenet << 1, 0; |
|
|
|
|
C_gyro << 1, 1; |
|
|
|
|
x << 0, 0; |
|
|
|
|
|
|
|
|
|
R_gyro = pow(0.025, 2.0); |
|
|
|
|
} |
|
|
|
|