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.