1414import edu .wpi .first .math .MathUtil ;
1515import edu .wpi .first .math .Matrix ;
1616import edu .wpi .first .math .controller .PIDController ;
17+ import edu .wpi .first .math .controller .ProfiledPIDController ;
1718import edu .wpi .first .math .estimator .SwerveDrivePoseEstimator ;
1819import edu .wpi .first .math .geometry .Pose2d ;
1920import edu .wpi .first .math .geometry .Rotation2d ;
2627import edu .wpi .first .math .kinematics .SwerveModuleState ;
2728import edu .wpi .first .math .numbers .N1 ;
2829import edu .wpi .first .math .numbers .N3 ;
30+ import edu .wpi .first .math .trajectory .TrapezoidProfile .Constraints ;
2931import edu .wpi .first .math .util .Units ;
3032import edu .wpi .first .wpilibj .Alert ;
3133import edu .wpi .first .wpilibj .DriverStation ;
@@ -65,7 +67,8 @@ public class SwerveDrive extends SubsystemBase {
6567 private PIDController trajHeadingController ;
6668
6769 private PIDController presetRotController ;
68- private PIDController presetPosController ;
70+ private ProfiledPIDController presetXController ;
71+ private PIDController presetYController ;
6972
7073 private FieldZones fieldZone ;
7174
@@ -129,12 +132,18 @@ private void initMathModels() {
129132 );
130133 poseEstimator = new SwerveDrivePoseEstimator (kinematics , rawGyroRotation , modulePositions , (Constants .isRed () ? new Pose2d (17.548 , 8.052 , Rotation2d .kPi ) : new Pose2d ()));
131134
132- presetPosController = new PIDController (
135+ presetXController = new ProfiledPIDController (
136+ SwerveConstants .kPresetPosControlConstants .kP (),
137+ SwerveConstants .kPresetPosControlConstants .kI (),
138+ SwerveConstants .kPresetPosControlConstants .kD (),
139+ new Constraints (SwerveConstants .kMagVelLimit , SwerveConstants .kMagVelLimit * 2 )
140+ );
141+ presetYController = new PIDController (
133142 SwerveConstants .kPresetPosControlConstants .kP (),
134143 SwerveConstants .kPresetPosControlConstants .kI (),
135144 SwerveConstants .kPresetPosControlConstants .kD ()
136145 );
137- presetPosController .setTolerance (0.01 );
146+ presetYController .setTolerance (0.01 );
138147
139148 trajVXController = new PIDController (10 , 0 , 0 );
140149 trajVYController = new PIDController (10 , 0 , 0 );
@@ -321,7 +330,7 @@ public void injectPresetPosition(ChassisSpeeds chassisSpeeds, boolean fieldRelat
321330 errorPose = errorPose .rotateAround (Translation2d .kZero , desiredPose .getRotation ().unaryMinus ());
322331 Logger .recordOutput ("Swerve/desiredPose" , desiredPose );
323332 Logger .recordOutput ("Swerve/errorPose" , errorPose );
324- double vyReefRelative = presetPosController .calculate (errorPose .getY (), 0 );
333+ double vyReefRelative = presetYController .calculate (errorPose .getY (), 0 );
325334 if (vyReefRelative > 0.4 ) vyReefRelative *= elevatorSpeedFactor ; // TODO double check when higher kP
326335 Logger .recordOutput ("Swerve/vyReefRelative" , vyReefRelative );
327336
@@ -337,8 +346,8 @@ public void injectPresetPosition(ChassisSpeeds chassisSpeeds, boolean fieldRelat
337346 break ;
338347 case PROCESSOR :
339348 double vx = switch (Constants .kFieldType .getSelected ()) {
340- case ANDYMARK -> presetPosController .calculate (getPose ().getX (), Constants .isRed () ? FieldConstants .fieldWidth - 6.27 : 6.27 );
341- case WELDED -> presetPosController .calculate (getPose ().getX (), Constants .isRed () ? FieldConstants .fieldWidth - 6.18 : 6.18 );
349+ case ANDYMARK -> presetYController .calculate (getPose ().getX (), Constants .isRed () ? FieldConstants .fieldWidth - 6.27 : 6.27 );
350+ case WELDED -> presetYController .calculate (getPose ().getX (), Constants .isRed () ? FieldConstants .fieldWidth - 6.18 : 6.18 );
342351 default -> 0 ;
343352 } * elevatorSpeedFactor ;
344353 fieldRelativeSpeeds = fieldRelative ?
@@ -502,9 +511,9 @@ public Command runUpdateControlConstants() {
502511 for (SDSSwerveModule module : modules ) {
503512 module .updateControlConstants ();
504513 }
505- presetPosController .setP (SwerveConstants .kPresetRotControlConstants .kP ());
506- presetPosController .setI (SwerveConstants .kPresetRotControlConstants .kI ());
507- presetPosController .setD (SwerveConstants .kPresetRotControlConstants .kD ());
514+ presetYController .setP (SwerveConstants .kPresetRotControlConstants .kP ());
515+ presetYController .setI (SwerveConstants .kPresetRotControlConstants .kI ());
516+ presetYController .setD (SwerveConstants .kPresetRotControlConstants .kD ());
508517 System .out .println ("Swerve control constants updated" );
509518 });
510519 }
0 commit comments