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());
});