此文系第16届智能车智能视觉组-上海交通大学AuTop战队开源算法讲解第八部分--系统辨识与速度控制(PID)算法,专栏及开源方案链接:

llo:第16届智能车智能视觉组-上海交通大学AuTop战队开源汇总


提到速度环算法,自动化人的第一个反应必然是经典的PID算法,本文将介绍AuTop在本次竞赛中对常规PID算法、参数调节、改进式PID算法等的尝试探究。

1. 常规PID控制算法

经典PID算法

PID控制的基本方法是根据系统输入与预定输出的偏差的大小运用比例、积分、微分计算出一个控制量,将这个控制量输入系统,获得输出量,通过反馈回路再次检测该输出量的偏差,循环上述过程,以使输出达到预定值。

位置式PID算法为:

[公式]

而增量式PID算法对应可由位置式推出:

[公式]

[公式]

在PID算法中,比例环节P的作用是成比例地反映控制系统的偏差信号e(t),一旦产生偏差,比例控制环节立即产生控制作用以减小偏差。积分环节I的作用是消除静差,提高系统的无差度,在使用积分控制时,常常对积分项进行限幅以减少积分饱和的影响。微分环节D的作用是反映偏差信号的变化趋势,能够在偏差信号变化之前先引入一个有效的早期修正信号来提前修正偏差,加快系统的动作速度,减少调节时间。

在PID参数的选择上,公认的常规方案是,过程控制系统(如电机控制)因较慢的响应常采用PI控制,突出积分项的作用,而随动控制系统(如舵机控制)为了达到较快的响应常采用PD控制。

大多智能车队会推荐速度环使用增量式PID,方向环使用位置式PID,这是由于增量PID由于也不容易造成电机的正反转切换。但我们认为,在合适的参数下,增量式PID与位置式PID应该是可以等价。

对于PID算法而言,一组合适的参数相当重要,下面介绍我们的调参方法。

2. PID调参方案

1.实验试凑法

实验试凑法,故名思义,“试”、“凑”,这也是大多数智能车队伍选用的方法。

先上PID经典调参口诀:

经典PID口诀

一般而言,使用实验试凑法进行PID参数的整定步骤为:

  1. 先将Ki、Kd置0,整定Kp
  2. 待达到合适响应速度控制后,调小Kp(0.8左右)整定Ki
  3. 保持Ki不变,重新调整Kp
  4. 加入Kd,整定Kd
  5. 依次类推,直到获得满意参数。

使用实验试凑法对PID参数进行调节,需要上位机的辅助,这里我们使用的是匿名科创的上位机(anotc.com/),在配置好合适的收发协议后,匿名科创上位机可以方便地将速度信息绘制出来,实时在PC端显示。

匿名科创界面

匿名科创界面2

匿名科创界面3

2.基于MATLAB系统辨识的参数整定

如前文讲述,基于实验试凑法的PID参数整定有着一定的主观性及复杂性。我们尝试融合过程控制系统的相关知识,采用模型辨识的方法对PID的参数进行整定与调节。

模型辨识的方案有两种,一是熟知系统模型直接进行机理建模,二是基于数据的黑箱建模。对于小车这一对象,我们采用的基于数据的建模方案,即在阶跃输入下,测量输出。这里我们给定电机PWM作为阶跃输入,用编码器记录小车在带载情况下的速度输出状况,并用无线串口发送到上位机进行数据收集,从而得到了实验数据,以此建立带载模型。采集到的阶跃响应如下所示:

数据采集

我们使用Matlab的System Identification工具箱对这一过程控制系统进行辨识,先导入实验数据。

System Identification工具箱数据导入

其次,模型的选择,从数据的分布其实可以看出该系统可以近似为一个一阶系统,因而可将系统看作一阶加纯滞后的模型进行辨识。系统基本传递函数如下所示:

[公式]

System Identification工具箱模型辨识结果

将辨识结果与原始实验数据放置在同一张图片中,可以直观的看出,模型的辨识效果极好。

辨识结果图

下面为了直观起见,我们打开Simulink使用经典的PID_tune进行参数的快速调节调节。当然,在已知系统模型的情况下,也可以考虑经典的Ziegler-Nichols法等方法直接给出。

Simulink仿真

以下分别是设置上升时间为0.5s、0.4s、0.3s的调节效果图及调节参数,我们也就可以由此记录这三个PID参数为慢、较快、快三种PID参数,而避免了盲目调参带来的困扰。

0.5s上升时间

0.4s上升时间

0.3s上升时间

下图是Simulink中得到的0.5s上升时间在仿真示波器中的效果图,有着不错的动态性能。

Simulink仿真结果图

关于系统辨识,同样也可以采用最小二乘法进行实现:

最小二乘法基本原理如下,假设系统的传递函数为:

[公式]

在时域中,进行化简与推导得到:

[公式]

则对于我们需要设计的一阶系统,有:

[公式]

考虑最小二乘法的思想,我们进行参数整理,并得到求解公式:

[公式]

其中:

[公式]

求解得到:

[公式]

具体Matlab代码为:

function [a1, b1, L] = LSM_recog(x, y)
    % Gets the step response y1 from the transfer function
    Fai = zeros(length(y), 3);

    for i = 1:length(y)
        Fai(i, :) = [-1 * sum(y(1:i)), -1, i];
    end

    %Using Least square method
    theta = inv(Fai' * Fai) * Fai' * y;
    a1 = theta(1);
    b1 = theta(3);
    L = theta(2) / theta(3);
    disp([a1, b1, L])
    s = tf('s');
    try
        % The final transfer func
        M1 = (b1) * exp(-L * s) / (s + a1);
    catch err
        disp(["wrong"])
    end
end

3. 其它整定方法

PID的整定方法还有很多,临界比例度法、衰减曲线法、反应曲线法、经典Ziegler-Nichols法等等。

Ziegler-Nichols方法通过系统的瞬态响应特性确定参数,若建立在上文模型辨识的基础上,可直接根据打表公式给出PID的值。临界比例度法和衰减曲线法分别利用等幅震荡和衰减比4:1这两个条件,同样可根据打表公式给出PID的值。

这些整定方法在此不过多赘述。

三、改进式PID思想

1. 抗积分饱和思想

系统在启动、停车、切换模式时,由于积分饱和作用,控制器会产生较大的偏差,使得系统响应延迟,超调增大。抗积分饱和的方法有积分分离法、有效偏差法、遇限消弱积分法等。

最常用的是积分分离与遇限消除积分法的思想。遇限消除积分法即设置积分上限,而积分分离方法是当被控量与设定值偏差较大时,取消积分作用,当被控量接近给定值时,引入积分控制,以消除静差,提高精度。

在速度环的控制当中,需要注意如切换PID模式,则建议消除积分项以避免积分饱和带来的速度控制失控。

2. 抗微分扰动思想

微分项的控制可以加快动态响应的同时,也可能带来极大的高频扰动,因而使用微分项常常采用串接低通滤波的方式,以克服高频干扰。

使用这一思想实现的算法可以是不完全微分PID,即将一低通滤波环节可串接在PID控制器的输出后,或单独串接在微分项的输出。也可以是微分先行PID,其中输出微分先行是将滤波串联在反馈环节(编码器环节),偏差微分先行则是将滤波串联在PID输出前(速度偏差环节)。

3. 小偏差弱调节思想

在给定的PID参数下,若已经达到较小的偏差,而这偏差由于测量误差或其它原因不可避免,但PID控制器仍会使得控制器输出控制指令,频繁震荡。

当偏差较小时候,我们可以考虑引入死区的思想,在较小的偏差下不调节,或引入变积分PID的思想,在较小偏差下少调节。

在速度环控制当中,若在加速时使用增量式变积分PID控制,可以让速度控制更加平稳,可有效减少大加速度带来的打滑。

4. BangBang-PID串级控制

Bang—Bang控制也称为开关控制或者最小时间控制,其主要的控制目的是在控制域内使系统以最快的速度从一个状态到另一个状态。Bang-Bang控制的基本原理是将状态空间划分为多个区域,一个区域对应一种控制变量的输出。这区域之间的分界面称为开关面,决定Bang-Bang控制的关键就是开关面的设定。

Bang-Bang控制基本公式为:

[公式]

单一的BangBang控制往往不多使用,常与PID算法进行串联,即偏差不大时,采用PID的输出结果,当偏差大到一定程度后,输出较高(或较低)结果。对于速度控制而言,当反馈速度偏差大于设定开关面,可设置输出满占空比(或较大占空比)以加快响应。

[公式]

5. 模糊PID算法

模糊PID控制在智能车比赛中也有着很多应用,其基本思想是将控制对象模糊化,较小偏差使用PID控制,大偏差使用模糊控制,在方向环与速度环都可以理论而言都可以起到较好的效果。

以方向控制为例,在模糊控制的多组参数下,可以起到小转角灵活控制,大转角快速调节的作用。

其缺点在于过多参数调节难度高,浪费时间精力,由于时间原因,我们并没有时间去整定多组PID参数,因而在实际使用中并未尝试这一算法。

6. 专家PID算法

故名思义,专家PID即根据经验来给定PID调节的指定规则,这一方法极度依赖经验与规则的制定。例如,在极大偏差采用BangBang,在中等偏差时采用较大PID算法,而在微小偏差处使用较慢PID算法等等,总而言之,规则来自经验,通过制定合理的规则来达到更好的调节方法即可。

这一方案依赖经验,同样也依赖调参,为PID算法制定规则使得调节效果达到想要的目的,规则可以天马行空,是为专家控制。

7. 神经网络速度控制

基于神经网络的速度控制,是联想到AI电磁组这一组别。在第15届智能车比赛中,基于神经网络可进行模式切换、可进行方向环的控制,理论来讲进行速度环控制也是不成问题,或许在未来几年也会成为新的更好的速度环控制方案。

四、总结

在上文中,我们从常规PID算法、PID参数调节、改进式PID算法三个部分介绍了速度环的控制算法,也在撰写的过程中融入了许多过程控制系统、计算机控制系统、运动控制系统等课程的相关知识,也花费了很多心思(一个字一个字敲上去的),希望能给参与智能车比赛和其它自动化同学一些帮助。

其实本计划本文同时介绍我们的速度控制方案,但鉴于此时已篇幅过长,故速度控制方案将另起一文进行叙述。


SJTU-AuTop完整开源方案链接,如果觉得我们的方案和代码对您有帮助,请在github上帮忙点个star吧:)

llo:第16届智能车智能视觉组-上海交通大学AuTop战队开源汇总