浏览量:4619 最近编辑于:2022-06-15 19:30:35
#PID算法简介
PID即:**Proportional(比例)、Integral(积分)、Differential(微分)**的缩写。顾名思义,PID控制算法是结合比例、积分和微分三种环节于一体的控制算法,它是连续系统中技术最为成熟、应心最为广泛的一种控制算法,该控制算法出现于20世纪30至40年代,适用于对被控对象模型了解不清楚的场合。实际运行的经验和理论的分析都表明,运用这种控制规律对许多工业过程进行控制时,都能得到比较满意的效果。PID控制的实质就是根据输入的偏差值,按照比例、积分、微分的函数关系进行运算,运算结果用以控制输出。
##比例Kp
成比例地反映控制系统的偏差信号,偏差一旦产生,立即产生控制作用以减小偏差。比例控制器的输出u(t)与输入偏差e(t)成正比,能迅速反映偏差,从而减小偏差,但不能消除静差。静差是指系统控制过程趋于稳定时,给定值与输出量的实测值之差。
##积分Ki
积分环节的作用,主要用于消除静差提高系统的无差度。积分作用的强弱,取决于积分时问常数Ti,Ti越大积分作用越弱,反之则越强。积分控制作用的存在与偏差e(t)的存在时间有关,只要系统存在着偏差,积分环节就会不断起作用,对输入偏差进行积分,使控制器的输出及执行器的开度不断变化,产生控制作用以减小偏差。在积分时间足够的情况下,可以完全消除静差,这时积分控制作用将维持不变。Ti越小,积分速度越快,积分作用越强。积分作用太强会使系统超调加大,甚至使系统出现振荡。
##微分Kd
微分环节的作用能反映偏差信号的变化趋势(变化速率),并能在偏差信号的值变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减小调节时间。积分控制作用的引入虽然可以消除静差,但是降低了系统的响应速度,特别是对于具有较大惯性的被控对象,用PI控制器很难得到很好的动态调节品质,系统会产生较大的超调和振荡,这时可以引入微分作用。
#项目实现
为了模拟,选择了Python的PyGame游戏框架,效果如下图所示
![](/files/album/20200217-1.png)
为了简化,小车本身用红色圆表示,小车前方有5路的灰度传感器,也分别用红色点圈出。小车初始状态在椭圆形黑色跑道起点,然后已一定速度运行,每帧(fps60左右)调用pid算法。
具体思路是:1.获取传感器数值,也就是分别读取5路传感器坐标点的像素值,如果为黑色就对应值1,如果为白色就对应值0。其中黑色就是检测到了跑道,然后返回传感器数值数组如rval=[0,0,0,1,0],分别对应5个传感器的值。2.调用pid算法,如果小车没有偏离黑色跑道,传感器的值应为[0,0,1,0,0] / [0,1,1,1,0],设置算法并计算误差,这里只需用到P和D两个参数,最终得到对应的输出值PidOut 3.控制小车转向或直行,用PidOut作为小车转向的角度值,到下一帧时作用于小车本身。Pid算法详细代码如下:
![](/files/album/20200217-2.png)
完整项目请移步 ---- [传送门](https://github.com/ivanwhaf/pid-car)