|
1 | 1 | package frc.robot.swerve;
|
2 | 2 |
|
| 3 | +import java.util.function.Function; |
| 4 | + |
| 5 | +import edu.wpi.first.math.filter.SlewRateLimiter; |
3 | 6 | import edu.wpi.first.math.geometry.Rotation2d;
|
4 | 7 | import edu.wpi.first.math.kinematics.ChassisSpeeds;
|
5 | 8 | import edu.wpi.first.math.kinematics.SwerveDriveKinematics;
|
6 | 9 | import edu.wpi.first.math.kinematics.SwerveModulePosition;
|
7 | 10 | import edu.wpi.first.math.kinematics.SwerveModuleState;
|
| 11 | +import edu.wpi.first.math.util.Units; |
8 | 12 | import edu.wpi.first.wpilibj.shuffleboard.ShuffleboardLayout;
|
9 | 13 | import edu.wpi.first.wpilibj.shuffleboard.ShuffleboardTab;
|
10 | 14 | import edu.wpi.first.wpilibj2.command.Command;
|
11 | 15 | import edu.wpi.first.wpilibj2.command.button.CommandXboxController;
|
| 16 | +import frc.lib.DriveRequest; |
12 | 17 | import frc.lib.Subsystem;
|
13 | 18 | import frc.lib.Telemetry;
|
14 | 19 | import frc.lib.config.MotionProfileConfig;
|
15 | 20 | import frc.lib.controller.SwerveModuleIO;
|
16 | 21 | import frc.robot.RobotConstants;
|
| 22 | +import frc.robot.odometry.Odometry; |
17 | 23 |
|
18 | 24 | /** Swerve subsystem. */
|
19 | 25 | public class Swerve extends Subsystem {
|
@@ -242,8 +248,31 @@ public Rotation2d maximumRotationVelocity() {
|
242 | 248 | * @param controller the Xbox controller to use.
|
243 | 249 | * @return a command that drives the swerve using an Xbox controller.
|
244 | 250 | */
|
245 |
| - public Command driveWithController(CommandXboxController controller) { |
246 |
| - return new DriveCommand(controller); |
| 251 | + public Command teleopDrive(CommandXboxController controller) { |
| 252 | + final SlewRateLimiter xAccelerationLimiter = translationMotionProfileConfig.createAccelerationLimiter(); |
| 253 | + final SlewRateLimiter yAccelerationLimiter = translationMotionProfileConfig.createAccelerationLimiter(); |
| 254 | + |
| 255 | + final Function<Double, Double> rotationVelocityLimiter = rotationMotionProfileConfig.createVelocityClamper(); |
| 256 | + |
| 257 | + final Function<ChassisSpeeds, ChassisSpeeds> chassisSpeedsLimiter = chassisSpeeds -> { |
| 258 | + return new ChassisSpeeds( |
| 259 | + xAccelerationLimiter.calculate(chassisSpeeds.vxMetersPerSecond), |
| 260 | + yAccelerationLimiter.calculate(chassisSpeeds.vyMetersPerSecond), |
| 261 | + Units.rotationsToRadians(rotationVelocityLimiter.apply(Units.radiansToRotations(chassisSpeeds.omegaRadiansPerSecond))) |
| 262 | + ); |
| 263 | + }; |
| 264 | + |
| 265 | + final Function<DriveRequest, ChassisSpeeds> chassisSpeedsGetter = request -> { |
| 266 | + return ChassisSpeeds.fromFieldRelativeSpeeds( |
| 267 | + request.translationAxis().getX() * translationMotionProfileConfig.maximumVelocity(), |
| 268 | + request.translationAxis().getY() * translationMotionProfileConfig.maximumVelocity(), |
| 269 | + request.rotationVelocityAxis() * Units.rotationsToRadians(rotationMotionProfileConfig.maximumVelocity()), |
| 270 | + Odometry.getInstance().getDriverRelativeHeading()); |
| 271 | + }; |
| 272 | + |
| 273 | + return run(() -> { |
| 274 | + setChassisSpeeds(chassisSpeedsLimiter.apply(chassisSpeedsGetter.apply(DriveRequest.fromController(controller)))); |
| 275 | + }); |
247 | 276 | }
|
248 | 277 |
|
249 | 278 | /**
|
|
0 commit comments