Austin's indexer changes (reset, I think?)
diff --git a/frc971/control_loops/index/index.cc b/frc971/control_loops/index/index.cc
index d3ef652..bdcb8a3 100644
--- a/frc971/control_loops/index/index.cc
+++ b/frc971/control_loops/index/index.cc
@@ -237,7 +237,7 @@
Time now = Time::Now();
// Make goal easy to work with and sanity check it.
Goal goal_enum = static_cast<Goal>(goal->goal_state);
- if (goal->goal_state < 0 || goal->goal_state > 4) {
+ if (goal->goal_state < 0 || goal->goal_state > 5) {
LOG(ERROR, "Goal state is %"PRId32" which is out of range. Going to HOLD.\n",
goal->goal_state);
goal_enum = Goal::HOLD;
@@ -638,6 +638,9 @@
}
LOG(DEBUG, "INTAKE\n");
break;
+ case Goal::REINITIALIZE:
+ LOG(WARNING, "Reinitializing the indexer\n");
+ break;
case Goal::READY_SHOOTER:
case Goal::SHOOT:
// Don't let us leave the shoot or preload state if there are 4 discs in
@@ -799,6 +802,7 @@
break;
case Goal::READY_SHOOTER:
case Goal::SHOOT:
+ case Goal::REINITIALIZE:
break;
}
}
@@ -949,6 +953,26 @@
last_top_disc_negedge_count_ = position->top_disc_negedge_count;
}
+ // Clear everything if we are supposed to re-initialize.
+ if (goal_enum == Goal::REINITIALIZE) {
+ safe_goal_ = Goal::REINITIALIZE;
+ no_prior_position_ = true;
+ hopper_disc_count_ = 0;
+ total_disc_count_ = 0;
+ shot_disc_count_ = 0;
+ loader_state_ = LoaderState::READY;
+ loader_goal_ = LoaderGoal::READY;
+ loader_countdown_ = 0;
+ loader_up_ = false;
+ disc_clamped_ = false;
+ disc_ejected_ = false;
+
+ intake_voltage = 0.0;
+ transfer_voltage = 0.0;
+ wrist_loop_->U(0, 0) = 0.0;
+ frisbees_.clear();
+ }
+
status->hopper_disc_count = hopper_disc_count_;
status->total_disc_count = total_disc_count_;
status->shot_disc_count = shot_disc_count_;
diff --git a/frc971/control_loops/index/index.h b/frc971/control_loops/index/index.h
index 62a582c..a18d4c9 100644
--- a/frc971/control_loops/index/index.h
+++ b/frc971/control_loops/index/index.h
@@ -262,7 +262,9 @@
// Get ready to shoot, and place a disc in the loader.
READY_SHOOTER = 3,
// Shoot at will.
- SHOOT = 4
+ SHOOT = 4,
+ // Reinitialize.
+ REINITIALIZE = 5
};
// These two enums command and track the loader loading discs into the
diff --git a/frc971/control_loops/index/index_motor.q b/frc971/control_loops/index/index_motor.q
index 61e7a61..b125e38 100644
--- a/frc971/control_loops/index/index_motor.q
+++ b/frc971/control_loops/index/index_motor.q
@@ -12,6 +12,7 @@
// 2 means ready the discs, spin up the transfer roller, and accept discs.
// 3 means get ready to shoot, and place a disc grabbed in the loader.
// 4 means shoot at will.
+ // 5 means re-initialize
int32_t goal_state;
};