
AGV-PID调试小结.docx
13页AGV PID调试ﻩ在AGV控制算法中,PID算法是最基本也是最重要的一环PID算法运用起来其实非常简朴,几行代码就能实现,困难的地方就是参数整定了,需要不断的尝试找到最佳参数一.PID控制算法的基本思想PID算法是一种具有预见性的控制算法,其核心思想是:1) PID算法不仅考虑控制对象的目前状态值(目前状态),并且还考虑控制对象过去一段时间的状态值(历史状态)和近来一段时间的状态值变化(预期),由这3方面共同决定目前的输出控制信号;2) PID控制算法的运算成果是一种数,运用这个数来控制被控对象在多种工作状态(例如加热器的多种功率,阀门的多种开度等)工作,一般输出形式为PWM,基本上满足了按需输出控制信号,根据状况随时变化输出的目的PID控制算法的基本思想大体如上,但要针对不同的场景做出相应调节例如针对AGV的方向控制,我们就需要着重考虑AGV的目前状态--位置偏差值和角度偏差值(比例调节),预期状态辅助调控(微分调节),对于历史状态则不用考虑(积分调节)在实际调控中会发现,一般状况下只要比例控制得当,车体自身运营就很平稳了,加入微分调节是为理解决AGV受到外力撞击时的突发状况这里不考虑积分调节是由于,AGV方向控制是实时动态调控的,历史误差在次状况下没有太多意义。
二.PID算法分析: PID算法从其字面理解是:P-比例控制、I-积分控制和D-微分控制下面根据T3实际调试过程注解下:1 、比例控制 设某控制系统:顾客设定值为SV(也就是但愿通过PID控制算法使被控制对象的状态值保持在SV的附件) 1>从系统投入运营开始,控制算法每隔一段时间对被控制对象的状态值进行采样由此,可得到开机以来由各个采样时间点被控制对象的状态值所形成的数据序列: X1,X2, X3, X4, .... Xk-2,Xk-1,Xk 阐明: X1:开机以来的第一次采样值 Xk: 目前的采样值(近来一次的采样值) 2> 从这个采样值序列中提取出三方面信息: ①目前采样值Xk与顾客设定值SV之间的差值:Ek Ek =Sv - Xk 分析Ek: >0:阐明目前状态值未达标 Ek =0:阐明目前控制状态值正好满足规定 <0:阐明目前状态值已经超标 结论:Ek反映了控制对象目前值与设定值的偏差限度,可以根据Ek的大小对输出信号OUT进行调节:偏差限度大OUT增大,偏差限度小OUT减小即输出信号的强弱与目前偏差限度的大小成比例,因此根据Ek的大小来给出控制信号OUT的目前值的算法称为比例控制(Proportion)。
用数学模型可以表达为: POUT=(Kp*Ek)+ Out0 Kp:一般称之为比例系数,可以理解为硬件上的放大器(或衰减器),合适选用Kp将目前误差值Ek按一定的增益放大或缩小,以提高控制算法的相应速度 Out0:是一种常数,目的是为了当Ek为0时,保证输出信号不为0,以不至于在目前值与设定值相等时控制器输出信号OUT为0,系统处在无控制信号的失控状态ﻩ陀螺仪循迹时,上电后采集一种角度数据作为SV(此时车身与轨道无角度偏差),此后采集的角度数据均为Xk ,Ek =Sv - Xk 但实现AGV导航仅有角度偏差数据无法形成闭环控制,我们还需要摄像头拟定AGV的位置偏差数据使用OPEM-MV3进行调试时,可以直接从摄像头模块获取出AGV角度偏差值 EK_A 和距离偏差值 EK_D (相对于轨迹中心),注旨在此时获取的数据自身就是偏差值为了实现闭环控制,数学模型如下:Pout= ( KP_A * EK_A ) + ( KP_D * EK_D ) + Out调节 KP_A 和 KP_D 实现对车身导航的比例控制2、积分控制将投入运营以来的各个采样值都与设定值相减,可得到开机以来每个采样时刻的偏差序列数据: E1,E2,E3 .....Ek-2,Ek-1,Ek 阐明: E1:开机的第一种采样点与设定值的偏差 E1=SV-X1; E2=SV-X2; ...... EK-2=SV-XK-2; EK-1=SV-XK-1; Ek: 目前的采样值与设定值的偏差 EK=SV-XK 分析开机以来的误差序列: 每个偏差值也许有:>0,<0,=0这三种也许的值,由于从开机到目前,控制算法不断输出控制信号对被控对象进行控制,导致了过去这段时间有时候超标(Ex<0),有些时候未达标(Ex>0),有时候正好满足规定(Ex=0);如果将这些偏差值进行累加求代数和得到Sk,即: Sk=E1+E2+E3+.........+Ek-2+Ek-1+Ek分析Sk: >0: 过去大多数时候未达标 Sk =0:过去控制效果较抱负 <0: 过去大多数时候已经超标 结论:1.通过对Sk的分析,可以对控制算法过去的控制效果进行综合评估。
体现了控制算法按照本来的方式输出的控制信号导致了目前的控制成果,因此应当运用这个值来对目前要输出的控制信号OUT进行修正,以保证控制对象会在将来的一小段时间尽快达到顾客设定的值2.Sk事实上是过去每个时间点的误差相加,与数学上的定积分运算类似,因此根据Sk对输出信号进行调节的算法称积分(integral)算法因此积分控制的数学模型为:IOUT=(kp* ( (1/Ti) Exdt))+Out0 Kp是一常数,其目的类似硬件上的放大器,用于将Sk放大或衰减; Out0是一常数,为了在历史积分偏差值为0时保证系统有一种输出值,避免失控; Ti 是积分时间常数,取值越大会导致输出量OUT会越小,可理解为历史上已经好久的误差值都影响了目前的输出信号取值越小,输出OUT会越强烈,可理解为积分只考虑了近来一段时间的误差 实际中,如果系统已经运营“很长”一段时间了,那些初期采样的偏差值可以忽视她们对目前控制的影响,因此应当根据状况选择合理的Ti值方能得到良好的控制效果 公式IOUT=(kp* ( (1/Ti) Exdt))+Out0 太繁琐,实际使用中简化为如下三步几步: ﻩEk=Sv-Pv; //Sv设定值,Pv目前值SEk+=Ek; //SEk合计误差Iout=KI*SEk+Out0调节KI完毕积分控制,但在实际调试过程中,加上积分控制后,AGV的循线效果变差,反复修改KI值仍然如此。
考虑到陀螺仪自身就存在一定的漂移,这会对积分控制产生影响,因此最后未使用积分控制3、微分控制近来两次的偏差之差 Dk:Dk=Ek-Ek-1 阐明: Ek: 目前的偏差 Ek-1: 基于目前的前一种采样时刻的偏差值 (即上一次的偏差值); 分析Dk: >0:阐明从上一采样时刻到目前误差有增大趋势 Dk =0:阐明从上一采样时刻到目前误差平稳 <0:阐明从上一采样时刻到目前误差有减小趋势 结论: 1. Dk可以阐明从上次采样到目前采样的这段时间被控制对象的状态变化趋势,这种变化的趋势很也许会在一定限度上延续到下一种采样时间点,因此可以根据这个变化趋势(Dk的值)对输出信号OUT进行调节,达到提前控制的目的 2. Dk形如数学上的微分运算,反映了控制对象在一段时间内的变化趋势及变化量,因此运用Dk对控制器输出信号进行调节的算法称为微分(differential)算法可以用数学模型体现为:Dout=Kp*(Td(de/dt))+Out0在实际使用中上述公式可简化为:DelEk=Ek-Ek_1; //近来两次偏差之差Dout=Kd*DelEk; //微分输出三、PID算法形成1比例、积分、微分三种算法的优缺陷分析:POUT=(Kp*Ek)+ Out0 --比例算法IOUT=kp* ( (1/Ti) Exdt)+Out0 --积分算法DOUT=Kp*(Td(de/dt))+Out0 --微分算法比例算法: 只考虑控制对象目前误差,目前有误差才输出控制信号,目前没有误差就不输出控制信号,也就是说只要偏差已经产生了比例算法才采用措施进行调节,因此单独的比例算法不也许将控制对象的状态值控制在设定值上,始终在设定值上下波动;但是比例控制反映敏捷,有误差立即就反映到输出。
积分算法:考虑了被控制对象的历史误差状况,过去的误差状况参与了目前的输出控制,但是在系统还没有达到目的期间,往往会由于这些历史的误差对目前的控制产生了干扰(即拖后腿),使用不当反而搅乱目前的输出但是在系统进入稳定状态后,特别是目前值与设定值没有偏差时,积分算法可以根据过去的偏差值输出一种相对稳定的控制信号,以避免产生偏离目的,起到打避免针的效果微分算法:单纯的考虑了近期的变化率,当系统的偏差趋近于某一种固定值时(变化率为0),微分算法不输出信号对其偏差进行调节,因此微分算法不能单独使用,它只关怀偏差的变化速度,不考虑与否有偏差(偏差变化率为0时偏差不一定是0).但是微分算法能获得控制对象近期的变化趋势,它可以协助输出信号尽早的克制控制对象的变化可以理解为将要有剧烈变化时就大幅度调节输出信号进行克制,避免了控制对象的大幅度变化 以上三种算法综合起来产生一种目前的控制量对控制对象进行控制,它们的优缺陷互补,即形成典型的PID算法2.PID算法数学模型 OUT= Pout+ Iout+ Dout即:OUT=((Kp*Ek)+ Out0)+(kp* ( (1/Ti) Exdt)+Out0)+ (Kp*(Td(de/dt))+Out0)整顿该式子得到:将各项的Out0归并为OUT0。
OUT=kp( Ek+ ( (1/Ti) Exdt))+ (Td(de/dt)))+OUT0程序实现为:OUT=Kp*Ek+Ki*SEk+Kd*DelEk以上便是我对PID算法的理解附录是PID程序源码附录一:PID.c ﻬ附录二:PID.h。












