12                            int turningMotorChannel,
    14                            CANifier::PWMChannel pwmChannel,
    15                            bool driveMotorReversed,
    17                            const std::string& name)
    20     , m_driveMotor(driveMotorChannel)
    21     , m_turningMotor(turningMotorChannel, CANSparkMax::MotorType::kBrushless)
    24     , m_pulseWidthCallback(pulseWidthCallback)
    25     , m_pwmChannel(pwmChannel)
    36     m_driveMotor.SetInverted(driveMotorReversed ? TalonFXInvertType::CounterClockwise : TalonFXInvertType::Clockwise);
    38     m_driveMotor.ConfigSelectedFeedbackSensor(TalonFXFeedbackDevice::IntegratedSensor);
    58     SmartDashboard::PutNumber(
"D_SM_Abs " + 
m_name, absAngle);
    81     bool bOutputReverse = 
false;
    82     double minTurnRads = 
MinTurnRads(currentPosition, state.angle.Radians().to<
double>(), bOutputReverse);
    83     double direction = 1.0; 
    88     double newPosition = currentPosition + minTurnRads;
    90     if (state.speed != 0_mps) {
    98         m_driveMotor.Set(TalonFXControlMode::PercentOutput, 0.0);
   101     if (state.speed.to<
double>() != 0.0)
   139     double angle1 = 
final - init;
   140     double angle2 = 
final + wpi::math::pi - init;
   150         bOutputReverse = 
false;
   164    double ticksPer100ms = 
m_driveMotor.GetSelectedSensorVelocity();
 constexpr bool kDriveAdjust
constexpr bool kTurnAdjust
constexpr uint kMotorCurrentLimit
static double NegPiToPiRads(double theta)
PIDLoaderFalcon m_drivePIDLoader
PID param loader for the TalonFX. 
CANEncoder m_turnRelativeEncoder
double CalcTicksPer100Ms(meters_per_second_t speed)
void LoadFromNetworkTable(CANPIDController &turnPIDController)
Timer m_timer
Timer used to sync absolute and relative encoders on robot turn on. 
meters_per_second_t CalcMetersPerSec()
void LoadFromNetworkTable(TalonFX &driveMotor)
double MinTurnRads(double init, double final, bool &bOutputReverse)
string m_name
String used to identify each pod, used for SmartDashboard prints. 
GetPulseWidthCallback m_pulseWidthCallback
CANifier::PWMChannel m_pwmChannel
void Load(CANPIDController &turnPIDController)
constexpr double kDriveFF
void SetDesiredState(SwerveModuleState &state)
PIDLoaderNEO m_turnPIDLoader
PID param loader for the CANSparkMax. 
CANSparkMax m_turningMotor
static double ZeroTo2PiRads(double theta)
CANPIDController m_turnPIDController
void Load(TalonFX &driveMotor)
function< double(CANifier::PWMChannel)> GetPulseWidthCallback
void ResetRelativeToAbsolute()
Resync the relative NEO turn encoder to the absolute encoder. 
constexpr double kPulseWidthToRadians
double m_offset
The offset, in pulse widths, for syncing the relative encoder to the absolute encoder. 
double CalcAbsoluteAngle()
Calculate the absolute angle, in radians, based on the pulse widths from m_pulseWidthCallback. 
SwerveModuleState GetState()
SwerveModule(int driveMotorChannel, int turningMotorChannel, GetPulseWidthCallback pulseWidthCallback, CANifier::PWMChannel pwmChannel, bool driveEncoderReversed, double offSet, const string &name)
constexpr double kTurnMotorRevsPerWheelRev
constexpr double kDriveEncoderMetersPerSec
void ResetEncoders()
Resets the drive motor encoders to 0. 
TalonFX m_driveMotor
Falon 500 that drives the pod.