7namespace tinyrobotics {
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
55template <
class N =
float>
64 bool begin(N dt, N min, N max, N kp, N ki, N kd) {
71 this->integral = 0.0f;
72 this->preerror = 0.0f;
76 void setDt(N dt) {
this->dt = dt; }
81 N calculate(N target, N measured) {
83 N error = target - measured;
89 integral += error * dt;
91 N Iout = ki * integral;
94 integral = max / (ki != 0 ? ki : 1);
95 }
else if (Iout < min) {
97 integral = min / (ki != 0 ? ki : 1);
102 N derivative = (error - preerror) / dt;
103 N dout = kd * derivative;
106 N output = pout + Iout + dout;
111 else if (output < min)
Implements a simple, header-only Proportional-Integral-Derivative (PID) controller.
Definition: PIDController.h:56