2025-10-30 20:20:14 +08:00
|
|
|
#ifndef PID_H
|
|
|
|
|
#define PID_H
|
|
|
|
|
|
2026-01-24 01:50:39 +08:00
|
|
|
class PIDController {
|
|
|
|
|
public:
|
|
|
|
|
PIDController(float P, float I, float D, float ramp, float limit);
|
|
|
|
|
~PIDController() = default;
|
2025-10-30 20:20:14 +08:00
|
|
|
|
2026-01-24 01:50:39 +08:00
|
|
|
float operator()(float error);
|
2025-11-06 02:07:15 +08:00
|
|
|
void set_PID(float P, float I, float D);
|
2026-01-20 01:28:52 +08:00
|
|
|
void set_P_percent(float pp);
|
2025-10-30 20:20:14 +08:00
|
|
|
|
2026-01-24 01:50:39 +08:00
|
|
|
float P; //!< 比例增益(P环增益)
|
|
|
|
|
float I; //!< 积分增益(I环增益)
|
|
|
|
|
float D; //!< 微分增益(D环增益)
|
|
|
|
|
float output_ramp;
|
|
|
|
|
float limit;
|
2025-10-30 20:20:14 +08:00
|
|
|
|
2026-01-24 01:50:39 +08:00
|
|
|
protected:
|
|
|
|
|
float error_prev; //!< 最后的跟踪误差值
|
|
|
|
|
float output_prev; //!< 最后一个 pid 输出值
|
|
|
|
|
float integral_prev; //!< 最后一个积分分量值
|
|
|
|
|
unsigned long timestamp_prev; //!< 上次执行时间戳
|
|
|
|
|
};
|
2025-10-30 20:20:14 +08:00
|
|
|
#endif
|