7#include "math/controls/arm_feedforward.h"
8#include "math/controls/pid.h"
9#include "math/geometry/rotation2d.h"
10#include "math/math_util.h"
41 PIDFF(
double kP,
double kI,
double kD,
double kS,
double kV,
double kA,
double kG,
42 double tolerance,
double dt = 0.01)
43 : pid_(kP, kI, kD, tolerance, dt),
44 ff_(kS, kV, kA, kG) {}
62 void set_gains(
double kP,
double kI,
double kD,
double kS,
double kV,
double kA,
double kG) {
63 pid_.set_pid(kP, kI, kD);
77 void set_pid(
double kP,
double kI,
double kD) { pid_.set_pid(kP, kI, kD); }
87 void set_ff(
double kS,
double kV,
double kA,
double kG) {
95 void set_p(
double kP) { pid_.
set_p(kP); }
96 void set_i(
double kI) { pid_.
set_i(kI); }
97 void set_d(
double kD) { pid_.set_d(kD); }
98 void set_tolerance(
double tolerance) { pid_.set_tolerance(tolerance); }
99 void set_i_zone(
double i_zone) { pid_.set_i_zone(i_zone); }
100 void set_i_limits(
double i_min,
double i_max) { pid_.set_i_limits(i_min, i_max); }
101 void set_dt(
double dt) { pid_.set_dt(dt); }
102 void enable_continuous(
double minimum_input = -1,
103 double maximum_input = 1) {
104 pid_.enable_continuous(minimum_input, maximum_input);
106 void disable_continuous() { pid_.disable_continuous(); }
107 void reset() { pid_.reset(); }
108 void reset_i() { pid_.reset_i(); }
111 void set_kS(
double kS) { ff_.set_kS(kS); }
112 void set_kV(
double kV) { ff_.set_kV(kV); }
113 void set_kA(
double kA) { ff_.set_kA(kA); }
114 void set_kG(
double kG) { ff_.set_kG(kG); }
117 double p()
const {
return pid_.p(); }
118 double i()
const {
return pid_.i(); }
119 double d()
const {
return pid_.d(); }
120 double tolerance()
const {
return pid_.tolerance(); }
121 double i_zone()
const {
return pid_.i_zone(); }
122 double dt()
const {
return pid_.dt(); }
123 double kS()
const {
return ff_.kS(); }
124 double kV()
const {
return ff_.kV(); }
125 double kA()
const {
return ff_.kA(); }
126 double kG()
const {
return ff_.kG(); }
127 bool is_continuous()
const {
return pid_.is_continuous(); }
128 bool at_setpoint()
const {
return pid_.at_setpoint(); }
142 double setpoint()
const {
return pid_.setpoint(); }
151 pid_.set_output_limits(minimum_output, maximum_output);
163 double pid_output = pid_.calculate(measurement);
165 ff_.kS() * sign(pid_output) + ff_.kG() * angle.f_cos();
166 return pid_output + ff_output;
195 double pid_output = pid_.calculate(measurement);
196 double ff_output = ff_.calculate(v, a, angle);
197 return pid_output + ff_output;
Definition rotation2d.h:25
Definition arm_feedforward.h:27
Definition math/controls/pidff.h:26
void set_pid(double kP, double kI, double kD)
Definition math/controls/pidff.h:77
void set_gains(double kP, double kI, double kD, double kS, double kV, double kA, double kG)
Definition math/controls/pidff.h:62
void set_ff(double kS, double kV, double kA, double kG)
Definition math/controls/pidff.h:87
double calculate(double measurement, Rotation2d angle=Rotation2d())
Definition math/controls/pidff.h:162
void set_output_limits(double minimum_output, double maximum_output)
Definition math/controls/pidff.h:150
double setpoint() const
Definition math/controls/pidff.h:142
double calculate_with_ff(double setpoint, double measurement, double v, double a, Rotation2d angle=Rotation2d())
Definition math/controls/pidff.h:210
void set_setpoint(double setpoint)
Definition math/controls/pidff.h:135
PIDFF(double kP, double kI, double kD, double kS, double kV, double kA, double kG, double tolerance, double dt=0.01)
Definition math/controls/pidff.h:41
double calculate_with_ff(double measurement, double v, double a, Rotation2d angle=Rotation2d())
Definition math/controls/pidff.h:193
double calculate(double setpoint, double measurement, Rotation2d angle=Rotation2d())
Definition math/controls/pidff.h:178
Definition math/controls/pid.h:23
void set_p(double kP)
Definition math/controls/pid.h:79
void set_i(double kI)
Definition math/controls/pid.h:88