Add motor gear ratios to y2024_swerve wpilib

Change-Id: I2e0e54dd2cb5d131c70d26e2189553244ed6fb1a
Signed-off-by: James Kuszmaul <jabukuszmaul+collab@gmail.com>
diff --git a/frc971/wpilib/swerve/swerve_module.h b/frc971/wpilib/swerve/swerve_module.h
index 7d91797..c509abc 100644
--- a/frc971/wpilib/swerve/swerve_module.h
+++ b/frc971/wpilib/swerve/swerve_module.h
@@ -62,14 +62,20 @@
         constants->absolute_encoder_scale());
   }
 
+  struct ModuleGearRatios {
+    double rotation;
+    double translation;
+  };
   // Populates a CAN-position message with the CAN-based devices (currently,
   // just the motors themselves).
+  // Scales the motors' position values by the provided gear ratios.
   void PopulateCanPosition(
       frc971::control_loops::swerve::SwerveModuleCanPositionStatic
-          *can_position) {
-    // TODO(james): Source these numbers from the constants.json.
-    rotation->SerializePosition(can_position->add_rotation(), 1.0);
-    translation->SerializePosition(can_position->add_translation(), 1.0);
+          *can_position,
+      const ModuleGearRatios &ratios) {
+    rotation->SerializePosition(can_position->add_rotation(), ratios.rotation);
+    translation->SerializePosition(can_position->add_translation(),
+                                   ratios.translation);
   }
 
   std::shared_ptr<TalonFX> rotation;
diff --git a/y2024_swerve/constants.h b/y2024_swerve/constants.h
index cf6c183..b5a89dd 100644
--- a/y2024_swerve/constants.h
+++ b/y2024_swerve/constants.h
@@ -24,12 +24,12 @@
   static constexpr double kDrivetrainStatorCurrentLimit() { return 35.0; }
   static constexpr double kDrivetrainSupplyCurrentLimit() { return 60.0; }
 
-  // TODO (maxwell): Make this the real value
-  static constexpr double kFollowerWheelCountsPerRevolution() { return 512.0; }
-  static constexpr double kFollowerWheelEncoderRatio() { return 1.0; }
-  static constexpr double kFollowerWheelRadius() { return 3.25 / 2 * 0.0254; }
-  static constexpr double kDrivetrainEncoderCountsPerRevolution() {
-    return 2048.0;
+  static constexpr double kRotationModuleRatio() {
+    return 9.0 / 24.0 * 14.0 / 72.0;
+  }
+
+  static constexpr double kTranslationModuleRatio() {
+    return 1.0 / 6.75 * 2.0 * .0254;
   }
 
   static constexpr double kMaxDrivetrainEncoderPulsesPerSecond() {
diff --git a/y2024_swerve/wpilib_interface.cc b/y2024_swerve/wpilib_interface.cc
index 445a618..83d431c 100644
--- a/y2024_swerve/wpilib_interface.cc
+++ b/y2024_swerve/wpilib_interface.cc
@@ -257,10 +257,18 @@
             falcon->RefreshNontimesyncedSignals();
           }
 
-          modules.front_left->PopulateCanPosition(builder->add_front_left());
-          modules.front_right->PopulateCanPosition(builder->add_front_right());
-          modules.back_left->PopulateCanPosition(builder->add_back_left());
-          modules.back_right->PopulateCanPosition(builder->add_back_right());
+          const frc971::wpilib::swerve::SwerveModule::ModuleGearRatios
+              gear_ratios{
+                  .rotation = constants::Values::kRotationModuleRatio(),
+                  .translation = constants::Values::kTranslationModuleRatio()};
+          modules.front_left->PopulateCanPosition(builder->add_front_left(),
+                                                  gear_ratios);
+          modules.front_right->PopulateCanPosition(builder->add_front_right(),
+                                                   gear_ratios);
+          modules.back_left->PopulateCanPosition(builder->add_back_left(),
+                                                 gear_ratios);
+          modules.back_right->PopulateCanPosition(builder->add_back_right(),
+                                                  gear_ratios);
 
           builder.CheckOk(builder.Send());
         });