资源预览内容
第1页 / 共15页
第2页 / 共15页
第3页 / 共15页
第4页 / 共15页
第5页 / 共15页
第6页 / 共15页
第7页 / 共15页
第8页 / 共15页
第9页 / 共15页
第10页 / 共15页
亲,该文档总共15页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
基于模糊控制的速度控制基于模糊控制的速度控制地面智能移动车辆速度控制系统地面智能移动车辆速度控制系统问题描述问题描述利用模糊控制的方法解决速度跟踪问题,即已知期望速度(desire speed),控制油门 (throttle output)和刹车(brake output)来跟踪该速度。已知输入:车速和发动机转速(值可 观测) 。欲控制刹车和油门电压(同一时刻只有一个量起作用) 。算法思想算法思想模糊控制器是一语言控制器,使得操作人员易于使用自然语言进行人机对话。模糊控 制器是一种容易控制、掌握的较理想的非线性控制器,具有较佳的适应性及强健性 (Robustness)、较佳的容错性(Fault Tolerance)。利用控制法则来描述系统变量间的关系。不 用数值而用语言式的模糊变量来描述系统,模糊控制器不必对被控制对象建立完整的数学 模式。Figure 1 模糊控制器的结构图模糊控制的优点:(1)模糊控制是一种基于规则的控制,它直接采用语言型控制规则,出发点是现场操 作人员的控制经验或相关专家的知识,在设计中不需要建立被控对象的精确的数学模型, 因而使得控制机理和策略易于接受与理解,设计简单,便于应用。 (2)由工业过程的定性认识出发,比较容易建立语言控制规则,因而模糊控制对那些数 学模型难以获取,动态特性不易掌握或变化非常显著的对象非常适用。 (3)基于模型的控制算法及系统设计方法,由于出发点和性能指标的不同,容易导致较 大差异;但一个系统语言控制规则却具有相对的独立性,利用这些控制规律间的模糊连接, 容易找到折中的选择,使控制效果优于常规控制器。 (4)模糊控制是基于启发性的知识及语言决策规则设计的,这有利于模拟人工控制的过 程和方法,增强控制系统的适应能力,使之具有一定的智能水平。 简化系统设计的复杂性,特别适用于非线性、时变、模型不完全的系统上。 模糊控制的缺点1.模糊控制的设计尚缺乏系统性,这对复杂系统的控制是难以奏效的。所以如何建立 一套系统的模糊控制理论,以解决模糊控制的机理、稳定性分析、系统化设计方法等一系 列问题;2.如何获得模糊规则及隶属函数即系统的设计办法,这在目前完全凭经验进行;3.信息简单的模糊处理将导致系统的控制精度降低和动态品质变差。若要提高精度则 必然增加量化级数,从而导致规则搜索范围扩大,降低决策速度,甚至不能实时控制;4.如何保证模糊控制系统的稳定性即如何解决模糊控制中关于稳定性和鲁棒性问题。实现步骤以及算法实现步骤以及算法利用一般控制系统的架构,其中包含五个主要部分:定义变量、模糊化、知识库、逻辑判断及去模糊化,下面将就每一部分做简单的说明:(1) 定义变量定义变量也就是决定程序被观察的状况及考虑控制的动作,控制变量的选择要能够具有系统特性,而控制变量选择是否正确,对系统的性能将有很大的影响。在此控制问题上,输入变量有速度误差和实际速度,而控制变量则为下一个状态之输出油门和刹车。作为模糊控制器的语言变量,而如何选择则有赖工程师对于系统的了解和专业知识而定。因此,经验和工程知识在选择控制变量时占有相当重要的角色。(2) 模糊化(模糊化(fuzzify)将输入值以适当的比例转换到论域的数值,利用口语化变量来描述测量物理量的过程, 依适合的语言值(linguistic value)求该值相对之隶属度,此口语化变量我们称之为模糊子 集合(fuzzy subsets) 。当控制变量确定之后,接下来就是根据经验写出控制规则,但是在 做成模糊控制规则之前,首先必需对模糊控制器的输入和输出变量空间做模糊分割。 本案例中输入空间有两个变量,可以用三个或五个模糊集合对空间做模糊分割,划分 成三个或五个区域。由于程序实现的复杂性,暂时设置为三个。模糊分割时各领域间重叠的程度大大地影响控制的性能;一般而言,模集合重叠的程度并没有明确的决定方法,目前大都依靠模拟和实验的调整决定分割方式,不过有文献提出大约 1/31/2 最为理想。重叠的部份意味着模糊控制规则间模糊的程度,因此模糊分割是模糊控制的重要特征。由于隶属度函数是连续型的,这里采用高斯型的隶属函数。Figure 2 速度误差的隶属度函数即的隶属度函数分别为:v110()26120()26130()261 0=0) endendux2=exp(-0.5)*(x-20)/6).2);if (x=30)ux3=1;endendif (x-10)ux1=1;else if (x-30)endenduy2=exp(-0.5)*(y-20)/6).2);if (y=30)uy3=1;endenduygroup=uy1,uy2,uy3;b=sort(uygroup);b1=b(3);b2=b(2);k1,l1 = find(uygroup=b(3);k2,l2 = find(uygroup=b(2);uy01=uygroup(l1);uy02=uygroup(l2);z=1:1:460;%output1uz=0;%degree of membership of throttle;uz1=exp(-0.5)*(z-150)/54).2);uz2=exp(-0.5)*(z-300)/54).2);uz3=exp(-0.5)*(z-450)/54).2);uzgroup=uz1;uz2;uz3;%max-min%minposition1=uxy1(j1,l1);min1=min(ux01,uy01);min1=min1(1);min11=min(min1,uzgroup(position1,:);position2=uxy1(j1,l2);min2=min(ux01,uy02);min2=min2(1);min12=min(min2,uzgroup(position2,:); position3=uxy1(j2,l1);min3=min(ux02,uy01);min3=min3(1);min13=min(min3,uzgroup(position3,:); position4=uxy1(j2,l2);min4=min(ux02,uy02);min4=min4(1);min14=min(min4,uzgroup(position4,:); %maxminall=min11;min12;min13;min14;maxminvalue=max(minall);uoutput=max(maxminvalue);ss,ss1 = find(maxminvalue=uoutput); output1=mean(ss1);%throttle output和brake output%b=1:1:30;%output2ub=0;%degree of membership of brake;ub1=exp(-0.5)*(b-8)/6).2);ub2=exp(-0.5)*(b-16)/6).2);ub3=exp(-0.5)*(b-24)/6).2);ubgroup=ub1;ub2;ub3;%max-min%minposition5=uxy2(j1,l1);min5=min(ux01,uy01);min5=min5(1);min15=min(min5,ubgroup(position5,:);position6=uxy2(j1,l2);min6=min(ux01,uy02);min6=min6(1);min16=min(min6,ubgroup(position6,:);position7=uxy2(j2,l1);min7=min(ux02,uy01);min7=min2(1);min17=min(min7,ubgroup(position7,:);position8=uxy2(j2,l2);min8=min(ux02,uy02);min8=min8(1);min18=min(min8,ubgroup(position8,:);%maxminall02=min15;min16;min17;min18;maxminvalue02=max(minall02);uoutput2=max(maxminvalue02);ss01,ss102 = find(maxminvalue02=uoutput2);output2=mean(ss102); %brake output%if (x0)output2=0;elseoutput1=0;endC 程序程序#include #include double max(double i,double j) return ij?i:j; double min(double i,double j) return ixy; if(x0 px1=1-1; ux02=ux2; px2=2-1; else ux01=ux1; px1=1-1; ux02=ux3; px2=3-1; else ux01=ux3; px1=3-1; ux02=ux1; px2=1-1; else if(ux2ux3) if(ux1ux3) ux01=ux2; px1=2-1; ux02=ux1; px2=1-1; else ux01=ux2; px1=2-1; ux02=ux3; px2=3-1; else ux01=ux3; px1=3-1; ux02=ux2; px2=2-1; cout0 py1=1-1; uy02=uy2; py2=2-1; else uy01=uy1; py1=1-1; uy02=uy3; py2=3-1; else uy01=uy3; py1=3-1; uy02=uy1; py2=1-1; else if(uy2uy3) if(uy1uy3) uy01=uy2; py1=2-1; uy02=uy1; py2=1-1; else uy01=uy2; py1=2-1; uy02=uy3; py2=3-1; else uy01=uy3; py1=3-1; uy02=uy2; py2=2-1; cout=uoutput) uoutput=maxvaluez; j=z; cout“uoutput=“uoutput“位置为“jendl; k=0; sumj=0; for(z=0;z=459;z+) if(maxvaluez=uoutput) sumj+=z; k=k+1; output1=sumj/k; cout“output1=“output1endl;
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号