模糊控制作业C语言.doc

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

模糊控制作业

机研112张营章学号:201120122044

题目:设计一个两个输入,单输出的模糊控制器。

设计的二维模糊控制器的结构如图1所示。在此控制器中两个输入为机器人与障碍的距离D和机器人所处的环境类型T,输出为转角B。

控制器结构

与障碍距离A

移动机器人输出转角B

障碍物情况T

图1.二维模糊控制器结构

语言变量

取A的模糊子集〔5个〕:

很近近中远很远

分别简记为:VNNMFVF

取T的模糊子集〔8个〕为〔以障碍物与机器人方向为准〔如图2所示〕〕

右左右前左前前左右死胡同无

分别简记为:TMACROBUTTONMTEditEquationSection2SEQMTEqn\r\hSEQMTSec\h1T2T3T4T5T6T7T8

取B的模糊子集〔9个〕为:

左快转左转直行右转右快转

分别简记为:1L2L3L4L5S6R7R8R9R

计算论域确定

A的计算论域:[-2,+2]T的计算论域:[1,8]B的计算论域:[-4,+4]

确定隶属函数

障碍距离A(in)隶属函数为(高斯型):

μVN=equalzero(exp(-(in+2)*(in+2)/(0.5*0.5*2)));

μN=equalzero(exp(-(in+1)*(in+1)/(0.45*0.45*2)));

μM=equalzero(exp(-in*in/(0.4*0.4*2)));

μF=equalzero(exp(-(in-1)*(in-1)/(0.45*0.45*2)));

μVF=equalzero(exp(-(in-2)*(in-2)/(0.5*0.5*2)));

转角大小G(x)隶属度函数为(三角形)

障碍物情况T(y)的隶属函数为:

[1,8]

制定模糊控制规那么并建立模糊控制表

基于操作者手动控制策略,得出如下表所示的40条控制规那么。

A/B/T

T1

T2

T3

T4

T5

T6

T7

T8

VN

1L

9R

1L

9R

2L

5S

5S

5S

N

2L

8R

1L

9R

3L

5S

5S

5S

M

3L

7R

2L

8R

4L

5S

5S

5S

F

4L

6R

3L

7R

5S

5S

5S

5S

VF

5S

5S

3L

6R

5S

5S

5S

5S

控制规那么表

将上表的40条控制规那么用语言描述为:

QUOTEIfAisVNandTisT1thenBisSIFAisViandTisTithenBis

例如控制规那么的第一条语句:IfAisVNandTisT1thenBisS

由这条语句所确定的模糊关系可用下式写出:

R=(VNA×SB)·(T1T×SB)

如果实际距离为a,实际环境为t,那么由上市可以算出控制量为

B1=a·(VNA×SB)·t·(T1T×SB)

那么根据40条控制规那么得到的控制量输出为:

B=B1+B2+B3+B4+…+B40

对于上式,由于t与T1为量化向量,所以有:

当t=T1时上式等效于:B1=a·(VNA×SB)

当t≠T1时:B1=0

同时t=T1的式子等效于:B1=μVN(a)×SB

故求解过程简化为:障碍类型t后,每种类型t对应五条控制规那么,那么分别求出B1~B5:

B=B1+B2+B3+B4+B5

对应取大即可得到控制向量,最后解模糊即可。

基于C++所编写的控制程序工程见附件。

运行例如如下:〔距离-1.3,障碍类型:右边有障碍物〕

显示控制向量的输出曲线(输出曲线使用vc++的easyx开源库)为:

由上图可知,输出曲线为单峰,较陡,符合控制逻辑。

附录:程序

#includemath.h

#includestdio.h

#includeiostream.h

#includegraphics.h//就是需要引用这个图形库

#includeconio.h

doubleJJ[21]={-5,-4.5,-4,-3.5,-3,-2.5,-2,-1.5,-1,-0.5,0,0.5,1,1.5,2,2.5,3,3.5,4,4.5,5};

voidcomparesmall(doublea,double*p,intlength)

{

for(inti=0;ilength;i++)

{

if(ap[i])

{

p[i]=a;

}

}

}

doubleequalzero(doublex)

{

if(x0.1)return0;

elsere

文档评论(0)

寒傲似冰 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8071104010000026

1亿VIP精品文档

相关文档