@@ -66,9 +66,9 @@ public class SwerveDrive extends SubsystemBase {
6666 private PIDController trajVYController ;
6767 private PIDController trajHeadingController ;
6868
69- private PIDController presetRotController ;
69+ private ProfiledPIDController presetRotController ;
7070 private ProfiledPIDController presetXController ;
71- private PIDController presetYController ;
71+ private ProfiledPIDController presetYController ;
7272
7373 private FieldZones fieldZone ;
7474
@@ -82,6 +82,7 @@ public class SwerveDrive extends SubsystemBase {
8282 private PresetPositionType desiredPresetPosition ;
8383 private DoubleSupplier xReefChooser ;
8484 private DoubleSupplier yReefChooser ;
85+ private boolean presetXEnabled ;
8586
8687 private DoubleSupplier elevatorHeightSupplier ;
8788 private BooleanSupplier elevatorFactorOverrideSupplier ;
@@ -136,14 +137,24 @@ private void initMathModels() {
136137 SwerveConstants .kPresetPosControlConstants .kP (),
137138 SwerveConstants .kPresetPosControlConstants .kI (),
138139 SwerveConstants .kPresetPosControlConstants .kD (),
139- new Constraints (SwerveConstants .kMagVelLimit , SwerveConstants .kMagVelLimit * 2 )
140+ new Constraints (SwerveConstants .kMagVelLimit , SwerveConstants .kMagVelLimit * 2.5 )
140141 );
141- presetYController = new PIDController (
142+ presetXController .setTolerance (0.01 );
143+ presetYController = new ProfiledPIDController (
142144 SwerveConstants .kPresetPosControlConstants .kP (),
143145 SwerveConstants .kPresetPosControlConstants .kI (),
144- SwerveConstants .kPresetPosControlConstants .kD ()
146+ SwerveConstants .kPresetPosControlConstants .kD (),
147+ new Constraints (SwerveConstants .kMagVelLimit , SwerveConstants .kMagVelLimit * 2.5 )
145148 );
146149 presetYController .setTolerance (0.01 );
150+ presetRotController = new ProfiledPIDController (
151+ SwerveConstants .kPresetRotControlConstants .kP (),
152+ SwerveConstants .kPresetRotControlConstants .kI (),
153+ SwerveConstants .kPresetRotControlConstants .kD (),
154+ new Constraints (SwerveConstants .kRotVelLimit , SwerveConstants .kRotVelLimit * 2.5 )
155+ );
156+ presetRotController .setTolerance (0.5 );
157+ presetRotController .enableContinuousInput (0 , 2 * Math .PI );
147158
148159 trajVXController = new PIDController (10 , 0 , 0 );
149160 trajVYController = new PIDController (10 , 0 , 0 );
@@ -156,6 +167,7 @@ private void initMathModels() {
156167 fieldZone = FieldZones .BLUE_CLOSE ;
157168
158169 desiredPresetPosition = PresetPositionType .NONE ;
170+ presetXEnabled = false ;
159171
160172 errorX = 10 ;
161173 errorY = 10 ;
@@ -312,7 +324,7 @@ public void injectPresetRotation(ChassisSpeeds chassisSpeeds, boolean fieldRelat
312324
313325 public void toPresetRotation (ChassisSpeeds chassisSpeeds , Rotation2d heading , boolean fieldRelative , boolean optimize ) {
314326 ChassisSpeeds desiredSpeeds = chassisSpeeds ;
315- desiredSpeeds .omegaRadiansPerSecond = trajHeadingController .calculate (getPose ().getRotation ().getRadians (), heading .getRadians ());
327+ desiredSpeeds .omegaRadiansPerSecond = presetRotController .calculate (getPose ().getRotation ().getRadians (), heading .getRadians ());
316328 injectPresetPosition (desiredSpeeds , fieldRelative , optimize );
317329 }
318330
@@ -330,6 +342,11 @@ public void injectPresetPosition(ChassisSpeeds chassisSpeeds, boolean fieldRelat
330342 errorPose = errorPose .rotateAround (Translation2d .kZero , desiredPose .getRotation ().unaryMinus ());
331343 Logger .recordOutput ("Swerve/desiredPose" , desiredPose );
332344 Logger .recordOutput ("Swerve/errorPose" , errorPose );
345+
346+ double vxReefRelative = presetXController .calculate (errorPose .getX (), 0 );
347+ if (vxReefRelative > 0.4 ) vxReefRelative *= elevatorSpeedFactor ; // TODO double check when higher kP
348+ Logger .recordOutput ("Swerve/vxReefRelative" , vxReefRelative );
349+
333350 double vyReefRelative = presetYController .calculate (errorPose .getY (), 0 );
334351 if (vyReefRelative > 0.4 ) vyReefRelative *= elevatorSpeedFactor ; // TODO double check when higher kP
335352 Logger .recordOutput ("Swerve/vyReefRelative" , vyReefRelative );
@@ -338,8 +355,12 @@ public void injectPresetPosition(ChassisSpeeds chassisSpeeds, boolean fieldRelat
338355 (Constants .isRed () ? flipChassisSpeeds (chassisSpeeds ) : chassisSpeeds ) :
339356 ChassisSpeeds .fromRobotRelativeSpeeds (chassisSpeeds , getPose ().getRotation ());
340357 Logger .recordOutput ("Swerve/fieldRelativeSpeedsNoFilter" , fieldRelativeSpeeds );
358+
341359 ChassisSpeeds reefRelativeSpeeds = ChassisSpeeds .fromFieldRelativeSpeeds (fieldRelativeSpeeds , fieldZone .rotation ());
360+ Logger .recordOutput ("Swerve/presetXEnabled" , presetXEnabled );
361+ if (presetXEnabled ) reefRelativeSpeeds .vxMetersPerSecond = vxReefRelative ;
342362 reefRelativeSpeeds .vyMetersPerSecond = vyReefRelative ;
363+
343364 fieldRelativeSpeeds = ChassisSpeeds .fromRobotRelativeSpeeds (reefRelativeSpeeds , fieldZone .rotation ());
344365 Logger .recordOutput ("Swerve/fieldRelativeSpeedsReef" , fieldRelativeSpeeds );
345366 runChassisSpeeds (fieldRelativeSpeeds , true , optimize , true );
@@ -511,9 +532,15 @@ public Command runUpdateControlConstants() {
511532 for (SDSSwerveModule module : modules ) {
512533 module .updateControlConstants ();
513534 }
514- presetYController .setP (SwerveConstants .kPresetRotControlConstants .kP ());
515- presetYController .setI (SwerveConstants .kPresetRotControlConstants .kI ());
516- presetYController .setD (SwerveConstants .kPresetRotControlConstants .kD ());
535+ presetXController .setP (SwerveConstants .kPresetPosControlConstants .kP ());
536+ presetXController .setI (SwerveConstants .kPresetPosControlConstants .kI ());
537+ presetXController .setD (SwerveConstants .kPresetPosControlConstants .kD ());
538+ presetYController .setP (SwerveConstants .kPresetPosControlConstants .kP ());
539+ presetYController .setI (SwerveConstants .kPresetPosControlConstants .kI ());
540+ presetYController .setD (SwerveConstants .kPresetPosControlConstants .kD ());
541+ presetRotController .setP (SwerveConstants .kPresetRotControlConstants .kP ());
542+ presetRotController .setI (SwerveConstants .kPresetRotControlConstants .kI ());
543+ presetRotController .setD (SwerveConstants .kPresetRotControlConstants .kD ());
517544 System .out .println ("Swerve control constants updated" );
518545 });
519546 }
@@ -543,6 +570,10 @@ public Command runTogglePresetPosition(PresetPositionType type) {
543570 });
544571 }
545572
573+ public Command runSetPresetXEnabled (boolean presetXEnabled ) {
574+ return runOnce (() -> this .presetXEnabled = presetXEnabled );
575+ }
576+
546577 @ AutoLogOutput (key = "Odometry/Pose" )
547578 public Pose2d getPose () {
548579 return poseEstimator .getEstimatedPosition ();
0 commit comments