PID算法的特点及原理讲解(配合舵机调控指导参数调节)

时间:2024-04-03 08:16:39

PID算法的特点及原理讲解(配合舵机调控指导参数调节)

       PID算法是一种成熟并且应用十分广泛的控制算法,小到玩具车的控制,大到飞行器的控制,都有它的身影。对于小白来说,对于它的原理却比较的模糊。现在就根据个人的经验,向大家讲解一下它的特点和原理,顺便结合实例,简单说一下PID参数调节的经验,希望大家能从我的文字中有所收获。
       PID就是“比例(proportional)、积分(integral)、微分(derivative)”三个调节参数的缩写,而将偏差的比例(Proportion)、积分(Integral)和微分(Differential)通过线性组合构成控制量,用这一控制量对被控对象进行控制,这样的控制器便称 PID 控制器。它的常见框图和数学表达式如下:

PID算法的特点及原理讲解(配合舵机调控指导参数调节)
       如上所说,PID就是三个控制环节的线性组合,通过三个环节的配合,来达到理想的控制效果(稳,快,准)。这三个环节各有特点,不如就从它的特点入手,来解释它的原理。

pid三个部分的特点

       P,比例环节:比例控制决定系统响应的快速性。控制系统的“现在”。但是P越大,系统越可能不稳定。另外,比例控制是一个有差控制。
       I,积分环节:积分环节主要影响系统的稳态误差。控制系统的“过去”。它可以消除系统历史的累积误差(没有残差)。但是它会减小 系统的稳定性,同时使系统的快速性下降
       D,微分环节:使系统具有前瞻性。控制系统的“未来”。在误差完成变化之前发生相应的响应。在微分环节参数设置得当的时候,可以提高系统的动态性能指标,使超调减小,稳定性增加,动态误差减小。
        把控制器分解为三个环节来理解,不妨我们把控制器的输出,也分解为三个环节来解释,这样,一个大问题就分解为三个比较小的问题了,比较容易说明不容易混,也比较容易理解。

PID三个环节的原理说明

       首先,比例控制:
PID算法的特点及原理讲解(配合舵机调控指导参数调节)
        比例项主要控制系统的快速性怎么理解呢?我们可以从以下的坐标图中寻得启示:
PID算法的特点及原理讲解(配合舵机调控指导参数调节)
        在相同误差的输入下,Kp大的系统,它的输出也大,在系统中体现的就是对应相同的输入,输出就大,反应的也就“快”啦。Kp大了,系统的稳定性下降,也就是如果Kp大了,误差e(t)=r(t)-y(t)可能会比前一时刻的误差e(t)值大,形成一个“正反馈”,出现不稳定“发散”的状态。而比例控制是一个有差控制,上图中,一旦输入e(t)等于零,输出u(t)也马上为零了,所以想要比例控制有效果,就必须有误差e(t)的存在。个人觉得在[https://blog.csdn.net/qq_25352981/article/details/81007075]文中对“漏水”概念的引入还是比较容易让人接受的,对于实际工程中单纯的P无法得到较好的控制效果也更能有更好的理解。比例控制的控制效果,完全由这一时刻的e(t)决定,所以它是控制系统的“现在”。
        其次,积分控制:
PID算法的特点及原理讲解(配合舵机调控指导参数调节)
        首先,理解积分环节减小稳态误差的概念,区分比例环节和积分环节最大的差别,看下图:
PID算法的特点及原理讲解(配合舵机调控指导参数调节)
        图(a)是比例环节,输出u(t)和误差e(t)成比例关系,当误差为零的时候,输出u(t)也变为零。再看图(b),输出u(t)和误差e(t)成积分关系,u(t)输出相当于对于输入e(t)阴影部分的面积,当输入为零的时候,输出u(t)不是零,而是一个不变的非零值。(图中没有说明这一情况)后来的u(t)成为一条平行于x轴的直线是因为一般我们都会对积分项进行限幅,以防积分值越来越大超出执行机构的执行范围。再看图©,假设这是一个电机的速度控制,随着速度的增加,误差e(t)减小,输出u(t)的斜率也越来越小,当误差为零的时候,也就是输出值y(t)与输入值r(t)相等时,输出u(t)保持在一个恒定的值不变,能够让速度一直保持下去。相对于比例控制,这就是积分控制减小稳态误差的效果。看上图,输出u(t)和(0, t)上的积分有关,包含控制系统的所有“历史”,也就可以理解为控制系统的“过去”。过大的积分项系数也容易造成系统的不稳定,即使一个较小的输入e(t),在时间长了之后也能输出一个很大的输出量U(t)。而快速性,想要输出u(t)减小,必须让输入e(t)成为负值,这样输出u(t)才会减小,相对于比例环节,输入e(t)减小就能使输出减小了。系统对于变化的响应也就变慢了。(另外也能从比例,积分,微分之间的相位关系来“体会”三者的快慢关系)
        最后,微分环节:
PID算法的特点及原理讲解(配合舵机调控指导参数调节)
        微分环节比较容易理解,看下图:
PID算法的特点及原理讲解(配合舵机调控指导参数调节)
       在误差e(t)发生变化的时候,也就是在误差完成变化之前就相应地输出一个的U(t),以达到提前控制的效果。这相当于给系统装上了一双眼睛,能够预判未来输入发生变化的情况,提前做出响应,动态性能也就上升了。当然也不是Kd值越大越好,如果Kd值太大,容易对细小的“噪声”做出过大的相应,系统的稳定性就会下降。

实践中参数调节过程

       接下来是对PID代码的一些说明,以及配合对循迹小车舵机的舵机控制来简单说说我调节参数的理解和过程。
       加粗样式首先,po出PID的程序,我用的是蓝宙的少儿图形编程软件LAD,逻辑和C语言代码的实现过程一模一样,应该也是很容易理解的。
PID算法的特点及原理讲解(配合舵机调控指导参数调节)
PID算法的特点及原理讲解(配合舵机调控指导参数调节)
        PID输出也把它分为三个部分,Pout,Iout,Dout,它有对应的系数Kp,Ki,Kd。
        首先是Kp参数。在这里,需要注意的是Pout的输出不仅和Kp的大小有关,还和ADC3=ADC1*4中的系数4有关,其实控制比例项的输出的是4Kp!再多说一句,Errn的范围其实就是(-4, 4)了!进行之前的操作就是把输入误差控制在一个确定的范围内,不受电磁传感器读入的信号值大小的影响,另外我觉得,也有对控制量的输出有一个细分的作用。(在这里,受机械状态的限制,实际舵机的输入参数范围控制在(-20,20)。)比如说系数是4Kp的时候,Kp取5,输出就有(0,5,10,15,20)这几种。而如果系数是Kp,达到一样的效果Kp取20,输出就只有(0,20)两种可能了。前者的输出情况更多,体现在控制效果上就是前者更加“灵活”,后者比较“死”。单纯的P控制是有差控制,表现在车体的控制上会出现车很难会沿着电磁线走直线,而是以电磁线为中心走“Z”字形,参数不得当还对出现过弯来不及反应或者出弯后车体绕弯越来越大,甚至于跑出赛道的情况。
        再向系统加入I参数。在这里积分项的系数其实是4/Ki了。首先,加上Ki项的输出,整体的输出值又会增大,所以可以先把Kp值减小,比如减小到4。如果Ki值比较小取1,整个系数是4,积分值就会很大,基本会一直保持在限幅值3或者-3的状态,车在赛道上的情况就会出现震荡。比例系数较大,车方向改变的频率会比较大,一个字“抖”,当系数减小,车行驶的路径会变成波浪一样的形状。系数合适时比如我取到Ki等于12,小车跟着电磁线跑了,而不是跟着电磁线进行“Z”字形运动。加上I项的输出之后,确实小车面对转弯的及时性会有所减弱。
        最后是微分项,它的系数同样是4Kd。加入合适的Kd项之后,系统面对赛道情况的变化做出的响应更好,车跑的更加丝滑!车跑的丝滑了,车速当然也就理所应当地提上去了。微分项在正常输入不变的情况下是不起作用的,它只在输入变化的情况下有相应的输出,所以比例项Kp和积分项Ki只要进行微调或者不调,这时候参数的调整就有大体的方向了。(在实践中只用PD控制也有比较好的控制效果,并且它也是舵机更加常用的PID模式。)
        不同的控制对象有不同的调参方式,调参也需要不断地去尝试(建议把之前的参数都注释在一边。),但是理解了各个输出项的含义之后确实会对调参有很大的指导意义。
        以上就是关于我对PID参数的理解以及调参的经验感受,如果有理解有误的地方欢迎一起交流。联系方式:[email protected]