基于模糊控制和PID控制的自主车辆速度跟踪控制(含MATLAB仿真程序)
- 格式:doc
- 大小:203.50 KB
- 文档页数:19
题目:基于模糊PID的汽车巡航控制系统设计基于模糊PID的汽车巡航控制系统设计摘要汽车巡航控制系统是一种辅助驾驶系统,它不但可以减轻驾驶员的负担,还可以提高驾车的舒适性.汽车巡航控制系统具有非线性、时变不确定性,并受到外界扰动、复杂的运行工况等影响。
本文介绍了一种基于模糊PID控制算法的汽车巡航控制系统。
本文对汽巡航控制系统进行了简要的分析,将模糊PID控制方法作为其控制方案,对现有的PID控制进行完善和优化,并设计出系统的模糊控制器。
以轿车为对象,分析了汽车在行驶过程中的驱动力及受到的各种阻力和干扰力,并建立起汽车纵向动力学模型。
利用MATLAB建立了系统的仿真模型,利用MATLAB软件中的模糊逻辑工具箱对系统的设计进行仿真,验证系统设计的可行性,并对汽车巡航控制系统进行了仿真和分析.由仿真结果可知,模糊PID控制方法能使系统的超调减小、反应速度加快、控制效果良好,是一种适用于汽车巡航控制系统的控制方法.关键词:定速巡航控制系统;MATLAB;模糊PID;仿真The Design of Controller of Automobile Cruise Control SystemBased On Fuzzy-PIDABSTRACTAutomobile cruise control system,which could not only relieve the drivers burden,but also could make the driving comfortable.it is a kind of accessorial driving system,Cruise control system has high nonlinearity and non-determinacy with time changing.And CCS,which is effected by some factors such as external load disturbers and complicated running modes,A kind of CCS which is based on Fuzzy PID control,it is introduced in the thesis.Analyzing the cruise control system briefly, Fuzzy—PID is confirmed as the control method of the system,improved and optimized the PID control. Then the Fuzzy PID controller is designed,As the object is a car,the thesis analyzes the resistances and disturbs while the car's running,And the automobile dynamics model is given,After setting up the model by means of MATLAB,use the Fuzzy Logic Toolbox in MATLAB software to simulate the design of the system,to verify the feasibility of the system design, the result is analyzed,From the result,we may know that Fuzzy PID control could make the overshoot smaller and the response time shorter,The effect of Fuzzy PID method is given.SO it is a suitable method for CCS.Keywords:cruise control system;MATLAB;Fuzzy PID;simulation目录1 绪论 (1)1.1 课题的意义 (1)1。
基于模糊控制的自动驾驶系统设计与实现自动驾驶技术是当前科技领域的热门研究领域之一。
基于模糊控制的自动驾驶系统设计与实现是实现自动驾驶的一种常用方法。
本文将详细介绍基于模糊控制的自动驾驶系统的设计与实现过程。
首先,基于模糊控制的自动驾驶系统设计需要考虑系统的架构和功能。
系统的架构通常包括传感器部分、感知与决策部分和执行部分。
传感器部分负责获取车辆周围环境的信息,包括摄像头、雷达、激光雷达等传感器。
感知与决策部分负责对传感器数据进行处理与分析,包括对障碍物的识别与跟踪、路径规划与决策等功能。
执行部分负责控制车辆的行驶,包括油门、刹车、转向等控制。
其次,基于模糊控制的自动驾驶系统的关键技术在于模糊控制器的设计。
模糊控制器根据输入和输出的模糊规则来控制车辆的行驶。
模糊规则的制定是整个系统设计中的关键之一。
模糊规则是通过将输入与输出之间的关系进行模糊化来定义的。
例如,如果车辆与前方的障碍物的距离较近,则需要减小车辆的速度;如果车辆处于弯道,则需要调整车辆的转向角度。
通过制定一系列模糊规则,可以根据不同的情况来调整车辆的行驶。
在模糊控制器设计中,模糊化和解模糊化是非常重要的步骤。
模糊化将输入量和输出量从连续的实数空间映射到隶属函数上。
隶属函数描述了输入量或输出量的模糊程度,常用的隶属函数包括三角函数、梯形函数等。
解模糊化则将经过模糊化的输出量映射回实数空间。
常用的解模糊化方法包括最大值法、面积法等。
通过模糊化和解模糊化的处理,可以将模糊规则转化为实际的车辆控制命令。
此外,在基于模糊控制的自动驾驶系统中,还需要考虑系统的可靠性和安全性。
自动驾驶系统需要能够在各种复杂的场景中进行准确的决策和控制,才能保证车辆的行驶安全。
同时,系统还需要具备故障容忍性,可以在传感器故障或其他系统故障的情况下继续工作。
最后,基于模糊控制的自动驾驶系统的实现需要借助于计算机技术和人工智能算法。
计算机技术提供了高性能的计算能力和大容量的存储空间,可以方便地对传感器数据进行处理和分析。
《基于模糊控制的高精度伺服速度控制器的设计与实现》基于模糊控制的高精度伺服速度控制器设计与实现一、引言随着工业自动化和智能制造的不断发展,对高精度伺服系统的速度控制提出了更高要求。
伺服速度控制器的性能直接影响着工业产品的制造质量和效率。
传统速度控制方法往往存在响应速度慢、精度低等问题。
为了解决这些问题,本文提出了一种基于模糊控制的高精度伺服速度控制器设计与实现方案。
二、系统概述本系统主要由伺服电机、编码器、模糊控制器和上位机组成。
其中,伺服电机负责执行速度控制任务,编码器实时反馈电机速度信息,模糊控制器负责处理反馈信息和进行控制决策,上位机负责与模糊控制器进行通信,并监控整个系统的运行状态。
三、模糊控制器的设计1. 模糊化处理模糊化处理是将电机速度的实时反馈值和目标值进行模糊化处理,将精确的数值转化为模糊语言变量。
这一过程包括确定模糊子集、论域和隶属度函数等。
2. 模糊规则库的设计根据系统特性和经验知识,设计合理的模糊规则库。
这些规则根据电机速度的实时反馈和目标值,决定下一时刻的控制策略。
3. 模糊推理机的实现模糊推理机是模糊控制器的核心部分,根据模糊规则库和实时反馈信息,进行模糊推理,得出下一时刻的控制决策。
4. 解模糊化处理解模糊化处理是将模糊推理结果转化为精确的控制量,以驱动伺服电机执行相应的动作。
四、伺服速度控制器的实现1. 硬件实现伺服速度控制器的硬件部分主要包括微处理器、编码器接口、电机驱动器等。
微处理器负责运行模糊控制器程序,编码器接口负责实时获取电机速度信息,电机驱动器根据控制决策驱动伺服电机执行相应的动作。
2. 软件实现软件部分主要包括模糊控制算法的实现、与上位机的通信等。
在微处理器上运行模糊控制算法,实时处理编码器反馈的电机速度信息,并根据模糊推理结果输出相应的控制量。
同时,与上位机进行通信,接收上位机的指令和监控系统的运行状态。
五、实验结果与分析通过实验验证了基于模糊控制的高精度伺服速度控制器的性能。
模糊PID基本原理及matlab仿真实现(新⼿!新⼿!新⼿!)有关模糊pid的相关知识就把⾃⼰从刚接触到仿真出结果看到的⼤部分资料总结⼀下,以及⼀些⾃⼰的ps以下未说明的都为转载内容在讲解模糊PID前,我们先要了解PID控制器的原理(本⽂主要介绍模糊PID的运⽤,对PID控制器的原理不做详细介绍)。
PID控制器(⽐例-积分-微分控制器)是⼀个在⼯业控制应⽤中常见的反馈回路部件,由⽐例单元P、积分单元I和微分单元D组成。
PID控制的基础是⽐例控制;积分控制可消除稳态误差,但可能增加超调;微分控制可加快⼤惯性系统响应速度以及减弱超调趋势。
1.1传统PID控制传统PID控制器⾃出现以来,凭借其结构简单、稳定性好、⼯作可靠、调整⽅便等优点成为⼯业控制主要技术。
当被控对象的结构和参数具有⼀定的不确定性,⽆法对其建⽴精确的模型时,采⽤PID控制技术尤为⽅便。
PID控制原理简单、易于实现,但是其参数整定异常⿇烦。
对于⼩车的速度控制系统⽽⾔,由于其为时变⾮线性系统不同时刻需要选⽤不同的PID参数,采⽤传统的PID控制器,很难使整个运⾏过程具有较好的运⾏效果。
1.2模糊PID控制模糊PID控制,即利⽤模糊逻辑并根据⼀定的模糊规则对PID的参数进⾏实时的优化,以克服传统PID参数⽆法实时调整PID参数的缺点。
模糊PID控制包括模糊化,确定模糊规则,解模糊等组成部分。
⼩车通过传感器采集赛道信息,确定当前距赛道中线的偏差E以及当前偏差和上次偏差的变化ec,根据给定的模糊规则进⾏模糊推理,最后对模糊参数进⾏解模糊,输出PID控制参数。
2.1模糊化模糊控制器主要由三个模块组成:模糊化,模糊推理,清晰化。
具体如下图所⽰。
⽽我们将⼀步步讲解如何将模糊PID算法运⽤到智能车上。
(最好⽤笔⼀步步⾃⼰写⼀遍)⾸先我们的智能车会采集到赛道的相关数据,例如摄像头车,其采集到的数据经过算法处理之后会得到与中线的偏差E,以及当前偏差和上次偏差的变化(差值)EC两个值(即此算法为2维输⼊,同理也可以是1维和3维,但2维更适合智能车)。
基于MATLAB的模糊PID控制系统的设计与仿真作者:王超蒋平来源:《电子世界》2013年第04期【摘要】在传统的PID控制基础上,本文介绍了一种基于PID模糊控制的混合型控制,通过MATLAB&Simulink软件和模糊逻辑工具箱设计控制系统结构模型.仿真结果证明,该控制方法具有更优的性能。
【关键词】模糊PID控制;MATLAB仿真1.引言在传统的控制方法中,PID控制凭借其算法简单、精度高、可靠性强、技术成熟、应用广泛的优点脱颖而出,占据了工业控制系统80%以上的份额;然而随着现代控制系统越来越复杂,精度要求也越来越高,传统、单一的控制策略已经无法满足设计性能的要求,同时,随着电子技术和计算机的发展,各种新兴的智能算法也不断涌现,将传统算法和智能算法相结合,成为现代控制系统策略选择的趋势。
作为智能控制中最重要且最有效的手段之一的模糊控制,在应对复杂系统的非线性和时变特征时有着较好的表现,因此越来越多的被应用到工程实践中,并已取得了不俗的成绩。
本文介绍的是基于传统的PID控制和现代控制理论中的智能模糊控制相结合的一种控制方法,用MATLAB&Simulink软件和模糊逻辑工具箱设计控制系统结构模型,并通过仿真结果证明该控制方法具有更优的性能。
2.PID模糊控制系统的结构3.利用MATLAB&Simulink软件进行控制仿真基于现代控制理论的模糊控制,内容比较抽象,理论性较强,比较枯燥。
另外,模糊控制是模糊集合理论、模糊语言变量以及模糊逻辑推理为基础的一种计算机控制,它处理的问题可能难以靠解析求解,需要采用复杂的数值计算方法,采用软件编程,不仅工作量大,而且过程繁杂,大大制约了控制方法的性能验证和工程实现。
MATLAB&simulink是MathWorks公司推出的当今国际控制界最为流行的面向工程和科学计算的高级语言,是公认的最为灵活和有效的仿真软件。
而且随着智能控制的迅速推广应用,MathWorks公司已经添加了智能逻辑控制工具箱,其中包括模糊控制工具箱、神经网络控制箱等热门工具。
一、设计原理设计思想:油门控制采用增量式PID 控制算法,刹车控制采用模糊控制算法,最后通过选择规则进行选择控制量输入。
选择规则:首先定义速度偏差-50 km/h ≤e (k )≤50km/h ,-20≤ec= e (k )- e (k-1)≤20,阀值e swith =10km/h 。
若:e (k )<0① e (k )>- e swith and throttlr_1≠0 选择油门控制② 否则:先将油门控制量置0,再选择刹车控制 若:0<e (k ) 先选择刹车控制,再选择油门控制 若:e (k )=0 直接跳出选择 刹车控制:刹车采用模糊控制算法1.确定模糊语言变量e 基本论域取[-50,50],ec 基本论域取[-20,20],刹车控制量输出u 基本论域取[-30,30],这里我将这三个变量按照下面的公式进行压缩离散化:)]2(2[ba x ab n y +--= 其中,],[b a x ∈,n 为离散度。
e 、ec 和u 均取离散度n=3,离散化后得到三个量的语言值论域分别为:E=EC=U={-3,-2,-1,0,1,2,3}其对应语言值为{ NB,NM,NS,ZO, PS,PM,PB } 2.确定隶属度函数E/EC 和U 取相同的隶属度函数,边界选取钟形隶属度函数,中间取三角形隶属度函数,即:E EC U(,5,1)(,3,2,0)(,3,1,1)u (,2,0,2)(,1,1,3)(,0,2,3)(,1,5)g x trig x trig x trig x trig x trig x g x ∧∧--⎧⎪--⎪⎪--⎪=-⎨⎪-⎪⎪⎪⎩说明:边界选择钟形隶属度函数,中间选用三角形隶属度函数,图像略。
实际EC 和E 输入值若超出论域范围,则取相应的端点值。
3.模糊控制规则由隶属度函数可以得到语言值隶属度(通过图像直接可以看出)如下表:表1:E/EC 和U 语言值隶属度向量表设置模糊规则库如下表:表2:模糊规则表3.模糊推理由模糊规则表3可以知道输入E 与EC 和输出U 的模糊关系,这里我取两个例子做模糊推理如下:if (E is NB) and (EC is NM) then (U is PB)那么他的模糊关系子矩阵为:1211U EC E R R R R ⨯⨯=其中,711)0,,0,5.0,1(0⨯== P R E ,即表1中NB 对应行向量,同理可以得到,712)0,,0,5.0,1,0(1⨯== P R EC , 711)0,,0,5.0,1(0⨯== P R U77210000000000005.05.00005.010)0,,0,5.0,1,0()0,,0,5.0,1(⨯⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=⨯=⨯TEC E R R 49121)0,,0,5.0,5.0,0,0,0,0,0,5.0,1,0(⨯= EC E R7491211000000005.05.00005.0100000)0,,0,5.0,1()0,,5.0,1,0(⨯⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=⨯=⨯= TU EC E R R Rif (E is NB or NM) and (EC is NB) then (U is PB)21211()E E EC U R R R R R =⨯⨯,结果略。
按此法可得到27个关系子矩阵,对所有子矩阵取并集得到模糊关系矩阵如下:)27,,2,1(21 ==i R R R R i由R 可以得到模拟量输出为:()U E EC R =⨯4.去模糊化由上面得到的模拟量输出为1×7的模糊向量,每一行的行元素(u (z ij ))对应相应的离散变量z j ,则可通过加权平均法公式解模糊:21210()(1,2,,21)()ijji iji u zz u i j u z=====∑∑从而得到实际刹车控制量的精确值u 。
油门控制:油门控制采用增量式PID 控制,即:)2()1()2()()()1()(-+---++++-=k e k k e k k k e k k k k u k u d d p d i p其中k i =kp ×ts/Ti ,d k =kp ×Td/ts 只需要设置p k 、Ti 、Td 三个参数即可输出油门控制量。
二、调整参数按照上述算法流程,应用MATLAB 进行仿真实现,在参数调试过程中采用如下方法:首先将油门和刹车分开进行调整参数,最后再将调整好的参数写入总程序中调整。
1.油门PID 参数调节油门只需要调整kp 、Ti 、Td 三个参数,根据经验,首先令Ti 、Td 为0,kp 由0逐渐增大,在增大kp 的过程可知,kp 越大系统调节时间越短并趋于稳定,在达到一定程度后,继续增大系统将出现波动。
time(s)v d ,ytime(s)v d ,ykp=0.1kp=0.4time(s)v d ,ykp=0.9调节Ti 的过程发现,Ti 对系统稳定性影响并不大,将Ti 由10增大到30的过程中系统输出没有变化。
time(s)v d ,ytime(s)v d ,yTi=10 Ti=30在给Td 赋值时,最开始从1增大,发现系统越来越不稳定,于是逐渐减小,到0.003时趋于稳定,它的可调节范围很小,随其值的减小最大误差值逐渐减小,增大则系统趋于不稳定。
time(s)v d ,ytime(s)v d ,ykp=0.001 kp=0.002time(s)v d ,ykp=0.0032.刹车调节首先,为了适应该系统,将刹车输出量限制在[-150,150]之内(最初设计其范围为[-30,30]),对于该控制,可调节参数较多,包括隶属度函数、模糊规则表、输入输出变量区间、语言值论域、模糊推理及解模糊方法等等,这里由于模糊规则需要经验设定,本算法没有实际参考,所以这里只调整规则表,其他参数固定不变。
由于实际刹车控制中对于加速采取比较单一的置零(在选择规则中设定)输出,所以在规则表中e<0部分没有规则,然而为了仿真方与此同时,将刹车的输出变量取反,以此来实现减速的效果!在调整模糊规则表的时候,必须依据输入变量e 和ec 的范围逐个检验,按照他们各自的语言值以及相应的输出语言值进行调整。
例如,初始速度为50,期望速度为0,即e=-50,ec=-50,则此时输出对应模糊规则表中第一行第一列PB ,而下一时刻ec 几乎为0,所以在调节过程中,主要进行对EC 变量的ZO 行进行调节,若响应时间短,则增大相应输出语言值,反之亦然。
仿真时,分两段,首先加速,之后减速,采用上面的模糊规则表,得到如下图像:time(s)v d ,y从图像的上升阶段分析可以看出,其加速阶段并不能达到稳态值,但对于刹车控制可以忽略其影响,而减速阶段实际上已经比较理想,我取稳态误差达到5%稳定,则此规则达到稳态的时间为7.4s ,这里尝试进行如下修改,将规则表中带下划线的部分以此改为:PM,PS,PS,ZO,即,增大了输出语言值。
则得到如下图像:time(s)v d ,y此规则达到稳定的时间为6.9s ,由此分析模糊规则的调整规则如下:若想加快响应时间,增大误差和误差变化率负大区域附近的输出语言值,并增大误差变化率零区域附近的输出语言值,可能还会引起超调量的增大,所以只需做临近语言值之间的变化。
3.整体调节此时将刹车与油门同时加到仿真模型中,分别做加速和减速仿真,依据分别调节时的规律做微量调节就可以基本达到要求。
time(s)v d ,y4.待解决问题在调试过程中发现,油门控制(PID )过程在达到稳态时出现抖动,并且三个参数对他的影响很小,具体原因待考证;油门控制给系统的输入值出现大波动,每一次达到峰值持续相同时间后变为0再持续一段时间又变为峰值;模糊控制的语言值论域较小,对于扩大语言值论域对系统的影响还有待验证;模糊控制的输入变量压缩方式有待验证其合理性;模糊控制与PID控制的相互配合,在该程序中,由于两种控制的输出控制量不同,在给到仿真系统时很难统一;油门与上车的选择规则与实际系统还存在很大的改进。
附录MATLAB仿真程序function kk=bingji(A)for i=1:49for k=1:7for j=1:26n=7*j+k;if(A(i,k)>=A(i,n))kk(i,k)=A(i,k);elseA(i,k)=A(i,n);kk(i,k)=A(i,k);endendendendfunction o=dikaer(A,n,B,N)for i=1:nfor j=1:Nif(A(i)<=B(j))C(i,j)=A(i);elseC(i,j)=B(j);endo=C;endendreturn;function T=flisan(a,b,n,x)y=(a+b)/2+(b-a)*x/(2*n);T=round(y);return;function mm=bell(x,a,b,c)z=abs((x-c)/a)^(2b);y=1/(1+z);mm=y;return;function ooo=jbing(A,B)for i=1:49for j=1:7if(A(i,j)<B(i,j))A(i,j)=B(i,j);endendooo=A;endreturn;function MM=jdikaer(A,n,B,m) for i=1:mfor j=1:nif(A(j)<B(j,i))B(j,i)=A(j);endendMM=B;endreturn;function oo=jiao(A,B)for i=1:7for j=1:7if(A(i,j)>B(i,j))A(i,j)=B(i,j);endendoo=A;endreturn;function mm=lbell(x,a,b,c)if(x<c)mm=1;elsez=(x-c)/a;v=abs(z);n=v^(2*b);y=1/(1+n);mm=y;endreturn;function L=lisan(a,b,n,x)y=2*n*x/(b-a)-n*(a+b)/(b-a); L=y;return;function UU=max(A)for i=1:7for j=1:49if(A(j,i)>=Q(i))Q(i)=A(i,j);endendUU=Q;endreturn;function sum1=mean(U)a=[-3 -2 -1 0 1 2 3];sum2=0;sum3=0;for i=1:7sum2=sum2+U(i);sum3=sum3+U(i)*a(i);endsum1=sum3/sum2;return;function mm=rbell(x,a,b,c) if(x>c)mm=1;elsez=(x-c)/a;v=abs(z);n=v^(2*b);y=1/(1+n);mm=y;endreturn;function mww=trig(x,a,b,c) if(x<=a)mww=0;elseif(x>a&&x<=b)mww=(x-a)/(b-a);elseif(x>b&&x<=c)mww=(c-x)/(c-b);elseif(x>c)mww=0;endendendendreturn;function ooo=xbing(A,B)for i=1:7if(A(i)<B(i))A(i)=B(i);endooo=A;endreturn;clear all%************************Ä£ºýËã·¨%/*********Á¥Êô¶ÈÏòÁ¿*****%P0=[1,0.5,0,0,0,0,0];%*********NBP1=[0,1,0.5,0,0,0,0];%*********NMP2=[0,0.5,1,0.5,0,0,0];%*********NSP3=[0,0,0.5,1,0.5,0,0];%*********ZOP4=[0,0,0,0.5,1,0.5,0];%*********PSP5=[0,0,0,0,0.5,1,0];%*********PMP6=[0,0,0,0,0,0.5,1];%*********PB%***********ÓïÑÔÖµ*****%NB=-3;NM=-2;NS=-1;ZO=0;PS=1;PM=2;PB=3;%/*********Ä£ºý¹æÔò±í*****%Pg=[PB PB PM PM PS ZO ZO;PB PM PM PS ZO ZO NS;PM PM PS PS ZO NS NS;PM PS PS ZO ZO NS NM;PS PS ZO ZO ZO NS NM;PS ZO ZO ZO NS NM NB;ZO ZO ZO NS NM NM NB];%/*********¸ù¾ÝÄ£ºý¹æÔò±í¼ÆËãÄ£ºý¹ØÏµ¾ØÕóR*****% R1_=dikaer(xbing(P0,P1),7,P0,7);R1_=reshape(R1_,1,49);R1=dikaer(R1_,49,P6,7);R2_=dikaer(xbing(P2,P3),7,P0,7);R2_=reshape(R2_,1,49);R2=dikaer(R2_,49,P5,7);R3_=dikaer(P0,7,P1,7);R3_=reshape(R3_,1,49);R3=dikaer(R2_,49,P6,7);R4_=dikaer(xbing(P1,P2),7,P1,7);R4_=reshape(R4_,1,49);R4=dikaer(R4_,49,P5,7);R5_=dikaer(P3,7,P1,7);R5_=reshape(R5_,1,49);R5=dikaer(R5_,49,P4,7);R6_=dikaer(xbing(P0,P1),7,P2,7);R6_=reshape(R6_,1,49);R6=dikaer(R6_,49,P5,7);R7_=dikaer(xbing(P2,P3),7,P2,7);R7_=reshape(R7_,1,49);R7=dikaer(R7_,49,P4,7);R8_=dikaer(P0,7,P3,7);R8_=reshape(R8_,1,49);R8=dikaer(R8_,49,P5,7);R9_=dikaer(xbing(P1,P2),7,P3,7);R9_=reshape(R9_,1,49);R9=dikaer(R9_,49,P4,7);R10_=dikaer(P3,7,P3,7);R10_=reshape(R10_,1,49);R10=dikaer(R10_,49,P3,7);R11_=dikaer(xbing(P0,P1),7,P4,7); R11_=reshape(R11_,1,49);R11=dikaer(R11_,49,P4,7);P45=xbing(P4,P5);R12_=dikaer(xbing(P2,P3),7,P45,7); R12_=reshape(R12_,1,49);R12=dikaer(R12_,49,P3,7);R13_=dikaer(P0,7,P5,7);R13_=reshape(R13_,1,49);R13=dikaer(R13_,49,P4,7);R14_=dikaer(P1,7,P5,7);R14_=reshape(R14_,1,49);R14=dikaer(R14_,49,P3,7);P01=xbing(P0,P1);R15_=dikaer(xbing(P01,P2),7,P6,7); R15_=reshape(R15_,1,49);R15=dikaer(R15_,49,P3,7);R16_=dikaer(P3,7,P6,7);R16_=reshape(R16_,1,49);R16=dikaer(R16_,49,P2,7);R17_=dikaer(P4,7,P0,7);R17_=reshape(R17_,1,49);R17=dikaer(R17_,49,P4,7);R18_=dikaer(xbing(P5,P6),7,P0,7); R18_=reshape(R18_,1,49);R18=dikaer(R18_,49,P3,7);R19_=dikaer(xbing(P4,P5),7,P1,7); R19_=reshape(R19_,1,49);R19=dikaer(R19_,49,P3,7);R20_=dikaer(P6,7,xbing(P1,P2),7); R20_=reshape(R20_,1,49);R20=dikaer(R20_,49,P2,7);P23=xbing(P2,P3);R21_=dikaer(P4,7,xbing(P23,P4),7); R21_=reshape(R21_,1,49);R21=dikaer(R21_,49,P3,7);R22_=dikaer(P5,7,xbing(P23,P4),7);R22_=reshape(R22_,1,49);R22=dikaer(R22_,49,P2,7);R23_=dikaer(P6,7,xbing(P3,P4),7);R23_=reshape(R23_,1,49);R23=dikaer(R23_,49,P1,7);R24_=dikaer(P4,7,P5,7);R24_=reshape(R24_,1,49);R24=dikaer(R24_,49,P2,7);R25_=dikaer(P5,7,P5,7);R25_=reshape(R25_,1,49);R25=dikaer(R25_,49,P1,7);R26_=dikaer(P6,7,xbing(P6,P5),7);R26_=reshape(R26_,1,49);R26=dikaer(R26_,49,P0,7);R27_=dikaer(xbing(P4,P5),7,P6,7);R27_=reshape(R27_,1,49);R27=dikaer(R27_,49,P1,7);m=[R1,R2,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,R13,R14,R15 ,R16,R17,R18,R19,R20,R21,R22,R23,R24,R25,R26,R27];R=bingji(m);%*************³õʼ»¯±äÁ¿e=0;ec=0;y_1=0;y_2=0;u=0;u_1=0;u_2=0;u_3=0;e_1=0;e_2= 0;Eswith=10;throttle_1=0;brake_1=0;x=[0 0 0];ts=0.001;sys=tf(1,[1,2,1],'inputdelay',0.5);dsys=c2d(sys,ts,'zoh');[num,den]=tfdata(dsys,'v');for k=1:1:40000%****************¿ØÖÆÏµÍ³time(k)=k*ts;if(k<20000)vd(k)=50;elsevd(k)=0;endy(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;e=vd(k)-y(k);ec=e-e_1;u_3=u_2;u_2=u_1;u_1=u;y_2=y_1;y_1=y(k);x(1)=e;x(2)=(e-e_1)/ts;x(3)=x(3)+e*ts;%*******************************ÓÍÃÅ¿ØÖÆkp=0.42;Ti=30;Td=0.0018;%*** vd(k)=1% kp=0.42;Ti=30;Td=0.0018;%*** vd(k)=1% kp=0.0015;Ti=0.01;Td=0.002;%***vd(k)=1*time(k)+10 % kp=0.0015;Ti=0.001;Td=0.002;%***vd(k)=1*time(k)^2+time(k)+2;ki=kp*ts/Ti;kd=kp*Td/ts;dthrottle=kp*x(1)+kd*x(2)+ki*x(3);throttle=u_1+dthrottle;if(throttle>2000)throttle=2000;endif(throttle<-2000)throttle=-2000;end%****************************ɲ³µ¿ØÖÆ%/*********ѹËõÊäÈë±äÁ¿*****%E=lisan(-50,50,3,e);EC=lisan(-20,20,3,ec);%/*********¼ÆËãʵ¼ÊÎó²î¡¢Îó²î±ä»¯ÂʵÄÁ¥Êô¶ÈÏòÁ¿*****% E_R(1)=lbell(E,1,4,-3);E_R(2)=trig(E,-3,-2,0);E_R(3)=trig(E,-3,-1,1);E_R(4)=trig(E,-2,0,2);E_R(5)=trig(E,-1,1,3);E_R(6)=trig(E,0,2,3);E_R(7)=rbell(E,1,4,3);EC_R(1)=lbell(EC,1,4,-3);EC_R(2)=trig(EC,-3,-2,0);EC_R(3)=trig(EC,-3,-1,1);EC_R(4)=trig(EC,-2,0,2);EC_R(5)=trig(EC,-1,1,3);EC_R(6)=trig(EC,0,2,3);EC_R(7)=rbell(EC,1,4,3);%/*********¼ÆËãÄ£ºýÁ¿Êä³ö*****%U_R1=dikaer(E_R,7,EC_R,7);U_R1=reshape(U_R1,1,49);U_R2=jdikaer(U_R1,49,R,7);U_R=max(U_R2);u_L=mean(U_R);%ÐèÒª¸Ä½ø%/*********¼ÆË㾫ȷÁ¿Êä³ö*****%brake=-flisan(-2000,2000,3,u_L);e_2=e_1;e_1=e;%/************************Ñ¡Ôñ¹æÔòif (e<0)if ((e>-Eswith)||(throttle_1~=0))if(throttle<=throttle_1)throttle_1=throttle;% throttle_1=throttle_1-throttle; u=throttle;Q(k)=u;W(k)=0;elsethrottle=0;throttle_1=throttle;u=throttle;Q(k)=u;W(k)=0;endelseif(throttle_1==0)brake_1=brake;u=brake;W(k)=u;Q(k)=0;elsethrottle=0;throttle_1=throttle;u=throttle;Q(k)=u;W(k)=0;endendelseif(e~=0)if(brake_1==0)throttle_1=throttle;u=throttle;Q(k)=u;W(k)=0;elsebrake=0;brake_1=brake;u=brake;endelseu=0;W(k)=0;Q(k)=0;endend%********************»-ͼÊä³öÁ¿¶¨ÒåM(k)=u;N(k)=e;%******************************³ÙÖÍ»·½Úif (time(k)<=0.5)u=0;elseu=M(k-0.5/ts);endend% »-ͼfigure(1);plot(time,vd,'r',time,y,'k','linewidth',2); xlabel('time(s)');ylabel('vd,y');legend('ÆÚÍû','ʵ¼Ê');figure(2);plot(time,Q,'r',time,W,'k','linewidth',2); xlabel('time(s)');ylabel('u');figure(2);plot(time,Q,'r','linewidth',2);xlabel('time(s)');ylabel('u');figure(3);plot(time,W,'r','linewidth',2);xlabel('time(s)');ylabel('u');figure(4);plot(time,N,'b'); xlabel('time£¨s£©'); ylabel('e');。