added hard voltage capping at the soft limits
diff --git a/frc971/control_loops/claw/claw.cc b/frc971/control_loops/claw/claw.cc
index 12ac570..611dd0e 100644
--- a/frc971/control_loops/claw/claw.cc
+++ b/frc971/control_loops/claw/claw.cc
@@ -188,6 +188,26 @@
LOG_MATRIX(DEBUG, "adjusted_pos_error", adjusted_pos_error);
U = velocity_K * velocity_error + position_K * adjusted_pos_error;
LOG_MATRIX(DEBUG, "U is now", U);
+
+ {
+ const auto values = constants::GetValues().claw;
+ if (X_hat(0, 0) + X_hat(1, 0) > values.upper_claw.upper_limit &&
+ U(1, 0) > 0) {
+ LOG(WARNING, "upper claw too high and moving up\n");
+ U(1, 0) = 0;
+ } else if (X_hat(0, 0) + X_hat(1, 0) < values.upper_claw.lower_limit &&
+ U(1, 0) < 0) {
+ LOG(WARNING, "upper claw too low and moving down\n");
+ U(1, 0) = 0;
+ }
+ if (X_hat(0, 0) > values.lower_claw.upper_limit && U(0, 0) > 0) {
+ LOG(WARNING, "lower claw too high and moving up\n");
+ U(0, 0) = 0;
+ } else if (X_hat(0, 0) < values.lower_claw.lower_limit && U(0, 0) < 0) {
+ LOG(WARNING, "lower claw too low and moving down\n");
+ U(0, 0) = 0;
+ }
+ }
}
}
@@ -814,7 +834,7 @@
case FINE_TUNE_BOTTOM:
case FINE_TUNE_TOP:
case UNKNOWN_LOCATION: {
- LOG(DEBUG, "Uncapped voltages: Top: %f, Bottom: %f\n", claw_.U_uncapped(1, 0), claw_.U_uncapped(0, 0));
+ LOG_MATRIX(DEBUG, "U_uncapped", claw_.U_uncapped);
if (claw_.uncapped_average_voltage() > values.claw.max_zeroing_voltage) {
double dx_bot = (claw_.U_uncapped(0, 0) -
values.claw.max_zeroing_voltage) /