Package swervelib

Class SwerveController

java.lang.Object
swervelib.SwerveController

public class SwerveController extends Object
Controller class used to convert raw inputs into robot speeds.
  • Field Details

  • Constructor Details

    • SwerveController

      public SwerveController(SwerveControllerConfiguration cfg)
      Construct the SwerveController object which is used for determining the speeds of the robot based on controller input.
      Parameters:
      cfg - SwerveControllerConfiguration containing the PIDF variables for the heading PIDF.
  • Method Details

    • getTranslation2d

      public static Translation2d getTranslation2d(ChassisSpeeds speeds)
      Helper function to get the Translation2d of the chassis speeds given the ChassisSpeeds.
      Parameters:
      speeds - Chassis speeds.
      Returns:
      Translation2d of the speed the robot is going in.
    • addSlewRateLimiters

      public void addSlewRateLimiters(SlewRateLimiter x, SlewRateLimiter y, SlewRateLimiter angle)
      Add slew rate limiters to all controls. This prevents the robot from ramping up too much. To disable a SlewRateLimiter set the desired one to null.
      Parameters:
      x - The SlewRateLimiter for the X velocity in meters/second.
      y - The SlewRateLimiter for the Y velocity in meters/second.
      angle - The SlewRateLimiter for the angular velocity in radians/second.
    • withinHypotDeadband

      public boolean withinHypotDeadband(double x, double y)
      Calculate the hypot deadband and check if the joystick is within it.
      Parameters:
      x - The x value for the joystick in which the deadband should be applied.
      y - The y value for the joystick in which the deadband should be applied.
      Returns:
      Whether the values are within the deadband from SwerveControllerConfiguration.angleJoyStickRadiusDeadband.
    • getTargetSpeeds

      public ChassisSpeeds getTargetSpeeds(double xInput, double yInput, double angle, double currentHeadingAngleRadians, double maxSpeed)
      Get the chassis speeds based on controller input of 1 joystick [-1,1] and an angle.
      Parameters:
      xInput - X joystick input for the robot to move in the X direction. X = xInput * maxSpeed
      yInput - Y joystick input for the robot to move in the Y direction. Y = yInput * maxSpeed;
      angle - The desired angle of the robot in radians.
      currentHeadingAngleRadians - The current robot heading in radians.
      maxSpeed - Maximum speed in meters per second.
      Returns:
      ChassisSpeeds which can be sent to the Swerve Drive.
    • getJoystickAngle

      public double getJoystickAngle(double headingX, double headingY)
      Get the angle in radians based off of the heading joysticks.
      Parameters:
      headingX - X joystick which controls the angle of the robot.
      headingY - Y joystick which controls the angle of the robot.
      Returns:
      angle in radians from the joystick.
    • getTargetSpeeds

      public ChassisSpeeds getTargetSpeeds(double xInput, double yInput, double headingX, double headingY, double currentHeadingAngleRadians, double maxSpeed)
      Get the chassis speeds based on controller input of 2 joysticks. One for speeds in which direction. The other for the angle of the robot.
      Parameters:
      xInput - X joystick input for the robot to move in the X direction.
      yInput - Y joystick input for the robot to move in the Y direction.
      headingX - X joystick which controls the angle of the robot.
      headingY - Y joystick which controls the angle of the robot.
      currentHeadingAngleRadians - The current robot heading in radians.
      maxSpeed - Maximum speed of the drive motors in meters per second, multiplier of the xInput and yInput.
      Returns:
      ChassisSpeeds which can be sent to the Swerve Drive.
    • getRawTargetSpeeds

      public ChassisSpeeds getRawTargetSpeeds(double xSpeed, double ySpeed, double omega)
      Get the ChassisSpeeds based of raw speeds desired in meters/second and heading in radians.
      Parameters:
      xSpeed - X speed in meters per second.
      ySpeed - Y speed in meters per second.
      omega - Angular velocity in radians/second.
      Returns:
      ChassisSpeeds the robot should move to.
    • getRawTargetSpeeds

      public ChassisSpeeds getRawTargetSpeeds(double xSpeed, double ySpeed, double targetHeadingAngleRadians, double currentHeadingAngleRadians)
      Get the ChassisSpeeds based of raw speeds desired in meters/second and heading in radians.
      Parameters:
      xSpeed - X speed in meters per second.
      ySpeed - Y speed in meters per second.
      targetHeadingAngleRadians - Target heading in radians.
      currentHeadingAngleRadians - Current heading in radians.
      Returns:
      ChassisSpeeds the robot should move to.
    • headingCalculate

      public double headingCalculate(double currentHeadingAngleRadians, double targetHeadingAngleRadians)
      Calculate the angular velocity given the current and target heading angle in radians.
      Parameters:
      currentHeadingAngleRadians - The current heading of the robot in radians.
      targetHeadingAngleRadians - The target heading of the robot in radians.
      Returns:
      Angular velocity in radians per second.
    • setMaximumAngularVelocity

      public void setMaximumAngularVelocity(double angularVelocity)
      Set a new maximum angular velocity that is different from the auto-generated one. Modified the SwerveControllerConfiguration.maxAngularVelocity field which is used in the SwerveController class for ChassisSpeeds generation.
      Parameters:
      angularVelocity - Angular velocity in radians per second.