librmb 1.0
Rambunction 4330 Utility Library
Loading...
Searching...
No Matches
SparkMaxVelocityController.h
1#pragma once
2
3#include <initializer_list>
4
5#include <rev/CANSparkMax.h>
6
7#include <units/angle.h>
8#include <units/angular_acceleration.h>
9#include <units/angular_velocity.h>
10#include <units/current.h>
11#include <units/time.h>
12
13#include "rmb/motorcontrol/AngularVelocityController.h"
14
15namespace rmb {
16
17namespace SparkMaxVelocityControllerHelper {
19 int id;
20 rev::CANSparkMax::MotorType motorType =
21 rev::CANSparkMax::MotorType::kBrushless;
22 bool inverted = false;
23
24 units::ampere_t currentLimit = 40.0_A;
25 units::second_t openLoopRampRate = 0.5_s;
26};
27
28struct PIDConfig {
29 double p = 0.0, i = 0.0, d = 0.0, ff = 0.0;
30 units::radians_per_second_t tolerance = 0.0_rad_per_s;
31 double iZone = 0.0, iMaxAccumulator = 0.0;
32 double maxOutput = 1.0, minOutput = -1.0;
33};
34
36 bool useSmartMotion = false;
37 units::radians_per_second_t maxVelocity = 0.0_rad_per_s,
38 minVelocity = 0.0_rad_per_s;
39 units::radians_per_second_squared_t maxAcceleration = 0.0_rad_per_s_sq;
40 rev::SparkMaxPIDController::AccelStrategy accelStrategy =
41 rev::SparkMaxPIDController::AccelStrategy::kTrapezoidal;
42
43 units::second_t closedLoopRampRate = 0.5_s;
44};
45
46enum EncoderType { HallSensor, Quadrature, Alternate, Absolute };
47enum LimitSwitchConfig { Disabled, NormalyOpen, NormalyClosed };
48
50 double gearRatio = 1.0;
51 EncoderType encoderType = HallSensor;
52 int countPerRev = 42;
53 LimitSwitchConfig forwardSwitch = Disabled, reverseSwitch = Disabled;
54};
55} // namespace SparkMaxVelocityControllerHelper
56
62public:
66 using EncoderType = SparkMaxVelocityControllerHelper::EncoderType;
67 using LimitSwitchConfig = SparkMaxVelocityControllerHelper::LimitSwitchConfig;
69
70 struct CreateInfo {
71 const MotorConfig motorConfig;
72 const PIDConfig pidConfig = {};
73 const ProfileConfig profileConfig = {};
74 const FeedbackConfig feedbackConfig = {};
75 std::initializer_list<const MotorConfig> followers;
76 };
77
80
81 SparkMaxVelocityController(const CreateInfo &createInfo);
82
83 rev::CANSparkMax &getMotor();
84
85 rev::SparkMaxPIDController &getPIDCOntroller();
86
87 std::unique_ptr<rev::MotorFeedbackSensor> &getFeedbackSensor();
88
89 //--------------------------------------------------
90 // Methods Inherited from AngularVelocityController
91 //--------------------------------------------------
92
98 void setVelocity(units::radians_per_second_t velocity) override;
99
105 units::radians_per_second_t getTargetVelocity() const override;
106
110 virtual void setPower(double power) override;
111
115 virtual double getPower() const override;
116
120 virtual void disable() override;
121
125 virtual void stop() override;
126
127 //---------------------------------------
128 // Methods Inherited from AngularEncoder
129 //---------------------------------------
130
136 units::radians_per_second_t getVelocity() const override;
137
143 units::radian_t getPosition() const override;
144
149 void setEncoderPosition(units::radian_t position = 0_rad) override;
150
151 //----------------------------------------------------------
152 // Methods Inherited from AngularvelocityFeedbackController
153 //----------------------------------------------------------
154
160 virtual units::radians_per_second_t getTolerance() const override;
161
162private:
163 rev::CANSparkMax sparkMax;
164 std::vector<std::unique_ptr<rev::CANSparkMax>> followers;
165 rev::CANSparkMax::ControlType controlType;
166
167 rev::SparkMaxPIDController pidController;
168 units::radians_per_second_t targetVelocity = 0.0_rpm;
169 units::radians_per_second_t tolerance;
170
171 std::unique_ptr<rev::MotorFeedbackSensor> encoder;
172 EncoderType encoderType;
173 double gearRatio;
174};
175} // namespace rmb
Definition AngularVelocityController.h:19
Definition SparkMaxVelocityController.h:61
void setEncoderPosition(units::radian_t position=0_rad) override
virtual units::radians_per_second_t getTolerance() const override
virtual void stop() override
virtual double getPower() const override
virtual void setPower(double power) override
units::radians_per_second_t getTargetVelocity() const override
units::radians_per_second_t getVelocity() const override
virtual void disable() override
void setVelocity(units::radians_per_second_t velocity) override
units::radian_t getPosition() const override
the master namespace of librmb
Definition LogitechGamepad.h:9
Definition SparkMaxVelocityController.h:70
Definition SparkMaxVelocityController.h:49
Definition SparkMaxVelocityController.h:18
Definition SparkMaxVelocityController.h:28
Definition SparkMaxVelocityController.h:35