librmb 1.0
Rambunction 4330 Utility Library
Loading...
Searching...
No Matches
SimpleFeedforward.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
19template <typename DistanceUnit>
20class SimpleFeedforward : public Feedforward<DistanceUnit> {
21public:
33 using KsUnit = typename Feedforward<
34 DistanceUnit>::KsUnit;
35 using Ks_t = typename Feedforward<
36 DistanceUnit>::Ks_t;
37 using KvUnit = typename Feedforward<
38 DistanceUnit>::KvUnit;
39 using Kv_t = typename Feedforward<
40 DistanceUnit>::Kv_t;
41 using KaUnit = typename Feedforward<
42 DistanceUnit>::KaUnit;
43 using Ka_t = typename Feedforward<
44 DistanceUnit>::Ka_t;
46 SimpleFeedforward() : kS(0.0), kV(0.0), kA(0.0) {}
47
54 SimpleFeedforward(Ks_t kS, Kv_t kV, Ka_t kA) : kS(kS), kV(kV), kA(kA) {}
55
64 inline units::volt_t
65 calculate(Velocity_t velocity, Distance_t distance = Distance_t(0.0),
66 Acceleration_t acceleration = Acceleration_t(0.0)) const override {
67 return kS * wpi::sgn(velocity) + kV * velocity + kA * acceleration;
68 }
69
79 inline Velocity_t
80 maxAchievableVelocity(units::volt_t maxVoltage, Acceleration_t acceleration,
81 Distance_t position = Distance_t(0.0)) const override {
82 return (maxVoltage - kS - kA * acceleration) / kV;
83 }
84
94 inline Velocity_t
95 minAchievableVelocity(units::volt_t maxVoltage, Acceleration_t acceleration,
96 Distance_t position = Distance_t(0.0)) const override {
97 return (-maxVoltage + kS - kA * acceleration) / kV;
98 }
99
110 units::volt_t maxVoltage, Velocity_t velocity,
111 Distance_t position = Distance_t(0.0)) const override {
112 return (maxVoltage - kS * wpi::sgn(velocity) - kV * velocity) / kA;
113 }
114
125 units::volt_t maxVoltage, Velocity_t velocity,
126 Distance_t position = Distance_t(0.0)) const override {
127 return maxAchievableAcceleration(-maxVoltage, velocity);
128 }
129
137 inline Kv_t getVelocityGain() const override { return kV; }
138
146 inline Ka_t getAcclerationGain() const override { return kA; }
147
161 inline units::volt_t
163 Distance_t position = Distance_t(0)) const override {
164 return kS * wpi::sgn(velocity);
165 }
166
167private:
168 Ks_t kS = 0; /* Static gain. */
169 Kv_t kV = 0; /* Velocity gain. */
170 Ka_t kA = 0; /* Acelrration gain. */
171};
172} // namespace rmb
Definition Feedforward.h:15
Definition SimpleFeedforward.h:20
typename Feedforward< DistanceUnit >:: Acceleration_t Acceleration_t
Definition SimpleFeedforward.h:30
units::volt_t calculate(Velocity_t velocity, Distance_t distance=Distance_t(0.0), Acceleration_t acceleration=Acceleration_t(0.0)) const override
Definition SimpleFeedforward.h:65
SimpleFeedforward(Ks_t kS, Kv_t kV, Ka_t kA)
Definition SimpleFeedforward.h:54
typename Feedforward< DistanceUnit >::Ks_t Ks_t
Definition SimpleFeedforward.h:35
Acceleration_t maxAchievableAcceleration(units::volt_t maxVoltage, Velocity_t velocity, Distance_t position=Distance_t(0.0)) const override
Definition SimpleFeedforward.h:109
typename Feedforward< DistanceUnit >::KaUnit KaUnit
Definition SimpleFeedforward.h:41
typename Feedforward< DistanceUnit >::KvUnit KvUnit
Definition SimpleFeedforward.h:37
Velocity_t maxAchievableVelocity(units::volt_t maxVoltage, Acceleration_t acceleration, Distance_t position=Distance_t(0.0)) const override
Definition SimpleFeedforward.h:80
units::volt_t calculateStatic(Velocity_t velocity, Distance_t position=Distance_t(0)) const override
Definition SimpleFeedforward.h:162
Kv_t getVelocityGain() const override
Definition SimpleFeedforward.h:137
Velocity_t minAchievableVelocity(units::volt_t maxVoltage, Acceleration_t acceleration, Distance_t position=Distance_t(0.0)) const override
Definition SimpleFeedforward.h:95
typename Feedforward< DistanceUnit >:: AccelerationUnit AccelerationUnit
Definition SimpleFeedforward.h:28
typename Feedforward< DistanceUnit >:: VelocityUnit VelocityUnit
Definition SimpleFeedforward.h:24
typename Feedforward< DistanceUnit >::KsUnit KsUnit
Definition SimpleFeedforward.h:33
Ka_t getAcclerationGain() const override
Definition SimpleFeedforward.h:146
typename Feedforward< DistanceUnit >::Ka_t Ka_t
Definition SimpleFeedforward.h:43
typename Feedforward< DistanceUnit >:: Velocity_t Velocity_t
Definition SimpleFeedforward.h:26
typename Feedforward< DistanceUnit >:: Distance_t Distance_t
Definition SimpleFeedforward.h:22
typename Feedforward< DistanceUnit >::Kv_t Kv_t
Definition SimpleFeedforward.h:39
Acceleration_t minAchievableAcceleration(units::volt_t maxVoltage, Velocity_t velocity, Distance_t position=Distance_t(0.0)) const override
Definition SimpleFeedforward.h:124
the master namespace of librmb
Definition LogitechGamepad.h:9