CTRE_Phoenix 5.20.2
BaseMotorController.h
1#pragma once
2
3#include "ctre/phoenix/ErrorCode.h"
4#include "ctre/phoenix/paramEnum.h"
5#include "ctre/phoenix/core/GadgeteerUartClient.h"
6#include "ctre/phoenix/motorcontrol/IMotorController.h"
7#include "ctre/phoenix/motorcontrol/ControlMode.h"
8#include "ctre/phoenix/motorcontrol/DemandType.h"
9#include "ctre/phoenix/motorcontrol/Faults.h"
10#include "ctre/phoenix/motorcontrol/FollowerType.h"
11#include "ctre/phoenix/motorcontrol/InvertType.h"
12#include "ctre/phoenix/motorcontrol/StickyFaults.h"
13#include "ctre/phoenix/motorcontrol/VelocityMeasPeriod.h"
14#include "ctre/phoenix/motion/TrajectoryPoint.h"
15#include "ctre/phoenix/motion/MotionProfileStatus.h"
16#include "ctre/phoenix/motion/BufferedTrajectoryPointStream.h"
17#include "ctre/phoenix/CANBusAddressable.h"
18#include "ctre/phoenix/CustomParamConfiguration.h"
19#include "ctre/phoenix/motorcontrol/VictorSPXSimCollection.h"
20#include "ctre/phoenix/sensors/SensorVelocityMeasPeriod.h"
21
22#include <string>
23
24/* forward proto's */
26namespace ctre {
28 namespace phoenix {
30 namespace motorcontrol {
32 namespace lowlevel {
33 class MotControllerWithBuffer_LowLevel;
34 class MotController_LowLevel;
35 }
36 }
37 }
38}
39
40namespace ctre {
41 namespace phoenix {
42 namespace motorcontrol {
44 namespace can {
45
50
55
58 {
59 }
60
64 std::string toString() {
65 return toString("");
66 }
67
73 std::string toString(const std::string& prependString) {
74 return prependString + ".selectedFeedbackCoefficient = " + std::to_string(selectedFeedbackCoefficient) + ";\n";
75
76 }
77 };// struct BasePIDSetConfiguration
78
83
92
96 {
97 }
98
102 std::string toString() {
103 return toString("");
104 }
105
110 std::string toString(std::string prependString) {
111 std::string retstr = prependString + ".remoteSensorDeviceID = " + std::to_string(remoteSensorDeviceID) + ";\n";
112 retstr += prependString + ".remoteSensorSource = " + RemoteSensorSourceRoutines::toString(remoteSensorSource) + ";\n";
113 return retstr;
114 }
115
116
117 }; // struct FilterConfiguration
118
123 private:
124 static FilterConfiguration _default;
125 public:
132 static bool RemoteSensorDeviceIDDifferent(const FilterConfiguration& settings) { return (!(settings.remoteSensorDeviceID == _default.remoteSensorDeviceID)); }
133 static bool RemoteSensorSourceDifferent(const FilterConfiguration& settings) { return (!(settings.remoteSensorSource == _default.remoteSensorSource)); }
134 static bool FilterConfigurationDifferent(const FilterConfiguration& settings) { return RemoteSensorDeviceIDDifferent(settings) || RemoteSensorSourceDifferent(settings); }
136 };
137
142
150 double kP;
159 double kI;
167 double kD;
176 double kF;
202
204 kP(0.0),
205 kI(0.0),
206 kD(0.0),
207 kF(0.0),
208 integralZone(0.0),
213 {
214 }
215
219 std::string toString() {
220 return toString("");
221 }
222
228 std::string toString(std::string prependString) {
229
230 std::string retstr = prependString + ".kP = " + std::to_string(kP) + ";\n";
231 retstr += prependString + ".kI = " + std::to_string(kI) + ";\n";
232 retstr += prependString + ".kD = " + std::to_string(kD) + ";\n";
233 retstr += prependString + ".kF = " + std::to_string(kF) + ";\n";
234 retstr += prependString + ".integralZone = " + std::to_string(integralZone) + ";\n";
235 retstr += prependString + ".allowableClosedloopError = " + std::to_string(allowableClosedloopError) + ";\n";
236 retstr += prependString + ".maxIntegralAccumulator = " + std::to_string(maxIntegralAccumulator) + ";\n";
237 retstr += prependString + ".closedLoopPeakOutput = " + std::to_string(closedLoopPeakOutput) + ";\n";
238 retstr += prependString + ".closedLoopPeriod = " + std::to_string(closedLoopPeriod) + ";\n";
239
240 return retstr;
241
242 }
243
244 };// struct BaseSlotConfiguration
245
250 private:
251 static struct SlotConfiguration _default;
252 public:
259 static bool KPDifferent(const SlotConfiguration& settings) { return (!(settings.kP == _default.kP)); }
260 static bool KIDifferent(const SlotConfiguration& settings) { return (!(settings.kI == _default.kI)); }
261 static bool KDDifferent(const SlotConfiguration& settings) { return (!(settings.kD == _default.kD)); }
262 static bool KFDifferent(const SlotConfiguration& settings) { return (!(settings.kF == _default.kF)); }
263 static bool IntegralZoneDifferent(const SlotConfiguration& settings) { return (!(settings.integralZone == _default.integralZone)); }
264 static bool AllowableClosedloopErrorDifferent(const SlotConfiguration& settings) { return (!(settings.allowableClosedloopError == _default.allowableClosedloopError)); }
265 static bool MaxIntegralAccumulatorDifferent(const SlotConfiguration& settings) { return (!(settings.maxIntegralAccumulator == _default.maxIntegralAccumulator)); }
266 static bool ClosedLoopPeakOutputDifferent(const SlotConfiguration& settings) { return (!(settings.closedLoopPeakOutput == _default.closedLoopPeakOutput)); }
267 static bool ClosedLoopPeriodDifferent(const SlotConfiguration& settings) { return (!(settings.closedLoopPeriod == _default.closedLoopPeriod)); }
269 };
270
271
434
436 openloopRamp(0.0),
437 closedloopRamp(0.0),
439 peakOutputReverse(-1.0),
442 neutralDeadband(41.0 / 1023.0),
445 velocityMeasurementPeriod(ctre::phoenix::sensors::SensorVelocityMeasPeriod::Period_100Ms),
451 auxPIDPolarity(false),
466
467 {
468 }
469
473 std::string toString() {
474 return toString("");
475 }
476
482 std::string toString(std::string prependString) {
483
484 std::string retstr = prependString + ".openloopRamp = " + std::to_string(openloopRamp) + ";\n";
485 retstr += prependString + ".closedloopRamp = " + std::to_string(closedloopRamp) + ";\n";
486 retstr += prependString + ".peakOutputForward = " + std::to_string(peakOutputForward) + ";\n";
487 retstr += prependString + ".peakOutputReverse = " + std::to_string(peakOutputReverse) + ";\n";
488 retstr += prependString + ".nominalOutputForward = " + std::to_string(nominalOutputForward) + ";\n";
489 retstr += prependString + ".nominalOutputReverse = " + std::to_string(nominalOutputReverse) + ";\n";
490 retstr += prependString + ".neutralDeadband = " + std::to_string(neutralDeadband) + ";\n";
491 retstr += prependString + ".voltageCompSaturation = " + std::to_string(voltageCompSaturation) + ";\n";
492 retstr += prependString + ".voltageMeasurementFilter = " + std::to_string(voltageMeasurementFilter) + ";\n";
493 retstr += prependString + ".velocityMeasurementPeriod = " + ctre::phoenix::sensors::SensorVelocityMeasPeriodRoutines::toString(velocityMeasurementPeriod) + ";\n";
494 retstr += prependString + ".velocityMeasurementWindow = " + std::to_string(velocityMeasurementWindow) + ";\n";
495 retstr += prependString + ".forwardSoftLimitThreshold = " + std::to_string(forwardSoftLimitThreshold) + ";\n";
496 retstr += prependString + ".reverseSoftLimitThreshold = " + std::to_string(reverseSoftLimitThreshold) + ";\n";
497 retstr += prependString + ".forwardSoftLimitEnable = " + std::to_string(forwardSoftLimitEnable) + ";\n";
498 retstr += prependString + ".reverseSoftLimitEnable = " + std::to_string(reverseSoftLimitEnable) + ";\n";
499 retstr += slot0.toString(prependString + ".slot0");
500 retstr += slot1.toString(prependString + ".slot1");
501 retstr += slot2.toString(prependString + ".slot2");
502 retstr += slot3.toString(prependString + ".slot3");
503 retstr += prependString + ".auxPIDPolarity = " + std::to_string(auxPIDPolarity) + ";\n";
504 retstr += remoteFilter0.toString(prependString + ".remoteFilter0");
505 retstr += remoteFilter1.toString(prependString + ".remoteFilter1");
506 retstr += prependString + ".motionCruiseVelocity = " + std::to_string(motionCruiseVelocity) + ";\n";
507 retstr += prependString + ".motionAcceleration = " + std::to_string(motionAcceleration) + ";\n";
508 retstr += prependString + ".motionCurveStrength = " + std::to_string(motionCurveStrength) + ";\n";
509 retstr += prependString + ".motionProfileTrajectoryPeriod = " + std::to_string(motionProfileTrajectoryPeriod) + ";\n";
510 retstr += prependString + ".feedbackNotContinuous = " + std::to_string(feedbackNotContinuous) + ";\n";
511 retstr += prependString + ".remoteSensorClosedLoopDisableNeutralOnLOS = " + std::to_string(remoteSensorClosedLoopDisableNeutralOnLOS) + ";\n";
512 retstr += prependString + ".clearPositionOnLimitF = " + std::to_string(clearPositionOnLimitF) + ";\n";
513 retstr += prependString + ".clearPositionOnLimitR = " + std::to_string(clearPositionOnLimitR) + ";\n";
514 retstr += prependString + ".clearPositionOnQuadIdx = " + std::to_string(clearPositionOnQuadIdx) + ";\n";
515 retstr += prependString + ".limitSwitchDisableNeutralOnLOS = " + std::to_string(limitSwitchDisableNeutralOnLOS) + ";\n";
516 retstr += prependString + ".softLimitDisableNeutralOnLOS = " + std::to_string(softLimitDisableNeutralOnLOS) + ";\n";
517 retstr += prependString + ".pulseWidthPeriod_EdgesPerRot = " + std::to_string(pulseWidthPeriod_EdgesPerRot) + ";\n";
518 retstr += prependString + ".pulseWidthPeriod_FilterWindowSz = " + std::to_string(pulseWidthPeriod_FilterWindowSz) + ";\n";
519 retstr += prependString + ".trajectoryInterpolationEnable = " + std::to_string(trajectoryInterpolationEnable) + ";\n";
520
521 retstr += CustomParamConfiguration::toString(prependString);
522
523 return retstr;
524 }
525
526
527 };// struct BaseMotorControllerConfiguration
528
533 private:
534 static struct BaseMotorControllerConfiguration _default;
535 public:
542 static bool OpenloopRampDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.openloopRamp == _default.openloopRamp)) || !settings.enableOptimizations; }
543 static bool ClosedloopRampDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.closedloopRamp == _default.closedloopRamp)) || !settings.enableOptimizations; }
544 static bool PeakOutputForwardDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.peakOutputForward == _default.peakOutputForward)) || !settings.enableOptimizations; }
545 static bool PeakOutputReverseDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.peakOutputReverse == _default.peakOutputReverse)) || !settings.enableOptimizations; }
546 static bool NominalOutputForwardDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.nominalOutputForward == _default.nominalOutputForward)) || !settings.enableOptimizations; }
547 static bool NominalOutputReverseDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.nominalOutputReverse == _default.nominalOutputReverse)) || !settings.enableOptimizations; }
548 static bool NeutralDeadbandDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.neutralDeadband == _default.neutralDeadband)) || !settings.enableOptimizations; }
549 static bool VoltageCompSaturationDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.voltageCompSaturation == _default.voltageCompSaturation)) || !settings.enableOptimizations; }
550 static bool VoltageMeasurementFilterDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.voltageMeasurementFilter == _default.voltageMeasurementFilter)) || !settings.enableOptimizations; }
551 static bool VelocityMeasurementPeriodDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.velocityMeasurementPeriod == _default.velocityMeasurementPeriod)) || !settings.enableOptimizations; }
552 static bool VelocityMeasurementWindowDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.velocityMeasurementWindow == _default.velocityMeasurementWindow)) || !settings.enableOptimizations; }
553 static bool ForwardSoftLimitThresholdDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.forwardSoftLimitThreshold == _default.forwardSoftLimitThreshold)) || !settings.enableOptimizations; }
554 static bool ReverseSoftLimitThresholdDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.reverseSoftLimitThreshold == _default.reverseSoftLimitThreshold)) || !settings.enableOptimizations; }
555 static bool ForwardSoftLimitEnableDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.forwardSoftLimitEnable == _default.forwardSoftLimitEnable)) || !settings.enableOptimizations; }
556 static bool ReverseSoftLimitEnableDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.reverseSoftLimitEnable == _default.reverseSoftLimitEnable)) || !settings.enableOptimizations; }
557 static bool AuxPIDPolarityDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.auxPIDPolarity == _default.auxPIDPolarity)) || !settings.enableOptimizations; }
558 static bool MotionCruiseVelocityDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.motionCruiseVelocity == _default.motionCruiseVelocity)) || !settings.enableOptimizations; }
559 static bool MotionAccelerationDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.motionAcceleration == _default.motionAcceleration)) || !settings.enableOptimizations; }
560 static bool MotionSCurveStrength(const BaseMotorControllerConfiguration& settings) { return (!(settings.motionCurveStrength == _default.motionCurveStrength)) || !settings.enableOptimizations; }
561 static bool MotionProfileTrajectoryPeriodDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.motionProfileTrajectoryPeriod == _default.motionProfileTrajectoryPeriod)) || !settings.enableOptimizations; }
562 static bool FeedbackNotContinuousDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.feedbackNotContinuous == _default.feedbackNotContinuous)) || !settings.enableOptimizations; }
563 static bool RemoteSensorClosedLoopDisableNeutralOnLOSDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.remoteSensorClosedLoopDisableNeutralOnLOS == _default.remoteSensorClosedLoopDisableNeutralOnLOS)) || !settings.enableOptimizations; }
564 static bool ClearPositionOnLimitFDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.clearPositionOnLimitF == _default.clearPositionOnLimitF)) || !settings.enableOptimizations; }
565 static bool ClearPositionOnLimitRDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.clearPositionOnLimitR == _default.clearPositionOnLimitR)) || !settings.enableOptimizations; }
566 static bool ClearPositionOnQuadIdxDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.clearPositionOnQuadIdx == _default.clearPositionOnQuadIdx)) || !settings.enableOptimizations; }
567 static bool LimitSwitchDisableNeutralOnLOSDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.limitSwitchDisableNeutralOnLOS == _default.limitSwitchDisableNeutralOnLOS)) || !settings.enableOptimizations; }
568 static bool SoftLimitDisableNeutralOnLOSDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.softLimitDisableNeutralOnLOS == _default.softLimitDisableNeutralOnLOS)) || !settings.enableOptimizations; }
569 static bool PulseWidthPeriod_EdgesPerRotDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.pulseWidthPeriod_EdgesPerRot == _default.pulseWidthPeriod_EdgesPerRot)) || !settings.enableOptimizations; }
570 static bool PulseWidthPeriod_FilterWindowSzDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.pulseWidthPeriod_FilterWindowSz == _default.pulseWidthPeriod_FilterWindowSz)) || !settings.enableOptimizations; }
571 static bool TrajectoryInterpolationEnableDifferent(const BaseMotorControllerConfiguration& settings) { return (!(settings.trajectoryInterpolationEnable == _default.trajectoryInterpolationEnable)) || !settings.enableOptimizations; }
573 };
577 class BaseMotorController : public virtual IMotorController {
578 private:
581
582 double m_setPoint = 0;
584
585 ctre::phoenix::ErrorCode ConfigureSlot(const SlotConfiguration& slot, int slotIdx, int timeoutMs, bool enableOptimizations);
586 ctre::phoenix::ErrorCode ConfigureFilter(const FilterConfiguration& filter, int ordinal, int timeoutMs, bool enableOptimizations);
587
591 void* m_handle;
592
593 bool _isVcompEn = false;
594
596
597 protected:
598 ctre::phoenix::motorcontrol::VictorSPXSimCollection& GetVictorSPXSimCollection() { return *_simCollSpx; }
599
621 virtual void BaseGetAllConfigs(BaseMotorControllerConfiguration& allConfigs, int timeoutMs);
632 virtual void BaseGetPIDConfigs(BasePIDSetConfiguration& pid, int pidIdx, int timeoutMs);
633
634 //------ General Status ----------//
644 virtual double GetOutputCurrent();
645
646 public:
656 BaseMotorController(int deviceNumber, const char* model, std::string const &canbus = "");
657 virtual ~BaseMotorController();
658 BaseMotorController() = delete;
660 BaseMotorController& operator=(BaseMotorController const&) = delete;
661
666
672 virtual int GetDeviceID();
673 // ------ Set output routines. ----------//
692 virtual void Set(ControlMode mode, double value);
731 virtual void Set(ControlMode mode, double demand0, DemandType demand1Type, double demand1);
735 virtual void NeutralOutput();
743 virtual void SetNeutralMode(NeutralMode neutralMode);
744 //------ Invert behavior ----------//
754 virtual void SetSensorPhase(bool PhaseSensor);
769 virtual void SetInverted(bool invert);
784 virtual void SetInverted(InvertType invertType);
788 virtual bool GetInverted() const;
789 //----- Factory Default Configuration -----//
802 //----- general output shaping ------------------//
815 virtual ctre::phoenix::ErrorCode ConfigOpenloopRamp(double secondsFromNeutralToFull,
816 int timeoutMs = 0);
829 virtual ctre::phoenix::ErrorCode ConfigClosedloopRamp(double secondsFromNeutralToFull,
830 int timeoutMs = 0);
842 virtual ctre::phoenix::ErrorCode ConfigPeakOutputForward(double percentOut, int timeoutMs = 0);
854 virtual ctre::phoenix::ErrorCode ConfigPeakOutputReverse(double percentOut, int timeoutMs = 0);
867 int timeoutMs = 0);
880 int timeoutMs = 0);
893 virtual ctre::phoenix::ErrorCode ConfigNeutralDeadband(double percentDeadband,
894 int timeoutMs = 0);
895 //------ Voltage Compensation ----------//
910 virtual ctre::phoenix::ErrorCode ConfigVoltageCompSaturation(double voltage, int timeoutMs = 0);
924 int timeoutMs = 0);
934 virtual void EnableVoltageCompensation(bool enable);
941
942 //------ General Status ----------//
948 virtual double GetBusVoltage();
954 virtual double GetMotorOutputPercent();
958 virtual double GetMotorOutputVoltage();
964 virtual double GetTemperature();
965
966 //------ sensor selection ----------//
982 RemoteFeedbackDevice feedbackDevice, int pidIdx = 0, int timeoutMs = 0);
997 FeedbackDevice feedbackDevice, int pidIdx = 0, int timeoutMs = 0);
1018 double coefficient, int pidIdx = 0, int timeoutMs = 0);
1038 RemoteSensorSource remoteSensorSource, int remoteOrdinal,
1039 int timeoutMs = 0);
1056 virtual ErrorCode ConfigRemoteFeedbackFilter(ctre::phoenix::sensors::CANCoder &canCoderRef, int remoteOrdinal, int timeoutMs = 0);
1073 virtual ErrorCode ConfigRemoteFeedbackFilter(ctre::phoenix::motorcontrol::can::BaseTalon &talonRef, int remoteOrdinal, int timeoutMs = 0);
1090 FeedbackDevice feedbackDevice, int timeoutMs = 0);
1107 RemoteFeedbackDevice feedbackDevice, int timeoutMs = 0);
1108
1109 //------- sensor status --------- //
1119 virtual double GetSelectedSensorPosition(int pidIdx = 0);
1128 virtual double GetSelectedSensorVelocity(int pidIdx = 0);
1142 virtual ctre::phoenix::ErrorCode SetSelectedSensorPosition(double sensorPos, int pidIdx = 0, int timeoutMs = 50);
1143 //------ status frame period changes ----------//
1174 int timeoutMs = 0);
1195 uint8_t periodMs, int timeoutMs = 0);
1207 virtual int GetStatusFramePeriod(StatusFrame frame, int timeoutMs = 0);
1219 virtual int GetStatusFramePeriod(StatusFrameEnhanced frame, int timeoutMs = 0);
1220 //----- velocity signal conditionaing ------//
1234 int timeoutMs = 0);
1235
1236 [[deprecated("Use the overload with SensorVelocityMeasPeriod instead.")]]
1238 int timeoutMs = 0);
1254 int timeoutMs = 0);
1255 //------ remote limit switch ----------//
1276 RemoteLimitSwitchSource type, LimitSwitchNormal normalOpenOrClose,
1277 int deviceID, int timeoutMs = 0);
1298 RemoteLimitSwitchSource type, LimitSwitchNormal normalOpenOrClose,
1299 int deviceID, int timeoutMs = 0);
1307 //------ local limit switch ----------//
1331 LimitSwitchNormal normalOpenOrClose, int timeoutMs = 0);
1355 LimitSwitchNormal normalOpenOrClose, int timeoutMs = 0);
1356 //------ soft limit ----------//
1369 int timeoutMs = 0);
1382 int timeoutMs = 0);
1395 int timeoutMs = 0);
1408 int timeoutMs = 0);
1417 virtual void OverrideSoftLimitsEnable(bool enable);
1418 //------ Current Lim ----------//
1419 /* not available in base */
1420 //------ General Close loop ----------//
1437 virtual ctre::phoenix::ErrorCode Config_kP(int slotIdx, double value, int timeoutMs = 0);
1455 virtual ctre::phoenix::ErrorCode Config_kI(int slotIdx, double value, int timeoutMs = 0);
1473 virtual ctre::phoenix::ErrorCode Config_kD(int slotIdx, double value, int timeoutMs = 0);
1491 virtual ctre::phoenix::ErrorCode Config_kF(int slotIdx, double value, int timeoutMs = 0);
1509 virtual ctre::phoenix::ErrorCode Config_IntegralZone(int slotIdx, double izone,
1510 int timeoutMs = 0);
1525 double allowableCloseLoopError, int timeoutMs = 0);
1540 virtual ctre::phoenix::ErrorCode ConfigMaxIntegralAccumulator(int slotIdx, double iaccum,
1541 int timeoutMs = 0);
1558 virtual ctre::phoenix::ErrorCode ConfigClosedLoopPeakOutput(int slotIdx, double percentOut, int timeoutMs = 0);
1574 virtual ctre::phoenix::ErrorCode ConfigClosedLoopPeriod(int slotIdx, int loopTimeMs, int timeoutMs = 0);
1575
1595 virtual ctre::phoenix::ErrorCode ConfigAuxPIDPolarity(bool invert, int timeoutMs = 0);
1596
1597 //------ Close loop State ----------//
1614 virtual ctre::phoenix::ErrorCode SetIntegralAccumulator(double iaccum, int pidIdx = 0, int timeoutMs = 0);
1634 virtual double GetClosedLoopError(int pidIdx = 0);
1642 virtual double GetIntegralAccumulator(int pidIdx = 0);
1650 virtual double GetErrorDerivative(int pidIdx = 0);
1651
1660 virtual ctre::phoenix::ErrorCode SelectProfileSlot(int slotIdx, int pidIdx);
1661
1669 virtual double GetClosedLoopTarget(int pidIdx = 0); virtual double GetActiveTrajectoryPosition(int pidIdx = 0);
1682 virtual double GetActiveTrajectoryVelocity(int pidIdx = 0);
1691 virtual double GetActiveTrajectoryArbFeedFwd(int pidIdx = 0);
1692
1693 //------ Motion Profile Settings used in Motion Magic ----------//
1706 virtual ctre::phoenix::ErrorCode ConfigMotionCruiseVelocity(double sensorUnitsPer100ms,
1707 int timeoutMs = 0);
1721 virtual ctre::phoenix::ErrorCode ConfigMotionAcceleration(double sensorUnitsPer100msPerSec,
1722 int timeoutMs = 0);
1736 virtual ctre::phoenix::ErrorCode ConfigMotionSCurveStrength(int curveStrength, int timeoutMs = 0);
1737 //------ Motion Profile Buffer ----------//
1928 virtual ctre::phoenix::ErrorCode ConfigMotionProfileTrajectoryPeriod(int baseTrajDurationMs, int timeoutMs = 0);
1944
1945
1946 //------Feedback Device Interaction Settings---------//
1964 virtual ErrorCode ConfigFeedbackNotContinuous(bool feedbackNotContinuous, int timeoutMs = 0);
1976 virtual ErrorCode ConfigRemoteSensorClosedLoopDisableNeutralOnLOS(bool remoteSensorClosedLoopDisableNeutralOnLOS, int timeoutMs = 0);
1988 virtual ErrorCode ConfigClearPositionOnLimitF(bool clearPositionOnLimitF, int timeoutMs = 0);
2000 virtual ErrorCode ConfigClearPositionOnLimitR(bool clearPositionOnLimitR, int timeoutMs = 0);
2012 virtual ErrorCode ConfigClearPositionOnQuadIdx(bool clearPositionOnQuadIdx, int timeoutMs = 0);
2024 virtual ErrorCode ConfigLimitSwitchDisableNeutralOnLOS(bool limitSwitchDisableNeutralOnLOS, int timeoutMs = 0);
2036 virtual ErrorCode ConfigSoftLimitDisableNeutralOnLOS(bool softLimitDisableNeutralOnLOS, int timeoutMs = 0);
2049 virtual ErrorCode ConfigPulseWidthPeriod_EdgesPerRot(int pulseWidthPeriod_EdgesPerRot, int timeoutMs = 0);
2062 virtual ErrorCode ConfigPulseWidthPeriod_FilterWindowSz(int pulseWidthPeriod_FilterWindowSz, int timeoutMs = 0);
2063
2064 //------ error ----------//
2073 //------ Faults ----------//
2100 //------ Firmware ----------//
2107 virtual int GetFirmwareVersion();
2113 virtual bool HasResetOccurred();
2114 //------ Custom Persistent Params ----------//
2132 virtual ctre::phoenix::ErrorCode ConfigSetCustomParam(int newValue, int paramIndex,
2133 int timeoutMs = 0);
2145 virtual int ConfigGetCustomParam(int paramIndex,
2146 int timeoutMs = 0);
2147 //------ Generic Param API, typically not used ----------//
2169 uint8_t subValue, int ordinal, int timeoutMs = 0);
2183 virtual double ConfigGetParameter(ctre::phoenix::ParamEnum param, int ordinal, int timeoutMs = 0);
2203 virtual ErrorCode ConfigGetParameter(ParamEnum param, int32_t valueToSend,
2204 int32_t& valueReceived, uint8_t& subValue, int32_t ordinal,
2205 int32_t timeoutMs);
2206 //------ Misc. ----------//
2207 virtual int GetBaseID();
2212 // ----- Follower ------//
2231 virtual void Follow(IMotorController& masterToFollow);
2235 virtual void ValueUpdated();
2236
2237
2238 //-------Config All----------//
2249 void GetSlotConfigs(SlotConfiguration& slot, int slotIdx = 0, int timeoutMs = 50);
2260 void GetFilterConfigs(FilterConfiguration& Filter, int ordinal = 0, int timeoutMs = 50);
2261
2265 void* GetHandle();
2266
2267 };// class BaseMotorController
2268 } // namespace can
2269 } // namespace motorcontrol
2270 } // namespace phoenix
2271} // namespace ctre
Definition: BufferedTrajectoryPointStream.h:12
Definition: IMotorController.h:34
static std::string toString(RemoteSensorSource value)
Definition: RemoteSensorSource.h:100
Definition: VictorSPXSimCollection.h:25
Definition: BaseMotorController.h:577
virtual ctre::phoenix::ErrorCode ConfigVelocityMeasurementWindow(int windowSize, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigClosedLoopPeakOutput(int slotIdx, double percentOut, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ChangeMotionControlFramePeriod(int periodMs)
virtual ErrorCode ConfigRemoteFeedbackFilter(ctre::phoenix::motorcontrol::can::BaseTalon &talonRef, int remoteOrdinal, int timeoutMs=0)
virtual ErrorCode ConfigClearPositionOnQuadIdx(bool clearPositionOnQuadIdx, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode SelectProfileSlot(int slotIdx, int pidIdx)
virtual ctre::phoenix::ErrorCode ClearStickyFaults(int timeoutMs=0)
virtual ErrorCode ConfigLimitSwitchDisableNeutralOnLOS(bool limitSwitchDisableNeutralOnLOS, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigVoltageMeasurementFilter(int filterWindowSamples, int timeoutMs=0)
virtual ErrorCode ConfigRemoteFeedbackFilter(ctre::phoenix::sensors::CANCoder &canCoderRef, int remoteOrdinal, int timeoutMs=0)
virtual double GetSelectedSensorPosition(int pidIdx=0)
virtual ctre::phoenix::ErrorCode ConfigSensorTerm(SensorTerm sensorTerm, FeedbackDevice feedbackDevice, int timeoutMs=0)
virtual ErrorCode ConfigGetParameter(ParamEnum param, int32_t valueToSend, int32_t &valueReceived, uint8_t &subValue, int32_t ordinal, int32_t timeoutMs)
virtual ctre::phoenix::ErrorCode Config_kP(int slotIdx, double value, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigReverseSoftLimitEnable(bool enable, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigSelectedFeedbackSensor(RemoteFeedbackDevice feedbackDevice, int pidIdx=0, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode BaseConfigAllSettings(const BaseMotorControllerConfiguration &allConfigs, int timeoutMs)
virtual ctre::phoenix::ErrorCode ConfigAllowableClosedloopError(int slotIdx, double allowableCloseLoopError, int timeoutMs=0)
virtual ErrorCode ConfigPulseWidthPeriod_EdgesPerRot(int pulseWidthPeriod_EdgesPerRot, int timeoutMs=0)
virtual double GetSelectedSensorVelocity(int pidIdx=0)
virtual ctre::phoenix::ErrorCode Config_kI(int slotIdx, double value, int timeoutMs=0)
virtual ErrorCode ConfigFeedbackNotContinuous(bool feedbackNotContinuous, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigMotionCruiseVelocity(double sensorUnitsPer100ms, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigClosedLoopPeriod(int slotIdx, int loopTimeMs, int timeoutMs=0)
virtual ErrorCode ConfigSoftLimitDisableNeutralOnLOS(bool softLimitDisableNeutralOnLOS, int timeoutMs=0)
virtual ErrorCode ConfigClearPositionOnLimitR(bool clearPositionOnLimitR, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigForwardSoftLimitThreshold(double forwardSensorLimit, int timeoutMs=0)
virtual void SetNeutralMode(NeutralMode neutralMode)
virtual ctre::phoenix::ErrorCode PushMotionProfileTrajectory(const ctre::phoenix::motion::TrajectoryPoint &trajPt)
virtual ctre::phoenix::ErrorCode ConfigSelectedFeedbackSensor(FeedbackDevice feedbackDevice, int pidIdx=0, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigMotionSCurveStrength(int curveStrength, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode Config_kF(int slotIdx, double value, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ClearMotionProfileHasUnderrun(int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigMaxIntegralAccumulator(int slotIdx, double iaccum, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigNeutralDeadband(double percentDeadband, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigFactoryDefault(int timeoutMs=50)
virtual ErrorCode ConfigRemoteSensorClosedLoopDisableNeutralOnLOS(bool remoteSensorClosedLoopDisableNeutralOnLOS, int timeoutMs=0)
virtual double GetActiveTrajectoryVelocity(int pidIdx=0)
virtual ctre::phoenix::ErrorCode ConfigNominalOutputForward(double percentOut, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigNominalOutputReverse(double percentOut, int timeoutMs=0)
void Follow(IMotorController &masterToFollow, ctre::phoenix::motorcontrol::FollowerType followerType)
virtual void BaseGetPIDConfigs(BasePIDSetConfiguration &pid, int pidIdx, int timeoutMs)
virtual int GetStatusFramePeriod(StatusFrame frame, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigPeakOutputForward(double percentOut, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode StartMotionProfile(ctre::phoenix::motion::BufferedTrajectoryPointStream &stream, uint32_t minBufferedPts, ControlMode motionProfControlMode)
Simple one-shot firing of a complete MP. Starting in 2019, MPs can be fired by building a Buffered Tr...
virtual ctre::phoenix::ErrorCode ConfigReverseSoftLimitThreshold(double reverseSensorLimit, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigPeakOutputReverse(double percentOut, int timeoutMs=0)
virtual void Set(ControlMode mode, double demand0, DemandType demand1Type, double demand1)
virtual ctre::phoenix::ErrorCode ConfigRemoteFeedbackFilter(int deviceID, RemoteSensorSource remoteSensorSource, int remoteOrdinal, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigAuxPIDPolarity(bool invert, int timeoutMs=0)
virtual ErrorCode ConfigClearPositionOnLimitF(bool clearPositionOnLimitF, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigClosedloopRamp(double secondsFromNeutralToFull, int timeoutMs=0)
virtual void SetInverted(InvertType invertType)
virtual ctre::phoenix::ErrorCode SetStatusFramePeriod(StatusFrame frame, uint8_t periodMs, int timeoutMs=0)
virtual ErrorCode ConfigPulseWidthPeriod_FilterWindowSz(int pulseWidthPeriod_FilterWindowSz, int timeoutMs=0)
virtual double ConfigGetParameter(ctre::phoenix::ParamEnum param, int ordinal, int timeoutMs=0)
virtual int ConfigGetCustomParam(int paramIndex, int timeoutMs=0)
void GetFilterConfigs(FilterConfiguration &Filter, int ordinal=0, int timeoutMs=50)
virtual ctre::phoenix::ErrorCode ConfigSensorTerm(SensorTerm sensorTerm, RemoteFeedbackDevice feedbackDevice, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigReverseLimitSwitchSource(LimitSwitchSource type, LimitSwitchNormal normalOpenOrClose, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode GetLastError()
virtual ctre::phoenix::ErrorCode SetStatusFramePeriod(StatusFrameEnhanced frame, uint8_t periodMs, int timeoutMs=0)
virtual bool IsMotionProfileFinished()
Determine if running MP is complete. This requires using the StartMotionProfile routine to start the ...
virtual ctre::phoenix::ErrorCode ConfigSetCustomParam(int newValue, int paramIndex, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode GetMotionProfileStatus(ctre::phoenix::motion::MotionProfileStatus &statusToFill)
virtual ctre::phoenix::ErrorCode ConfigMotionAcceleration(double sensorUnitsPer100msPerSec, int timeoutMs=0)
virtual void BaseGetAllConfigs(BaseMotorControllerConfiguration &allConfigs, int timeoutMs)
virtual void Follow(IMotorController &masterToFollow)
void GetSlotConfigs(SlotConfiguration &slot, int slotIdx=0, int timeoutMs=50)
virtual ctre::phoenix::ErrorCode SetIntegralAccumulator(double iaccum, int pidIdx=0, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigOpenloopRamp(double secondsFromNeutralToFull, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode GetFaults(Faults &toFill)
virtual ctre::phoenix::ErrorCode ConfigMotionProfileTrajectoryInterpolationEnable(bool enable, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigForwardSoftLimitEnable(bool enable, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigSetParameter(ctre::phoenix::ParamEnum param, double value, uint8_t subValue, int ordinal, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigReverseLimitSwitchSource(RemoteLimitSwitchSource type, LimitSwitchNormal normalOpenOrClose, int deviceID, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigSelectedFeedbackCoefficient(double coefficient, int pidIdx=0, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigVoltageCompSaturation(double voltage, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigMotionProfileTrajectoryPeriod(int baseTrajDurationMs, int timeoutMs=0)
virtual int GetStatusFramePeriod(StatusFrameEnhanced frame, int timeoutMs=0)
virtual double GetActiveTrajectoryArbFeedFwd(int pidIdx=0)
virtual ctre::phoenix::ErrorCode ConfigForwardLimitSwitchSource(RemoteLimitSwitchSource type, LimitSwitchNormal normalOpenOrClose, int deviceID, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode Config_IntegralZone(int slotIdx, double izone, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode GetStickyFaults(StickyFaults &toFill)
virtual ctre::phoenix::ErrorCode SetControlFramePeriod(ControlFrame frame, int periodMs)
virtual double GetActiveTrajectoryPosition(int pidIdx=0)
virtual ctre::phoenix::ErrorCode Config_kD(int slotIdx, double value, int timeoutMs=0)
virtual ctre::phoenix::ErrorCode ConfigVelocityMeasurementPeriod(ctre::phoenix::sensors::SensorVelocityMeasPeriod period, int timeoutMs=0)
virtual void Set(ControlMode mode, double value)
virtual ctre::phoenix::ErrorCode ConfigForwardLimitSwitchSource(LimitSwitchSource type, LimitSwitchNormal normalOpenOrClose, int timeoutMs=0)
BaseMotorController(int deviceNumber, const char *model, std::string const &canbus="")
virtual ctre::phoenix::ErrorCode SetSelectedSensorPosition(double sensorPos, int pidIdx=0, int timeoutMs=50)
static bool OpenloopRampDifferent(const BaseMotorControllerConfiguration &settings)
Definition: BaseMotorController.h:542
Definition: BaseMotorController.h:249
static bool KPDifferent(const SlotConfiguration &settings)
Definition: BaseMotorController.h:259
Definition: CANCoder.h:169
static std::string toString(SensorVelocityMeasPeriod value)
Definition: SensorVelocityMeasPeriod.h:57
ControlMode
Definition: ControlMode.h:10
FollowerType
Definition: FollowerType.h:10
DemandType
Definition: DemandType.h:9
InvertType
Definition: InvertType.h:13
@ None
Same as SetInverted(false)
StatusFrameEnhanced
Definition: StatusFrame.h:10
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
VelocityMeasPeriod
Definition: VelocityMeasPeriod.h:12
@ Period_100Ms
Definition: VelocityMeasPeriod.h:44
StatusFrame
Definition: StatusFrame.h:94
LimitSwitchSource
Definition: LimitSwitchType.h:10
SensorVelocityMeasPeriod
Definition: SensorVelocityMeasPeriod.h:12
ParamEnum
Definition: paramEnum.h:12
ErrorCode
Definition: ErrorCode.h:12
Definition: ErrorCode.h:5
Definition: CustomParamConfiguration.h:52
Definition: CustomParamConfiguration.h:10
bool enableOptimizations
Definition: CustomParamConfiguration.h:22
std::string toString()
Definition: CustomParamConfiguration.h:33
Definition: MotionProfileStatus.h:14
Definition: TrajectoryPoint.h:10
Definition: StickyFaults.h:10
double motionCruiseVelocity
Definition: BaseMotorController.h:378
int motionCurveStrength
Definition: BaseMotorController.h:386
bool auxPIDPolarity
Definition: BaseMotorController.h:366
bool clearPositionOnQuadIdx
Definition: BaseMotorController.h:413
double motionAcceleration
Definition: BaseMotorController.h:382
SlotConfiguration slot3
Definition: BaseMotorController.h:354
bool clearPositionOnLimitR
Definition: BaseMotorController.h:409
double nominalOutputReverse
Definition: BaseMotorController.h:299
double openloopRamp
Definition: BaseMotorController.h:279
int pulseWidthPeriod_FilterWindowSz
Definition: BaseMotorController.h:429
double voltageCompSaturation
Definition: BaseMotorController.h:310
double neutralDeadband
Definition: BaseMotorController.h:303
bool remoteSensorClosedLoopDisableNeutralOnLOS
Definition: BaseMotorController.h:401
double closedloopRamp
Definition: BaseMotorController.h:283
double reverseSoftLimitThreshold
Definition: BaseMotorController.h:330
int pulseWidthPeriod_EdgesPerRot
Definition: BaseMotorController.h:425
bool softLimitDisableNeutralOnLOS
Definition: BaseMotorController.h:421
std::string toString(std::string prependString)
Definition: BaseMotorController.h:482
double peakOutputForward
Definition: BaseMotorController.h:287
int velocityMeasurementWindow
Definition: BaseMotorController.h:322
bool forwardSoftLimitEnable
Definition: BaseMotorController.h:334
SlotConfiguration slot0
Definition: BaseMotorController.h:342
int motionProfileTrajectoryPeriod
Definition: BaseMotorController.h:393
bool feedbackNotContinuous
Definition: BaseMotorController.h:397
FilterConfiguration remoteFilter1
Definition: BaseMotorController.h:374
int voltageMeasurementFilter
Definition: BaseMotorController.h:314
bool trajectoryInterpolationEnable
Definition: BaseMotorController.h:433
SlotConfiguration slot2
Definition: BaseMotorController.h:350
ctre::phoenix::sensors::SensorVelocityMeasPeriod velocityMeasurementPeriod
Definition: BaseMotorController.h:318
bool reverseSoftLimitEnable
Definition: BaseMotorController.h:338
FilterConfiguration remoteFilter0
Definition: BaseMotorController.h:370
bool clearPositionOnLimitF
Definition: BaseMotorController.h:405
bool limitSwitchDisableNeutralOnLOS
Definition: BaseMotorController.h:417
double nominalOutputForward
Definition: BaseMotorController.h:295
std::string toString()
Definition: BaseMotorController.h:473
double peakOutputReverse
Definition: BaseMotorController.h:291
SlotConfiguration slot1
Definition: BaseMotorController.h:346
double forwardSoftLimitThreshold
Definition: BaseMotorController.h:326
double selectedFeedbackCoefficient
Definition: BaseMotorController.h:54
std::string toString()
Definition: BaseMotorController.h:64
std::string toString(const std::string &prependString)
Definition: BaseMotorController.h:73
Definition: BaseMotorController.h:122
static bool RemoteSensorDeviceIDDifferent(const FilterConfiguration &settings)
Definition: BaseMotorController.h:132
Definition: BaseMotorController.h:82
std::string toString(std::string prependString)
Definition: BaseMotorController.h:110
std::string toString()
Definition: BaseMotorController.h:102
int remoteSensorDeviceID
Definition: BaseMotorController.h:87
RemoteSensorSource remoteSensorSource
Definition: BaseMotorController.h:91
Definition: BaseMotorController.h:141
double maxIntegralAccumulator
Definition: BaseMotorController.h:193
std::string toString(std::string prependString)
Definition: BaseMotorController.h:228
double allowableClosedloopError
Definition: BaseMotorController.h:189
double kD
Definition: BaseMotorController.h:167
int closedLoopPeriod
Definition: BaseMotorController.h:201
std::string toString()
Definition: BaseMotorController.h:219
double kI
Definition: BaseMotorController.h:159
double kP
Definition: BaseMotorController.h:150
double kF
Definition: BaseMotorController.h:176
double closedLoopPeakOutput
Definition: BaseMotorController.h:197
double integralZone
Definition: BaseMotorController.h:184