10 #include "control/filter/biquad.h" 11 #include "control/system/type.h" 22 return std::numeric_limits<T>::has_infinity
23 ? std::numeric_limits<T>::infinity() : std::numeric_limits<T>::max();
32 static_assert(std::numeric_limits<T>::is_signed,
"Signed type required");
46 bool clipping =
false;
90 if (Limit == std::numeric_limits<T>::infinity()) {
95 if (!clipping && (u > Limit || u < -Limit)) {
97 }
else if (clipping && (u >= -Limit && u <= Limit)) {
103 u = std::max(-Limit, std::min(Limit, u));
170 explicit PID(T Ts = 1.0, T Kp = 1.0, T Ti = max<T>(), T Td = 0.0, T N = max<T>(), T Limit = max<T>())
172 (Kp * (4 * Td / N + 2 * Td * Ts / Ti / N + Ts * Ts / Ti + 4 * Td + 2 * Ts)) / (4 * Td / N + 2 * Ts),
173 -(Kp * (-Ts * Ts / Ti + 4 * Td / N + 4 * Td)) / (2 * Td / N + Ts),
174 (Kp * (4 * Td / N - 2 * Td * Ts / Ti / N + Ts * Ts / Ti + 4 * Td - 2 * Ts)) / (4 * Td / N + 2 * Ts),
175 -(4 * Td / N) / (2 * Td / N + Ts),
176 (2 * Td / N - Ts) / (2 * Td / N + Ts)
225 explicit PI(T Ts_ = 1, T Kp_ = 1, T Ti_ = max<T>(), T Limit_ = max<T>()) :
PID<T>(Ts_, Kp_, Ti_, 0, max<T>(),
244 explicit PD(T Ts_ = 1, T Kp_ = 1, T Td_ = 0, T N_ = max<T>(), T Limit_ = max<T>()) :
PID<T>(Ts_, Kp_, max<T>(), Td_,
filter::Biquad< T > B
Definition: pid.h:200
P(T Kp_=1.0, T Limit_=max< T >())
Definition: pid.h:132
AbstractController(T Limit_=max< T >())
Definition: pid.h:38
PID(T Ts=1.0, T Kp=1.0, T Ti=max< T >(), T Td=0.0, T N=max< T >(), T Limit=max< T >())
Definition: pid.h:170
T control(T e)
Definition: pid.h:205
filter::TCS< T > poles()
Definition: pid.h:184
void setLimit(T limit)
Definition: pid.h:72
virtual void reset()
Definition: pid.h:79
T step(T e) final
Definition: pid.h:54
void reset()
Definition: pid.h:191
T control(T e)
Definition: pid.h:143
PI(T Ts_=1, T Kp_=1, T Ti_=max< T >(), T Limit_=max< T >())
Definition: pid.h:225
T clip(T u)
Definition: pid.h:89
PD(T Ts_=1, T Kp_=1, T Td_=0, T N_=max< T >(), T Limit_=max< T >())
Definition: pid.h:244
T step(T x)
Definition: biquad.h:81