CTRE_Phoenix 5.20.2
IMotorController.h
1#pragma once
2
3#include "ctre/phoenix/motorcontrol/ControlMode.h"
4#include "ctre/phoenix/motorcontrol/ControlFrame.h"
5#include "ctre/phoenix/motorcontrol/DemandType.h"
6#include "ctre/phoenix/motorcontrol/InvertType.h"
7#include "ctre/phoenix/motorcontrol/NeutralMode.h"
8#include "ctre/phoenix/motorcontrol/FeedbackDevice.h"
9#include "ctre/phoenix/motorcontrol/RemoteSensorSource.h"
10#include "ctre/phoenix/motorcontrol/SensorTerm.h"
11#include "ctre/phoenix/motorcontrol/StatusFrame.h"
12#include "ctre/phoenix/motorcontrol/LimitSwitchType.h"
13#include "ctre/phoenix/motorcontrol/Faults.h"
14#include "ctre/phoenix/motorcontrol/StickyFaults.h"
15#include "ctre/phoenix/paramEnum.h"
16#include "ctre/phoenix/motion/TrajectoryPoint.h"
17#include "ctre/phoenix/motion/MotionProfileStatus.h"
18#include "ctre/phoenix/sensors/CANCoder.h"
19#include "ctre/phoenix/ErrorCode.h"
20#include "IFollower.h"
21
22namespace ctre {
23namespace phoenix {
24namespace motorcontrol {
25
26namespace can {
27// Forward-Proto BaseTalon
28class BaseTalon;
29}
30
34class IMotorController: public virtual IFollower {
35public:
36 virtual ~IMotorController() {
37 }
38 //------ Set output routines. ----------//
57 virtual void Set(ControlMode Mode, double demand) = 0;
93 virtual void Set(ControlMode mode, double demand0, DemandType demand1Type, double demand1) = 0;
97 virtual void NeutralOutput() = 0;
105 virtual void SetNeutralMode(NeutralMode neutralMode) = 0;
106
107 //------ Invert behavior ----------//
117 virtual void SetSensorPhase(bool PhaseSensor) = 0;
132 virtual void SetInverted(bool invert) = 0;
147 virtual void SetInverted(InvertType invertType) = 0;
151 virtual bool GetInverted() const = 0;
152
153 //----- Factory Default Configuration -----//
165 virtual ErrorCode ConfigFactoryDefault(int timeout) = 0;
166
167 //----- general output shaping ------------------//
180 virtual ErrorCode ConfigOpenloopRamp(double secondsFromNeutralToFull,
181 int timeoutMs = 0) = 0;
194 virtual ErrorCode ConfigClosedloopRamp(double secondsFromNeutralToFull,
195 int timeoutMs = 0) = 0;
207 virtual ErrorCode ConfigPeakOutputForward(double percentOut,
208 int timeoutMs = 0) = 0;
220 virtual ErrorCode ConfigPeakOutputReverse(double percentOut,
221 int timeoutMs = 0) = 0;
233 virtual ErrorCode ConfigNominalOutputForward(double percentOut,
234 int timeoutMs = 0) = 0;
246 virtual ErrorCode ConfigNominalOutputReverse(double percentOut,
247 int timeoutMs = 0) = 0;
260 virtual ErrorCode ConfigNeutralDeadband(double percentDeadband,
261 int timeoutMs = 0) = 0;
262
263 //------ Voltage Compensation ----------//
279 int timeoutMs = 0) = 0;
292 virtual ErrorCode ConfigVoltageMeasurementFilter(int filterWindowSamples,
293 int timeoutMs = 0) = 0;
303 virtual void EnableVoltageCompensation(bool enable) = 0;
304
311
312 //------ General Status ----------//
318 virtual double GetBusVoltage() = 0;
324 virtual double GetMotorOutputPercent() = 0;
328 virtual double GetMotorOutputVoltage() = 0;
334 virtual double GetTemperature() = 0;
335
336 //------ sensor selection ----------//
352 RemoteFeedbackDevice feedbackDevice, int pidIdx = 0, int timeoutMs = 0) = 0;
373 double coefficient, int pidIdx = 0, int timeoutMs = 0) = 0;
393 RemoteSensorSource remoteSensorSource, int remoteOrdinal,
394 int timeoutMs = 0)= 0;
411 virtual ErrorCode ConfigRemoteFeedbackFilter(ctre::phoenix::sensors::CANCoder &canCoderRef, int remoteOrdinal, int timeoutMs = 0)= 0;
428 virtual ErrorCode ConfigRemoteFeedbackFilter(ctre::phoenix::motorcontrol::can::BaseTalon &talonRef, int remoteOrdinal, int timeoutMs = 0)= 0;
444 virtual ErrorCode ConfigSensorTerm(SensorTerm sensorTerm, FeedbackDevice feedbackDevice, int timeoutMs = 0)= 0;
445
446 //------- sensor status --------- //
456 virtual double GetSelectedSensorPosition(int pidIdx = 0) = 0;
465 virtual double GetSelectedSensorVelocity(int pidIdx = 0) = 0;
479 virtual ErrorCode SetSelectedSensorPosition(double sensorPos, int pidIdx = 0,
480 int timeoutMs = 50) = 0;
481
482 //------ status frame period changes ----------//
493 int periodMs) = 0;
513 virtual ErrorCode SetStatusFramePeriod(StatusFrame frame, uint8_t periodMs,
514 int timeoutMs = 0) = 0;
526 virtual int GetStatusFramePeriod(StatusFrame frame, int timeoutMs = 0) = 0;
527
528 //----- velocity signal conditionaing ------//
529 /* not supported */
530
531 //------ remote limit switch ----------//
552 RemoteLimitSwitchSource type, LimitSwitchNormal normalOpenOrClose,
553 int deviceID, int timeoutMs = 0) = 0;
574 RemoteLimitSwitchSource type, LimitSwitchNormal normalOpenOrClose,
575 int deviceID, int timeoutMs = 0) = 0;
582 virtual void OverrideLimitSwitchesEnable(bool enable) = 0;
583
584 //------ local limit switch ----------//
585 /* not supported */
586
587 //------ soft limit ----------//
599 virtual ErrorCode ConfigForwardSoftLimitThreshold(double forwardSensorLimit,
600 int timeoutMs = 0) = 0;
612 virtual ErrorCode ConfigReverseSoftLimitThreshold(double reverseSensorLimit,
613 int timeoutMs = 0) = 0;
626 int timeoutMs = 0) = 0;
639 int timeoutMs = 0) = 0;
648 virtual void OverrideSoftLimitsEnable(bool enable) = 0;
649
650 //------ Current Lim ----------//
651 /* not supported */
652
653 //------ Config Close loop ----------//
670 virtual ErrorCode Config_kP(int slotIdx, double value, int timeoutMs = 0) = 0;
688 virtual ErrorCode Config_kI(int slotIdx, double value, int timeoutMs = 0) = 0;
706 virtual ErrorCode Config_kD(int slotIdx, double value, int timeoutMs = 0) = 0;
724 virtual ErrorCode Config_kF(int slotIdx, double value, int timeoutMs = 0) = 0;
742 virtual ErrorCode Config_IntegralZone(int slotIdx, double izone,
743 int timeoutMs = 0) = 0;
758 double allowableCloseLoopError, int timeoutMs = 0) = 0;
773 virtual ErrorCode ConfigMaxIntegralAccumulator(int slotIdx, double iaccum,
774 int timeoutMs = 0) = 0;
791 virtual ErrorCode ConfigClosedLoopPeakOutput(int slotIdx, double percentOut, int timeoutMs = 0) = 0;
807 virtual ErrorCode ConfigClosedLoopPeriod(int slotIdx, int loopTimeMs, int timeoutMs = 0) = 0;
808
828 virtual ErrorCode ConfigAuxPIDPolarity(bool invert, int timeoutMs = 0) = 0;
829
830 //------ Close loop State ----------//
847 virtual ErrorCode SetIntegralAccumulator(double iaccum, int pidIdx = 0,
848 int timeoutMs = 0) = 0;
869 virtual double GetClosedLoopError(int pidIdx = 0) = 0;
877 virtual double GetIntegralAccumulator(int pidIdx = 0) = 0;
885 virtual double GetErrorDerivative(int pidIdx = 0) = 0;
886
895 virtual ErrorCode SelectProfileSlot(int slotIdx, int pidIdx) = 0;
896
904 virtual double GetClosedLoopTarget(int pidIdx = 0) = 0;
913 virtual double GetActiveTrajectoryPosition(int pidIdx = 0) = 0;
922 virtual double GetActiveTrajectoryVelocity(int pidIdx = 0) = 0;
932 virtual double GetActiveTrajectoryArbFeedFwd(int pidIdx = 0) = 0;
933
934 //------ Motion Profile Settings used in Motion Magic ----------//
947 virtual ErrorCode ConfigMotionCruiseVelocity(double sensorUnitsPer100ms,
948 int timeoutMs = 0) = 0;
962 virtual ErrorCode ConfigMotionAcceleration(double sensorUnitsPer100msPerSec,
963 int timeoutMs = 0) = 0;
964
978 virtual ErrorCode ConfigMotionSCurveStrength(int curveStrength, int timeoutMs) = 0;
979 //------ Motion Profile Buffer ----------//
1031 const ctre::phoenix::motion::TrajectoryPoint & trajPt)= 0;
1107 virtual ErrorCode ClearMotionProfileHasUnderrun(int timeoutMs = 0)= 0;
1134 virtual ErrorCode ConfigMotionProfileTrajectoryPeriod(int baseTrajDurationMs, int timeoutMs = 0)=0;
1135
1136 //------Feedback Device Interaction Settings---------//
1154 virtual ErrorCode ConfigFeedbackNotContinuous(bool feedbackNotContinuous, int timeoutMs = 0) = 0;
1166 virtual ErrorCode ConfigRemoteSensorClosedLoopDisableNeutralOnLOS(bool remoteSensorClosedLoopDisableNeutralOnLOS, int timeoutMs = 0) = 0;
1178 virtual ErrorCode ConfigClearPositionOnLimitF(bool clearPositionOnLimitF, int timeoutMs = 0) = 0;
1190 virtual ErrorCode ConfigClearPositionOnLimitR(bool clearPositionOnLimitR, int timeoutMs = 0) = 0;
1202 virtual ErrorCode ConfigClearPositionOnQuadIdx(bool clearPositionOnQuadIdx, int timeoutMs = 0) = 0;
1214 virtual ErrorCode ConfigLimitSwitchDisableNeutralOnLOS(bool limitSwitchDisableNeutralOnLOS, int timeoutMs = 0) = 0;
1226 virtual ErrorCode ConfigSoftLimitDisableNeutralOnLOS(bool softLimitDisableNeutralOnLOS, int timeoutMs = 0) = 0;
1239 virtual ErrorCode ConfigPulseWidthPeriod_EdgesPerRot(int pulseWidthPeriod_EdgesPerRot, int timeoutMs = 0) = 0;
1252 virtual ErrorCode ConfigPulseWidthPeriod_FilterWindowSz(int pulseWidthPeriod_FilterWindowSz, int timeoutMs = 0) = 0;
1253
1254 //------ error ----------//
1263
1264 //------ Faults ----------//
1272 virtual ErrorCode GetFaults(Faults & toFill) = 0;
1290 virtual ErrorCode ClearStickyFaults(int timeoutMs = 0) = 0;
1291
1292 //------ Firmware ----------//
1299 virtual int GetFirmwareVersion() = 0;
1305 virtual bool HasResetOccurred() = 0;
1306
1307 //------ Custom Persistent Params ----------//
1325 virtual ErrorCode ConfigSetCustomParam(int newValue, int paramIndex,
1326 int timeoutMs = 0) = 0;
1338 virtual int ConfigGetCustomParam(int paramIndex, int timeoutMs = 0) = 0;
1339
1340 //------ Generic Param API, typically not used ----------//
1361 virtual ErrorCode ConfigSetParameter(ParamEnum param, double value,
1362 uint8_t subValue, int ordinal, int timeoutMs = 0) = 0;
1376 virtual double ConfigGetParameter(ParamEnum paramEnum, int ordinal,
1377 int timeoutMs = 0) = 0;
1378
1379 //------ Misc. ----------//
1383 virtual int GetBaseID() = 0;
1389 virtual int GetDeviceID() = 0;
1394
1395 // ----- Follower ------//
1396 /* in parent interface */
1397};
1398
1399}
1400} // namespace phoenix
1401}
Definition: IFollower.h:13
Definition: IMotorController.h:34
virtual ErrorCode SetStatusFramePeriod(StatusFrame frame, uint8_t periodMs, int timeoutMs=0)=0
virtual ErrorCode SetControlFramePeriod(ControlFrame frame, int periodMs)=0
virtual ErrorCode ConfigMotionProfileTrajectoryPeriod(int baseTrajDurationMs, int timeoutMs=0)=0
virtual double GetSelectedSensorVelocity(int pidIdx=0)=0
virtual void Set(ControlMode mode, double demand0, DemandType demand1Type, double demand1)=0
virtual ErrorCode ConfigClosedloopRamp(double secondsFromNeutralToFull, int timeoutMs=0)=0
virtual ErrorCode ConfigRemoteFeedbackFilter(ctre::phoenix::motorcontrol::can::BaseTalon &talonRef, int remoteOrdinal, int timeoutMs=0)=0
virtual ErrorCode Config_kD(int slotIdx, double value, int timeoutMs=0)=0
virtual ErrorCode ConfigMaxIntegralAccumulator(int slotIdx, double iaccum, int timeoutMs=0)=0
virtual ErrorCode GetStickyFaults(StickyFaults &toFill)=0
virtual ErrorCode ConfigRemoteFeedbackFilter(int deviceID, RemoteSensorSource remoteSensorSource, int remoteOrdinal, int timeoutMs=0)=0
virtual ErrorCode ConfigSelectedFeedbackSensor(RemoteFeedbackDevice feedbackDevice, int pidIdx=0, int timeoutMs=0)=0
virtual void SetNeutralMode(NeutralMode neutralMode)=0
virtual void OverrideLimitSwitchesEnable(bool enable)=0
virtual ErrorCode ConfigFeedbackNotContinuous(bool feedbackNotContinuous, int timeoutMs=0)=0
virtual double GetSelectedSensorPosition(int pidIdx=0)=0
virtual ErrorCode SetIntegralAccumulator(double iaccum, int pidIdx=0, int timeoutMs=0)=0
virtual ErrorCode ConfigLimitSwitchDisableNeutralOnLOS(bool limitSwitchDisableNeutralOnLOS, int timeoutMs=0)=0
virtual ErrorCode ConfigAuxPIDPolarity(bool invert, int timeoutMs=0)=0
virtual ErrorCode ChangeMotionControlFramePeriod(int periodMs)=0
virtual double GetActiveTrajectoryVelocity(int pidIdx=0)=0
virtual ErrorCode ConfigRemoteFeedbackFilter(ctre::phoenix::sensors::CANCoder &canCoderRef, int remoteOrdinal, int timeoutMs=0)=0
virtual ErrorCode ConfigPulseWidthPeriod_EdgesPerRot(int pulseWidthPeriod_EdgesPerRot, int timeoutMs=0)=0
virtual double ConfigGetParameter(ParamEnum paramEnum, int ordinal, int timeoutMs=0)=0
virtual ErrorCode ConfigVoltageMeasurementFilter(int filterWindowSamples, int timeoutMs=0)=0
virtual ErrorCode ConfigSoftLimitDisableNeutralOnLOS(bool softLimitDisableNeutralOnLOS, int timeoutMs=0)=0
virtual double GetErrorDerivative(int pidIdx=0)=0
virtual ErrorCode ConfigForwardLimitSwitchSource(RemoteLimitSwitchSource type, LimitSwitchNormal normalOpenOrClose, int deviceID, int timeoutMs=0)=0
virtual double GetClosedLoopTarget(int pidIdx=0)=0
virtual ErrorCode ConfigReverseLimitSwitchSource(RemoteLimitSwitchSource type, LimitSwitchNormal normalOpenOrClose, int deviceID, int timeoutMs=0)=0
virtual ErrorCode ConfigNominalOutputForward(double percentOut, int timeoutMs=0)=0
virtual double GetClosedLoopError(int pidIdx=0)=0
virtual ErrorCode ConfigFactoryDefault(int timeout)=0
virtual ErrorCode ConfigNeutralDeadband(double percentDeadband, int timeoutMs=0)=0
virtual ErrorCode Config_IntegralZone(int slotIdx, double izone, int timeoutMs=0)=0
virtual ErrorCode ConfigReverseSoftLimitEnable(bool enable, int timeoutMs=0)=0
virtual ErrorCode Config_kF(int slotIdx, double value, int timeoutMs=0)=0
virtual int ConfigGetCustomParam(int paramIndex, int timeoutMs=0)=0
virtual ErrorCode ClearStickyFaults(int timeoutMs=0)=0
virtual ErrorCode ConfigNominalOutputReverse(double percentOut, int timeoutMs=0)=0
virtual ErrorCode GetFaults(Faults &toFill)=0
virtual double GetIntegralAccumulator(int pidIdx=0)=0
virtual ErrorCode ConfigAllowableClosedloopError(int slotIdx, double allowableCloseLoopError, int timeoutMs=0)=0
virtual ErrorCode SelectProfileSlot(int slotIdx, int pidIdx)=0
virtual ErrorCode ConfigSetCustomParam(int newValue, int paramIndex, int timeoutMs=0)=0
virtual ErrorCode ConfigPeakOutputReverse(double percentOut, int timeoutMs=0)=0
virtual ErrorCode SetSelectedSensorPosition(double sensorPos, int pidIdx=0, int timeoutMs=50)=0
virtual void Set(ControlMode Mode, double demand)=0
virtual ErrorCode ConfigSetParameter(ParamEnum param, double value, uint8_t subValue, int ordinal, int timeoutMs=0)=0
virtual ErrorCode GetMotionProfileStatus(ctre::phoenix::motion::MotionProfileStatus &statusToFill)=0
virtual void SetInverted(bool invert)=0
virtual ErrorCode ConfigSensorTerm(SensorTerm sensorTerm, FeedbackDevice feedbackDevice, int timeoutMs=0)=0
virtual ErrorCode ConfigPulseWidthPeriod_FilterWindowSz(int pulseWidthPeriod_FilterWindowSz, int timeoutMs=0)=0
virtual ErrorCode ConfigClosedLoopPeakOutput(int slotIdx, double percentOut, int timeoutMs=0)=0
virtual ErrorCode ConfigForwardSoftLimitThreshold(double forwardSensorLimit, int timeoutMs=0)=0
virtual ErrorCode ConfigReverseSoftLimitThreshold(double reverseSensorLimit, int timeoutMs=0)=0
virtual ErrorCode ClearMotionProfileHasUnderrun(int timeoutMs=0)=0
virtual ErrorCode ConfigClosedLoopPeriod(int slotIdx, int loopTimeMs, int timeoutMs=0)=0
virtual ErrorCode ConfigMotionSCurveStrength(int curveStrength, int timeoutMs)=0
virtual ErrorCode Config_kP(int slotIdx, double value, int timeoutMs=0)=0
virtual void OverrideSoftLimitsEnable(bool enable)=0
virtual ErrorCode Config_kI(int slotIdx, double value, int timeoutMs=0)=0
virtual ErrorCode ConfigClearPositionOnQuadIdx(bool clearPositionOnQuadIdx, int timeoutMs=0)=0
virtual ErrorCode ConfigSelectedFeedbackCoefficient(double coefficient, int pidIdx=0, int timeoutMs=0)=0
virtual ErrorCode ConfigVoltageCompSaturation(double voltage, int timeoutMs=0)=0
virtual void EnableVoltageCompensation(bool enable)=0
virtual ErrorCode ConfigForwardSoftLimitEnable(bool enable, int timeoutMs=0)=0
virtual ErrorCode ConfigOpenloopRamp(double secondsFromNeutralToFull, int timeoutMs=0)=0
virtual double GetActiveTrajectoryPosition(int pidIdx=0)=0
virtual ErrorCode ConfigClearPositionOnLimitR(bool clearPositionOnLimitR, int timeoutMs=0)=0
virtual ErrorCode ConfigMotionCruiseVelocity(double sensorUnitsPer100ms, int timeoutMs=0)=0
virtual void SetInverted(InvertType invertType)=0
virtual ErrorCode ConfigPeakOutputForward(double percentOut, int timeoutMs=0)=0
virtual ErrorCode ConfigClearPositionOnLimitF(bool clearPositionOnLimitF, int timeoutMs=0)=0
virtual ErrorCode ConfigMotionAcceleration(double sensorUnitsPer100msPerSec, int timeoutMs=0)=0
virtual ErrorCode ConfigRemoteSensorClosedLoopDisableNeutralOnLOS(bool remoteSensorClosedLoopDisableNeutralOnLOS, int timeoutMs=0)=0
virtual double GetActiveTrajectoryArbFeedFwd(int pidIdx=0)=0
virtual int GetStatusFramePeriod(StatusFrame frame, int timeoutMs=0)=0
virtual void SetSensorPhase(bool PhaseSensor)=0
virtual ErrorCode PushMotionProfileTrajectory(const ctre::phoenix::motion::TrajectoryPoint &trajPt)=0
virtual ErrorCode ClearMotionProfileTrajectories()=0
Definition: CANCoder.h:169
ControlMode
Definition: ControlMode.h:10
DemandType
Definition: DemandType.h:9
InvertType
Definition: InvertType.h:13
SensorTerm
Definition: SensorTerm.h:10
LimitSwitchNormal
Definition: LimitSwitchType.h:61
RemoteSensorSource
Definition: RemoteSensorSource.h:12
RemoteFeedbackDevice
Definition: FeedbackDevice.h:169
RemoteLimitSwitchSource
Definition: LimitSwitchType.h:34
FeedbackDevice
Definition: FeedbackDevice.h:13
NeutralMode
Definition: NeutralMode.h:10
ControlFrame
Definition: ControlFrame.h:10
StatusFrame
Definition: StatusFrame.h:94
ParamEnum
Definition: paramEnum.h:12
ErrorCode
Definition: ErrorCode.h:12
Definition: ErrorCode.h:5
Definition: MotionProfileStatus.h:14
Definition: TrajectoryPoint.h:10
Definition: StickyFaults.h:10