74 double update(
double error,
double dt);
80 double update(
double error,
double dt,
double deriv_signal);
86 void setGains(
double kp,
double ki,
double kd);
88 [[nodiscard]]
double getIntegral()
const {
return integral_; }
89 [[nodiscard]]
double getDerivative()
const {
return filtered_derivative_; }
93 double integral_{0.0};
94 double prev_error_{0.0};
95 double filtered_derivative_{0.0};
96 bool first_update_{
true};
double getIntegral() const
double getDerivative() const
PidController(PidConfig config={})
double update(double error, double dt, double deriv_signal)
void reset()
Clear accumulated integral and derivative state.
double update(double error, double dt)
Update the controller using error for both the proportional and derivative signals.
void setGains(double kp, double ki, double kd)
Replace only the proportional, integral, and derivative gains.
PidConfig(double kp, double ki, double kd, double integral_max=10.0, double integral_deadband=0.01, double derivative_lpf_alpha=0.1, double output_min=-10.0, double output_max=10.0)
PidConfig(const PidGains &g)
double integral_deadband
Error magnitude below which the integrator ignores the sample.
double derivative_lpf_alpha
IIR weight on new derivative samples; clamped to [0, 1] at runtime.
Basic PID gains without integrator and output shaping parameters.