Bootstrap

PID原理算法学习

        我讲一下我校内赛使用了一点点的PID算法,根据比赛的需要,我们只需要使用kp就够了,I 和 D 需要的算力会提高,影响程序运行速度,如果程序运行的慢了,反而适得其反。自学了一下PID算法,虽然我后来的比赛也没有用到,但是我还是非常有必要把它的原理搞懂。之前没学明白,所以只是在CSDN找大佬总结好的PID算法,就算直接学习成果,也理解了好几次,因为需要用到积分和微分,我已经把高数忘了,这次总结不仅学习PID,也回忆一下高数吧,一举两得何乐而不为呢(dogo)?我也不打算学的多深,因为真正深入学习的话,我看到过一本关于PID算法的书,给我的感觉就是内容很多,大多是和一些其他方面的问题结合了一下,然后把问题解决了一通,还是和高数等等一些我已经忘记的课目结合的,真的头大。

        我觉得学习PID参考实际问题会更好理解一些,比如热水器烧水(热得快),水缸里加水等等,我认为热水器烧水是最经典的。

        其实,很多大佬已经介绍过PID了,我把我的使用过程分享一下,在把我个人学的知识总结一下,如果有错误及时指正。

        OK,正文来了:

PID是什么?

        当时我也不知道为毛叫PID ,看了这三个字母代表的含义我就明白了,还是英语知识薄弱,没办法。PID,就是比例(proportional)、积分(integral)、微分(derivative)。PID也不是很难理解,在我们生活中还是很常见的,热水器加热,四旋翼飞机的悬停等等。PID原理有专门的科学讲解,我感觉太难了,用到那几种公式;还有就是用加热水的过程去理解,这样内容反而会很多,我看了前面忘后面,完全可以自己有一个初步的认识后,再去看专业的解释和故事帮我们理解。

比例算法:P

        用一个水缸来做例子吧,假设水缸有0.2m的水,需要把水注入到1m的位置,所以需要注入0.8m深的水,需要注入的水就是一个偏差,用这个偏差来作为一个变化的基础量(error),用这个error乘以Kp就可以让缸内的水变化,Kp可以是小数也可以是整数,当然小数增长的相对比较慢,整数就变化快了很多。偏差一旦产生,控制器立即产生控制作用,以减少偏差。

微分算法:D

        D解释起来是比较容易的,它像是一个“阻尼”的效果,是一种一直偏差迅速变大或者迅速变小的参数,使变化的系统更快平稳下来。用一个弹簧来描述这个参数,当一个弹簧挂着一个物块,而且物块在弹簧的作用上下跳动,如果把这个过程放在水里,那么物块会更快变平稳。如果是上面的水缸,这个参数的作用就不是很大。

所以,D的作用是反映偏差信号的变化趋势(变化速率),并能在偏差信号变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的调试变化速度,减少调节时间。

积分算法:I

        用热水为例,如果在一个很冷的地方加热水,需要加热到50°C,在P的作用下,水温慢慢升高,到了45°C,因为天气比较冷,水温升不上去了,所以吸收的热量等于水丢失的热量,如果继续使用P调节,会一直加热,如果加入D调节,加热等于散热,温度没有波动,所以也不需要调整。水温一直不能到50°C,此时需要设置一个积分变量,只要偏差存在就一直对偏差进行积分(累加),反应在调节力度上。这样长时间没有变化的水温,系统就会一直到没有到达目标温度,就开始加大功率,到了目标温度,如果温度没有波动,积分值就不会变了,这时系统调节完成。

        所以,I的作用是主要消除偏差,提高系统的无差度。积分作用的强弱取决于积分时间常数,时间越长,积分作用越弱,反之则越强。

        注意:I在使用时还有个问题:需要设定积分限制。防止在刚开始加热时,就把积分量积得太大,难以控制。

        学习PID还是需要借鉴很多大佬的成果,就是PID原理算法热门的那几篇,我就不引用了,感谢他们。

;