MOS
pid.hpp
1 #pragma once
2 namespace mos::sim {
3 
4 template<class T>
6 class Pid {
7 public:
8  Pid(const T &error = T(0), const float Kp = 1.0f, const float Ki = 0.0f, const float Kd = 0.1f)
9  : Kp(Kp), Ki(Ki), Kd(Kd), prev_error(error), P(error), I(error), D(error) {
10  }
11  auto get(const T error, float dt) -> T {
12  P = error;
13  I += P * dt;
14  D = (P - prev_error) / dt;
15  if (dt == 0){
16  D = T(0);
17  }
18 
19  prev_error = error;
20  return P * Kp + I * Ki + D * Kd;
21  }
22  float Kp, Ki, Kd;
23 private:
24  T P, I, D;
25  T prev_error;
26 };
27 }
28 
29 
Definition: pid.hpp:2
Pid controller.
Definition: pid.hpp:6