48 : kp(params.kp), ki(params.ki), kd(params.kd),
68 T error_prev = last_error_;
69 T error_curr = error_measurer(current, target_);
70 last_error_ = error_curr;
72 T pout = kp * error_curr;
75 integral_ += ki * error_curr * dt;
77 integral_ = std::clamp(integral_, -max_iout, max_iout);
79 const T derivative = dt > T{0}
80 ? kd * (error_curr - error_prev) / dt
83 T out = pout + integral_ + derivative;
84 out = std::clamp(out, -max_out, max_out);