Package frc.robot.helpers
Class CustomSwerveInput
java.lang.Object
frc.robot.helpers.CustomSwerveInput
- All Implemented Interfaces:
Supplier<edu.wpi.first.math.kinematics.ChassisSpeeds>
public class CustomSwerveInput extends Object implements Supplier<edu.wpi.first.math.kinematics.ChassisSpeeds>
Helper class to easily transform Controller inputs into workable Chassis speeds. Intended to easily create an interface that generates
ChassisSpeeds from XboxController
Inspired by SciBorgs FRC 1155.
Example:
XboxController driverXbox = new XboxController(0);
CustomSwerveInput driveAngularVelocity = CustomSwerveInput.of(drivebase.getSwerveDrive(),
() -> driverXbox.getLeftY() * -1,
() -> driverXbox.getLeftX() * -1) // Axis which give the desired translational angle and speed.
.withControllerRotationAxis(driverXbox::getRightX) // Axis which give the desired angular velocity.
.deadband(0.01) // Controller deadband
.scaleTranslation(0.8) // Scaled controller translation axis
.allianceRelativeControl(true); // Alliance relative controls.
CustomSwerveInput driveDirectAngle = driveAngularVelocity.copy() // Copy the stream so further changes do not affect
// driveAngularVelocity
.withControllerHeadingAxis(driverXbox::getRightX,
driverXbox::getRightY) // Axis which give the desired heading angle using trigonometry.
.headingWhile(true); // Enable heading based control.Constructor Summary
ConstructorsConstructorDescriptionCustomSwerveInput(swervelib.SwerveDrive drive, DoubleSupplier x, DoubleSupplier y, DoubleSupplier rot) Create aCustomSwerveInputfor an easy way to generateChassisSpeedsfrom a driver controller.CustomSwerveInput(swervelib.SwerveDrive drive, DoubleSupplier x, DoubleSupplier y, DoubleSupplier headingX, DoubleSupplier headingY) Create aCustomSwerveInputfor an easy way to generateChassisSpeedsfrom a driver controller.Method Summary
Modifier and TypeMethodDescriptionaim(edu.wpi.first.math.geometry.Pose2d aimTarget) Aim theSwerveDriveat this pose while driving.aimWhile(boolean trigger) Enable aiming while the trigger is true.aimWhile(BooleanSupplier trigger) Enable aiming while the trigger is true.allianceRelativeControl(boolean enabled) Modify the outputChassisSpeedsso that it is always relative to your alliance.allianceRelativeControl(BooleanSupplier enabled) Modify the outputChassisSpeedsso that it is always relative to your alliance.copy()Copy theCustomSwerveInputobject.cubeRotationControllerAxis(boolean enabled) Cube the angular velocity controller axis for a non-linear controls scheme.Cube the angular velocity controller axis for a non-linear controls scheme.cubeTranslationControllerAxis(boolean enabled) Cube the translation axis magnitude for a non-linear control schemeCube the translation axis magnitude for a non-linear control scheme.deadband(double deadband) Set a deadband for all controller axis.driveToPose(Supplier<edu.wpi.first.math.geometry.Pose2d> pose, edu.wpi.first.math.controller.ProfiledPIDController translation, edu.wpi.first.math.controller.ProfiledPIDController rotation) Drive to a given pose with the providedProfiledPIDControllersdriveToPose(Supplier<edu.wpi.first.math.geometry.Pose2d> pose, edu.wpi.first.math.controller.ProfiledPIDController xPIDController, edu.wpi.first.math.controller.ProfiledPIDController yPIDController, edu.wpi.first.math.controller.ProfiledPIDController omegaPIDController) Drive to a given pose with the providedProfiledPIDControllersdriveToPoseEnabled(boolean enabled) Enable driving to the target pose.driveToPoseEnabled(BooleanSupplier enabled) Enable driving to the target pose.edu.wpi.first.math.kinematics.ChassisSpeedsget()Gets aChassisSpeedsheadingOffset(boolean enabled) Heading offset enableheadingOffset(edu.wpi.first.math.geometry.Rotation2d angle) Set the heading offset angle.headingOffset(BooleanSupplier enabled) Heading offset enabled boolean supplier.headingWhile(boolean headingState) Set the heading enable state.headingWhile(BooleanSupplier trigger) OutputChassisSpeedsbased on heading while the supplier is True.static CustomSwerveInputof(swervelib.SwerveDrive drive, DoubleSupplier x, DoubleSupplier y) Create basicCustomSwerveInputwithout any rotation components.robotRelative(boolean enabled) Set the stream to output robot relativeChassisSpeedsrobotRelative(BooleanSupplier enabled) Set the stream to output robot relativeChassisSpeedsscaleRotation(double scaleRotation) Scale the rotation axis input forCustomSwerveInputto reduce the range in which they operate.scaleTranslation(double scaleTranslation) Scale the translation axis forCustomSwerveInputby a constant scalar value.scaleTranslation(BooleanSupplier condition, double scale) Scale the translation axis based on a boolean supplier.translationOnlyWhile(boolean translationState) Enable locking of rotation and only translating, overrides everything.translationOnlyWhile(BooleanSupplier trigger) Enable locking of rotation and only translating, overrides everything.withControllerHeadingAxis(DoubleSupplier headingX, DoubleSupplier headingY) Add heading axis for Heading based control.Add a rotation axis for Angular Velocity controlwithHeading(Supplier<edu.wpi.first.math.geometry.Rotation2d> heading) Add direct heading supplier for Heading based control.
Constructor Details
CustomSwerveInput
public CustomSwerveInput(swervelib.SwerveDrive drive, DoubleSupplier x, DoubleSupplier y, DoubleSupplier rot) Create aCustomSwerveInputfor an easy way to generateChassisSpeedsfrom a driver controller.- Parameters:
drive-SwerveDriveobject for transformation.x- Translation X input in range of [-1, 1]y- Translation Y input in range of [-1, 1]rot- Rotation input in range of [-1, 1]
CustomSwerveInput
public CustomSwerveInput(swervelib.SwerveDrive drive, DoubleSupplier x, DoubleSupplier y, DoubleSupplier headingX, DoubleSupplier headingY) Create aCustomSwerveInputfor an easy way to generateChassisSpeedsfrom a driver controller.- Parameters:
drive-SwerveDriveobject for transformation.x- Translation X input in range of [-1, 1]y- Translation Y input in range of [-1, 1]headingX- Heading X input in range of [-1, 1]headingY- Heading Y input in range of [-1, 1]
Method Details
of
Create basicCustomSwerveInputwithout any rotation components.- Parameters:
drive-SwerveDriveobject for transformation.x-DoubleSupplierof the translation X axis of the controller joystick to use.y-DoubleSupplierof the translation X axis of the controller joystick to use.- Returns:
CustomSwerveInputto use as you see fit.
copy
Copy theCustomSwerveInputobject.- Returns:
- Clone of current
CustomSwerveInput
robotRelative
Set the stream to output robot relativeChassisSpeeds- Parameters:
enabled- Robot-RelativeChassisSpeedsoutput.- Returns:
- self
robotRelative
Set the stream to output robot relativeChassisSpeeds- Parameters:
enabled- Robot-RelativeChassisSpeedsoutput.- Returns:
- self
driveToPose
public CustomSwerveInput driveToPose(Supplier<edu.wpi.first.math.geometry.Pose2d> pose, edu.wpi.first.math.controller.ProfiledPIDController xPIDController, edu.wpi.first.math.controller.ProfiledPIDController yPIDController, edu.wpi.first.math.controller.ProfiledPIDController omegaPIDController) Drive to a given pose with the providedProfiledPIDControllers- Parameters:
pose-Supplier<edu.wpi.first.math.geometry.Pose2d>for ease of use.xPIDController- PID controller for the X axis, units are m/s.yPIDController- PID controller for the Y axis, units are m/s.omegaPIDController- PID Controller for rotational axis, units are rad/s.- Returns:
- self
driveToPose
public CustomSwerveInput driveToPose(Supplier<edu.wpi.first.math.geometry.Pose2d> pose, edu.wpi.first.math.controller.ProfiledPIDController translation, edu.wpi.first.math.controller.ProfiledPIDController rotation) Drive to a given pose with the providedProfiledPIDControllers- Parameters:
pose-Supplier<edu.wpi.first.math.geometry.Pose2d>for ease of use.translation- PID controller for the X and Y axis, units are m/s.rotation- PID Controller for rotational axis, units are rad/s.- Returns:
- self
driveToPoseEnabled
Enable driving to the target pose.- Parameters:
enabled- Enable state of drive to pose.- Returns:
- self.
driveToPoseEnabled
Enable driving to the target pose.- Parameters:
enabled- Enable state of drive to pose.- Returns:
- self.
headingOffset
Heading offset enabled boolean supplier.- Parameters:
enabled- Enable state- Returns:
- self
headingOffset
Heading offset enable- Parameters:
enabled- Enable state- Returns:
- self
headingOffset
Set the heading offset angle.- Parameters:
angle-Rotation2doffset to apply- Returns:
- self
allianceRelativeControl
Modify the outputChassisSpeedsso that it is always relative to your alliance.- Parameters:
enabled- Alliance awareChassisSpeedsoutput.- Returns:
- self
allianceRelativeControl
Modify the outputChassisSpeedsso that it is always relative to your alliance.- Parameters:
enabled- Alliance awareChassisSpeedsoutput.- Returns:
- self
cubeRotationControllerAxis
Cube the angular velocity controller axis for a non-linear controls scheme.- Parameters:
enabled- Enabled state for the stream.- Returns:
- self.
cubeRotationControllerAxis
Cube the angular velocity controller axis for a non-linear controls scheme.- Parameters:
enabled- Enabled state for the stream.- Returns:
- self.
cubeTranslationControllerAxis
Cube the translation axis magnitude for a non-linear control scheme.- Parameters:
enabled- Enabled state for the stream- Returns:
- self
cubeTranslationControllerAxis
Cube the translation axis magnitude for a non-linear control scheme- Parameters:
enabled- Enabled state for the stream- Returns:
- self
withControllerRotationAxis
Add a rotation axis for Angular Velocity control- Parameters:
rot- Rotation axis with values from [-1, 1]- Returns:
- self
withControllerHeadingAxis
public CustomSwerveInput withControllerHeadingAxis(DoubleSupplier headingX, DoubleSupplier headingY) Add heading axis for Heading based control.- Parameters:
headingX- Heading X axis with values from [-1, 1]headingY- Heading Y axis with values from [-1, 1]- Returns:
- self
withHeading
Add direct heading supplier for Heading based control.- Parameters:
heading- Supplier that provides the desired heading as Rotation2d- Returns:
- self
deadband
Set a deadband for all controller axis.- Parameters:
deadband- Deadband to set, should be between [0, 1)- Returns:
- self
scaleTranslation
Scale the translation axis forCustomSwerveInputby a constant scalar value.- Parameters:
scaleTranslation- Translation axis scalar value. (0, 1]- Returns:
- this
scaleTranslation
Scale the translation axis based on a boolean supplier. When the supplier returns true, the translation will be scaled by the provided scale; otherwise, it will remain unscaled.- Parameters:
condition- Boolean supplier determining if scaling should be applied.scale- Scale factor when condition is true.- Returns:
- this
scaleRotation
Scale the rotation axis input forCustomSwerveInputto reduce the range in which they operate.- Parameters:
scaleRotation- Angular velocity axis scalar value. (0, 1]- Returns:
- this
headingWhile
OutputChassisSpeedsbased on heading while the supplier is True.- Parameters:
trigger- Supplier to use.- Returns:
- this.
headingWhile
Set the heading enable state.- Parameters:
headingState- Heading enabled state.- Returns:
- this
aim
Aim theSwerveDriveat this pose while driving.- Parameters:
aimTarget-Pose2dto point at.- Returns:
- this
aimWhile
Enable aiming while the trigger is true.- Parameters:
trigger- When True will enable aiming at the current target.- Returns:
- this.
aimWhile
Enable aiming while the trigger is true.- Parameters:
trigger- When True will enable aiming at the current target.- Returns:
- this.
translationOnlyWhile
Enable locking of rotation and only translating, overrides everything.- Parameters:
trigger- Translation only while returns true.- Returns:
- this
translationOnlyWhile
Enable locking of rotation and only translating, overrides everything.- Parameters:
translationState- Translation only if true.- Returns:
- this
get
public edu.wpi.first.math.kinematics.ChassisSpeeds get()Gets aChassisSpeeds