librmb 1.0
Rambunction 4330 Utility Library
Loading...
Searching...
No Matches
TalonFXPositionController.h
1#pragma once
2
3#include <ctre/phoenix6/CANcoder.hpp>
4#include <ctre/phoenix6/TalonFX.hpp>
5
6#include "rmb/motorcontrol/AngularPositionController.h"
7
8#include "units/angle.h"
9#include "units/angular_acceleration.h"
10#include "units/angular_velocity.h"
11#include "units/base.h"
12#include "units/current.h"
13#include "units/time.h"
14
15#include <optional>
16
17namespace rmb {
18namespace TalonFXPositionControllerHelper {
20 int id;
21 bool inverted = false;
22 bool brake = false;
23 double minOutput = -1.0,
24 maxOutput = 1.0; /*< Applies to both open and closed loop*/
25};
26
42 units::ampere_t statorCurrentLimit = 0.0_A;
61 units::ampere_t supplyCurrentLimit = 0_A;
62
80 units::ampere_t supplyCurrentThreshold = 0_A;
91 units::second_t supplyTimeThreshold = 0.0_s;
92};
93
95 units::second_t rampRate = 0.0_s;
96};
97
98struct PIDConfig {
99 double p = 0.0, i = 0.0, d = 0.0, ff = 0.0;
100 // units::turn_t tolerance = 0.0_rad; /*< Can't find a way to implement in the
101 // new Pheonix V6 API*/ double closedLoopMaxPercentOutput = 1.0; /*< Can't
102 // find a way to implement in the new Pheonix V6 API*/
103
104 units::second_t rampRate = 0.0_s; /*< Amount of time it takes to go from 0 to
105 full throttle. 0_s disables*/
106};
107
108struct Range {
109 units::radian_t minPosition =
110 -std::numeric_limits<units::radian_t>::infinity();
111 units::radian_t maxPosition =
112 std::numeric_limits<units::radian_t>::infinity();
113
114 bool continuousWrap =
115 true; /*< If false, the encoder will keep track of overflow, meaning the
116 position value of the internal encoder, say will go from 2047 to
117 2048 to 2049 as you keep turning it. Otherwise it will go from
118 2047 to 0*/
119};
120
122 bool useSmartMotion = /*< Note to future users: Don't use smart motion!*/
123 false;
124 units::radians_per_second_t maxVelocity = 0.0_rad_per_s,
125 minVelocity = 0.0_rad_per_s;
126 units::radians_per_second_squared_t maxAcceleration = 0.0_rad_per_s_sq;
127};
128
129enum LimitSwitchConfig { Disabled, NormalyOpen, NormalyClosed };
130
132 double sensorToMechanismRatio = 1.0;
133 LimitSwitchConfig forwardSwitch = Disabled, reverseSwitch = Disabled;
134};
135
137 int id;
138
139 units::radian_t magnetOffset = 0.0_rad;
140};
141
142} // namespace TalonFXPositionControllerHelper
144public:
145 struct CreateInfo {
152 std::optional<TalonFXPositionControllerHelper::CANCoderConfig>
153 canCoderConfig;
154 };
155
162
163 virtual ~TalonFXPositionController() = default;
164
169 void setPosition(units::radian_t position) override;
170
176 void setPower(double power) override;
177
181 virtual double getPower() const override;
182
186 units::radian_t getTargetPosition() const override;
187
192 units::radian_t getMinPosition() const override;
193
198 units::radian_t getMaxPosition() const override;
199
203 void disable() override;
204
208 void stop() override;
209
214 units::radians_per_second_t getVelocity() const override;
215
221 units::radian_t getPosition() const override;
222
227 void setEncoderPosition(units::radian_t position = 0_rad) override;
228
234 units::radian_t getTolerance() const override { return 0.0_tr; }
235
240 void follow(const TalonFXPositionController &parentController, bool inverted);
241
242private:
243 // mutable ctre::phoenix::motorcontrol::can::WPI_TalonFX motorcontroller;
244 mutable ctre::phoenix6::hardware::TalonFX motorcontroller;
245
246 // std::optional<ctre::phoenix::sensors::WPI_CANCoder> canCoder;
247 mutable std::optional<ctre::phoenix6::hardware::CANcoder> canCoder;
248
250
251 float sensorToMechanismRatio = 0.0;
252
253 const bool usingCANCoder;
254};
255} // namespace rmb
Definition AngularPositionController.h:19
Definition TalonFXPositionController.h:143
TalonFXPositionController(const CreateInfo &createInfo)
units::radian_t getMaxPosition() const override
units::radian_t getTargetPosition() const override
units::radian_t getPosition() const override
void follow(const TalonFXPositionController &parentController, bool inverted)
virtual double getPower() const override
units::radian_t getMinPosition() const override
void setPosition(units::radian_t position) override
units::radians_per_second_t getVelocity() const override
void setPower(double power) override
units::radian_t getTolerance() const override
Definition TalonFXPositionController.h:234
void setEncoderPosition(units::radian_t position=0_rad) override
the master namespace of librmb
Definition LogitechGamepad.h:9
Definition TalonFXPositionController.h:145
Definition TalonFXPositionController.h:136
describes current limits for the motor. This was copied (and slightly modified to include units:: typ...
Definition TalonFXPositionController.h:30
units::second_t supplyTimeThreshold
Allows unlimited current for a period of time before current limiting occurs. Current threshold is th...
Definition TalonFXPositionController.h:91
units::ampere_t supplyCurrentLimit
The amount of supply current allowed. This is only applicable for non-torque current control modes....
Definition TalonFXPositionController.h:61
units::ampere_t statorCurrentLimit
The amount of current allowed in the motor (motoring and regen current). This is only applicable for ...
Definition TalonFXPositionController.h:42
bool statorCurrentLimitEnable
Enable motor stator current limiting.
Definition TalonFXPositionController.h:48
bool supplyCurrentLimitEnable
Enable motor supply current limiting.
Definition TalonFXPositionController.h:68
units::ampere_t supplyCurrentThreshold
Delay supply current limiting until current exceeds this threshold for longer than SupplyTimeThreshol...
Definition TalonFXPositionController.h:80
Definition TalonFXPositionController.h:131
Definition TalonFXPositionController.h:19
Definition TalonFXPositionController.h:94
Definition TalonFXPositionController.h:98
Definition TalonFXPositionController.h:121
Definition TalonFXPositionController.h:108