Add rollers to superstructure
Rebased off master
Change-Id: I905a678aab45cc999526c5076bba86bc8c6597c0
diff --git a/y2017/control_loops/superstructure/superstructure.cc b/y2017/control_loops/superstructure/superstructure.cc
index 3cad298..0b5f2d9 100644
--- a/y2017/control_loops/superstructure/superstructure.cc
+++ b/y2017/control_loops/superstructure/superstructure.cc
@@ -11,6 +11,12 @@
namespace control_loops {
namespace superstructure {
+namespace {
+// The maximum voltage the intake roller will be allowed to use.
+constexpr double kMaxIntakeRollerVoltage = 12.0;
+constexpr double kMaxIndexerRollerVoltage = 12.0;
+} // namespace
+
Superstructure::Superstructure(
control_loops::SuperstructureQueue *superstructure_queue)
: aos::controls::ControlLoop<control_loops::SuperstructureQueue>(
@@ -35,22 +41,33 @@
output != nullptr ? &(output->voltage_hood) : nullptr,
&(status->hood));
turret_.Iterate(unsafe_goal != nullptr ? &(unsafe_goal->turret) : nullptr,
- &(position->turret),
- output != nullptr ? &(output->voltage_turret) : nullptr,
- &(status->turret));
+ &(position->turret),
+ output != nullptr ? &(output->voltage_turret) : nullptr,
+ &(status->turret));
intake_.Iterate(unsafe_goal != nullptr ? &(unsafe_goal->intake) : nullptr,
&(position->intake),
output != nullptr ? &(output->voltage_intake) : nullptr,
&(status->intake));
shooter_.Iterate(unsafe_goal != nullptr ? &(unsafe_goal->shooter) : nullptr,
- &(position->theta_shooter),
- output != nullptr ? &(output->voltage_shooter) : nullptr,
- &(status->shooter));
+ &(position->theta_shooter),
+ output != nullptr ? &(output->voltage_shooter) : nullptr,
+ &(status->shooter));
indexer_.Iterate(unsafe_goal != nullptr ? &(unsafe_goal->indexer) : nullptr,
&(position->theta_indexer),
output != nullptr ? &(output->voltage_indexer) : nullptr,
&(status->indexer));
+
+ if (output && unsafe_goal) {
+ output->voltage_intake_rollers =
+ ::std::max(-kMaxIntakeRollerVoltage,
+ ::std::min(unsafe_goal->intake.voltage_rollers,
+ kMaxIntakeRollerVoltage));
+ output->voltage_indexer_rollers =
+ ::std::max(-kMaxIndexerRollerVoltage,
+ ::std::min(unsafe_goal->indexer.voltage_rollers,
+ kMaxIndexerRollerVoltage));
+ }
}
} // namespace superstructure