Add shuttle auto-aim

This change prepares the code for shuttle support by adding a new button,
shot table, and shot target location for the shuttle shot.

Signed-off-by: Filip Kujawa <filip.j.kujawa@gmail.com>
Change-Id: Ic70f1b0344fcab8316553cbda4a337cf8353dfd6
diff --git a/y2024/control_loops/superstructure/aiming.cc b/y2024/control_loops/superstructure/aiming.cc
index bf68527..200029e 100644
--- a/y2024/control_loops/superstructure/aiming.cc
+++ b/y2024/control_loops/superstructure/aiming.cc
@@ -18,6 +18,10 @@
       interpolation_table_(
           y2024::constants::Values::InterpolationTableFromFlatbuffer(
               robot_constants_->common()->shooter_interpolation_table())),
+      interpolation_table_shuttle_(
+          y2024::constants::Values::InterpolationTableFromFlatbuffer(
+              robot_constants_->common()
+                  ->shooter_shuttle_interpolation_table())),
       joystick_state_fetcher_(
           event_loop_->MakeFetcher<aos::JoystickState>("/aos")) {}
 
@@ -25,7 +29,12 @@
     const frc971::control_loops::drivetrain::Status *status,
     frc971::control_loops::aiming::ShotMode shot_mode,
     frc971::control_loops::StaticZeroingSingleDOFProfiledSubsystemGoalStatic
-        *turret_goal) {
+        *turret_goal,
+    AutoAimMode auto_aim_mode) {
+  // Default to aiming at the speaker in the absence of any other targets.
+  if (auto_aim_mode == AutoAimMode::NONE) {
+    auto_aim_mode = AutoAimMode::SPEAKER;
+  }
   if (status == nullptr) {
     return;
   }
@@ -41,22 +50,13 @@
     alliance = joystick_state_fetcher_->alliance();
   }
 
-  const frc971::control_loops::Pose red_alliance_goal(
-      frc971::ToEigenOrDie<3, 1>(*robot_constants_->common()
-                                      ->shooter_targets()
-                                      ->red_alliance()
-                                      ->pos()),
-      robot_constants_->common()->shooter_targets()->red_alliance()->theta());
-
-  const frc971::control_loops::Pose blue_alliance_goal(
-      frc971::ToEigenOrDie<3, 1>(*robot_constants_->common()
-                                      ->shooter_targets()
-                                      ->blue_alliance()
-                                      ->pos()),
-      robot_constants_->common()->shooter_targets()->blue_alliance()->theta());
+  frc971::shooter_interpolation::InterpolationTable<
+      y2024::constants::Values::ShotParams> *current_interpolation_table =
+      interpolation_tables_.at(auto_aim_mode);
 
   const frc971::control_loops::Pose goal =
-      alliance == aos::Alliance::kRed ? red_alliance_goal : blue_alliance_goal;
+      alliance == aos::Alliance::kRed ? red_alliance_goals_.at(auto_aim_mode)
+                                      : blue_alliance_goals_.at(auto_aim_mode);
 
   const Eigen::Vector2d linear_angular =
       drivetrain_config_.Tlr_to_la() *
@@ -71,7 +71,7 @@
       ShotConfig{goal, shot_mode,
                  frc971::constants::Range::FromFlatbuffer(
                      robot_constants_->common()->turret()->range()),
-                 interpolation_table_.Get(current_goal_.target_distance)
+                 current_interpolation_table->Get(current_goal_.target_distance)
                      .shot_speed_over_ground,
                  /*wrap_mode=*/0.15, M_PI - kTurretZeroOffset},
       RobotState{