fixed claw power capping before it knows where they are
diff --git a/frc971/control_loops/claw/claw.cc b/frc971/control_loops/claw/claw.cc
index 611dd0e..f9ee982 100644
--- a/frc971/control_loops/claw/claw.cc
+++ b/frc971/control_loops/claw/claw.cc
@@ -191,21 +191,25 @@
{
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 (top_known_) {
+ 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;
+ if (bottom_known_) {
+ 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;
+ }
}
}
}
@@ -806,6 +810,7 @@
LimitClawGoal(&bottom_claw_goal_, &top_claw_goal_, values);
}
+ claw_.set_positions_known(top_claw_.zeroing_state() != ZeroedStateFeedbackLoop::UNKNOWN_POSITION, bottom_claw_.zeroing_state() != ZeroedStateFeedbackLoop::UNKNOWN_POSITION);
if (has_top_claw_goal_ && has_bottom_claw_goal_) {
claw_.R << bottom_claw_goal_, top_claw_goal_ - bottom_claw_goal_,
bottom_claw_velocity_, top_claw_velocity_ - bottom_claw_velocity_;
diff --git a/frc971/control_loops/claw/claw.h b/frc971/control_loops/claw/claw.h
index 6dbc408..8c81e62 100644
--- a/frc971/control_loops/claw/claw.h
+++ b/frc971/control_loops/claw/claw.h
@@ -29,6 +29,10 @@
virtual void CapU();
void set_is_zeroing(bool is_zeroing) { is_zeroing_ = is_zeroing; }
+ void set_positions_known(bool top_known, bool bottom_known) {
+ top_known_ = top_known;
+ bottom_known_ = bottom_known;
+ }
void ChangeTopOffset(double doffset);
void ChangeBottomOffset(double doffset);
@@ -39,6 +43,8 @@
double uncapped_average_voltage_;
bool is_zeroing_;
+ bool top_known_ = false, bottom_known_ = false;
+
const ::aos::controls::HPolytope<2> U_Poly_, U_Poly_zeroing_;
};