pid初涉
基本框架(从github上抄来的感觉可行)
1 |
1 |
补充
- 对于微分项后面
plaintext pid->differentiator = -(2.0f * pid->Kd * (measurement - pid->prevMeasurement) /* Note: derivative on measurement, therefore minus sign in front of equation! */ + (2.0f * pid->tau - pid->T) * pid->differentiator) / (2.0f * pid->tau + pid->T);
- 代码解释
- -(2.0f * pid->Kd * (measurement - pid->prevMeasurement)):pid->Kd 是PID控制器中的微分增益(Derivative Gain)。
- measurement - pid->prevMeasurement 是当前测量值与上一次测量值的差,表示测量值的变化率。
- 2.0f * pid->Kd * (measurement - pid->prevMeasurement): 计算的是微分项的一部分。
- 前面的负号 “-”是因为这里计算的是测量值的微分,而不是误差的微分。注释中提到的“therefore minus sign in front of equation!”就是这个意思。
- (2.0f * pid->tau - pid->T) * pid->differentiator:
- pid->tau 是一个滤波常数,用于限制微分项的高频噪声。
- pid->T 是采样时间。
- (2.0f * pid->tau - pid->T) * pid->differentiator 是微分项的递推部分,用于平滑微分输出。
- / (2.0f * pid->tau + pid->T):
- 这是对整个微分项进行归一化处理,以确保微分项的幅值在合理的范围内。
- -(2.0f * pid->Kd * (measurement - pid->prevMeasurement)):pid->Kd 是PID控制器中的微分增益(Derivative Gain)。
- 对于积分项后面
plaintext pid->integrator = pid->integrator + 0.5f * pid->Ki * pid->T * (error + pid->prevError);
- 代码解释
- 0.5f * pid->Ki * pid->T * (error + pid->prevError):
- error + pid->prevError 是当前误差和上一次误差的和。
- 0.5f * (error + pid->prevError) 是对误差和进行平均处理,以平滑积分项的计算。
- pid->Ki * pid->T 是积分增益和采样时间的乘积,表示积分项的单位时间内的累积速率。
- 因此,0.5f * pid->Ki * pid->T * (error + pid->prevError) 计算的是当前采样周期内积分项的增量。
- pid->integrator + 0.5f * pid->Ki * pid->T * (error + pid->prevError):
- 这是将当前采样周期内积分项的增量加到之前的积分项上,以更新积分项的值。
- 0.5f * pid->Ki * pid->T * (error + pid->prevError):