// Copyright (c) FIRST and other WPILib contributors. // Open Source Software; you can modify and/or share it under the terms of // the WPILib BSD license file in the root directory of this project. #pragma once #include #include #include #include #include #include #include #include #include #include #include class SwerveModule { public: SwerveModule(int driveMotorChannel, int turningMotorChannel); frc::SwerveModuleState GetState() const; void SetDesiredState(const frc::SwerveModuleState& state); private: static constexpr double kWheelRadius = 0.0508; static constexpr int kEncoderResolution = 4096; static constexpr auto kModuleMaxAngularVelocity = wpi::math::pi * 1_rad_per_s; // radians per second static constexpr auto kModuleMaxAngularAcceleration = wpi::math::pi * 2_rad_per_s / 1_s; // radians per second^2 frc::PWMSparkMax m_driveMotor; frc::PWMSparkMax m_turningMotor; frc::Encoder m_driveEncoder{0, 1}; frc::Encoder m_turningEncoder{2, 3}; frc2::PIDController m_drivePIDController{1.0, 0, 0}; frc::ProfiledPIDController m_turningPIDController{ 1.0, 0.0, 0.0, {kModuleMaxAngularVelocity, kModuleMaxAngularAcceleration}}; frc::SimpleMotorFeedforward m_driveFeedforward{1_V, 3_V / 1_mps}; frc::SimpleMotorFeedforward m_turnFeedforward{ 1_V, 0.5_V / 1_rad_per_s}; };