system: [SYSTEM]

user: 2. 多变量协同模糊PID控制器 2.1. 单变量模糊PID控制器 (A) 输入量的模糊化处理 模糊PID控制器的输入参数为误差 e ( k ) 和误差的变化 e c ( k ) ，其均为离散变量，k为采样时刻。 设定误差和误差的变化的基本论域均为[−3， 3](仅为举例，以便后续作图)，并在论域上将 e ( k ) 和 e c ( k ) 划分为7个模糊集合，分别设定为：NB，NM，NS，ZO，PS，PM，PB。由于实际实验测试时 | e ( k ) | 、 | e c ( k ) | 的变化可能超过基本论域范围，导致控制系统无法正常工作。为了避免这种情况的发生，本文将在实验中对实际小车采集到的速度误差、速度误差的变化和角度误差、角度误差的变化数据做归一化处理，以确保其处在基本论域范围内。这将在后文详细阐述。 采用三角形隶属度函数，误差和误差的变化的隶属度函数如下图1： 图1. 误差e (上)及误差的变化ec (下)隶属度函数 (B) 模糊推理 在输出PID控制参数的调整过程中，需要同时考虑不同时刻输入参数的作用以及他们之间的协同关系，将此模糊规则用模糊语言及相应的符号表示出来： Rule   i :   If     e ( k ) = e i     and     e c ( k ) = e c i ，                     then     K p = P m ， K i = I m ， K d = D m (1) 式中， e i 、 e c i 、 P m 、 I m 和 D m 为相应支集的模糊集合。由模糊规则推导出的P、I、D参数输出，用最大最小规则进行推理，得到： μ { X m } ( K x ) = min { μ e i ( a ) ， μ e c i ( b ) } (2) K x 代表了相应的参数 K p 、 K i 和 K d 。设 K x 的总的输出模糊集合为 { X m } ，则输出PID控制参数的隶属度函数分别为： μ { P m } ( K p ) = max { μ P m ( K p ) } (3) μ { I m } ( K i ) = max { μ I m ( K i ) } (4) μ { D m } ( K d ) = max { μ D m ( K d ) } (5) 由 e ( k ) 和 e c ( k ) 的模糊集合NB，NM，NS，ZO，PS，PM，PB，得到输出参数 K p 和 K d 的调整规则表如下表1~2： Table 1 The adjustment rule of K ec(k) e(k) NB NM NS ZO PS PM PB NB NB NB NM NM NM ZO ZO NM NB NM NM NM NS ZO PS NS NM NM NS NS ZO PS PS ZO NM NM NS ZO PS PM PM PS NS NS ZO PS PM PM PM PM NS ZO PS PS PM PB PB PB ZO ZO PS PS PM PB PB 表1. K p 调整规则表 Table 2 The adjustment rule of K ec(k) e(k) NB NM NS ZO PS PM PB NB NB NB NM NM NM ZO ZO NM NB NM NM NM NS ZO PS NS NM NM NS NS ZO PS PS ZO NM NM NS ZO PS PM PM PS NS NS ZO PS PM PM PM PM NS ZO PS PS PM PB PB PB ZO ZO PS PS PM PB PB 表2. K d 调整规则表 这里，我们只给出了 K p 和 K d 进行模糊规则表，原因在于：经多次智能小车PID控制实验，我们发现参数 K i 仅在出现稳态误差时对其进行微调，多数情况下无需过多考虑，因此在此可忽略这个规则表，以减少计算量。 2.2. 扩展的多变量协同模糊控制器 图2. 四维模糊“规则块”阵列 如前所述，实际驾驶汽车的过程中，车辆在直行道时，可通过调整PID参数，使偏摆角和行驶速度容易达到驾驶人期望的参数值。但是，如此时遇到弯道，按照人类的推理方式，驾驶人会根据经验做出判断，并控制车辆实时修正转弯角度，在确保能够通过弯道的情况下，同时降低或保持车辆当前的行驶速度。即兼顾循迹和速度两方面的要求。 而上述单变量的模糊PID控制系统由于没有同时考虑小车的偏摆角和速度两个变量，将无法实现人类智能的推理方式。 为了实现小车摆角和速度的协同控制，需要考虑小车摆角和速度之间的协同关系，且两者间的关系不是简单的线性关系。这里我们借助模糊控制方法来仿照熟练司机的推理方式，以期自适应地实时整定参数。 设计模糊控制器，选择4个输入参数，分别为： 舵机摆角误差 e δ ( k ) 舵机摆角误差的变化 e c δ ( k ) 电机速度误差 e V ( k ) 电机速度误差的变化 e c V ( k ) 其多输入多规则模糊推理规则如下： Rule   i : If   e δ ( k ) = e i δ ，   and   e c δ ( k ) = e c i δ ，   and   e V ( k ) = e i V ，   and   e c V ( k ) = e c i V                       then   K p = P m ，   K i = I m ，   K d = D m (6) 同理， e i δ 、 e c i δ 、 e i V 、 e c i V 为相应支集的模糊集合。采用最大最小规则进行推理，得到： μ { X m } ( K x ) = min { μ e i δ ( a ) ， μ e c i δ ( b ) ， μ e i V ( c ) ， μ e c i V ( d ) } (7) 设 K x 的输出模糊集合为 { X m } ，则输出PID控制参数的隶属度函数分别为： μ { P m } ( K p ) = max μ P m ( K p ) (8) μ { I m } ( K i ) = max μ I m ( K i ) (9) μ { D m } ( K d ) = max μ D m ( K d ) (10) 在一般的智能小车单变量模糊PID控制器中，由于模糊规则为二维列表，模糊PID控制器一般为两输入三输出的系统。即：以舵机为例，输入舵机摆角误差和摆角误差的变化，模糊PID控制器输出相应的舵机PID三个控制参数。 由于舵机和电机的多变量协同控制系统的模糊PID控制器具有4个输入参数，在划分模糊调整规则表时，其模糊规则需要相应的变化为四维模糊规则表，如图2所示。 这里的四维模糊规则表是在原有的二维速度误差和速度误差的变化规则表基础上，将二维规则表进行相应维度扩展，如图2所示。即先设定角度误差 e δ ( k ) 为定值，再加入不同的角度误差的变化，构建由速度误差 e V ( k ) ，速度误差的变化 e c V ( k ) ，角度误差的变化 e c δ ( k ) 构建三维坐标的模糊“规则块”。然后根据不同的角度误差 e δ ( k ) 依次构建多个不同的模糊“规则块”(模糊“规则块”的数目依赖于对角度误差 e δ ( k ) 的模糊子集选择数目)，即角度误差 e δ ( k ) 作为决定不同模糊“规则块”的第四维坐标，形成四维模糊“规则块”阵列。 为了将人类驾驶员的经验引入上述四维模糊PID控制系统，在设计四维模糊“规则块”阵列时，可以根据引言中介绍的驾驶员对角度和速度的判断和决策，设置阵列中角度误差 e δ ( k ) 和角度误差的变化 e c δ ( k ) 对不同“规则块”中每个二维模糊规则层的对应关系，从而使得系统在遭遇不同的道路情况时，可以根据该情况下的模糊规则表做出相应的PID控制决策。 以保持车辆当前行驶速度为例，若智能小车当前传感器检测到横向偏摆角误差较大( e δ ( k ) = 3 )，即智能小车判定前方为弯道，同时横向偏摆角误差的变化不大( e c δ ( k ) = 1 )，即此时前方虽遭遇弯道，但弯道角度不大，即“小弯”情况，若此时小车速度拟合良好无需修正也可以顺利过弯时( e V ( k ) = 0 ， e c V ( k ) = 0 )，小车控制系统给予的PID参数仍应较大，以适当修正横向偏摆角的误差。 针对本文设计的多变量模糊控制系统，整理上述过程的相关参数为： e δ ( k ) = 3 ， e c δ ( k ) = 1 ， e V ( k ) = 0 ， e c V ( k ) = 0 (11) 按照四维模糊规则，假设只调节 K p ，此时的多输入多规则模糊推理为： Rule   i : If   e δ ( k )   is   PB ，   a n d   e c δ ( k )   is   PS     and   e V ( k )   is   ZO ，   and   e c V ( k )   is   ZO                     then   K p   is   PM (12) 推理过程如图2中红色虚线与规则表所示。 结合实际道路情况进行四维模糊“规则块”阵列的设计与微调，即在小车模糊控制规则中融入与当前道路的实际路况相匹配的人类驾驶员的驾驶经验。 2.3. 去模糊化 使用最大值法进行去模糊处理，设输出参数为 K ′ x ，沿用上述表达方式，重心法去模糊化的基本原理为： K x = ∑ i = 1 l K x i l (13) 其中，l是取点的个数， K x i 是 μ { X m } ( K x ) 为最大时的输出值。