1、AGV PID 调试在 AGV 控制算法中,PID 算法是最基础也是最重要的一环。PID 算法运用起来其实非常简单,几行代码就能实现,困难的地方就是参数整定了,需要不断的尝试找到最佳参数。一.PID 控制算法的基本思想PID 算法是一种具有预见性的控制算法,其核心思想是:1) PID 算法不但考虑控制对象的当前状态值(现在状 态),而且 还考虑控制对象过去一段时间的状态值(历史状态)和最近一段时间的状态值变化(预期),由这 3 方面共同决定当前的输出控制信号;2) PID 控制算法的运算结果是一个数,利用 这个数来控制被控对象在多种工作状态(比如加热器的多种功率,阀门的多种开度等)工作,一般输
2、出形式为PWM,基本上满足了按需输出控制信号,根据情况随时改变输出的目的。PID 控制算法的基本思想大致如上,但要 针对不同的场景做出相应调整。比如针对AGV 的方向控制,我们就需要着重考 虑 AGV 的当前状态- 位置偏差值和角度偏差值(比例调节),预期状态辅助调控(微分 调节), 对于历史状态则不用考 虑(积分调节)。在实际调控中会发现,一般情况下只要比例控制得当,车体本身运行就很平稳了,加入微分调节是为了处理 AGV 受到外力撞击时的突发情况。 这 里不考虑积分调节是因为,AGV方向控制是实时动态调控的, 历史误差在次情况下没有太多意 义。二.PID 算法分析:PID 算法从其字面理解是
3、:P-比例控制、I-积分控制和 D-微分控制。下面根据 T3 实际调试过程注解下:1 、比例控制设某控制系统:用户设定值为 SV(也就是希望通过 PID 控制算法使被控制对象的状态值保持在 SV 的附件)。 1从系 统投入运行开始,控制算法每隔一段 时间对被控制对象的状态值进行采样。由此,可得到开机以来由各个采样时间点被控制对象的状态值所形成的数据序列:X1,X2, X3, X4, Xk-2,Xk-1,Xk说明:X1:开机以来的第一次采样值Xk: 目前的采样值(最近一次的采样值)2 从 这个采样值序列中提取出三方面信息:当前采 样值 Xk 与用户设定值 SV 之间的差值:EkEk =Sv -
4、Xk分析 Ek:0:说明当前状态值未达标Ek =0:说明当前控制状 态值正好满足要求0, 0),有时候正好满足要求( Ex=0);如果将这些偏差值进行累加求代数和得到 Sk,即:Sk=E1+E2+E3+.+Ek-2+Ek-1+Ek分析 Sk:0: 过去大多数时候未达标Sk =0:过去控制效果较理想0:说明从上一采样时刻到当前误差有增大 趋势Dk =0:说明从上一采 样时刻到当前误差平稳0 Dk=0 Dkpid.DCmax) /上上上上上上上上上上上上 pid.Iout=pid.DCmax; els if(pid.Iout-pid.DCmax) /上上上上上上上上上上上上 pid.Iout=-p
5、id.DCmax; DelEk=pid.Ek-pid.Ek_1; /上上上上上上上上 pid.outi.K*Delk; /上上上上 附录二:PID.h#ifndef _PID_H fi I #include “main.h“ typedf struct float Sv; /上上上上上 flt Pv; /上上上上上 float Kp; /上上上上 flt i; /上上上上 float Kd; /上上上上 float T; /PID上上上上-上上上上 flt DS; /isapears hakes time 上上上上 float Ek; /上上上上 flt k_1; /上上上上 float SEk; /上上上上上上 float Pout; flt It; float Dout; float OUT0; /上上 flt ; /上上 u16 OpTime; /PID上上上上 DCax; /上上上上上 PID; extrn PID pid; /上上PID上上上上上上上上 void I_Init(voi); vi PIDCalc(vid); /pid上上 void I_Out(voi); #enif