88import com .ctre .phoenix6 .controls .*;
99import com .ctre .phoenix6 .hardware .TalonFX ;
1010import com .ctre .phoenix6 .hardware .TalonFXS ;
11+ import edu .wpi .first .math .MathUtil ;
1112import edu .wpi .first .math .geometry .Rotation2d ;
1213import edu .wpi .first .math .geometry .Translation2d ;
1314import edu .wpi .first .math .kinematics .SwerveModulePosition ;
@@ -41,7 +42,6 @@ public class FXSwerveModule implements SwerveModule {
4142 private final TalonFX driveTalon ;
4243 private final double azimuthCountsPerRev ;
4344 private final double driveCountsPerRev ;
44- private final double azimuthPulseWidthCPR ;
4545 private final double driveGearRatio ;
4646 private final double wheelCircumferenceMeters ;
4747 private final double driveDeadbandMetersPerSecond ;
@@ -53,7 +53,6 @@ public class FXSwerveModule implements SwerveModule {
5353 private int closedLoopSlot ;
5454 private int azimuthSlot ;
5555 private boolean compensateLatency ;
56- private double azimuthPositionOffset = 0.0 ;
5756
5857 // Status Signals
5958 private StatusSignal <Angle > drivePosition ;
@@ -65,7 +64,6 @@ private FXSwerveModule(FXBuilder builder) {
6564 driveTalon = builder .driveTalon ;
6665 azimuthCountsPerRev = builder .azimuthCountsPerRev ;
6766 driveCountsPerRev = builder .driveCountsPerRev ;
68- azimuthPulseWidthCPR = builder .azimuthPulseWidthCPR ;
6967 driveGearRatio = builder .driveGearRatio ;
7068 wheelCircumferenceMeters = Math .PI * Inches .of (builder .wheelDiameterInches ).in (Meters );
7169 driveDeadbandMetersPerSecond = builder .driveDeadbandMetersPerSecond ;
@@ -166,13 +164,11 @@ public void loadAndSetAzimuthZeroReference() {
166164
167165 double azimuthAbsoluteCounts = getAzimuthAbsoluteEncoderCounts ();
168166 logger .info ("swerve module {}: azimuth absolute position = {}" , index , azimuthAbsoluteCounts );
169- logger .info (
170- "swerve module {}: current azimuth endocder position = {}" ,
171- index ,
172- azimuthAbsoluteCounts - reference );
167+ double azimuthSetpoint = azimuthAbsoluteCounts - reference ;
168+ azimuthTalon .setPosition (azimuthSetpoint );
169+ logger .info ("swerve module {}: set azimuth encoder = {}" , index , azimuthSetpoint );
173170
174- azimuthPositionOffset = reference / azimuthPulseWidthCPR ;
175- setAzimuthPosition (azimuthAbsoluteCounts );
171+ setAzimuthPosition (azimuthSetpoint );
176172 }
177173
178174 public TalonFXS getAzimuthTalon () {
@@ -184,21 +180,12 @@ public TalonFX getDriveTalon() {
184180 }
185181
186182 private double getAzimuthAbsoluteEncoderCounts () {
187- // double extraRotations =
188- // azimuthPosition.getValueAsDouble() > 0
189- // ? Math.floor(azimuthPosition.getValueAsDouble())
190- // : Math.ceil(azimuthPosition.getValueAsDouble());
191- // return azimuthPosition.getValueAsDouble() - extraRotations; // correct to within one
192- // rotation
193- return ((int ) (azimuthPosition .getValueAsDouble () * azimuthPulseWidthCPR )) & 0xFFF ;
183+ return MathUtil .inputModulus (
184+ azimuthTalon .getRawPulseWidthPosition ().getValueAsDouble (), 0.0 , 1.0 );
194185 }
195186
196187 private double getAzimuthEcoderPosition () {
197- return azimuthPosition .getValueAsDouble () - azimuthPositionOffset ;
198- }
199-
200- public double getAzimuthPositionOffset () {
201- return azimuthPositionOffset ;
188+ return azimuthPosition .getValueAsDouble ();
202189 }
203190
204191 @ Override
@@ -234,19 +221,15 @@ private SwerveModuleState setAzimuthOptimizedState(SwerveModuleState desiredStat
234221 private void setAzimuthPosition (double position ) {
235222 if (units == V6TalonSwerveModule .ClosedLoopUnits .DUTY_CYCLE ) {
236223 MotionMagicDutyCycle controlRequest =
237- new MotionMagicDutyCycle (position + azimuthPositionOffset )
238- .withEnableFOC (false )
239- .withSlot (azimuthSlot );
224+ new MotionMagicDutyCycle (position ).withEnableFOC (false ).withSlot (azimuthSlot );
240225 azimuthTalon .setControl (controlRequest );
241226 } else if (units == V6TalonSwerveModule .ClosedLoopUnits .VOLTAGE ) {
242227 MotionMagicVoltage controlReqest =
243- new MotionMagicVoltage (position + azimuthPositionOffset )
244- .withEnableFOC (false )
245- .withSlot (azimuthSlot );
228+ new MotionMagicVoltage (position ).withEnableFOC (false ).withSlot (azimuthSlot );
246229 azimuthTalon .setControl (controlReqest );
247230 } else {
248231 MotionMagicTorqueCurrentFOC controlRequest =
249- new MotionMagicTorqueCurrentFOC (position + azimuthPositionOffset ).withSlot (azimuthSlot );
232+ new MotionMagicTorqueCurrentFOC (position ).withSlot (azimuthSlot );
250233 azimuthTalon .setControl (controlRequest );
251234 }
252235 }
@@ -320,7 +303,6 @@ public static class FXBuilder {
320303 public static final double kDefaultTalonFXCountsPerRev = 1.0 ;
321304 private double azimuthCountsPerRev = kDefaultTalonFXCountsPerRev ;
322305 private double driveCountsPerRev = kDefaultTalonFXCountsPerRev ;
323- private double azimuthPulseWidthCPR = 4096.0 ;
324306
325307 private TalonFXS azimuthTalon ;
326308 private TalonFX driveTalon ;
@@ -366,11 +348,6 @@ public FXBuilder azimuthEncoderCountsPerRevolution(double countsPerRev) {
366348 return this ;
367349 }
368350
369- public FXBuilder azimuthPulseWidthCPR (double azimuthPulseWidthCPR ) {
370- this .azimuthPulseWidthCPR = azimuthPulseWidthCPR ;
371- return this ;
372- }
373-
374351 public FXBuilder driveDeadbandMetersPerSecond (double driveDeadbandMetersPerSecond ) {
375352 this .driveDeadbandMetersPerSecond = driveDeadbandMetersPerSecond ;
376353 return this ;
@@ -430,13 +407,6 @@ private void validateSwerveModuleObject(FXSwerveModule module) {
430407 if (module .azimuthCountsPerRev <= 0 )
431408 throw new IllegalArgumentException (
432409 "azimuth encoder counts per revolution must be greater than zero." );
433- if (module .azimuthPulseWidthCPR <= 0 )
434- throw new IllegalArgumentException ("azimuth pulse width cpr must be greater than zero" );
435- // TalonFXSConfiguration azimuthConfig = new TalonFXSConfiguration();
436- // module.azimuthTalon.getConfigurator().refresh(azimuthConfig);
437- // if (azimuthConfig.ExternalFeedback.ExternalFeedbackSensorSource
438- // != ExternalFeedbackSensorSourceValue.PulseWidth)
439- // throw new IllegalArgumentException("Azimuth must use Pulse Width Feedback");
440410 if (module .driveCountsPerRev <= 0 )
441411 throw new IllegalArgumentException (
442412 "drive encoder counts per revolution must be greater than zero." );
0 commit comments