Add Transfer Roller Superstructure
Signed-off-by: Niko Sohmers <nikolai@sohmers.com>
Change-Id: I494a75aab2c206ef0e762e12937d09c32e53e7f7
diff --git a/y2024/control_loops/superstructure/superstructure.cc b/y2024/control_loops/superstructure/superstructure.cc
index 366a8db..9a703e3 100644
--- a/y2024/control_loops/superstructure/superstructure.cc
+++ b/y2024/control_loops/superstructure/superstructure.cc
@@ -30,6 +30,7 @@
"/drivetrain")),
joystick_state_fetcher_(
event_loop->MakeFetcher<aos::JoystickState>("/aos")),
+ transfer_goal_(TransferRollerGoal::NONE),
intake_pivot_(
robot_constants_->common()->intake_pivot(),
robot_constants_->robot()->intake_constants()->intake_pivot_zero()) {
@@ -70,17 +71,44 @@
output_struct.intake_roller_voltage = 0.0;
break;
case IntakeRollerGoal::SPIT:
+ transfer_goal_ = TransferRollerGoal::TRANSFER_OUT;
intake_roller_state = IntakeRollerState::SPITTING;
output_struct.intake_roller_voltage =
robot_constants_->common()->intake_roller_voltages()->spitting();
break;
case IntakeRollerGoal::INTAKE:
+ transfer_goal_ = TransferRollerGoal::TRANSFER_IN;
intake_roller_state = IntakeRollerState::INTAKING;
output_struct.intake_roller_voltage =
robot_constants_->common()->intake_roller_voltages()->intaking();
break;
}
+ TransferRollerState transfer_roller_state = TransferRollerState::NONE;
+
+ switch (unsafe_goal != nullptr ? transfer_goal_ : TransferRollerGoal::NONE) {
+ case TransferRollerGoal::NONE:
+ output_struct.transfer_roller_voltage = 0.0;
+ break;
+ case TransferRollerGoal::TRANSFER_IN:
+ if (position->transfer_beambreak()) {
+ transfer_goal_ = TransferRollerGoal::NONE;
+ transfer_roller_state = TransferRollerState::NONE;
+ output_struct.transfer_roller_voltage = 0.0;
+ break;
+ }
+ transfer_roller_state = TransferRollerState::TRANSFERING_IN;
+ output_struct.transfer_roller_voltage =
+ robot_constants_->common()->transfer_roller_voltages()->transfer_in();
+ break;
+ case TransferRollerGoal::TRANSFER_OUT:
+ transfer_roller_state = TransferRollerState::TRANSFERING_OUT;
+ output_struct.transfer_roller_voltage = robot_constants_->common()
+ ->transfer_roller_voltages()
+ ->transfer_out();
+ break;
+ }
+
if (joystick_state_fetcher_.Fetch() &&
joystick_state_fetcher_->has_alliance()) {
alliance_ = joystick_state_fetcher_->alliance();
@@ -118,6 +146,7 @@
status_builder.add_estopped(estopped);
status_builder.add_intake_roller_state(intake_roller_state);
status_builder.add_intake_pivot_state(intake_pivot_status_offset);
+ status_builder.add_transfer_roller_state(transfer_roller_state);
(void)status->Send(status_builder.Finish());
}