mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-21 01:01:43 +00:00
[wpimath] Conserve previously calculated swerve module angles when updating states for stationary ChassisSpeeds (#4208)
* Calculated swerve module states now stored in a member variable * If ChassisSpeeds(0, 0, 0) is converted to module speeds, the previously calculated module angle will be conserved, with forward speed set to 0 * New tests added
This commit is contained in:
@@ -77,6 +77,25 @@ class SwerveDriveKinematicsTest {
|
||||
() -> assertEquals(0.0, chassisSpeeds.omegaRadiansPerSecond, kEpsilon));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testConserveWheelAngle() {
|
||||
ChassisSpeeds speeds = new ChassisSpeeds(0, 0, 2 * Math.PI);
|
||||
m_kinematics.toSwerveModuleStates(speeds);
|
||||
var moduleStates = m_kinematics.toSwerveModuleStates(new ChassisSpeeds());
|
||||
|
||||
// Robot is stationary, but module angles are preserved.
|
||||
|
||||
assertAll(
|
||||
() -> assertEquals(0.0, moduleStates[0].speedMetersPerSecond, kEpsilon),
|
||||
() -> assertEquals(0.0, moduleStates[1].speedMetersPerSecond, kEpsilon),
|
||||
() -> assertEquals(0.0, moduleStates[2].speedMetersPerSecond, kEpsilon),
|
||||
() -> assertEquals(0.0, moduleStates[3].speedMetersPerSecond, kEpsilon),
|
||||
() -> assertEquals(135.0, moduleStates[0].angle.getDegrees(), kEpsilon),
|
||||
() -> assertEquals(45.0, moduleStates[1].angle.getDegrees(), kEpsilon),
|
||||
() -> assertEquals(-135.0, moduleStates[2].angle.getDegrees(), kEpsilon),
|
||||
() -> assertEquals(-45.0, moduleStates[3].angle.getDegrees(), kEpsilon));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testTurnInPlaceInverseKinematics() {
|
||||
ChassisSpeeds speeds = new ChassisSpeeds(0, 0, 2 * Math.PI);
|
||||
|
||||
Reference in New Issue
Block a user