linlin820 发表于 2008-9-15 08:52

模糊控制仿真学习总结(转贴)

1.模糊控制属于智能控制里用的比较广范的一种,本人这几日学习了一点皮毛,总结如下。模糊控制的控制方法其实又很多种,这里介绍的是基本模糊控制器。所有有关模糊控制的书都会介绍这中控制器,我只是介绍若干关键步骤,别提供一个调试好的Matlab下simulink仿真例子,希望对一些初学者有帮助。大家一起进步嘛!:)
2.先看我自己设计的simulink模型图1以及控制性能图2。





图1 模糊控制一阶系统simulink模型



图2模糊控制效果图说明:
a.控制对象为一阶系统,目的是为了简单,调通后可以修改控制对象,控制参数体会各个量对控制效果的影响。
b.一阶系统直接施加输入,如图1所示的控制对象,上升时间会很大。完全可以使用PID控制使控制效果满足需要。这里使用模糊控制来代替PID控制器。比较一下!
3.模糊控制器设计
          模糊控制器的计算量是非常大的,我不从数学推导介绍。讲一下利用matlab的模糊工具箱(Fuzzy logicaltoolbox)建立基本模糊控制器的方法。在命令行输入fuzzy,就可以进入模糊推理系统编辑器(fiseditor)。利用这个工具制作一个*.fis的文件。这个文件就是模糊控制器的核心!在simulink中和以往进行PID控制一样建立模型。如图1,在simulink的库里点击Fuzzy Logical toolbox,拖一个Fuzzyl logical controller withrule viewer,双击这个环节,在弹出的对话框的fis Matrix里填入你自己起的*.fis的名字,不需输入后缀fis。
       在设计模糊控制器(*.fis)前,要想好,你设计的控制器需要几个输入,几个输出。比如,本例中拟采用偏差E和偏差变化率Ec这两个量作为模糊控制器的输入,模糊控制器有一个输出。很明显,这是利用模糊控制器代替PD控制的。对应的模糊控制器的设计也要具有两个输入一个输出。
4.利用matlab的Fuzzy logical toolbox 设计模糊控制器(生成*.fis文件)的关键步骤:
      a.添加输入输出。先发张图3!



   图3.fis编辑器                默认的具有一个输出,添加第二个输入,并且分别命名为E,Ec,U。   b.确定隶属函数。双击黄色和绿色的方框就可以进入隶属函数编辑对话框了。设置E,Ec的range为[-6,6],u的range为[-1,1]。然后每一个变量再添加4个输入隶属函数,总共7个。matlab提供了11种隶属函数,第一次用选择常用的三角形trimf,区别不大的。三角形隶属函数有三个点确定,其实是三角形底边两个端点和中点。       c.确定模糊规则。模糊控制的书会介绍很多方法,最常用的是根据自己经验。直接找本书,从上面找一个也行。只要理解就行了。真个规则按照上面的隶属函数设定会有49条,组成一张表。


图4 控制规则表按照这张表设置模糊规则很容易,不是本文的重点。不多做介绍!d.完毕。在任何窗口导出到磁盘,生成*.fis(如myexample.fis)即可。5.分析         不要以为模糊控制可以模糊到弄个差不多就可以控制了。不是的!图1中这个仿真中用到了3个系数,Gain,Gain1,Gain2。调整这三个系数都会对整个控制效果有很大影响。分别改变三个参数看看对控制性能的影响。






图5 参数对模糊控制的影响说明:a.很明显发这三个参数对控制器的性能有很大的影响,所以不要指望,基本模糊控制器可以实现不用人工调整就可以。b.三个参数中Gain类似于PD控制中的P,过小则稳态误差大,上升时间长。过大,稳态误差小了,上升时间小了,但是出现超调,继续增大则出现振荡。c.参数Gain2类似于PD控制中的D,可以调整系统的"阻尼"。对于电容-电阻电路,传递函数分母为Ts+1,T=RC为系统的时间常数。修改Gain2可以改善系统的时间常数,使上升时间减小或增加。其作用相当于改变电容大小,放电时间减小或增大。对于机械的弹簧-阻尼系统,T=f/k,调整D相当于改变f。由仿真知,Gain2可以从负到正改变,值越大,系统的上升时间越大,响应越慢。当改为负值时,系统地上升时间越来越小,以至于阻尼太小,发生振荡。d.参数Gain1可修改的范围比较大。对系统的影响相对较小。它是对误差E的放大,或缩小,只要合适就行了。6.注意事项      在仿真中使用matlab7.0,模糊控制工具箱,一运行就出错,提示一个max控件不能接受boolean输入,这需要改两个地方,第一,把前面的<=的输出设置为int8类型,第二,修改max环节的一个选择框,需要输入输出类型相同,不要选择。还有一个是仿真中要加零阶保持器。否则,系统当连续系统运行,很慢地!在控制器设计中使用的如图4的控制规则,仔细点分析就会发现,当误差E为负大,即指令值小于实际值时,此时应该减小输出值。但是控制规则输出为正大即加大输出,因此在仿真中使用了反馈为正,输入为负。只因为我最初没有仔细看,设计完了才发现,又懒得改,因此就将就一下,其实应该修改控制规则。7.感悟      在很多的控制系统中,bu是采用这种方式的,都是离线的计算一张所谓控制表。它与控制规则表类似。因为大多控制器采用单片机或DSP,这样从头到尾计算量太大。控制表使用时,检测到输入和输出,把它归为正大正小这些等级,四舍五入也好,别的方法也行,就丢失一些信息,换来速度,直接查表,也是一个数,把这个输作为控制量。整个过程完全就是精确控制,盗用模糊控制的名字而以。       由分析可知,选择E,Ec的基本模糊控制基本就是PID控制效果,因为没有选择E积分,稳态误差没法消除。所以可以用PID控制的,再使用模糊控制就没有什么意思了。只是用来学习一下思路。       模糊控制真正的那些不能用PID的场合发挥作用。比如洗衣机,找不到数学模型时候,才能发挥它的魅力所在。我看过使用模糊控制控制四节倒立摆的视频。

全文完!                                                   2006年4月18Ly于NEU




本贴转自:http://blog.gkong.com/more.asp?name=motioncontr&;id=6453

Eriketan 发表于 2008-10-9 15:23

:handshake 好帖!

bikongqingxue 发表于 2008-10-18 16:03

帖子很好。顶一下,
能留下联系方式吗,我的模糊控制碰见一点问题想请教一下,QQ号码或邮箱,谢谢

guiguihong 发表于 2008-12-7 20:11

三个参数有没有什么好方法能去调,如果一个一个修改,很费时,有没有什么好的经验啊?还有一个问题,精确量模糊化和后面输出结果的反模糊化,这两步到底是怎么来实现的啊。参考书但是感觉不是很理解。

马赛回转 发表于 2008-12-12 17:05

模糊化处理其实就是乘以一个系数,使模糊控制器的输入在你设定的模糊论域之内,比如〔-6,6〕.至于这个系数就与你的实际误差或误差变化有关了。比如实际误差在〔-10,10〕,那么该系数取0.6才能满足模糊化后在〔-6,6〕范围内,清晰化就是逆过程,就不说了

yymbluesky 发表于 2009-1-2 21:52

自己做过后 再看这篇帖 简直受益匪浅

retin 发表于 2009-1-6 11:52

呵呵,文的作者所说的四节倒立摆视频就是最初北师大的某教授的视频,呵呵~

bruceleeren 发表于 2009-1-7 22:51

真是好帖子 只可惜我用不到 支持你

LuckyLark 发表于 2009-2-25 14:53

好贴~zhichiyixia

piqiang2008 发表于 2009-2-27 14:46

运行后错误:
Error in 'untitled1/Fuzzy LogicControllerwith Ruleviewer': Parameter 'fuzzyexample1' cannot be evaluated.MATLAB error message: Undefined function or variable 'fuzzyexample1'.
fuzzyexample1是我起的名字

是怎么回事

piqiang2008 发表于 2009-2-27 14:54

解决了好了!!!

lihuay 发表于 2009-3-7 23:06

thanks for sharing, it's too usful

g200407331 发表于 2009-4-7 12:41

老兄,你太好了,呵呵。

hank1986 发表于 2009-5-3 13:00

很棒的帖子,学习了。

taojiangdang 发表于 2009-5-29 00:51

谢谢很好的贴子 做模糊控制 我来回研究好几遍全靠它
谢谢
页: [1] 2
查看完整版本: 模糊控制仿真学习总结(转贴)