RIT VEXU Core API
Loading...
Searching...
No Matches
math/controls/feedforward.h
1#pragma once
2
3#include <cmath>
4#include "math/math_util.h"
5
6namespace core {
7
37 public:
38 typedef struct {
39 double kS;
40 double kV;
41 double kA;
42 double kG;
43 } feedforward_config_t;
51 Feedforward(double kS, double kV, double kA) : kS_(kS), kV_(kV), kA_(kA) {}
52 Feedforward(Feedforward::feedforward_config_t config)
53 : kS_(config.kS), kV_(config.kV), kA_(config.kA) {}
54
55 Feedforward(const Feedforward&) = default;
56 Feedforward(Feedforward&&) = default;
57 Feedforward& operator=(const Feedforward&) = default;
58 Feedforward& operator=(Feedforward&&) = default;
59
67 double calculate(double v, double a) const {
68 double ks_sign = sign(v);
69 return kS_ * ks_sign + kV_ * v + kA_ * a;
70 }
71
78 double max_vel(double max_voltage) const {
79 if (kV_ == 0) {
80 return 0; // don't divide by zero
81 }
82 return max_voltage / kV_;
83 }
84
91 double max_acc(double max_voltage) const {
92 if (kA_ == 0) {
93 return 0; // don't divide by zero
94 }
95 return max_voltage / kA_;
96 }
97
98 double kS() const { return kS_; }
99 double kV() const { return kV_; }
100 double kA() const { return kA_; }
101
102 void set_kS(double kS) { kS_ = kS; }
103 void set_kV(double kV) { kV_ = kV; }
104 void set_kA(double kA) { kA_ = kA; }
105
106 private:
107 double kS_;
108 double kV_;
109 double kA_;
110};
111
112} // namespace core
double calculate(double v, double a) const
Definition math/controls/feedforward.h:67
Feedforward(double kS, double kV, double kA)
Definition math/controls/feedforward.h:51
double max_vel(double max_voltage) const
Definition math/controls/feedforward.h:78
double max_acc(double max_voltage) const
Definition math/controls/feedforward.h:91