Our Features
Last updated
Last updated
Brushed Motors Controlled by SparkMAX with an attached encoder. Angle motors do not require quadrature encoders and should use duty cycle encoders attached to the dataport of the spark max.
Throughbore (via PWM)
Thrifty Absolute Magnetic Encoder (via AnalogInput)
Any PWM Absolute Encoder!
Any Anolog Absolute Encoder
Any analog gyroscope
There is full simulation support out of the box in YAGSl-Example
.
PathPlanner is supported and there is a example in YAGSL-Example
Control can be based entirely off of desired angle compared to current angle (SwerveController.getTargetSpeeds
) or passed directly to the SwerveDrive
in the correct units.
The function SwerveDrive.lockPose
moves all of the wheels to face inwards making the robot nearly impossible to move.
Drive motors can be set to coast or brake using the function SwerveDrive.setMotorIdleMode
Swerve Module drive motor feedforwards can be replaced using the function SwerveDrive.replaceSwerveModuleFeedforward
Slew rate limiters can be added to SwerveController.getTargetSpeeds
with SwerveController.addSlewRateLimiters
to improve control of the robot.
Momentum calculator using objects in space represented by Matter
class to limit velocity of the robot and prevent tipping.
CAN frames are limited to updated angles and velocities which differ from the previous angle and velocity.
Ability to overwrite maximum speeds via SwerveDrive.setMaximumSpeed
and SwerveController.setMaximumAngularVelocity
or utility functions SwerveDrive.setMaximumSpeeds
.
Ability to use Chassis Velocity Correction using SwerveDrive.chassisVelocityCorrection
only affecting the SwerveDrive.drive
functions.
Ability to control using different center of rotation with SwerveDrive.drive
.
Push the offsets to the motor controllers via SwerveDrive.pushOffsetsToControllers
Control over ChassisSpeeds.discretize
via SwerveDrive.setChassisSpeedsDisctretization
Cosine compensation via SwerveDrive.setCosineCompensator
Heading correction with SwerveDrive.setHeadingCorrection
Auto-centering modules allows for modules to center to 0 whenever no input is given. This can be controlled by SwerveDrive.setAutoCenteringModules
The absolute encoder readings fall back to the relative encoder readings if the absolute encoder encountered a resolvable reading error.
Angle motors are default in coast mode to help take care of the motors.
Motor angle's are optimized to turn to the closest equivalent angle.
You can limit your velocity given your robot weight and center of gravity in SwerveMath.limitVelocity
.
Current limits in the JSON configuration.
Ramp rate limits in the JSON configuration.
Closed-loop PID on motor controllers exclusively for SparkMAX's and TalonFX's.
The absolute encoders and relative encoders are synchronized when the robot is not moving for 100ms.
PID inputs are continuous or emulated to be continuous from -180 to 180.
SwerveDrive.updateOdometry
is called every 20ms, the period can be changed via SwerveDrive.setOdometryPeriod
.
To stop the odometry thread use SwerveDrive.stopOdometryThread
and update odometry in a periodic.
To zero the gyroscope call SwerveDrive.zeroGyro
Robot centric velocity can be fetched via SwerveDrive.getRobotVelocity
and field-centric is SwerveDrive.getFieldVelocity
.
Robot pose can be fetched via SwerveDrive.getPose
Robot gyroscope readings can be fetched via SwerveDrive.getGyroRotation3d
or SwerveDrive.getYaw
, SwerveDrive.getPitch
, SwerveDrive.getRoll
.
Robot pose can be updated with vision inputs through SwerveDrive.addVisionMeasurement
optional standard deviation pass through.
Gyroscope offset can be configured via SwerveDrive.setGyroOffset
and should be used for pathplanner.
If your translational odometry is off but controls are correct you can invert you translational odometry with the attribute SwerveDrive.invertOdometry
Swerve telemetry is updated to work with frc-web-components app.
Every module angle is reported for both relative and absolute encoders.
Every module velocity is reported.
The desired chassis speed is reported.
There is a Field2d which is created and updated continuously to represent the robots current position and orientation on the field.
You can add trajectories to the field with SwerveDrive.postTrajectory
when testing.
Just download all of the vendordeps from WPILib online from this list: following the process at: