一 、PID的两种基本用法
- 位置式PID
- 增量式PID
二、浅谈两种用法
位置式PID
算法思想:对于一段时间内的数据进行分析,计算出输出量。
公式描述:
errorNow = realData - aimData; //获取当前误差( = 真实获取的数据 - 目标数据)
errorSum += errorNow; //更新errorSum的值
newOutput = Kp * (errorNow) + Ki * (errorSum) + Kd * (errorNow - errorLast);
新的输出值会有一个新的输入量,在while(True)循环里会形成一个完全的闭环。
注意/相关事宜
- 调参顺序:
Kp -> Ki -> Kd
,其中Kp的值最好预先估计。
比如在电机驱动车轮时运用PID,输出的值为PWM值,输入的值是速度值,PWM有一个区间范围,通过输入的实时速度值,预估计PWM和speed的关系,由此可以大致估计出Kp的值。 - 问题:在长时间超调后,不能立即返回正常值。
积分时间过长,导致errorSum的值增大,超调后不能立即调整或调整时间稍长。
增量式PID
算法思想:对于此次、上次和上上次的数据进行分析,计算出输出量。
公式描述:
errorNow = aimData- realData; //获取当前误差(= 目标数据 - 真实获取的数据)
newOutput = Kp * (errorNow - errorLast) + Ki * (errorNow) + Kd * (errorNow - 2 * errorLast + errorLastLast));
errorLastLast = errorLast ; //更新上上次的error值
errorLast = errorNow; //更新上次的error值
新的输出值会有一个新的输入量,在while(True)循环里会形成一个完全的闭环。
注意/相关事宜
- 调参顺序:
Ki -> Kp -> Kd
,其中Ki的值最好预先估计。