智能平衡车PID学习
PID大概形式
PID算法核心是对误差的数学运算,由比例、积分、微分共同组成
公式:
连续型PID公式:(PID公式主要形式)
u(t) = K_p [e(t) + 1TI\frac {1}{T_I}TI1 ∫0te(t)dt\int_0^t e(t)dt∫0te(t)dt + TDT_DTD \\frac{de(t)}{dt} ]
绝对式PID公式:(位置式)
uk=Kp∗ek+Ki∗∑j=0kej+Kd∗(ek−ek−1) u_k = K_p * e_k + K_i * {\sum}{j=0}^k e_j + K_d * (e_k - e{k-1}) uk=Kp∗ek+Ki∗∑j=0kej+Kd∗(ek−ek−1)
绝对式需要对象及时做出与原来动作相反的趋势(注重结果)
对于相关变量的解释:
比例
1.KpK_pKp 越大,系统响应越快,越快达到目标值
2.KpK_pKp 过大会导致系统不稳定,发生振荡
3.仅有比例环节无法消除静态误差
积分
1.KiK_iKi越大,系统响应越快,越快达到目标值,积分项的引入可以消除稳态误差
2.KiK_iKi过大会是系统不稳定,发生振荡
3.随之时间增加,积分项数值会越来越大,导致系统响应变慢(需要在前期比例阶段进行限幅,(写个if特判就好)当积分值超过或小于某值后不再变化)
微分
1.KdK_dKd或者变化趋势越大,微分作用越强,主要是抑制振荡和超调
2.KdK_dKd过大会引起系统的不稳定,容易引入高频噪声
增量式PID公式:
uk=Kp∗ek+Ki∗∑j=0k+Kd∗(ek−ek−1)uk−1=Kp∗ek−1+Ki∗∑j=0k−1ej+Kd∗(ek−1−ek−2) u_k = K_p * e_k + K_i * {\sum}{j=0}^k + K_d *(e_k - e{k-1}) \\ u_{k-1} = K_p * e_{k-1} + K_i * {\sum}{j=0}^{k-1} e_j + K_d * (e{k-1} - e_{k-2}) uk=Kp∗ek+Ki∗∑j=0k+Kd∗(ek−ek−1)uk−1=Kp∗ek−1+Ki∗∑j=0k−1ej+Kd∗(ek−1−ek−2)
增量式需要算出当前值后叠加在上一次值中(注重过程和趋势)
串级PID控制原理
也就是嵌套PID控制,如果你的小车在内环中速度太小了(并且阻力在作用)根本动不了,那么编码器测速就反馈给二级PID环控制电机,让电机速度增加,从而促使小车速度改变
直立环
可以参考用手控制棍子不倒,棍子向哪边倒就用手去接住
PWM=Kp∗(机械中值−返回角度)+Kd∗角速度 PWM = K_p * (机械中值 - 返回角度) + K_d * 角速度 PWM=Kp∗(机械中值−返回角度)+Kd∗角速度