LRT14  1.0
 All Classes Namespaces Functions Variables Enumerations Enumerator
PID.h
1 #ifndef PID_CONTROLLER_H_
2 #define PID_CONTROLLER_H_
3 
4 #include "RunningSum.h"
5 
6 namespace Rhesus
7 {
8 namespace Toolkit
9 {
10 namespace Control
11 {
18  class PID
19  {
20  public:
30  PID(double p_gain, double i_gain, double d_gain, double ff_gain = 1.0,
31  double i_decay = 0.5, bool feedforward = true);
32 
36  PID();
37 
48  void
49  setParameters(double p_gain, double i_gain, double d_gain,
50  double ff_gain = 1.0, double i_decay = 0.87,
51  bool feedforward = true);
52 
58  double update(double dt);
59 
64  void setInput(double input);
65 
70  void setSetpoint(double setpoint);
71 
76  double getOutput();
77 
82  double getProportionalGain();
83 
88  double getIntegralGain();
89 
94  double getDerivativeGain();
95 
100  double getFeedForwardGain();
101 
106  double getIntegralDecay();
107 
112  double getInput();
113 
118  double getSetpoint();
119 
124  double getError();
125 
130  double getAccumulatedError();
131 
136  double getPreviousError();
137 
142  bool isFeedForward();
143 
147  void reset();
148 
152  void disablePID();
153 
157  void enablePID();
158 
162  void setIIREnabled(bool enabled);
163 
167  void setIIRDecay(double decay);
168 
169 
170  private:
171  double m_proportional_gain;
172  double m_integral_gain;
173  double m_derivative_gain;
174  double m_feedforward_gain;
175  double m_integral_decay;
176  double m_input;
177  double m_output;
178  double m_setpoint;
179  double m_error;
180  double m_prev_error;
181  double m_acc_error;
182  bool m_is_feed_forward;
183  bool m_enabled;
184 
185  bool m_IIREnabled;
186  RunningSum m_runningSum;
187  };
188 
189 }
190 }
191 }
192 #endif