Our Features

Documentation

Easy installation

Hardware Support

Motors

Absolute Encoders

IMUs (Gyroscopes)

ALL GYROSCOPES MUST BE COUNTER-CLOCKWISE POSITIVE!

Simulation

  • There is full simulation support out of the box in YAGSl-Example.

Control

  • 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

Safety Features

  • 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.

Odometry

  • SwerveDrive.updateOdometry should be called periodically (every 20ms)

  • 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.

  • If your translational odometry is off but controls are correct you can invert you translational odometry with the attribute SwerveDrive.invertOdometry

Telemetry

  • 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 continously to represent the robots current position and orientation on the field.

  • You can add trajectories to the field with SwerveDrive.postTrajectory when testing.

Last updated