Class ChassisSpeeds

java.lang.Object
edu.wpi.first.math.kinematics.ChassisSpeeds
All Implemented Interfaces:
ProtobufSerializable, StructSerializable, WPISerializable

public class ChassisSpeeds
extends Object
implements ProtobufSerializable, StructSerializable
Represents the speed of a robot chassis. Although this class contains similar members compared to a Twist2d, they do NOT represent the same thing. Whereas a Twist2d represents a change in pose w.r.t to the robot frame of reference, a ChassisSpeeds object represents a robot's velocity.

A strictly non-holonomic drivetrain, such as a differential drive, should never have a dy component because it can never move sideways. Holonomic drivetrains such as swerve and mecanum will often have all three components.

  • Field Details

  • Constructor Details

  • Method Details

    • discretize

      public static ChassisSpeeds discretize​(double vxMetersPerSecond, double vyMetersPerSecond, double omegaRadiansPerSecond, double dtSeconds)
      Discretizes a continuous-time chassis speed.

      This function converts a continuous-time chassis speed into a discrete-time one such that when the discrete-time chassis speed is applied for one timestep, the robot moves as if the velocity components are independent (i.e., the robot moves v_x * dt along the x-axis, v_y * dt along the y-axis, and omega * dt around the z-axis).

      This is useful for compensating for translational skew when translating and rotating a swerve drivetrain.

      Parameters:
      vxMetersPerSecond - Forward velocity.
      vyMetersPerSecond - Sideways velocity.
      omegaRadiansPerSecond - Angular velocity.
      dtSeconds - The duration of the timestep the speeds should be applied for.
      Returns:
      Discretized ChassisSpeeds.
    • discretize

      Discretizes a continuous-time chassis speed.

      This function converts a continuous-time chassis speed into a discrete-time one such that when the discrete-time chassis speed is applied for one timestep, the robot moves as if the velocity components are independent (i.e., the robot moves v_x * dt along the x-axis, v_y * dt along the y-axis, and omega * dt around the z-axis).

      This is useful for compensating for translational skew when translating and rotating a swerve drivetrain.

      Parameters:
      vx - Forward velocity.
      vy - Sideways velocity.
      omega - Angular velocity.
      dt - The duration of the timestep the speeds should be applied for.
      Returns:
      Discretized ChassisSpeeds.
    • discretize

      public static ChassisSpeeds discretize​(ChassisSpeeds continuousSpeeds, double dtSeconds)
      Discretizes a continuous-time chassis speed.

      This function converts a continous-time chassis speed into a discrete-time one such that when the discrete-time chassis speed is applied for one timestep, the robot moves as if the velocity components are independent (i.e., the robot moves v_x * dt along the x-axis, v_y * dt along the y-axis, and omega * dt around the z-axis).

      This is useful for compensating for translational skew when translating and rotating a swerve drivetrain.

      Parameters:
      continuousSpeeds - The continuous speeds.
      dtSeconds - The duration of the timestep the speeds should be applied for.
      Returns:
      Discretized ChassisSpeeds.
    • fromFieldRelativeSpeeds

      public static ChassisSpeeds fromFieldRelativeSpeeds​(double vxMetersPerSecond, double vyMetersPerSecond, double omegaRadiansPerSecond, Rotation2d robotAngle)
      Converts a user provided field-relative set of speeds into a robot-relative ChassisSpeeds object.
      Parameters:
      vxMetersPerSecond - The component of speed in the x direction relative to the field. Positive x is away from your alliance wall.
      vyMetersPerSecond - The component of speed in the y direction relative to the field. Positive y is to your left when standing behind the alliance wall.
      omegaRadiansPerSecond - The angular rate of the robot.
      robotAngle - The angle of the robot as measured by a gyroscope. The robot's angle is considered to be zero when it is facing directly away from your alliance station wall. Remember that this should be CCW positive.
      Returns:
      ChassisSpeeds object representing the speeds in the robot's frame of reference.
    • fromFieldRelativeSpeeds

      Converts a user provided field-relative set of speeds into a robot-relative ChassisSpeeds object.
      Parameters:
      vx - The component of speed in the x direction relative to the field. Positive x is away from your alliance wall.
      vy - The component of speed in the y direction relative to the field. Positive y is to your left when standing behind the alliance wall.
      omega - The angular rate of the robot.
      robotAngle - The angle of the robot as measured by a gyroscope. The robot's angle is considered to be zero when it is facing directly away from your alliance station wall. Remember that this should be CCW positive.
      Returns:
      ChassisSpeeds object representing the speeds in the robot's frame of reference.
    • fromFieldRelativeSpeeds

      public static ChassisSpeeds fromFieldRelativeSpeeds​(ChassisSpeeds fieldRelativeSpeeds, Rotation2d robotAngle)
      Converts a user provided field-relative ChassisSpeeds object into a robot-relative ChassisSpeeds object.
      Parameters:
      fieldRelativeSpeeds - The ChassisSpeeds object representing the speeds in the field frame of reference. Positive x is away from your alliance wall. Positive y is to your left when standing behind the alliance wall.
      robotAngle - The angle of the robot as measured by a gyroscope. The robot's angle is considered to be zero when it is facing directly away from your alliance station wall. Remember that this should be CCW positive.
      Returns:
      ChassisSpeeds object representing the speeds in the robot's frame of reference.
    • fromRobotRelativeSpeeds

      public static ChassisSpeeds fromRobotRelativeSpeeds​(double vxMetersPerSecond, double vyMetersPerSecond, double omegaRadiansPerSecond, Rotation2d robotAngle)
      Converts a user provided robot-relative set of speeds into a field-relative ChassisSpeeds object.
      Parameters:
      vxMetersPerSecond - The component of speed in the x direction relative to the robot. Positive x is towards the robot's front.
      vyMetersPerSecond - The component of speed in the y direction relative to the robot. Positive y is towards the robot's left.
      omegaRadiansPerSecond - The angular rate of the robot.
      robotAngle - The angle of the robot as measured by a gyroscope. The robot's angle is considered to be zero when it is facing directly away from your alliance station wall. Remember that this should be CCW positive.
      Returns:
      ChassisSpeeds object representing the speeds in the field's frame of reference.
    • fromRobotRelativeSpeeds

      Converts a user provided robot-relative set of speeds into a field-relative ChassisSpeeds object.
      Parameters:
      vx - The component of speed in the x direction relative to the robot. Positive x is towards the robot's front.
      vy - The component of speed in the y direction relative to the robot. Positive y is towards the robot's left.
      omega - The angular rate of the robot.
      robotAngle - The angle of the robot as measured by a gyroscope. The robot's angle is considered to be zero when it is facing directly away from your alliance station wall. Remember that this should be CCW positive.
      Returns:
      ChassisSpeeds object representing the speeds in the field's frame of reference.
    • fromRobotRelativeSpeeds

      public static ChassisSpeeds fromRobotRelativeSpeeds​(ChassisSpeeds robotRelativeSpeeds, Rotation2d robotAngle)
      Converts a user provided robot-relative ChassisSpeeds object into a field-relative ChassisSpeeds object.
      Parameters:
      robotRelativeSpeeds - The ChassisSpeeds object representing the speeds in the robot frame of reference. Positive x is towards the robot's front. Positive y is towards the robot's left.
      robotAngle - The angle of the robot as measured by a gyroscope. The robot's angle is considered to be zero when it is facing directly away from your alliance station wall. Remember that this should be CCW positive.
      Returns:
      ChassisSpeeds object representing the speeds in the field's frame of reference.
    • plus

      public ChassisSpeeds plus​(ChassisSpeeds other)
      Adds two ChassisSpeeds and returns the sum.

      For example, ChassisSpeeds{1.0, 0.5, 0.75} + ChassisSpeeds{2.0, 1.5, 0.25} = ChassisSpeeds{3.0, 2.0, 1.0}

      Parameters:
      other - The ChassisSpeeds to add.
      Returns:
      The sum of the ChassisSpeeds.
    • minus

      public ChassisSpeeds minus​(ChassisSpeeds other)
      Subtracts the other ChassisSpeeds from the current ChassisSpeeds and returns the difference.

      For example, ChassisSpeeds{5.0, 4.0, 2.0} - ChassisSpeeds{1.0, 2.0, 1.0} = ChassisSpeeds{4.0, 2.0, 1.0}

      Parameters:
      other - The ChassisSpeeds to subtract.
      Returns:
      The difference between the two ChassisSpeeds.
    • unaryMinus

      Returns the inverse of the current ChassisSpeeds. This is equivalent to negating all components of the ChassisSpeeds.
      Returns:
      The inverse of the current ChassisSpeeds.
    • times

      public ChassisSpeeds times​(double scalar)
      Multiplies the ChassisSpeeds by a scalar and returns the new ChassisSpeeds.

      For example, ChassisSpeeds{2.0, 2.5, 1.0} * 2 = ChassisSpeeds{4.0, 5.0, 1.0}

      Parameters:
      scalar - The scalar to multiply by.
      Returns:
      The scaled ChassisSpeeds.
    • div

      public ChassisSpeeds div​(double scalar)
      Divides the ChassisSpeeds by a scalar and returns the new ChassisSpeeds.

      For example, ChassisSpeeds{2.0, 2.5, 1.0} / 2 = ChassisSpeeds{1.0, 1.25, 0.5}

      Parameters:
      scalar - The scalar to divide by.
      Returns:
      The scaled ChassisSpeeds.
    • toString

      public String toString()
      Overrides:
      toString in class Object