librmb 1.0
Rambunction 4330 Utility Library
Loading...
Searching...
No Matches
ElevatorFeedforward.h
1
2#pragma once
3
4#include <units/angle.h>
5#include <units/base.h>
6#include <units/length.h>
7#include <units/voltage.h>
8
9#include <wpi/MathExtras.h>
10
11#include "rmb/motorcontrol/feedforward/Feedforward.h"
12
13namespace rmb {
14
18template <typename DistanceUnit>
19class ElevatorFeedforward : public Feedforward<DistanceUnit> {
20public:
32 using KsUnit = typename Feedforward<
33 DistanceUnit>::KsUnit;
34 using Ks_t = typename Feedforward<
35 DistanceUnit>::Ks_t;
36 using KvUnit = typename Feedforward<
37 DistanceUnit>::KvUnit;
38 using Kv_t = typename Feedforward<
39 DistanceUnit>::Kv_t;
40 using KaUnit = typename Feedforward<
41 DistanceUnit>::KaUnit;
42 using Ka_t = typename Feedforward<
43 DistanceUnit>::Ka_t;
53 : kS(kS), kG(kG), kV(kV), kA(kA) {}
54
63 inline units::volt_t
64 calculate(Velocity_t velocity, Distance_t distance = Distance_t(0.0),
65 Acceleration_t acceleration = Acceleration_t(0.0)) const override {
66 return kS * wpi::sgn(velocity) + kG + kV * velocity + kA * acceleration;
67 }
68
78 inline Velocity_t
79 maxAchievableVelocity(units::volt_t maxVoltage, Acceleration_t acceleration,
80 Distance_t position = Distance_t(0.0)) const override {
81 return (maxVoltage - kS - kG - kA * acceleration) / kV;
82 }
83
93 inline Velocity_t
94 minAchievableVelocity(units::volt_t maxVoltage, Acceleration_t acceleration,
95 Distance_t position = Distance_t(0.0)) const override {
96 return (-maxVoltage + kS - kG - kA * acceleration) / kV;
97 }
98
109 units::volt_t maxVoltage, Velocity_t velocity,
110 Distance_t position = Distance_t(0.0)) const override {
111 return (maxVoltage - kS * wpi::sgn(velocity) - kG - kV * velocity) / kA;
112 }
113
124 units::volt_t maxVoltage, Velocity_t velocity,
125 Distance_t position = Distance_t(0.0)) const override {
126 return maxAchievableAcceleration(-maxVoltage, velocity);
127 }
128
136 inline Kv_t getVelocityGain() const override { return kV; }
137
145 inline Ka_t getAcclerationGain() const override { return kA; }
146
160 inline units::volt_t
162 Distance_t position = Distance_t(0)) const override {
163 return kS * wpi::sgn(velocity) + kG;
164 }
165
166private:
167 Ks_t kS, kG; /* Static gain. */
168 Kv_t kV; /* Velocity gain. */
169 Ka_t kA; /* Acelrration gain. */
170};
171} // namespace rmb
Definition ElevatorFeedforward.h:19
Ka_t getAcclerationGain() const override
Definition ElevatorFeedforward.h:145
Velocity_t maxAchievableVelocity(units::volt_t maxVoltage, Acceleration_t acceleration, Distance_t position=Distance_t(0.0)) const override
Definition ElevatorFeedforward.h:79
typename Feedforward< DistanceUnit >::KvUnit KvUnit
Definition ElevatorFeedforward.h:36
typename Feedforward< DistanceUnit >::Kv_t Kv_t
Definition ElevatorFeedforward.h:38
typename Feedforward< DistanceUnit >::KsUnit KsUnit
Definition ElevatorFeedforward.h:32
typename Feedforward< DistanceUnit >:: Acceleration_t Acceleration_t
Definition ElevatorFeedforward.h:29
Acceleration_t maxAchievableAcceleration(units::volt_t maxVoltage, Velocity_t velocity, Distance_t position=Distance_t(0.0)) const override
Definition ElevatorFeedforward.h:108
units::volt_t calculate(Velocity_t velocity, Distance_t distance=Distance_t(0.0), Acceleration_t acceleration=Acceleration_t(0.0)) const override
Definition ElevatorFeedforward.h:64
typename Feedforward< DistanceUnit >::Ka_t Ka_t
Definition ElevatorFeedforward.h:42
typename Feedforward< DistanceUnit >::KaUnit KaUnit
Definition ElevatorFeedforward.h:40
typename Feedforward< DistanceUnit >::Ks_t Ks_t
Definition ElevatorFeedforward.h:34
typename Feedforward< DistanceUnit >:: Distance_t Distance_t
Definition ElevatorFeedforward.h:21
Acceleration_t minAchievableAcceleration(units::volt_t maxVoltage, Velocity_t velocity, Distance_t position=Distance_t(0.0)) const override
Definition ElevatorFeedforward.h:123
units::volt_t calculateStatic(Velocity_t velocity, Distance_t position=Distance_t(0)) const override
Definition ElevatorFeedforward.h:161
Kv_t getVelocityGain() const override
Definition ElevatorFeedforward.h:136
typename Feedforward< DistanceUnit >:: AccelerationUnit AccelerationUnit
Definition ElevatorFeedforward.h:27
typename Feedforward< DistanceUnit >:: VelocityUnit VelocityUnit
Definition ElevatorFeedforward.h:23
Velocity_t minAchievableVelocity(units::volt_t maxVoltage, Acceleration_t acceleration, Distance_t position=Distance_t(0.0)) const override
Definition ElevatorFeedforward.h:94
ElevatorFeedforward(Ks_t kS, Ks_t kG, Kv_t kV, Ka_t kA)
Definition ElevatorFeedforward.h:52
typename Feedforward< DistanceUnit >:: Velocity_t Velocity_t
Definition ElevatorFeedforward.h:25
Definition Feedforward.h:15
the master namespace of librmb
Definition LogitechGamepad.h:9