UpdateObserver now takes U as an argument.
This supports running UpdateObserver without a control loop better.
Change-Id: I62a304fa192604bc5b400c8bbf5191971a8534cc
diff --git a/frc971/control_loops/state_feedback_loop.h b/frc971/control_loops/state_feedback_loop.h
index 6ebd32e..d1b24a5 100644
--- a/frc971/control_loops/state_feedback_loop.h
+++ b/frc971/control_loops/state_feedback_loop.h
@@ -385,11 +385,11 @@
CapU();
}
- UpdateObserver();
+ UpdateObserver(U_);
}
- void UpdateObserver() {
- X_hat_ = A() * X_hat() + B() * U();
+ void UpdateObserver(const Eigen::Matrix<double, number_of_inputs, 1> &new_u) {
+ X_hat_ = A() * X_hat() + B() * new_u;
}
// Sets the current controller to be index, clamped to be within range.
diff --git a/y2014/control_loops/drivetrain/ssdrivetrain.cc b/y2014/control_loops/drivetrain/ssdrivetrain.cc
index 53cc2dd..2551ddb 100644
--- a/y2014/control_loops/drivetrain/ssdrivetrain.cc
+++ b/y2014/control_loops/drivetrain/ssdrivetrain.cc
@@ -157,7 +157,7 @@
loop_->mutable_U().setZero();
loop_->mutable_U_uncapped().setZero();
}
- loop_->UpdateObserver();
+ loop_->UpdateObserver(loop_->U());
}
::Eigen::Matrix<double, 4, 1> E = loop_->R() - loop_->X_hat();
LOG_MATRIX(DEBUG, "E", E);
diff --git a/y2014_bot3/control_loops/drivetrain/drivetrain.cc b/y2014_bot3/control_loops/drivetrain/drivetrain.cc
index 047cb71..8f26161 100644
--- a/y2014_bot3/control_loops/drivetrain/drivetrain.cc
+++ b/y2014_bot3/control_loops/drivetrain/drivetrain.cc
@@ -183,7 +183,7 @@
loop_->mutable_U().setZero();
loop_->mutable_U_uncapped().setZero();
}
- loop_->UpdateObserver();
+ loop_->UpdateObserver(loop_->U());
}
::Eigen::Matrix<double, 4, 1> E = loop_->R() - loop_->X_hat();
LOG_MATRIX(DEBUG, "E", E);
diff --git a/y2015/control_loops/drivetrain/drivetrain.cc b/y2015/control_loops/drivetrain/drivetrain.cc
index 22a5d48..9ed927a 100644
--- a/y2015/control_loops/drivetrain/drivetrain.cc
+++ b/y2015/control_loops/drivetrain/drivetrain.cc
@@ -192,7 +192,7 @@
loop_->mutable_U().setZero();
loop_->mutable_U_uncapped().setZero();
}
- loop_->UpdateObserver();
+ loop_->UpdateObserver(loop_->U());
}
::Eigen::Matrix<double, 4, 1> E = loop_->R() - loop_->X_hat();
LOG_MATRIX(DEBUG, "E", E);
diff --git a/y2015_bot3/control_loops/drivetrain/drivetrain.cc b/y2015_bot3/control_loops/drivetrain/drivetrain.cc
index b126ad2..f7e039e 100644
--- a/y2015_bot3/control_loops/drivetrain/drivetrain.cc
+++ b/y2015_bot3/control_loops/drivetrain/drivetrain.cc
@@ -187,7 +187,7 @@
loop_->mutable_U().setZero();
loop_->mutable_U_uncapped().setZero();
}
- loop_->UpdateObserver();
+ loop_->UpdateObserver(loop_->U());
}
::Eigen::Matrix<double, 4, 1> E = loop_->R() - loop_->X_hat();
LOG_MATRIX(DEBUG, "E", E);