pid很简单。
p:比例控制,比如目标值是60,传感器返回的当前值是40,那么当前值和目标值有一个误差,也就是60-40=20有一个20的误差,那么我们把这个20乘上一个自己定的值Kp,然后将20*Kp加到系统输入上,比如如果是pwm智能小车,那么就将20*Kp加给pwm输出,然后每隔几毫秒我们在读取一次误差,再用Kp乘上这个误差给pwm输出,那么误差值又被调控了,这样的话,系统就可以不断动态调控直到误差值接近0,目标值接近60。Kp如何确定呢?自己根据估算以及反复调试来挑选最合适的值即可。
d:微分控制,我想先讲微分控制。微分控制就是当前误差值,减去上一时刻误差值,然后乘上一个kd,最后加到控制输入上去,也即将Kd*[err(t)-err(t-1)]加到控制上去,还是拿pwm小车举例,比如此时误差值是60,上一次记录的误差值是40,那么60-40=20,也就是,此刻的误差值比上一刻是更大的,大了20,那么我就会希望快点去减小误差,那么我们就可以将这20加入到pwm输出去对电机进行一个正向的调控,再如果,此时的差值是40上一刻是60,那么40-60=-20,也就是当前的误差比上一刻小,我那么我害怕它这样差值减得太快了,容易冲出赛道(因为差值减小是我p的快速调控引起的),我就可以在pwm输出上+(-20)也就是-20,进行一个反向调控。透过这些规律我们可以看出,微分控制可以在误差调控慢的时候加快调控,在误差调控快的时候,给予一个适当的反向调控,减少超调量,并减少达到稳态的总时间。
为啥可以减少达到稳态的总时间呢?你yy一下pid调控的那张波形图,我们的超调量减小了,是不是振荡的就越来越小?振荡越小,达到目标值的速度就快了,所以达到稳态就快了,可以说是很好用了。
i:积分控制,讲究的是历史误差,积分控制可以消除静态误差。
积分在离散情况下就是求和,这句话怎么理解呢?高中教过积分,比如x轴是t,y轴是速度v,那么面积就代表路程,也既s=vt,但如果不是匀速运动面积就不好求,只能通过积分,积分就是在x轴上取出一个无限小的量,乘上每一时刻的y高度,然后加起来也即。简而言之,积分就是求面积的工具,而面积在xy轴代表不同物理量的情况下,面积的含义不同。在实际的情况下我们得不到xy轴的图,也没有函数v(t),我们能知道的就是通过传感器测出每一时刻的值,这个时刻由自己定,比如10ms测量一次,然后将测量的速度乘上10ms然后累加起来,就是近似的s。
言归正传,积分控制究竟怎么做呢?我们可以记录几次误差然后加起来,然后乘上一个自己定的ki,加到输入上去,这样就可以根据历史误差,来进行一个正向调制,可以消除稳态误差。