diff --git a/src/main/java/frc/robot/subsystems/DriveSubsystem.java b/src/main/java/frc/robot/subsystems/DriveSubsystem.java index 3cb2254e..1894a5cb 100644 --- a/src/main/java/frc/robot/subsystems/DriveSubsystem.java +++ b/src/main/java/frc/robot/subsystems/DriveSubsystem.java @@ -47,7 +47,7 @@ public class DriveSubsystem extends SubsystemBase { // Odometry class for tracking robot pose SwerveDriveOdometry m_odometry = new SwerveDriveOdometry( DriveConstants.kDriveKinematics, - Rotation2d.fromDegrees(m_gyro.getAngle(IMUAxis.kZ)), + getHeading(), new SwerveModulePosition[] { m_frontLeft.getPosition(), m_frontRight.getPosition(), @@ -65,7 +65,7 @@ public DriveSubsystem() { public void periodic() { // Update the odometry in the periodic block m_odometry.update( - Rotation2d.fromDegrees(m_gyro.getAngle(IMUAxis.kZ)), + getHeading(), new SwerveModulePosition[] { m_frontLeft.getPosition(), m_frontRight.getPosition(), @@ -90,7 +90,7 @@ public Pose2d getPose() { */ public void resetOdometry(Pose2d pose) { m_odometry.resetPosition( - Rotation2d.fromDegrees(m_gyro.getAngle(IMUAxis.kZ)), + getHeading(), new SwerveModulePosition[] { m_frontLeft.getPosition(), m_frontRight.getPosition(), @@ -117,8 +117,7 @@ public void drive(double xSpeed, double ySpeed, double rot, boolean fieldRelativ var swerveModuleStates = DriveConstants.kDriveKinematics.toSwerveModuleStates( fieldRelative - ? ChassisSpeeds.fromFieldRelativeSpeeds(xSpeedDelivered, ySpeedDelivered, rotDelivered, - Rotation2d.fromDegrees(m_gyro.getAngle(IMUAxis.kZ))) + ? ChassisSpeeds.fromFieldRelativeSpeeds(xSpeedDelivered, ySpeedDelivered, rotDelivered, getHeading()) : new ChassisSpeeds(xSpeedDelivered, ySpeedDelivered, rotDelivered)); SwerveDriveKinematics.desaturateWheelSpeeds( swerveModuleStates, DriveConstants.kMaxSpeedMetersPerSecond); @@ -168,10 +167,10 @@ public void zeroHeading() { /** * Returns the heading of the robot. * - * @return the robot's heading in degrees, from -180 to 180 + * @return the robot's heading as a Rotation2d */ - public double getHeading() { - return Rotation2d.fromDegrees(m_gyro.getAngle(IMUAxis.kZ)).getDegrees(); + public Rotation2d getHeading() { + return Rotation2d.fromDegrees(m_gyro.getAngle(IMUAxis.kZ) * (DriveConstants.kGyroReversed ? -1.0 : 1.0)); } /**