6#include <thrifty/canEncoder/CanEncoder.h>
7#include <thrifty/core/Motor.h>
8#include <thrifty/nova/Nova.h>
12#include <wpi/simulation/DCMotorSim.hpp>
13#include <wpi/util/Alert.hpp>
110 void SetVelocity(wpi::units::turns_per_second_t velocity)
override;
119 wpi::units::newton_t feedforwardForce)
override;
121 void SetVelocity(wpi::units::meters_per_second_t velocity)
override;
241 std::optional<wpi::units::volt_t> maxInput)
override;
272 thrifty::Nova* m_nova{
nullptr};
274 std::optional<thrifty::NovaConfigBatch> m_vendorConfig;
275 wpi::math::DCMotor m_motor;
276 std::optional<wpi::sim::DCMotorSim> m_motorSim;
278 std::optional<thrifty::Motor::FeedbackSensorType> m_dataPortEncoder;
280 thrifty::CanEncoder* m_canEncoder{
nullptr};
285 wpi::units::turn_t m_absoluteEncoderDiscontinuityPoint{1.0};
291 double m_simDutyCycle{0.0};
292 math::DerivativeTimeFilter m_accelFilter{20_ms};
294 std::optional<wpi::util::Alert> m_systemCoreClosedLoopAlert;
297 std::string AlertId(
const std::string& alertType)
const;
299 double MechanismToRotorRatio()
const;
301 double MechanismToExternalEncoderRatio()
const;
303 void LoadClosedLoopController(
const SmartMotorControllerConfig& config);
305 void ApplyFeedback(
double kP,
double kI,
double kD);
307 void CreateMotorSim();
309 void ApplyExternalEncoder(
const SmartMotorControllerConfig& config,
310 thrifty::NovaConfigBatch& novaConfig);
312 std::optional<wpi::units::turn_t> GetExternalEncoderSensorPosition();
314 std::optional<wpi::units::turns_per_second_t> GetExternalEncoderSensorVelocity();
Definition MechanismGearing.hpp:19
Definition SmartMotorControllerConfig.hpp:65
ClosedLoopControllerSlot
Definition SmartMotorControllerConfig.hpp:74
MotorMode
Definition SmartMotorControllerConfig.hpp:70
Definition SmartMotorController.hpp:48
virtual void SetVelocity(wpi::units::turns_per_second_t velocity)=0
Definition NovaWrapper.hpp:63
void * GetMotorController() override
void SetExponentialProfile(std::optional< double > kV, std::optional< double > kA, std::optional< wpi::units::volt_t > maxInput) override
void SetMechanismCircumference(wpi::units::meter_t circumference) override
void SynchronizeRelativeEncoder() override
void SetKp(double kP) override
void SetFeedforward(double kS, double kV, double kA, double kG) override
void SetEncoderInverted(bool inverted) override
wpi::units::meters_per_second_squared_t GetMeasurementAcceleration() override
wpi::math::DCMotor GetDCMotor() override
wpi::units::turn_t GetRotorPosition() override
void SetMeasurementUpperLimit(wpi::units::meter_t upperLimit) override
void SetKv(double kV) override
void SetMeasurementLowerLimit(wpi::units::meter_t lowerLimit) override
void * GetMotorControllerConfig() override
wpi::units::meters_per_second_t GetMeasurementVelocity() override
wpi::units::volt_t GetVoltage() override
wpi::units::turns_per_second_t GetRotorVelocity() override
void SetMotorInverted(bool inverted) override
void SetSupplyCurrentLimit(wpi::units::ampere_t currentLimit) override
void SetKs(double kS) override
void SetKd(double kD) override
void SetFeedback(double kP, double kI, double kD) override
void SetKi(double kI) override
void SetOpenLoopRampRate(wpi::units::second_t rampRate) override
bool ApplyConfig(const SmartMotorControllerConfig &config) override
wpi::units::turn_t GetRelativeMechanismPosition() override
void SetEncoderPosition(wpi::units::turn_t angle) override
void SimIterate() override
void SetZeroPower(MotorMode mode) override
void SetVelocity(wpi::units::meters_per_second_t velocity) override
wpi::units::turn_t GetMechanismPosition() override
wpi::units::turns_per_second_t GetMechanismVelocity() override
void SetEncoderVelocity(wpi::units::meters_per_second_t velocity) override
void SetVelocity(wpi::units::turns_per_second_t velocity, wpi::units::newton_t feedforwardForce) override
void SetMechanismLimits(wpi::units::turn_t lower, wpi::units::turn_t upper) override
double GetDutyCycle() override
void SetMechanismUpperLimit(wpi::units::turn_t upperLimit) override
wpi::units::celsius_t GetTemperature() override
void SetMotionProfileMaxJerk(wpi::units::angular_jerk::turns_per_second_cubed_t maxJerk) override
wpi::units::meter_t GetMeasurementPosition() override
NovaWrapper(thrifty::Nova *nova, wpi::math::DCMotor motor, SmartMotorControllerConfig *config)
void SeedRelativeEncoder() override
std::optional< wpi::units::ampere_t > GetSupplyCurrent() override
void SetMechanismLimitsEnabled(bool enabled) override
void SetEncoderPosition(wpi::units::meter_t distance) override
wpi::units::turns_per_second_t GetRelativeMechanismVelocity() override
wpi::units::turns_per_second_squared_t GetMechanismAcceleration() override
void SetKg(double kG) override
void SetEncoderVelocity(wpi::units::turns_per_second_t velocity) override
void SetStatorCurrentLimit(wpi::units::ampere_t currentLimit) override
void SetVelocity(wpi::units::turns_per_second_t velocity) override
wpi::units::ampere_t GetStatorCurrent() override
std::optional< wpi::units::turns_per_second_t > GetExternalEncoderMechanismVelocity() override
void SetMotionProfileMaxVelocity(wpi::units::meters_per_second_t maxVelocity) override
void SetClosedLoopSlot(ClosedLoopControllerSlot slot) override
void SetupSimulation() override
void SetVoltage(wpi::units::volt_t voltage) override
void SetDutyCycle(double dutyCycle) override
void SetMotionProfileMaxAcceleration(wpi::units::meters_per_second_squared_t maxAcc) override
void SetMechanismGearing(const gearing::MechanismGearing &gearing) override
void SetMotionProfileMaxVelocity(wpi::units::turns_per_second_t maxVelocity) override
void SetPosition(wpi::units::meter_t distance) override
void SetKa(double kA) override
std::optional< wpi::units::turn_t > GetExternalEncoderMechanismPosition() override
SmartMotorControllerConfig & GetConfig() override
void SetMechanismLowerLimit(wpi::units::turn_t lowerLimit) override
void SetPosition(wpi::units::turn_t angle) override
void SetClosedLoopRampRate(wpi::units::second_t rampRate) override
void SetMotionProfileMaxAcceleration(wpi::units::turns_per_second_squared_t maxAcc) override
Definition NovaWrapper.hpp:18