{% embed url="https://broncbotz3481.github.io/YAGSL/" %} Javadocs for YAGSL {% endembed %}
{% embed url="https://broncbotz3481.github.io/YAGSL-Example/" %} Tuning webpage to create configurations {% endembed %}
{% embed url="https://github.com/BroncBotz3481/YAGSL-Example" %} Example code repository {% endembed %}
Just download all of the vendordeps from WPILib online with this list.#vendor-urls
{% embed url="https://docs.wpilib.org/en/stable/docs/software/vscode-overview/3rd-party-libraries.html#rd-party-libraries" %}
- Neo
- Falcon 500 / Kraken X60
- 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.
- Thrifty Absolute Encoders
- CANCoder
- REV Through Bore
- Canandcoder (via SparkMAX)
- Canandcover (via CAN)
- Throughbore (via PWM)
- Thrifty Absolute Magnetic Encoder (via AnalogInput)
- MA3
- SRX Mag
- AM Mag
- Any PWM Absolute Encoder!
- Any Anolog Absolute Encoder
- Pigeon IMU
- Pigeon 2 IMU
- NavX
- NavX 2
- NavX Micro
- NavX 2 Micro
- ADIS16448
- ADIS16470
- 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 theSwerveDrive
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
withSwerveController.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
andSwerveController.setMaximumAngularVelocity
or utility functionsSwerveDrive.setMaximumSpeeds
. - Ability to use Chassis Velocity Correction using
SwerveDrive.chassisVelocityCorrection
only affecting theSwerveDrive.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
viaSwerveDrive.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 viaSwerveDrive.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 isSwerveDrive.getFieldVelocity
. - Robot pose can be fetched via
SwerveDrive.getPose
- Robot gyroscope readings can be fetched via
SwerveDrive.getGyroRotation3d
orSwerveDrive.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.