YAGSL
  • Welcome to Yet Another Swerve Document
    • Resources
  • Overview
    • What we do
    • Our Features
      • Telemetry
      • Simulation
      • Lock Pose
      • Max Speed
      • Chassis Speed Discretization
      • Vision Odometry
      • Heading Correction
      • Auto-centering Modules
      • Offset Offloading
      • Cosine Compensation
      • Module Auto-synchronization
      • Angular Velocity Compensation
    • Changelog
    • Java API
    • Example Code
    • Config Generator
    • 💸Donations
    • 👕Merch
    • Discord
  • Fundamentals
    • Swerve Drive
    • Swerve Modules
  • Bringing up swerve
    • Preface
    • Swerve Information
    • Check your gyroscope
    • Check your motors
    • Creating your first configuration
  • Configuring YAGSL
    • Getting to know your robot
      • Gear Ratio
    • Dependency Installation
    • Configuration
      • Swerve Drive Configuration
      • Physical Properties Configuration
      • PIDF Properties Configuration
        • PIDF
      • Swerve Module Configuration
      • Controller Properties Configuration
      • Device Configuration
    • Code Setup
    • Standard Conversion Factors
    • How to tune PIDF
    • When to invert?
    • Flowcharts
    • The eight steps
    • Swerve Drive Drift
    • SparkMAX Common Problems
    • Verifying your Module Locations
    • Tuning out Drift
  • Devices
    • Gyroscope
      • NavX
      • Pigeon
      • Pigeon 2.0
      • ADXRS450
      • ADIS16448
      • ADIS16470
    • Motor Controllers
      • SparkMAX
      • SparkFlex
      • TalonFX
    • Absolute Encoders
  • Analytics and Debugging
    • FRC Web Components
    • Advantage Scope
  • Product Guides
    • Java API
    • PathPlanner
    • ❌Tuning PID with REV Hardware Client
    • ❌Drive Code
  • Legacy Documentation
Powered by GitBook
On this page
  • Absolute Encoder Checklist
  • Swerve Absolute Encoder Wrapper
  • Absolute Encoder Configuration
  • Possible Absolute Encoder Types

Was this helpful?

Edit on GitHub
  1. Devices

Absolute Encoders

PreviousTalonFXNextFRC Web Components

Last updated 3 months ago

Was this helpful?

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 your driver dashboard under swerve/modules/.../Raw Absolute Encoder and can be used to tune the absoluteEncoderOffset in module JSON configuration files under most circumstances.

Absolute Encoder Checklist

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 . All 's can be fetched via the configuration object absolute encoder attribute . The is able to be fetched by 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 . All 's can be fetched via the configuration object motor definitions and . The is able to be fetched by 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);
       absoluteEncoder = ()m.configuration.absoluteEncoder.getAbsoluteEncoder();
    }
  }

Absolute Encoder Configuration

Only CTRE devices currently support the canbus option, if your device is using the roboRIO canbus you must use the value of null or "rio" for supported CTRE devices. If you are using a CANivore, and the device is on the CANivore bus, the name must match the CANivore name.

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.

{
  "drive": {
    "type": ,
    "id": ,
    "canbus": 
  },
  "angle": {
    "type": ,
    "id": ,
    "canbus": 
  },
  "encoder": {
    "type": ,
    "id": ,
    "canbus": 
  },
  "inverted": {
    "drive": ,
    "angle": 
  },
  "absoluteEncoderOffset": ,
  "absoluteEncoderInverted": ,
  "location": {
    "front": ,
    "left": 
  }
}

Possible Absolute Encoder Types

Try inverting your steering/angle/azimuth motor if your module keeps spinning around.

Device
type

None

none

PWM DutyCycle

dutycycle

Analog Encoder

analog

If your absolute encoder is attached to your SparkMAX, use the function for the best performance. This sets the onboard PID sensor to the attached encoder!

(via SparkMAX DutyCycle)

(via SparkMAX Analog Pin)

(via SparkMAX Analog Pin with 5V power)

(via SparkMAX)

(via CAN)

(via DIO)

(via Analog Input)

(via Analog Input)

(via PWM)

(via PWM)

SwerveAbsoluteEncoder
SwerveAbsoluteEncoder
SwerveModule
SwerveModuleConfiguration
absoluteEncoder
SwerveModule
SwerveDrive.getModules()
SwerveMotor
SwerveMotor
SwerveModule
SwerveModuleConfiguration
angleMotor
driveMotor
SwerveModule
SwerveDrive.getModules()
SwerveDrive.pushOffsetsToEncoders()
Integrated/Attached
SparkMax Analog
SparkMax Analog
Canandmag
Canandmag
CANcoder
Throughbore
Thrifty Absolute Magnetic Encoder
MA3
SRX Mag
AM Mag