Fixed off by one cycle issue in the gyro kalman filter update.
Change-Id: I1693ae0f39765d06c5be6035a164cc75085858ec
diff --git a/frc971/control_loops/drivetrain/drivetrain.cc b/frc971/control_loops/drivetrain/drivetrain.cc
index ca395cb..50c5df7 100644
--- a/frc971/control_loops/drivetrain/drivetrain.cc
+++ b/frc971/control_loops/drivetrain/drivetrain.cc
@@ -47,6 +47,14 @@
kf_.set_controller_index(dt_openloop_.controller_index());
+ bool gyro_valid = false;
+ if (gyro_reading.FetchLatest()) {
+ LOG_STRUCT(DEBUG, "using", *gyro_reading.get());
+ last_gyro_heading_ = gyro_reading->angle;
+ last_gyro_rate_ = gyro_reading->velocity;
+ gyro_valid = true;
+ }
+
{
Eigen::Matrix<double, 3, 1> Y;
Y << position->left_encoder, position->right_encoder, last_gyro_rate_;
@@ -75,12 +83,9 @@
if (!bad_pos) {
const double left_encoder = position->left_encoder;
const double right_encoder = position->right_encoder;
- if (gyro_reading.FetchLatest()) {
- LOG_STRUCT(DEBUG, "using", *gyro_reading.get());
+ if (gyro_valid) {
dt_closedloop_.SetPosition(left_encoder, right_encoder,
gyro_reading->angle);
- last_gyro_heading_ = gyro_reading->angle;
- last_gyro_rate_ = gyro_reading->velocity;
} else {
dt_closedloop_.SetRawPosition(left_encoder, right_encoder);
}