Absolute Encoders

YAGSL supports most common FRC absolute encoders. Absolute encoders are required if you are using a brushed motor .

The absolute encoder value will show up in shuffleboard under Module[...] Raw Absolute Encoder and can be used to tune the absoluteEncoderOffset in module JSON configuration files under most circumstances.

Absolute Encoder Checklist

circle-exclamation

Swerve Absolute Encoder Wrapper

YAGSL created wrappers over all supported Absolute Encoders to uniformly fetch and set data that is needed for a Swerve Module to operate. This wrapper is called SwerveAbsoluteEncoderarrow-up-right. All SwerveAbsoluteEncoderarrow-up-right's can be fetched via the SwerveModulearrow-up-right configuration object SwerveModuleConfigurationarrow-up-right absolute encoder attribute absoluteEncoderarrow-up-right. The SwerveModulearrow-up-right is able to be fetched by SwerveDrive.getModules()arrow-up-right easily.

YAGSL created wrappers over all supported Motor Controllers to uniformly fetch and set data that is needed for a Swerve Drive to operate. This wrapper is called SwerveMotorarrow-up-right. All SwerveMotorarrow-up-right's can be fetched via the SwerveModulearrow-up-right configuration object SwerveModuleConfigurationarrow-up-right motor definitions angleMotorarrow-up-right and driveMotorarrow-up-right. The SwerveModulearrow-up-right is able to be fetched by SwerveDrive.getModules()arrow-up-right easily.

import com.ctre.phoenix6.hardware.CANcoder;
 
   /**
   * Initialize {@link SwerveDrive} with the directory provided.
   *
   * @param directory Directory of swerve drive config files.
   */
  public SwerveSubsystem(File directory)
  {
    // Angle conversion factor is 360 / (GEAR RATIO * ENCODER RESOLUTION)
    //  In this case the gear ratio is 12.8 motor revolutions per wheel rotation.
    //  The encoder resolution per motor revolution is 1 per motor revolution.
    double angleConversionFactor = SwerveMath.calculateDegreesPerSteeringRotation(12.8, 1);
    // Motor conversion factor is (PI * WHEEL DIAMETER IN METERS) / (GEAR RATIO * ENCODER RESOLUTION).
    //  In this case the wheel diameter is 4 inches, which must be converted to meters to get meters/second.
    //  The gear ratio is 6.75 motor revolutions per wheel rotation.
    //  The encoder resolution per motor revolution is 1 per motor revolution.
    double driveConversionFactor = SwerveMath.calculateMetersPerRotation(Units.inchesToMeters(4), 6.75, 1);

    // Configure the Telemetry before creating the SwerveDrive to avoid unnecessary objects being created.
    SwerveDriveTelemetry.verbosity = TelemetryVerbosity.HIGH;
    try
    {
      swerveDrive = new SwerveParser(directory).createSwerveDrive(maximumSpeed, angleConversionFactor, driveConversionFactor);
    } catch (Exception e)
    {
      throw new RuntimeException(e);
    }
    swerveDrive.setHeadingCorrection(false); // Heading correction should only be used while controlling the robot via angle.

    for(SwerveModule m : swerveDrive.getModules())
    {
      System.out.println("Module Name: "+m.configuration.name);
      CANcoder absoluteEncoder = (CANcoder)m.configuration.absoluteEncoder.getAbsoluteEncoder();
    }
  }

Absolute Encoder Configuration

Inside any module JSON such as frontleft.json,frontright.json,backleft.json,backright.json this is what you would see to configure a absolute encoder.

Possible Absolute Encoder Types

circle-exclamation
circle-exclamation
Device
type

Last updated