Add turret to intake collision avoidance
Signed-off-by: Maxwell Henderson <mxwhenderson@gmail.com>
Change-Id: Idca062b4ff7ddca289581baf032736dadbf71e8c
diff --git a/y2024/control_loops/superstructure/shooter.cc b/y2024/control_loops/superstructure/shooter.cc
index 0666772..a0dd234 100644
--- a/y2024/control_loops/superstructure/shooter.cc
+++ b/y2024/control_loops/superstructure/shooter.cc
@@ -4,6 +4,7 @@
#include "aos/flatbuffers/base.h"
#include "frc971/control_loops/aiming/aiming.h"
#include "y2024/control_loops/superstructure/catapult/catapult_plant.h"
+#include "y2024/control_loops/superstructure/collision_avoidance.h"
namespace y2024::control_loops::superstructure {
@@ -43,6 +44,8 @@
double *catapult_output, double *altitude_output, double *turret_output,
double *retention_roller_output, double /*battery_voltage*/,
aos::monotonic_clock::time_point current_timestamp,
+ CollisionAvoidance *collision_avoidance, const double intake_pivot_position,
+ double *max_intake_pivot_position, double *min_intake_pivot_position,
flatbuffers::FlatBufferBuilder *fbb) {
superstructure_can_position_fetcher_.Fetch();
drivetrain_status_fetcher_.Fetch();
@@ -146,9 +149,32 @@
altitude_.estimated_position() >
robot_constants_->common()->min_altitude_shooting_angle());
+ const bool disabled = turret_.Correct(turret_goal, position->turret(),
+ turret_output == nullptr);
+
+ collision_avoidance->UpdateGoal(
+ {.intake_pivot_position = intake_pivot_position,
+ .turret_position = turret_.estimated_position()},
+ turret_goal->unsafe_goal());
+
+ turret_.set_min_position(collision_avoidance->min_turret_goal());
+ turret_.set_max_position(collision_avoidance->max_turret_goal());
+
+ *max_intake_pivot_position = collision_avoidance->max_intake_pivot_goal();
+ *min_intake_pivot_position = collision_avoidance->min_intake_pivot_goal();
+
+ // Calculate the loops for a cycle.
+ const double voltage = turret_.UpdateController(disabled);
+
+ turret_.UpdateObserver(voltage);
+
+ // Write out all the voltages.
+ if (turret_output) {
+ *turret_output = voltage;
+ }
+
const flatbuffers::Offset<PotAndAbsoluteEncoderProfiledJointStatus>
- turret_status_offset =
- turret_.Iterate(turret_goal, position->turret(), turret_output, fbb);
+ turret_status_offset = turret_.MakeStatus(fbb);
const flatbuffers::Offset<PotAndAbsoluteEncoderProfiledJointStatus>
altitude_status_offset = altitude_.Iterate(