Skip to content

Commit 2601952

Browse files
committed
REFACTOR: subsystem shouldn't have individual command factories
1 parent d6c97e5 commit 2601952

File tree

4 files changed

+78
-73
lines changed

4 files changed

+78
-73
lines changed

src/main/java/wmironpatriots/Robot.java

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
package wmironpatriots;
88

99
import com.ctre.phoenix6.SignalLogger;
10+
import edu.wpi.first.math.MathUtil;
1011
import edu.wpi.first.wpilibj.Alert;
1112
import edu.wpi.first.wpilibj.Alert.AlertType;
1213
import edu.wpi.first.wpilibj.DriverStation;
@@ -15,21 +16,19 @@
1516
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
1617
import edu.wpi.first.wpilibj2.command.Command;
1718
import edu.wpi.first.wpilibj2.command.Commands;
19+
import edu.wpi.first.wpilibj2.command.button.CommandPS5Controller;
1820
import edu.wpi.first.wpilibj2.command.button.CommandXboxController;
1921
import edu.wpi.first.wpilibj2.command.button.Trigger;
2022
import lib.drivers.LoggedCommandRobot;
2123
import monologue.Monologue;
22-
import wmironpatriots.commands.factories.SwerveCommandFactory;
2324
import wmironpatriots.subsystems.Swerve.Swerve;
2425

2526
public class Robot extends LoggedCommandRobot {
26-
private final CommandXboxController driver = new CommandXboxController(0);
27+
private final CommandPS5Controller driver = new CommandPS5Controller(0);
2728
private final CommandXboxController operator = new CommandXboxController(1);
2829

2930
private final Swerve swerve = Swerve.create();
3031

31-
private final SwerveCommandFactory swerveCmdFactory = new SwerveCommandFactory(swerve);
32-
3332
private final Alert browningOut;
3433

3534
public Robot() {
@@ -75,14 +74,25 @@ public Robot() {
7574
public void configureBindings() {}
7675

7776
public void configureGameBehavior() {
78-
swerve.setDefaultCommand(swerveCmdFactory.defaultCommand());
79-
80-
inTeleoperated.whileTrue(
81-
swerveCmdFactory
82-
.teleopDrive(driver::getLeftX, driver::getLeftY, driver::getRightX)
77+
swerve.setDefaultCommand(
78+
swerve
79+
.driveFromMagnitudes(
80+
() -> modifyJoystick(driver.getLeftY() * -1),
81+
() -> modifyJoystick(driver.getLeftX() * -1),
82+
() -> modifyJoystick(driver.getRightX() * -1))
8383
.repeatedly());
8484
}
8585

86+
/**
87+
* Squares and deadbands a joystick value
88+
*
89+
* @param val joystick value
90+
* @return modified joystick value
91+
*/
92+
public static double modifyJoystick(double val) {
93+
return MathUtil.applyDeadband(Math.abs(Math.pow(val, 2)) * Math.signum(val), 0.08);
94+
}
95+
8696
/** Command for driver controller rumble */
8797
private Command rumbleDriver(double value) {
8898
return Commands.run(() -> driver.setRumble(RumbleType.kBothRumble, value));

src/main/java/wmironpatriots/commands/factories/SwerveCommandFactory.java

Lines changed: 0 additions & 57 deletions
This file was deleted.

src/main/java/wmironpatriots/subsystems/Swerve/Swerve.java

Lines changed: 56 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
package wmironpatriots.subsystems.Swerve;
88

9+
import static edu.wpi.first.units.Units.MetersPerSecond;
10+
import static edu.wpi.first.units.Units.RadiansPerSecond;
911
import static edu.wpi.first.units.Units.Seconds;
1012

1113
import edu.wpi.first.math.estimator.SwerveDrivePoseEstimator;
@@ -22,6 +24,7 @@
2224
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
2325
import edu.wpi.first.wpilibj2.command.Command;
2426
import edu.wpi.first.wpilibj2.command.Subsystem;
27+
import java.util.function.DoubleSupplier;
2528
import wmironpatriots.Constants;
2629
import wmironpatriots.Robot;
2730
import wmironpatriots.subsystems.Swerve.gyro.GyroHardware;
@@ -43,7 +46,6 @@ public static Swerve create() {
4346

4447
return new Swerve(new GyroHardwareComp(), modules);
4548
} else {
46-
// ! PLACEHOLDER FOR SIM HARDWARE INIT
4749
for (int i = 0; i < modules.length; i++) {
4850
modules[i] = new Module(new ModuleHardwareSim(moduleConfigs[i]));
4951
}
@@ -92,7 +94,7 @@ public void periodic() {
9294
}
9395

9496
if (DriverStation.isDisabled()) {
95-
stop();
97+
stopAndLock();
9698
}
9799
}
98100

@@ -105,6 +107,46 @@ public void simulationPeriodic() {
105107
!Double.isNaN(angularRate) ? angularRate * Constants.LOOPTIME.in(Seconds) : 0));
106108
}
107109

110+
/**
111+
* Drives robot based on magnitudes
112+
*
113+
* @param xSpeedMagnitude Input stream representing desired x speed magnitude
114+
* @param ySpeedMagnitude Input stream representing desired y speed magnitude
115+
* @param angularRateMagnitude Input stream representing desiredd angular rate magnitude
116+
* @return {@link Command}
117+
*/
118+
public Command driveFromMagnitudes(
119+
DoubleSupplier xSpeedMagnitude,
120+
DoubleSupplier ySpeedMagnitude,
121+
DoubleSupplier angularRateMagnitude) {
122+
return this.run(
123+
() ->
124+
setChassisSpeeds(
125+
ChassisSpeeds.fromFieldRelativeSpeeds(
126+
xSpeedMagnitude.getAsDouble()
127+
* SwerveConstants.MAX_LINEAR_SPEED.in(MetersPerSecond),
128+
ySpeedMagnitude.getAsDouble()
129+
* SwerveConstants.MAX_LINEAR_SPEED.in(MetersPerSecond),
130+
angularRateMagnitude.getAsDouble()
131+
* SwerveConstants.MAX_ANGULAR_RATE.in(RadiansPerSecond),
132+
getHeadingRotation2d())));
133+
}
134+
135+
public Command stopAndLock() {
136+
return this.runOnce(
137+
() -> {
138+
var states =
139+
new SwerveModuleState[] {
140+
new SwerveModuleState(0.0, Rotation2d.fromDegrees(45)),
141+
new SwerveModuleState(0.0, Rotation2d.fromDegrees(-45)),
142+
new SwerveModuleState(0.0, Rotation2d.fromDegrees(45)),
143+
new SwerveModuleState(0.0, Rotation2d.fromDegrees(-45)),
144+
};
145+
146+
setSwerveModuleStates(states);
147+
});
148+
}
149+
108150
/**
109151
* Converts a {@link ChassisSpeeds} object representing robot relative speeds into {@link
110152
* SwerveModuleState} setpoint for each module
@@ -122,9 +164,19 @@ public void setChassisSpeeds(ChassisSpeeds speeds) {
122164
speeds = ChassisSpeeds.discretize(speeds, Constants.LOOPTIME.in(Seconds));
123165

124166
var states = kinematics.toSwerveModuleStates(speeds);
125-
SwerveDriveKinematics.desaturateWheelSpeeds(states, SwerveConstants.MAX_LINEAR_SPEED);
126-
setpoint.set(states);
167+
SwerveDriveKinematics.desaturateWheelSpeeds(
168+
states, SwerveConstants.MAX_LINEAR_SPEED.in(MetersPerSecond));
169+
170+
setSwerveModuleStates(states);
171+
}
127172

173+
/**
174+
* Sets the setpoints of each swerve module
175+
*
176+
* @param states {@link SwerveModuleState} array of desired states
177+
*/
178+
public void setSwerveModuleStates(SwerveModuleState[] states) {
179+
setpoint.set(states);
128180
for (int i = 0; i < modules.length; i++) {
129181
modules[i].setSetpoints(states[i]);
130182
}

src/main/java/wmironpatriots/subsystems/Swerve/SwerveConstants.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,10 @@ public static record ModuleConfig(
7070

7171
public static final Translation2d[] MODULE_OFFSETS =
7272
new Translation2d[] {
73-
new Translation2d(TRACK_WIDTH.in(Meters) / 2.0, -TRACK_WIDTH.in(Meters) / 2.0),
7473
new Translation2d(TRACK_WIDTH.in(Meters) / 2.0, TRACK_WIDTH.in(Meters) / 2.0),
75-
new Translation2d(-TRACK_WIDTH.in(Meters) / 2.0, -TRACK_WIDTH.in(Meters) / 2.0),
76-
new Translation2d(TRACK_WIDTH.in(Meters) / 2.0, -TRACK_WIDTH.in(Meters) / 2.0)
74+
new Translation2d(TRACK_WIDTH.in(Meters) / 2.0, -TRACK_WIDTH.in(Meters) / 2.0),
75+
new Translation2d(-TRACK_WIDTH.in(Meters) / 2.0, TRACK_WIDTH.in(Meters) / 2.0),
76+
new Translation2d(-TRACK_WIDTH.in(Meters) / 2.0, -TRACK_WIDTH.in(Meters) / 2.0)
7777
};
7878

7979
public static final ModuleConfig[] MODULE_CONFIGS =

0 commit comments

Comments
 (0)