Skip to content

Commit 6d4fa78

Browse files
committed
refactor: simplified code
1 parent b09950c commit 6d4fa78

File tree

1 file changed

+26
-29
lines changed

1 file changed

+26
-29
lines changed

src/main/java/frc/robot/subsystems/DriveSubsystem.java

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -233,28 +233,31 @@ public void drive(double xSpeed, double ySpeed, double rotation, boolean fieldRe
233233
calculatedRotation = m_headingCorrectionPID.calculate(currentAngle);
234234
}
235235

236-
// Depending on whether the robot is being driven in field relative, calculate
237-
// the desired states for each of the modules
238-
m_desiredStates = DriveConstants.kDriveKinematics.toSwerveModuleStates(
239-
fieldRelative
240-
? ChassisSpeeds.fromFieldRelativeSpeeds(xSpeed, ySpeed, calculatedRotation,
241-
Robot.isReal() ? m_gyro.getRotation2d() : new Rotation2d(m_gyroAngle))
242-
: new ChassisSpeeds(xSpeed, ySpeed, calculatedRotation));
236+
// create chassis speeds
237+
ChassisSpeeds unlimitedSpeeds = fieldRelative
238+
? ChassisSpeeds.fromFieldRelativeSpeeds(xSpeed, ySpeed, calculatedRotation,
239+
Robot.isReal() ? m_gyro.getRotation2d() : new Rotation2d(m_gyroAngle))
240+
: new ChassisSpeeds(xSpeed, ySpeed, calculatedRotation);
243241

244-
SwerveDriveKinematics.desaturateWheelSpeeds(
245-
m_desiredStates, DriveConstants.kMaxSpeedMetersPerSecond);
242+
// inverse kinematics to module states
243+
m_desiredStates = DriveConstants.kDriveKinematics.toSwerveModuleStates(unlimitedSpeeds);
246244

247-
// acceleration limits
245+
// limit max velocity
246+
SwerveDriveKinematics.desaturateWheelSpeeds(
247+
m_desiredStates, DriveConstants.kMaxSpeedMetersPerSecond);
248248

249-
// convert to chassis speeds for calculations
250-
ChassisSpeeds originalSpeeds = DriveConstants.kDriveKinematics.toChassisSpeeds(m_desiredStates);
249+
// acceleration limiting code needs desaturated speeds, so convert desaturated
250+
// module states back to chassis speeds
251+
unlimitedSpeeds = DriveConstants.kDriveKinematics.toChassisSpeeds(m_desiredStates);
252+
253+
// acceleration limits
251254

252255
// slew rate limiter only works in one dimension so it can't be used for
253256
// translation
254257

255258
// calculate speed vector delta magnitude
256259
final Vector<N2> dv = VecBuilder
257-
.fill(originalSpeeds.vxMetersPerSecond, originalSpeeds.vyMetersPerSecond)
260+
.fill(unlimitedSpeeds.vxMetersPerSecond, unlimitedSpeeds.vyMetersPerSecond)
258261
.minus(m_prevTranSpeed);
259262

260263
final double dvMagnitude = dv.norm();
@@ -271,27 +274,21 @@ public void drive(double xSpeed, double ySpeed, double rotation, boolean fieldRe
271274
final Vector<N2> newV = m_prevTranSpeed.plus(dvLimited);
272275

273276
// correct chassis speeds
274-
originalSpeeds.vxMetersPerSecond = newV.get(0);
275-
originalSpeeds.vyMetersPerSecond = newV.get(1);
276-
277-
// inverse kinematics back to module states
278-
m_desiredStates = DriveConstants.kDriveKinematics.toSwerveModuleStates(originalSpeeds);
277+
unlimitedSpeeds.vxMetersPerSecond = newV.get(0);
278+
unlimitedSpeeds.vyMetersPerSecond = newV.get(1);
279279
}
280280

281-
// recalculate chassis speed for rotation limits
282-
originalSpeeds = DriveConstants.kDriveKinematics.toChassisSpeeds(m_desiredStates);
281+
// calculate new rotation speed
282+
final double limitedOmega = m_rotationRateFilter.calculate(unlimitedSpeeds.omegaRadiansPerSecond);
283283

284-
// calculate new rotation speed
285-
final double limitedOmega = m_rotationRateFilter.calculate(originalSpeeds.omegaRadiansPerSecond);
284+
// correct chassis speeds
285+
unlimitedSpeeds.omegaRadiansPerSecond = limitedOmega;
286286

287-
// scale all modules to limit rotation
288-
final double rotationScalar = originalSpeeds.omegaRadiansPerSecond == 0 ? 1
289-
: limitedOmega / originalSpeeds.omegaRadiansPerSecond;
290-
for (SwerveModuleState state : m_desiredStates) {
291-
state.speedMetersPerSecond *= rotationScalar;
292-
}
287+
// inverse kinematics back to module states
288+
m_desiredStates = DriveConstants.kDriveKinematics.toSwerveModuleStates(unlimitedSpeeds);
293289

294-
m_prevTranSpeed = VecBuilder.fill(originalSpeeds.vxMetersPerSecond, originalSpeeds.vyMetersPerSecond);
290+
// update past speeds
291+
m_prevTranSpeed = VecBuilder.fill(unlimitedSpeeds.vxMetersPerSecond, unlimitedSpeeds.vyMetersPerSecond);
295292
}
296293

297294
/**

0 commit comments

Comments
 (0)