飞思卡尔智能车竞赛摄像头组比亚迪金牛座技术报告 下载本文

4.6.2 数字PID控制算法

1. 数字PID位置型控制算法

在单片机控制系统中,PID控制规律的实现必须用数值逼近的方法。当采样周期相当短时,用求和代替积分,用后向差分代替微分,使模拟PID离散化变为差分方程。

为了便于单片机实现,必须把公式(4.6)变换成为差分方程,为此可作如下近似

?e(t)dt??Te(i) (4.8)

0i?0tkde(t)e(k)?e(k?1)? (4.9) dtT式中,T为采样周期,k为采样序号。

由公式(4.6)、公式(4.7)、公式(4.8)可得数字PID位置型控制算式为

Tu(k)?KP[e(k)?TI?e(i)?TDi?0ke(k)?e(k?1)] (4.10)

T公式(4.10)表示的控制算法提供了执行机构的位置u(k),所以被称为数字PID位置型控制算式。

2. 数字PID增量型控制算法

由公式(4.10)可以看出,位置型控制算法不够方便,这是因为要累加偏差e(i),不仅要占用较多的存储单元,而且不便于编写程序,为此可对公式(4.5)进行改进。

根据公式(4.10)不难写出u(k?1)的表达式[8],即

Tu(k?1)?KP[e(k?1)?TI?e(i)?TDi?0k?1e(k?1)?e(k?2)] (4.11)

T将公式(5.10)和公式(5.11)相减,即得数字PID增量型控制算法为

?u(k)?u(k)?u(k?1)

?KP[e(k)?e(k?1)]?KIe(k)?KD[e(k?1)?2e(k?1)?e(k?2)] (4.12)

第 27 页

其中KP?KD?KP1?称为比例增益

T称为积分系数 TITD称为微分系数 TKD?KP我们在实际代码实现时,处理成 error[0]=0; error[1]=0; error[2]=0; PreU=0; for(;;)

{error[0]=error[1]; error[1]=error[2]; error[2]=r-y;

PreU+=KP*(error[2]-error[1])+KI*error[2]; PreU+=KD*(error[2]-2*error[1]+error[0]); ……}

其中,error[2]为本次的偏差,error[1]为上一次的偏差,error[0]为上上次的偏差,PreU为输出的控制量。

这种算法用来控制步进电机特别方便,对直流电机也可以采用,其实如果对控制有更高的要求或者干扰因素较多,我们可以对PID算法做各种改进,比如用梯形法做数值积分以提高精度,将差分改成一阶数字滤波等等,在实际调车的过程中,我们确实遇到过由于光电编码器采样得到的脉冲上升下降沿不够陡,使得速度采样出现不稳定和失真,但由于这些附加处理比较耗费代码的运行时间,出于代码效率和实际效果的比较,我们没有采用这些改进的方案,另外可以考虑加反向器来整波形得到较为理想的方波。

运用PID控制的关键是调整三个比例系数,即参数整定。PID整定的方法有两大类:

第 28 页

一是理论计算整定法。它主要是依据系统的数学模型,经过理论计算确定控制器参数。由于智能车整个系统是机电高耦合的分布参数系统,并且要考虑赛道具体环境,要建立精确的智能车运动控制数学模型有一定难度,而且我们对车身机械结构经常进行不断修正,模型参数变化较频繁,可操作性不强;二是工程整定方法,它主要依赖工程经验,直接在控制系统的试验中进行,且方法简单,我们采用了这种方法,同时,我们先后实验了几种动态改变PID参数的控制方法[8]。

4.7 经典PID算法实现速度的控制

4.7.1 经典PID算法实现速度控制的计算机仿真

智能车的主电机可以看着是一个惰性单元,应用PID控制算法可以达到较好的控制效果,该智能车在MATLAB上进行仿真得到的单位价跃响应如图4.12所示,因为在本赛车速度控制系统中,其中一个最重要的指标就是快速性,而对于超调量和过渡过程时间要求并不严格。特别是过渡过程时间,该智能车的速度时时刻刻都需要发生变化,所以还等不到速度稳定便又要变化,由仿真结果可见,该智能车速度调节的快速性很好,能够完全满足调速的要求。

图4.8 PID速度控制算法的MATLAB仿真

4.7.2 经典PID算法实现速度控制的具体实现

我们对速度的控制采用了增量式PID算法。该算法的基本策略是急弯降速,直道和小弯提速,由于我们的摄像头扫描到的范围较宽,所以在过急弯道时可以提前减速,先把扫

第 29 页

描到的图像进行处理,然后得出经过反复实验,将图像经过算法处理后得到的黑线位置和对应的速度PID参照速度处理成二次曲线的关系。在实际测试中,发现小车直道和弯道相互过度时加减速比较灵敏,与舵机转向控制配合较好。

但是,存在的局限一方面是车在弯道进直道后的加速和直道入弯道的速度控制并达不到最好的控制效果,弯道入直道减速不够快速,直道入弯道加速得时机也不够及时。我们做了进一步的改进,根据入弯时黑线位置的特点动态改变二次曲线中最高点(直道的最高速度)和最低点(弯道的最低速度)的大小,使得控制效果更合理。

另一方面是没有考虑到实际比赛中长直道急速冲刺的情况,赛前在程序中人为设定直线速度不够灵活合理,所以在程序中根据赛道状态动态提高直线速度,使得我们可以在长直道的赛场充分发挥车的潜能。

4.7.3 PID参数调节

比例控制能迅速反应误差,从而减少误差,但是比例控制不能消除静态误差,KP的加大,会引起系统的不稳定;积分控制的作用是,只要系统存在误差,积分控制作用就不断地积累,输出控制量以消除误差,因而,只要有足够的时间,积分控制将能完全消除误差,积分作用太强会使系统超调加大,甚至使系统出现振荡现象;微分控制可以减小超调量,克服振荡,使系统的稳定性提高,同时加快系统的动态响应速度,减少调整时间,从而改善系统的动态性能。而在该智能车系统调速的过程中,由于快速性是最重要的指标之一,因而应主要考虑其快速性,在调试的过程中,把KP参数调得较大,这是为了增大速度调节的快速性,将KD参数调得较为适中,因为除了快速性以外,最重要的就是要减少系统的超调量,而将KI参数调得较小,因为在该速度调节中,并不需要达到静态,由于理想速度就在时时刻刻发生变化,所以也不可能达到静态。实验结果表明,KP参数取8,KD参数取为2,而KI参数取得尽可能小,大约为1时,可以取得较好的效果。

4.8 控制系统实时性能分析

智能车系统的控制周期为20ms,也就是每一场对车的转向和速度进行控制。新一场信号采集的同时,单片机既要相应行中断采集当前场的数据,又要在相

第 30 页

应中断剩下的时间分析出上一场数据,集合相应的算法进行控制量的输出。在这20ms中单片机能否完成上面所说的任务是需要通过分析所得的。如果单片机不能在20ms内完成上述的任务,系统控制性能就会下降,甚至出现错误。如果可以在低于20ms的时间内完成任务,那么系统就能够按照一定的时序有条不紊的运行。引入多任务下单片机负载的概念[9]: L?下面是各个任务执行时间:

数据的计算 4ms-6ms 、摄像头数据采集 6ms– 8ms、速度采集1us、速度控制1us、舵机控制 1us。可以计算出系统的负载L大约为0.7,能够满足系统稳定性的要求。

Tt1Tt2Tt3T (4.13 ) ???....?t4Tp1Tp2Tp3Tp4 第 31 页