Our Features

YAGSL offers a suite of features designed to streamline the implementation and optimization of swerve drive systems, from easy installation to advanced control and safety mechanisms we have it all.

Documentation

Javadocs for YAGSL
Tuning webpage to create configurations
Example code repository

Easy installation

Just download all of the vendordeps from WPILib online with this list.Vendor URLs

Supported Hardware

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 (see example in YAGSL-Examplearrow-up-right)

  • 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 to ensure accurate tracking of the robot, 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-componentsarrow-up-right apparrow-up-right.

  • 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