[examples] Fix SwerveBot example to use unique encoder ports (#3358)

Fixes #3089
This commit is contained in:
sciencewhiz
2021-05-15 14:15:18 -07:00
committed by GitHub
parent 1f7c9adeeb
commit 80b479e502
5 changed files with 41 additions and 17 deletions

View File

@@ -20,10 +20,10 @@ public class Drivetrain {
private final Translation2d m_backLeftLocation = new Translation2d(-0.381, 0.381);
private final Translation2d m_backRightLocation = new Translation2d(-0.381, -0.381);
private final SwerveModule m_frontLeft = new SwerveModule(1, 2);
private final SwerveModule m_frontRight = new SwerveModule(3, 4);
private final SwerveModule m_backLeft = new SwerveModule(5, 6);
private final SwerveModule m_backRight = new SwerveModule(7, 8);
private final SwerveModule m_frontLeft = new SwerveModule(1, 2, 0, 1, 2, 3);
private final SwerveModule m_frontRight = new SwerveModule(3, 4, 4, 5, 6, 7);
private final SwerveModule m_backLeft = new SwerveModule(5, 6, 8, 9, 10, 11);
private final SwerveModule m_backRight = new SwerveModule(7, 8, 12, 13, 14, 15);
private final AnalogGyro m_gyro = new AnalogGyro(0);

View File

@@ -25,11 +25,13 @@ public class SwerveModule {
private final MotorController m_driveMotor;
private final MotorController m_turningMotor;
private final Encoder m_driveEncoder = new Encoder(0, 1);
private final Encoder m_turningEncoder = new Encoder(2, 3);
private final Encoder m_driveEncoder;
private final Encoder m_turningEncoder;
// Gains are for example purposes only - must be determined for your own robot!
private final PIDController m_drivePIDController = new PIDController(1, 0, 0);
// Gains are for example purposes only - must be determined for your own robot!
private final ProfiledPIDController m_turningPIDController =
new ProfiledPIDController(
1,
@@ -43,15 +45,28 @@ public class SwerveModule {
private final SimpleMotorFeedforward m_turnFeedforward = new SimpleMotorFeedforward(1, 0.5);
/**
* Constructs a SwerveModule.
* Constructs a SwerveModule with a drive motor, turning motor, drive encoder and turning encoder.
*
* @param driveMotorChannel ID for the drive motor.
* @param turningMotorChannel ID for the turning motor.
* @param driveMotorChannel PWM output for the drive motor.
* @param turningMotorChannel PWM output for the turning motor.
* @param driveEncoderChannelA DIO input for the drive encoder channel A
* @param driveEncoderChannelB DIO input for the drive encoder channel B
* @param turningEncoderChannelA DIO input for the turning encoder channel A
* @param turningEncoderChannelB DIO input for the turning encoder channel B
*/
public SwerveModule(int driveMotorChannel, int turningMotorChannel) {
public SwerveModule(
int driveMotorChannel,
int turningMotorChannel,
int driveEncoderChannelA,
int driveEncoderChannelB,
int turningEncoderChannelA,
int turningEncoderChannelB) {
m_driveMotor = new PWMSparkMax(driveMotorChannel);
m_turningMotor = new PWMSparkMax(turningMotorChannel);
m_driveEncoder = new Encoder(driveEncoderChannelA, driveEncoderChannelB);
m_turningEncoder = new Encoder(turningEncoderChannelA, turningEncoderChannelB);
// Set the distance per pulse for the drive encoder. We can simply use the
// distance traveled for one rotation of the wheel divided by the encoder
// resolution.