librmb 1.0
Rambunction 4330 Utility Library
Loading...
Searching...
No Matches
ArmFeedforward.h
1
2#pragma once
3
4#include <units/angle.h>
5#include <units/base.h>
6#include <units/math.h>
7#include <units/voltage.h>
8
9#include <wpi/MathExtras.h>
10
11#include "rmb/motorcontrol/feedforward/Feedforward.h"
12
13namespace rmb {
14
19class ArmFeedforward : public Feedforward<units::radians> {
20public:
32 using KsUnit = typename Feedforward<
33 units::radians>::KsUnit;
34 using Ks_t = typename Feedforward<
35 units::radians>::Ks_t;
36 using KvUnit = typename Feedforward<
37 units::radians>::KvUnit;
38 using Kv_t = typename Feedforward<
39 units::radians>::Kv_t;
40 using KaUnit = typename Feedforward<
41 units::radians>::KaUnit;
42 using Ka_t = typename Feedforward<
43 units::radians>::Ka_t;
52 ArmFeedforward(Ks_t kS, Ks_t kCos, Kv_t kV, Ka_t kA)
53 : kS(kS), kCos(kCos), kV(kV), kA(kA){};
54
63 inline units::volt_t calculate(Velocity_t velocity, Distance_t position,
64 Acceleration_t acceleration) const override {
65 return kS * wpi::sgn(velocity) + kCos * units::math::cos(position) +
66 kV * velocity + kA * acceleration;
67 }
68
78 inline Velocity_t maxAchievableVelocity(units::volt_t maxVoltage,
79 Acceleration_t acceleration,
80 Distance_t position) const override {
81 return (maxVoltage - kS - kCos * units::math::cos(position) -
82 kA * acceleration) /
83 kV;
84 }
85
95 inline Velocity_t minAchievableVelocity(units::volt_t maxVoltage,
96 Acceleration_t acceleration,
97 Distance_t position) const override {
98 return (-maxVoltage + kS - kCos * units::math::cos(position) -
99 kA * acceleration) /
100 kV;
101 }
102
112 inline Acceleration_t
113 maxAchievableAcceleration(units::volt_t maxVoltage, Velocity_t velocity,
114 Distance_t position) const override {
115 return (maxVoltage - kS * wpi::sgn(velocity) -
116 kCos * units::math::cos(position) - kV * velocity) /
117 kA;
118 }
119
129 inline Acceleration_t
130 minAchievableAcceleration(units::volt_t maxVoltage, Velocity_t velocity,
131 Distance_t position) const override {
132 return maxAchievableAcceleration(-maxVoltage, velocity, position);
133 }
134
142 inline Kv_t getVelocityGain() const override { return kV; }
143
151 inline Ka_t getAcclerationGain() const override { return kA; }
152
166 inline units::volt_t
168 Distance_t position = Distance_t(0)) const override {
169 return kS * wpi::sgn(velocity) + kCos * units::math::cos(position);
170 }
171
172private:
173 Ks_t kS, kCos; /* Static gain. */
174 Kv_t kV; /* Velocity gain. */
175 Ka_t kA; /* Acelrration gain. */
176};
177
178} // namespace rmb
Definition ArmFeedforward.h:19
ArmFeedforward(Ks_t kS, Ks_t kCos, Kv_t kV, Ka_t kA)
Definition ArmFeedforward.h:52
typename Feedforward< units::radians >::Ka_t Ka_t
Definition ArmFeedforward.h:42
Acceleration_t maxAchievableAcceleration(units::volt_t maxVoltage, Velocity_t velocity, Distance_t position) const override
Definition ArmFeedforward.h:113
typename Feedforward< units::radians >::Ks_t Ks_t
Definition ArmFeedforward.h:34
typename Feedforward< units::radians >:: Acceleration_t Acceleration_t
Definition ArmFeedforward.h:29
typename Feedforward< units::radians >:: Velocity_t Velocity_t
Definition ArmFeedforward.h:25
Velocity_t maxAchievableVelocity(units::volt_t maxVoltage, Acceleration_t acceleration, Distance_t position) const override
Definition ArmFeedforward.h:78
Velocity_t minAchievableVelocity(units::volt_t maxVoltage, Acceleration_t acceleration, Distance_t position) const override
Definition ArmFeedforward.h:95
typename Feedforward< units::radians >::Kv_t Kv_t
Definition ArmFeedforward.h:38
typename Feedforward< units::radians >::KvUnit KvUnit
Definition ArmFeedforward.h:36
typename Feedforward< units::radians >::KaUnit KaUnit
Definition ArmFeedforward.h:40
typename Feedforward< units::radians >:: Distance_t Distance_t
Definition ArmFeedforward.h:21
units::volt_t calculateStatic(Velocity_t velocity, Distance_t position=Distance_t(0)) const override
Definition ArmFeedforward.h:167
Kv_t getVelocityGain() const override
Definition ArmFeedforward.h:142
Ka_t getAcclerationGain() const override
Definition ArmFeedforward.h:151
typename Feedforward< units::radians >::KsUnit KsUnit
Definition ArmFeedforward.h:32
units::volt_t calculate(Velocity_t velocity, Distance_t position, Acceleration_t acceleration) const override
Definition ArmFeedforward.h:63
typename Feedforward< units::radians >:: VelocityUnit VelocityUnit
Definition ArmFeedforward.h:23
Acceleration_t minAchievableAcceleration(units::volt_t maxVoltage, Velocity_t velocity, Distance_t position) const override
Definition ArmFeedforward.h:130
typename Feedforward< units::radians >:: AccelerationUnit AccelerationUnit
Definition ArmFeedforward.h:27
Definition Feedforward.h:15
the master namespace of librmb
Definition LogitechGamepad.h:9