(VR虚拟现实)虚拟设计
摘要
虚拟设计是近年来发展起来的一个新的研究领域,智能控制虚拟实验室则是智
能控制教学上的一个很好的工具。鉴于传统实验室需要的设备,资金,场地等问题,
利用虚拟实验室进行实验教学能够很大程度上的节约成本,同时用户在计算机前就
能完成实验,查看实验结果,也能提高效率,节省时间。
本课题主要是建立可以进行智能控制虚拟实验,其模拟的是天煌教仪生产的
“THJ-2型高级过程控制系统实验装置”。本设计由三个主要部分构成:虚拟实验室
的3D造型、智能控制实验仿真、图形用户界面(GUI)。
在具体的实现过程中,利用VRML语言完成虚拟实验室3D模型的建立;通过MATLAB
的强大数据处理功能实现了BP神经网络控制实验的仿真和GUI的设计;最后利用
MATLAB对系统进行封装,形成独立的可执行程序。用户可通过封装程序界面打开GUI
界面,在GUI界面中进行实验,设置参数,并能够察看系统的仿真曲线,实现虚拟实
验的效果。
关键字:虚拟实验室、VRML、BP神经网络、MATLAB
Abstract
Virtualdesignisdevelopedinnewareaofresearchinrecentyears,VirtualInte
nviewoftheneedfortraditionallaboratoryequipment,funds,spaceandotherissue
s,usingvirtuallaboratoryforexperimentalteachinginalargeextentthecostsavi
ngs,whilepeoplewillbeabletobepletedtheexperimenttoseeresults,butalsoimpr
oveefficiency,savetimebyusingputer.
Themainissueistheestablishmentofavirtualintelligentcontrolcanbesimul
atedlaboratoryequipmentis“THJ-2advancedprocesscontrolsystemexperimental
”:the3DVirtualLa
boratorymodeling,thesimulationofintelligentcontrol,thegraphicaluserinter
faces(GUI).
Therealizationofthespecificprocess,byusingofVRMLlanguagetopletethevi
rtual3Dmodellaboratory;throughMATLAB'spowerfuldata-processingfunctionsto
doaBPneuralnetworkcontrolexperimentsimulationandmakeGUIdesign;thefinal,u
scanopentheGUIinterfacepackageinterface,theGUIinterfaceintheexperiment,s
etparameters,andbeabletoseethesimulationcurve,theeffectofvirtualexperime
nts.
Keywords:VirtualLaboratory,VRML,BPneuralnetworkcontroller,MATLAB
目录
第 1章引言 1
课题的研究背景及研究目地 1
虚拟实验室的介绍 3
虚拟实验室的概念 3
虚拟设计的技术基础3
虚拟设计的特点4
虚拟设计的优点5
课题研究的主要内容 5
第 2章 VRML虚拟实验设备设计 7
技术基础知识 7
技术概述 8
文件组成8
节点简介8
实验装备简介 11
虚拟实验室的设计 11
部分元件设计及程序.11
由零件组成控制面板的小单元14
各控制单元组成完整的控制面板16
第 3章神经网络理论 17
神经网络理论概述 17
神经网络 18
第 4章基于 MATLAB的 BP神经网络控制器的设计及其实验仿真 20
基于 BP神经网络控制器的设计 20
-PID控制实验仿真 23
简介.23
-PID控制实验仿真24
图形用户界面(GUI)的设计 32
图形用户界面简介.32
图形用户界面实现的功能34
图形用户界面的实现过程34
系统封装 37
封装目地.37
封装具体过程38
第 5章结论 39
参考文献 40
致谢 41
附录一 VRML设计部分程序 42
附录二 MATLAB设计 GUI程序 46
第一章 引言
近些年来,迅速发展的计算机硬件技术与不断改进的计算机软件系统相匹配,使得
基于大型数据集合的声音和图像的实时动画制作成为可能;人机交互系统的设计不断创
新,新颖、实用的输入输出设备不断地进入市场。而这些都为虚拟现实系统的发展打下
了良好的基础。同时,虚拟现实技术也逐渐从飞行仿真、战争应用到教育、科研、娱乐、
建筑、医疗、工业等各个方面。
课题的研究背景及发展方向
有人认为,80年代是个人计算机时代,90年代是多媒体时代,21世纪初则是虚拟现
实技术时代。而虚拟现实技术的诞生可以追溯到上个世纪的六十年代。1965年,
IvanSutherland在篇名为《TheUltimateDisplay》(终极的显示)的论文中首次提出了
包括具有交互图形显示、力反馈设备以及声音提示的虚拟现实系统的基本思想,从此,
人们正式开始了对虚拟现实系统的研究探索历程。
1966年,美国MIT的林肯实验室正式开始了头盔式显示器HMD的研制工作。在这第一
个HMD的样机完成不久,研制者又把能模拟力量和触觉的力反馈装置加入到这个系统中。
1970年,出现了第一个功能较齐全的HMD系统。
1984年,WilliaGibson写了一本名为Neuro-mancer的书,书中幻想计算机用户可以
把自己的脑神经网络接入计算机,这样用户便可以神游于由计算机模拟成的虚拟世界中。
他把这个世界称为“控制空间”(CyberSpace)。在这以后,人们又提出了“虚拟现实”。
“人工现实”、“远程现场控制”等设想,统称为虚拟现实技术。
基于从60年代以来所取得的一系列成就,美国的VPL公司的创建者JaronLamer在80
年代初最后确定以虚拟现实(VirtualReality)一词作为这一领域的专用术语。
80年代,美国宇航局(NASA)及美国国防部组织了一系列有关虚拟现实技术的研究,
并取得了令人瞩目的研究成果。1984年,NASAAmes研究中心虚拟行星探测实验室的
和博士组织开发了用于火星探测的虚拟环境视觉显示器,将火
星探测器发回的数据输入计算机,为地面研究人员构造了火星表面的三维虚拟环境。
1990年在美国Dallas召开的Siggraph的会议上,对VR技术进行了讨论,明确提出了
VR技术的主要内容是:实时三维图形生成技木、多传感器交互技术,以及高分辨率显示
技术,为VR技术的发展确定了研究方向[1]。
1、协作式虚拟实验室[2]
协作技术分为两个主要部分:信息共享技术和通信技术。通信技术现阶段已比较成
熟,而信息共享技术则比较难以实现,因为它一方面要求实现复杂数据类型的转换;另
一方面,它还没有较好的群件。原因一是CSCW(puterSupportedCooperativeWork)尚
处未成熟阶段;二是协作任务的不同,开发一套普遍适用的规则较难。
因此,协作式虚拟实验室的目标设计很重要,其目标就是要减少地域障碍,使学生
能在网上一起进行科学实验和讨论。在协作式虚拟实验室中,每个用户都有一个特定的
个人域并共享一个群域,通过这种方式,个人和小组工作既可以个别发生,又可以同时
发生。
图1-1协作式虚拟实验室原理图
麻省理工学院针对虚拟实验室中的协作效果进行了对比性研究,将21个使用过
WebLab的MIT本科生分成三组:单独组、协作组和指导组。实验结果表明:人们独自工
作时速度快,与他人协作时速度慢,但正确率比单独组高。因为在与他人协作时,实验
是以讨论的方式展开的,提出自己的解决方法,通过交流、讨论和验证各自的观点,最
终得出正确的解决方案。
2、自适应虚拟实验室[2]
在日常语言中,“自适应”是指生物变更自己的习性以适应新的环境的一种特征。
直观地说,“自适应实验”即指能修正自己的特征以响应规则原理的变化,并根据学习
者的学习过程生成一个反馈回路,为学习者提供一个自适应的获取知识和技能的实验学
习环境。
自适应实验室系统原理框图如图1-2所示,假定系统的输入r,经过预处理单元处理
后其输出为yu,当被控对象结构变化或参数偏离时,自适应机构根据参考模型输出与被
控对象输出之差及其变化,产生一个自适应信号,调整前馈、反馈调节器,使其参数收
敛,即e=yu-yd→0。
图1-2自适应虚拟实验室原理图
虚拟实验室增强并扩展了实验教学的功能,以前所未有的方式将学生和实验仪器联
系起来,为学生提供了一种崭新的实验方式。在使用虚拟实验室的过程中,如果能把模
拟的与真实的相比较,加强学习者之间的相互合作,并注重激发学习者的兴趣、促使其
进行探究,那必将会产生巨大的教育价值。
虚拟实验室的介绍
虚拟实验室的概念
虚拟实验室可以说是教育领域应用信息技术的一种创新:允许人们访问和使用自己
没有的设备资源,使得处于不同地理位置的学习者可以同时对一个实验项目进行实验工
作,可以接触最新的仪器。
目前,有关虚拟实验室的定义主要有两种[3]:
——所谓虚拟实验是指在计算机系统中采用虚拟现实技术实现的各种虚拟实验环
境,实验者可以像在真实的环境中一样完成各种预定的实验项目,所取得的学习或训练
效果等值于甚至优于在真实环境中所取得的效果。
——虚拟实验室是一个创造和引导模拟实验的交互环境:即实验场所。它由实验所
依赖的模拟程序、实验单元、工具和参考资料组成。用户可以通过增加新的物体、建立
新的实验并把它们转化成超文本文件来扩充实验室。
虚拟设计的技术基础
虚拟设计是在虚拟现实技术的基础上产生的,其技术基础是“虚拟现实”[4]。虚拟
现实(VirtualReality,简称VR)是指综合利用计算机图形系统和各种显示、控制等接口
设备生成的给人多种感官刺激和交互性操作的虚拟环境(Virtua1Environment),是一种
高级的人机交互系统。虚拟现实技术是一门由多学科交叉形成的一个全新的研究领域,
汇集了计算机图形学、多媒体技术、人工智能、人机接口技术、传感器技术、仿真、微
电子、高度并行的实时计算技术和人的行为学研究等多项关键技术,是这些技术高层次
的集成和渗透。
虚拟现实的功能有:给用户制造一个三维现实世界的感觉;使用户能够与界面中的
环境交互,并能在其中动作,使用户能直接和界面中的图形实时地交互,用户作为界面
中的主人在虚拟世界中遨游;用户能从任意的观察点来观察他所想看到的物体,改变物
体的位置和方向,控制物体的行为和外形,对界面中的物体进行评价而不需要预先编程。
从本质上讲,虚拟现实系统是一种高级的多通道人机交互系统,它对沉浸式系统要求采
用自然方式的交互操作,对于非沉浸式系统也可使用常规交互设备进行交互操作。
虚拟现实的概念模型如图1-3所示:
图1-3虚拟现实的概念模型
因此,人机交互是虚拟现实的核心,它强调的是人、机两者之间的交互操作,即反
映出人在虚拟世界(环境)的体验。虚拟现实技术潜力巨大,应用前景十分广阔,越来越
多地被应用于科学研究,已被认为是重要的科学探索工具。利用这项技术,在新产品、
新计划或新概念还远没有成为现实之前,人们就能够以较为现实的方式对其进行观察和
探索。从这个意义上讲,虚拟现实技术是一种非常独特的技术,很难有别的技术可以取
而代之。虚拟设计是虚拟现实技术在机械产品设计方面的一个应用。
虚拟设计的特点
一个完整的虚拟现实系统应包含一个逼真的三维虚拟环境和符合人们自然交互习
惯的人机交互界面,具有以下几个特点:
(1)多感知性(MultiSensory)VR系统具有感知视、听、触嗅、味觉及运动等多种信
息的能力。
(2)沉浸感(Immersion)指用户感到作为主角存在于虚拟环境并与其“融合”的真实
程度。
(3)交互性(Interaction)指用户通过交互设备对虚拟环境中对象的可操作程度和
从环境得到反馈的自然程度。
(4)自主性(Autonomy)指虚拟环境中物体可按各自的模型、属性和规则自主运动,
即虚拟环境中的物体应具有与在现实世界中相同的物理属性。例如,当受到力的推动时,
物体会向力的方向移动,或翻倒、或从桌面落到地面等。
(5)多信息通道性虚拟设计时,用户除了通过视觉感受虚拟原型的信息外,还可以
通过听觉、触觉、嗅觉等其它信息通道来接受信息。在交互时,除支持普通的键盘、鼠
标外,还支持三维鼠标、跟踪球、操纵杆、数据衣、数据手套、声音命令、动作、目光
等其它交互设备和手段,支持更多的设计行为(建模、仿真、修改、评估、预测等)。
(6)实时性虚拟设计时,设计者作为虚拟环境的参与者,与虚拟环境融为一体,可
以随意观察想观察的对象,改变物体的位置和方向,控制物体的行为和外形,并立即得
到相应的响应,具有所见即所得的实时性。
(7)高效率传统的产品开发制造需要从“试设计—样机制作—实验评价—产品设计”
反复循环,需要反复制造与实验物理样机,时间长,成本高、效率低、风险大。采用虚
拟设计后,它的“设计—加工—装配—评价”等阶段都可以在虚拟环境下进行,时间短、
成本低、效率高,风险小,可以迅速对市场的需要做出反应。例如,波音777飞机的设
计,由于采用了虚拟设计,对比以往的飞机设计,公司节省了94%的花费,减少了93%的
设计更改,而且使模具的设计精度提高了10倍,从而大大降低了费用,同时使制造周期
缩短了近一半。
虚拟设计的优点
虚拟设计具有以下优点:
(1)虚拟设计继承了虚拟现实技术的所有特点。
(2)具备仿真技术的可视化特点,便于随时改变输入变量实时仿真实验结果。
(4)支持Internet互联,利于资源共享和优势互补,随时随地更改参数并进行实验。
(5)便于利用和补充各种先进技术,保持技术上的领先优势。
课题研究的主要内容
智能控制虚拟实验室的功能是让学生在网络环境中进行智能控制实验。本设计最终
目标是完成智能控制虚拟实验室的BP神经网络控制器的设计。建立起一个虚拟实验室,
用户能够通过该实验室进行BP神经网络整定PID控制实验。按照这种要求设计的智能控
制虚拟实验室主要由三部分组成:虚拟实验室与实验设备的3D视觉效果、智能控制系统
设计、各实验图形用户界面设计(GUI)。
图1-4系统整体框架图
图1-4中的虚拟设备由VRML进行创建;控制系统和控制算法使用Matlab进行设计;
设计各实验的图形用户界面将虚拟实验设备和智能控制系统联系在一起;最后用MATLAB
制封装整个系统,形成一个完整的模块。
第二章VRML虚拟实验设备设计
在虚拟设计中,虚拟环境系统的设计很重要。VRML虚拟实验设备,是这次课题的所
要模拟的实验装备,即学生做试验的实验装备。本课题选用了“THJ-2型高级过程控制
系统实验装置”作为模拟的实验设备,下面介绍VRML实验室的建立过程,及现阶段完成
部分。
技术基础知识
技术概述
VRML是虚拟现实建模语言(即VirtualRealityModelingLanguage)的简称,是SGI公
司开发的一种3D造型和渲染的图形描述性语言,1997年12月被国际标准化组织
ISOJYCI/SC24委员会认定为国际标准(150/IEC1472—1:1997)[6]。它采用描述性的文本
语言描述基本的三维物体的造型,通过一定的控制,将这些基本的三维造型组合成虚拟
场景,当支持VRML的浏览器浏览这些文本描述信息时,在本地进行解释执行,生成虚拟
的三维场景。VRML的结构类似于openGL的显示列表,用树状的场景图来描述三维世界。
应用面向对象技术,不仅使场景图对三维世界的描述变得清晰,还通过封装属性和建立
场景图内部消息通道很方便地实现虚拟实体的交互和动画等功能。
图2-1VRML文件实现过程
VRML是虚拟现实编程语言,是一种描述交互式三维对象和世界的文件格式,广泛应
用于互联网,是以虚拟现实为特征的3DWeb技术的核心。VRML为称为继HTML之后的第二
代Web语言,它本身也是一种建模语言,也就是说,它是用来描述三维物体及其行为的,
可以构建虚拟境界,也可以集成文本、图像、音响、影像等多种媒体类型。
文件组成
VRML文件是一个后缀名为.wrl的文件,它主要由文件头、造型、原型、事件和路由
五部分组成,其中文件头是必须的[7]。另外,文件中也可含有注释,以便编写者对文件
的各部分进行注释说明。
(1)文件头文件头是VRML文件的标志,所有版本的VRML文件都以这行文字打头。
其内容为:“#”。其中#表示之后是注解,它在浏览时不被执行;VRML告
诉打开该文件的浏览器该文件是一个VRML文件;表示该VRML文件的版本号是;
utf8表示该文件采用的是国际UTF—8编码方案。UTF—8是一个广泛支持多种语言的字符
集,由国际标准化组织150/IEC1472—1:1997标准所定义。
(2)造型物体的造型即场景图,场景图由描述对象及其属性的节点组成。在场景中,
我们可以使用VRML提供的结点描述语言来设计三维对象的各种属性。
(3)原型节点的原型是节点对其中的域(field)、入事件(eventIn)和出事件
(eventOut)的声明。通过自定义原型(PROTO)可以对标准节点进行组合,提供新的节点
类型。
(4)事件指按照定义的路由,由一个节点发往另一个节点的消息。事件标志着外部
刺激、域值变化或节点之间的交互,可分为入事件和出事件,入事件将导致节点状态的
改变,出事件是节点向外界报告自身状态的出口。事件由一个时间戳和一个域值组成。
(5)路由指产生该事件和接收该事件的节点之间的连接。路由的作用在于将各个不
同的节点绑定在一起以使虚拟空间具有动感和交互性。
(6)注释在VRML文件中允许编写者在文件的任何部分进行注释说明,以增强该文件
的可读性和维护便利。VRML文件的注释部分是以“#”符开头,结束于该行的末尾(换行
或Carriagereturn字符)。浏览器在浏览VRHL文件的时候将跳过#号之后本行的所有内容
不予解释执行。另外浏览器在浏览VRML文件的时候将自动地忽略VRML文件中的所有的空
格和空行。
节点简介
节点(Node)是场景图的基本组件,是构成VRML文件的基本单元[8]。每个节点都可以
有五个方面的特征:类型、域、事件、实现、名字。节点可以命名(DEF语句),节点命
名后可以通过USE语句加以引用,从而避免代码重复,减小文件体积,达到共享的目的。
节点的类型很丰富,除了自定义的节点类型(PROTO)以外,一共有74种节点类型按功能
可分为组节点 (GroupingNodes)、特殊组节点 (Specia1GroupsNodes)、通用节点
(monNodes)、传感器节点(SensorsNodes)、几何体节点(GeometryNodes)、几何体属性
节 点 (GeometricPropertiesNodes)、 外 观 节 点 (AppearanceNodes)、 约 束 节 点
(BindableNodes)、插值节点(InterpolatorsNodes)等九大类。通过节点的层层嵌套以
及节点的定义和使用,形成整个场景图。
下面对将要用到的主要节点进行简单介绍:
1)外形节点Shape
在创建一个造型时,都必须使用Shape节点。Shape节点的语法为[9]:
Shape{
exposedFieldSFNodeappearanceNULL
exPosedFieldSFNodegeometryNULL
}
2)变换节点Transform
一个Transform节点是一个组节点。Transform节点包含一个子节点的列表。这些子
节点可以是shape节点、其它Group节点或Transform节点。在Transform节点中的所有子
节点将在Transform节点的坐标系原点处创建。如果该坐标系的位置发生变化,则
Transform节点内的所有子节点将一同变化。Transform节点可以层层嵌套,它可以是父
节点,也可以是一个父节点Group或Transform节点的子节点。父节点的坐标系是
Transform节点坐标系的父坐标系。如果一个Transform节点是VRML文件的最高级组,则
它的父坐标系就是VRML文件的世界坐标系。
Transform节点的语法为:
Transform{
eventlnMFNodeaddChildren
eventlnMFNoderemoveChildren
exPosedFieldSFVec3fcenter000
exposedFieldHFNodechildren[]
exPosedFieldSFRotationrotation0010
exPosedFieldSFVec3fscalelll
exposedFie1dSFRotationsca1e0rientation00l0
exPosedFieldSFyec3ftrans1ation000
fieldSFVec3fbboxCenter000
fieldSFVec3fbboxsize-1-1-1
}
3)造型节点
在VRML文件中存在很多的造型节点。基本造型节点有长方体节点Box、回柱体节点
Cylinder、圆锥体节点Cone、球体节点Sphere。还有高级造型节点,如挤出造型节点
Extrusion、标高网格造型节点ElevationGrid、点造型节点Pointset、线造型节点
IndexedLineset、面造型节点IndexedFaceset等等.通过对这些造型节点进行旋转、组
合、缩放等运用,可以构造出非常复杂的对象。下面是基本造型节点和Extrusion、
IndexedFaceset节点的作用和语法介绍。
IndexedFaceset节点:通过对面的描述来构造几何体。由于一个任意形状的几何体
在外观上都是由一系列面组成的,因此通过此节点可以构造出任意复杂的三维对象。其
节点语法为:
IndexedFaceset{
eventlnMFInt32set_colorlndex
eventlnMFInt32set_coordlndex
eventlnMFInt32set_normallndex
eventlnMFInt32set_texCoordlndex
exPosedFieldSFNodecolorNULL
exPosedField5FNodecoordNULL
exPosedFieldSFNodenorma1NULL
exPosedFieldSFNodetexCoordNULL
fieldSFBoolccwTRUE
fieldMFInt32colorlndex[]
fieldSFBoo1ColorPerVertexTRUE
fieldSFBoolconvexTRUE
fieldMFInt32coordlndex[]
fieldSFFloatcreaseAngle0
fieldMFInt32normallndex[]
fieldSFBoolnorma1PeryertexTRUE
fieldSFB001solidTRUE
fieldMFInt32texCoordlndex[]
}
4)父节点、子节点
VRML文件一个重要的特点就是由许多节点层层嵌套组合而成的,这样就形成了父节
点和子节点。在一个嵌套的节点中,如果有children域,那么children域的域值为这个
节点的子节点,而该节点称为children域中的节点的父节点。例如,Transform节点中
的children域,其域值都是Transform节点的子节点,而Transform节点是它们的父节点。
实验装备简介
智能控制虚拟实验设备模拟的是天煌教仪生产的“THJ-2型高级过程控制系统实验
装置”。主要由被控对象和控制仪表两部分组成。控制系统动力支路分两路:一路由三
相(380V交流)磁力驱动泵、电动调节阀、直流电磁阀、涡轮流量计及手动调节阀组成;
另一路由日本三菱变频器、三相磁力驱动泵(220V变频)、涡轮流量计及手动调节阀组
成。
实验装备部分元件的设计
实验装置设计是有软件来设计的,直接在命令框内输入要编写的程序即可,
再运行得到所需的3D图像。用VRML语言编写程序,然后调试,得到所需图像。
部分元件设计及程序
(1)插孔的设计及程序
插孔为控制面板上用的最多的部分。插孔由四个直径不同的圆柱体叠加而成,插孔
的编写程序如下:
#
Group
{
children
[
Transform
{
children[
Shape{
appearanceAppearance
{
materialMaterial
{
diffuseColor000
}
}
geometryCylinder
{
}
}
Transform
{
children
Shape{
appearanceAppearance
{
materialMaterial
{
diffuseColor001
}
}
geometryCylinder
{
radius2
height5
}
}
}
Transform
{
children
Shape{
appearanceAppearance
{
materialMaterial
{
diffuseColor001
}
}
geometryCylinder
{
}
}
}
Transform
{
children
Shape{
appearanceAppearance
{
materialMaterial
{
diffuseColor000
}
}
geometryCylinder
{
}
}
}
]
}
]
}
图2-2插孔的最终形成图像
(2)旋钮开关的设计及程序
旋钮开关是由一个圆柱、一个长方体叠加而成,具体的编写程序如下:
#
Group
{
children
[
Transform
{
translation04-20
children
[
Shape
{
appearanceAppearance
{
materialMaterial
{
diffuseColor100
}
}
geometryCylinder
{
radius2
}
},
Transform
{
translation010
children
Shape{
appearanceAppearance
{
materialMaterial
{
diffuseColor011
}
}
geometryBox
{
size555
}
}
}
]
}
]
}
图2-3旋钮开关形成图像
由零件组成控制面板的小单元
整个控制面板由电源控制器、变频器面板、智能位式调节仪面板、比值器/前馈
—反馈补偿器、解藕装置等众多单元构成,下面仅以变频器面板为例说明各零部件的组
合过程。
变频器面板由变频器,3个颜色各异的大插孔,7个颜色各异的小插孔以及一个电源
开关构成。其中变频器可以用一个长方体和一个挤出造型以及一个圆柱体构成,具体制
作过程不做赘述。各部件的组合过程是通过控制3D造型进行平移,旋转以及比例缩放。
这些功能都是通过Transform节点来实现,每一个Transform节点都创建一个相对己有坐
标系的新坐标系,该节点可以将各种造型有效地更好地结合在一起创建出更真实更美观
的VRML虚拟场景。Transform节点同Group节点一样是编组节点,其语法定义如下:
Transform{
#exposedFieldMFNodechildren[]
#
#
#
#
#
#
#
#eventInMFNodeaddChildren
#eventInMFNoderemoveChildren
translation域的域值指定了在父坐标系的原点和新坐标系的原点之间X,Y,Z方向
上的距离。该域值的第一个值为X方向上的距离,第二个值为Y方向上的距离,第三个值
为Z方向上的距离。该域值既可正,也可为负,只是方向相反而已。该域值的缺省值为
,表示个方向的距离为0,新坐标系和父坐标系重合。
rotation域的域值指定了一个旋转轴和旋转角度。新坐标系是围绕该旋转轴旋转一
个该域值所设定的旋转角度。该域的前三个值为一个三维梭镖的X,Y,Z分量,该三维
坐标是在新坐标系上的,原点和该点相连的虚线就是旋转轴。该域值的第四个值为以弧
度为计量单位的旋转角度。该域值的缺省值为,表示以Z轴为旋转轴,但
不发生旋转[9]。
scale域的域值指定了新坐标系在X,Y,Z方向上的缩放系数。该域值的三个值分别
为X,Y,Z方向的缩放系数。该域值的缺省值为,表示在X,Y,Z方向上没有
缩放。利用Transform节点的这些域进行调整,最终可以将各零部件组成完整的单元。
组合好的变频器面板如图2-5所示:
图2-5变频器面板的3D造型
各控制单元组成完整的控制面板
控制面板是一个特殊的造型,因为控制面板上印有很多的说明文字以及电路图,这
些都是控制面板的重要组成部分,而且构造十分复杂然,而利用VRML来实现这些文字或
图像却不容易而且效果也不好。因此利用贴图的方式来实现这些图像,将各单元正面的
照片贴在做好的单元主体上,再把之前做好的各零部件通过Transform节点放置在照片
上的相应位置,将照片上的原型遮挡住。这样做不但将面板上的文字和电路图完全重现,
而且零部件的定位也更加容易和准确,这是预期结果图。
图2-6控制面板的造型
第三章神经网络理论
BP(BackPropagation)神经网络模型是神经网络模型中使用最广泛的一种。由于BP
神经网络能以任意精度逼近任意非线性函数、大规模并行处理和分布式信息存储及较高
的学习速率等特性,且结构简单、易于编程处理,它的应用范围极广泛。本章来介绍一
下BP神经网络。
神经网络理论概述
人工神经网络(ArtificialNeuralNetworks简称 ANN)是也简称为神经网络(NNs)
或 称 作 连 接 模 型 ( ConnectionistModel), 是 对 人 脑 或 自 然 神 经 网 络
(NaturalNeuralNetwork)若干基本特性的抽象和模拟[10]。它由大量的、同时也是很
简单的神经元广泛互连形成复杂的非线性系统,已经在信息处理模式识别、智能控制及
系统建模等领域得到越来越广泛的应用。人工神经网络以对大脑的生理研究成果为基础
的,其目的在于模拟大脑的某些机理与机制,实现某个方面的功能。国际著名的神经网
络研究专家,第一家神经计算机公司的创立者与领导人 HechtNielsen给人工神经网络
下的定义就是:“人工神经网络是由人工建立的以有向图为拓扑结构的动态系统,它通
过对连续或断续的输入作状态相应而进行信息处理。”这一定义是恰当的。
人工神经网络的研究,可以追溯到 1957年 Rosenblatt提出的感知器模型
(Perceptron)。它几乎与人工智能—AI(ArtificialIntelligence)同时起步,但 30
余年来却并未取得人工智能那样巨大的成功,中间经历了一段长时间的萧条。直到 80
年代,获得了关于人工神经网络切实可行的算法,以及以 VonNeumann体系为依托的传
统算法在知识处理方面日益显露出其力不从心后,人们才重新对人工神经网络发生了兴
趣,导致神经网络的复兴。目前在神经网络研究方法上已形成多个流派,最富有成果的
研究工作包括:多层网络 BP算法,Hopfield网络模型,自适应共振理论,自组织特征
映射理论等。人工神经网络是在现代神经科学的基础上提出来的[11]。它虽然反映了人
脑功能的基本特征,但远不是自然神经网络的逼真描写,而只是它的某种简化抽象和模
拟。
神经网络的研究可以分为理论研究和应用研究两大方面。
理论研究可分为以下两类:
1).利用神经生理与认知科学研究人类思维以及智能机理。
2).利用神经基础理论的研究成果,用数理方法探索功能更加完善、性能更加优越
的神经网络模型,深入研究网络算法和性能,如:稳定性、收敛性、容错性、鲁棒性等;
开发新的网络数理理论,如:神经网络动力学、非线性神经场等。
应用研究可分为以下两类:
1).神经网络的软件模拟和硬件实现的研究。
2).神经网络在各个领域中应用的研究。这些领域主要包括:
模式识别、信号处理、知识工程、专家系统、优化组合、机器人控制等。随着神经
网络理论本身以及相关理论、相关技术的不断发展,神经网络的应用定将更加深入。
神经网络具有以下特点[12]:
(1)可以充分逼近任意复杂的非线性关系;
(2)所有定量或定性的信息都等势分布贮存于网络内的各神经元,故有很强的鲁
棒性和容错性;
(3)采用并行分布处理方法,使得快速进行大量运算成为可能;
(4)可学习和自适应不知道或不确定的系统;
(5)能够同时处理定量、定性知识。
神经网络
基 于 误 差 反 向 传 播 (ErrorBackPropagation)算 法 的 多 层 前 馈 网 络
(MultipleLayerFeedforwardNetwork)(简称BP网络),可以以任意精度逼近任意的连续
函数,所以广泛应用于非线性建模、函数逼近、模式分类等方面[13]。虽然BP神经网络
是目前应用最广泛、研究较多的一种网络。但是关于它的开发设计目前为止还没有一套
完整的理论。
拓扑结构的单隐层前馈网络,一般称为三层前馈网或三层感知器,即:输入层、中
间层(也称隐层)和输出层。它的特点是:各层神经元仅与相邻层神经元之间相互全连
接,同层内神经元之间无连接,各层神经元之间无反馈连接,构成具有层次结构的前馈
型神经网络系统。单计算层前馈神经网络只能求解线性可分问题,能够求解非线性问题
的网络必须是具有隐层的多层神经网络。
BP神经网络,即误差反传误差反向传播算法的学习过程,由信息的正向传播和误差
的反向传播两个过程组成。输入层各神经元负责接收来自外界的输入信息,并传递给中
间层各神经元;中间层是内部信息处理层,负责信息变换,根据信息变化能力的需求,
中间层可以设计为单隐层或者多隐层结构;最后一个隐层传递到输出层各神经元的信息,
经进一步处理后,完成一次学习的正向传播处理过程,由输出层向外界输出信息处理结
果。当实际输出与期望输出不符时,进入误差的反向传播阶段。误差通过输出层,按误
差梯度下降的方式修正各层权值,向隐层、输入层逐层反传。周而复始的信息正向传播
和误差反向传播过程,是各层权值不断调整的过程,也是神经网络学习训练的过程,此
过程一直进行到网络输出的误差减少到可以接受的程度,或者预先设定的学习次数为止。
BP网络模型处理信息的基本原理是:输入信号Xi通过中间节点(隐层点)作用于输
出节点,经过非线形变换,产生输出信号Yk,网络训练的每个样本包括输入向量X和期
望输出量T,网络输出值Y与期望输出值T之间的偏差,通过调整输入节点与隐层节点的
联接强度取值Wij和隐层节点与输出节点之间的联接强度Tjk以及阈值,使误差沿梯度方
向下降,经过反复学习训练,确定与最小误差相对应的网络参数(权值和阈值),训练
即告停止。此时经过训练的神经网络即能对类似样本的输入信息,自行处理输出误差最
小的经过非线形转换的信息。
BP网络模型包括其输入输出模型、作用函数模型、误差计算模型和自学习模型[14]。
第四章基于MATLAB的BP神经网络控制器的设计及其实验仿真
此为本次设计的核心部分,这次虚拟实验室的实验控制器采用 BP神经网络控制器
来控制,以不同的输入函数及不同的学习速率、惯性系数来对比控制效果,达到从实验
可以得到学习的效果。
基于BP神经网络控制器的设计
PID控制要取得较好的控制效果,就必须通过调整好比例、积分和微分三种控制作
用,形成控制量中既相互配合又相互制约的关系,这种关系不一定是简单的“线性组合”,
从变化无穷的非线性组合中可以找出最佳的关系。神经网络所具有的任意非线性表达能
力,可以通过对系统性能的学习来实现具有最佳组合的PID控制。采用BP网络,可以建
立参数Kp,Ki,Kd自学习的PID控制器[15]。
基于BP(Backpropagation)网络的PID控制系统结构如图4-1所示,控制器由两部分
构成:
图4-1BP网络结构
(1)经典的PID控制器,直接对被控对象进行闭环控制,并且三个参数Kp,Ki,Kd
为在线调整方式;
(2)神经网络,根据系统的运行状态,调节PID控制器的参数,以期达到某种件能
指标的最优化,使输出层神经元的输出状态对应于PID控制器的三个Kp,Ki,Kd通过神经
网络的自学习、加权系数调整,使神经网络输出对应于某种最优控制律下的PID控制器
参数。
经典增量式数字PID的控制算法如下()为:
()
式中,Kp,Ki,Kd分别为比例、积分、微分系数。网络输入层的输入为:
j=1,2,…M()
式中,输入变量的个数M取决于被控系统的复杂程度。
网络隐含层的输入、输出为:
()
(i=1,…Q)—隐含层加权系数;上角标(1)、(2)、(3)分别代表输入层、隐层和输出
层。
隐层神经元的活化函数取正负对称的Sigmoid函数:
()
网络输出层的输入输出为:
(l=1,2,3)()
输山层输出节点分别对应三个可调参数Kp,Ki,Kd。由于Kp,Ki,Kd不能为负值,所
以输出层神经元的活化函数取非负的Sigmoid函数。
()
取性能指标函数为:
()
按照梯度下降法修正网络的权系数,即按E(k)对加权系数的负梯度力向搜索调整,
并附加使搜索快速收敛全局极小的惯性项。
()
式中,η为学习速率;α为惯性系数。
()
()
由于未知,所以近似用符号函数取代,由此带来计算不精确的影响可以通过调整学
习速率η来补偿。
()
由式()和式(),可求得:
()
()
上述分析可得网络输出层权的学习算法为:
()
(l=1,2,3)()
同理可得隐含层加权系数的学习算法:
()
()
式中,()
基于BP网络的PID控制器结构如图4-2所示,该控制器控制算法归纳如下[15]:
(1)确定BP网络的结构,即确定输入层点数M和隐含层节点数Q,并给出各层加权系
数的初值和,选定学习速率η和惯性系数α,此时k=1;
(2)采样得到rin(k)和yout(k),计算该时刻误差error(k)=rin(k)-yout(k);
(3)计算神经网络NN各层神经元的输入、输出,NN输出层的输出即为PID控制器的三
个可调参数Kp,Ki,Kd;
(4)根据式()计算PID控制器的输出u(k);
(5)进行神经网络学习,在线调整加权系数和,实现PID控制参数的自适应调整;
(6)置k=k+1,返回到(1)。
图4-2基于BP网络的PID控制器结构模型
-PID控制实验仿真
BP-PID控制实验仿真是在MATLAB中完成的,主要借助于MATLAB中M文件的实现,编
写M文件程序,调试并运行得出仿真曲线。
简介
MATLAB是美国MathWorks公司开发的用于教育、工程与科学计算的软件产品,它向
用户提供从概念设计、数据分析、算法开发、建模仿真到实时实现的理想集成环境,是
国际控制界公认的标准计算软件。经过十多年的不断地完善和扩充,MATLAB已经拥有了
数十个工具箱和功能模块,可以实现数值分析、优化、统计、偏微分方程数值解、自动
控制、信号处理、图像处理、声音处理、系统建模等诸多领域的计算和图形显示功能,
具有简单易学、代码短小高效、计算功能强大、图形表达功能强大、可扩展性能好等优
点[16]。
MATLAB提供了一种用于编程的高级语言——M语言[17]。M语言是一种面向科学与工
程计算的高级语言,其最大的特点是简单和直接。它允许用数学形式的语言编写程序,
且比BASIC、FORTRAN和C等语言更加接近我们书写计算公式的思维方式,用其编程犹如
在演算纸上排列出公式与求解问题,被称为第四代计算机语言。MATLAB的程序文件和脚
本文件通常保存为后缀为“.m”的文件,可以称之为M文件。M文件实际上是一个命令集,
其语法规则与C语言几乎完全一样。M文件以ASCH码文本的形式存储,它既可以用MATLAB
的M文件编辑器创建和编辑,也可以用其它的文本编辑器。
MATLAB主要由MATLAB主程序、Simulink动态仿真系统和功能各异的MATLAB工具箱
(Toolbox)三大部分组成。其中主程序包括了MATLAB语言、开发环境、图形句柄、数学
函数库和应用程序接口五个部分。
MATLAB是一种基于不限维数组数据类型的内部交互系统,它既能够进行矩阵和向量
计算,也能够采用特定的方法在标量语言(例如,C和FORTRAN语言)中编写程序。它采用
一些常用的数学符号来表示问题及其解决方案,将计算、可视化和编程等功能集成于一
个简单、易用的开发环境中,为用户工作平台的管理和数据的输入/输出提供了便利的
方法,同时还提供了M文件的扩展和管理工具。
这次本人的设计用的是MATLABR2007a这个版本,这个版本是美国MathWorks公司
2007年出的软件。MATLAB功能强大,这次只用到其中一小部分功能。主要应用MATLAB的
图形用户界面的设计、M文件的编写和MATLAB的LCC封装部分。
-PID控制实验仿真
利用BP神经网络可以解决很多有关非线性系统的问题,如函数逼近、系统辨识等。
设被控对象的近似数学模型为:
式中,系数是慢时变的,。
神经网络的结构选如图4-5-3,学习速率η=和惯性系数α=,加权系数
初估值取区间[,]上的随机数。输入指令信号分为两种:
(1)rin(k)=(2)rin(k)=sin(2πt)
取S=1时为阶跃跟踪,S=2时为正弦跟踪,初估权值取随机值,运行稳定后用稳定
权值代替随机值。
但是由于可调参数Kp,Ki,Kd均取非负的Sigmoid函数,其值在(0,1)之间,使得
算法的应用具有局限性。
跟踪结果和相应的曲线如图4-3至图4-8所示。
图4-3阶跃响应曲线(S=1)
图4-4参数自适应是整定曲线
图4-5跟踪误差曲线
图4-6正弦跟踪曲线(S=2)
图4-7参数自适应整定曲线
图4-8跟踪误差曲线
仿真程序如下:
%BPbasedPIDControl
clearall;
closeall;
xite=;
alfa=;
S=1;%Signaltype
IN=4;H=5;Out=3;%NNStructure
ifS==1%StepSignal
wi=[;
;
;
;
];
%wi=*rands(H,IN);
wi_1=wi;wi_2=wi;wi_3=wi;
wo=[;
;
];
%wo=*rands(Out,H);
wo_1=wo;wo_2=wo;wo_3=wo;
end
ifS==2%SineSignal
wi=[;
;
;
;
];
%wi=*rands(H,IN);
wi_1=wi;wi_2=wi;wi_3=wi;
wo=[;
;
];
%wo=*rands(Out,H);
wo_1=wo;wo_2=wo;wo_3=wo;
end
x=[0,0,0];
u_1=0;u_2=0;u_3=0;u_4=0;u_5=0;
y_1=0;y_2=0;y_3=0;
Oh=zeros(H,1);%OutputfromNNmiddlelayer
I=Oh;%InputtoNNmiddlelayer
error_2=0;
error_1=0;
ts=;
fork=1:1:6000
time(k)=k*ts;
ifS==1
rin(k)=;
elseifS==2
rin(k)=sin(1*2*pi*k*ts);
end
%Unlinearmodel
a(k)=*(*exp(*k));
yout(k)=a(k)*y_1/(1+y_1^2)+u_1;
error(k)=rin(k)-yout(k);
xi=[rin(k),yout(k),error(k),1];
x(1)=error(k)-error_1;
x(2)=error(k);
x(3)=error(k)-2*error_1+error_2;
epid=[x(1);x(2);x(3)];
I=xi*wi';
forj=1:1:H
Oh(j)=(exp(I(j))-exp(-I(j)))/(exp(I(j))+exp(-I(j)));%MiddleLayer
end
K=wo*Oh;%OutputLayer
forl=1:1:Out
K(l)=exp(K(l))/(exp(K(l))+exp(-K(l)));%Gettingkp,ki,kd
end
kp(k)=K(1);ki(k)=K(2);kd(k)=K(3);
Kpid=[kp(k),ki(k),kd(k)];
du(k)=Kpid*epid;
u(k)=u_1+du(k);
ifu(k)>=10%Restrictingtheoutputofcontroller
u(k)=10;
end
ifu(k)<=-10
u(k)=-10;
end
dyu(k)=sign((yout(k)-y_1)/(u(k)-u_1+));
%Outputlayer
forj=1:1:Out
dK(j)=2/(exp(K(j))+exp(-K(j)))^2;
end
forl=1:1:Out
delta3(l)=error(k)*dyu(k)*epid(l)*dK(l);
end
forl=1:1:Out
fori=1:1:H
d_wo=xite*delta3(l)*Oh(i)+alfa*(wo_1-wo_2);
end
end
wo=wo_1+d_wo+alfa*(wo_1-wo_2);
%Hiddenlayer
fori=1:1:H
dO(i)=4/(exp(I(i))+exp(-I(i)))^2;
end
segma=delta3*wo;
fori=1:1:H
delta2(i)=dO(i)*segma(i);
end
d_wi=xite*delta2'*xi;
wi=wi_1+d_wi+alfa*(wi_1-wi_2);
%ParametersUpdate
u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);
y_2=y_1;y_1=yout(k);
wo_3=wo_2;
wo_2=wo_1;
wo_1=wo;
wi_3=wi_2;
wi_2=wi_1;
wi_1=wi;
error_2=error_1;
error_1=error(k);
end
figure(1);
plot(time,rin,'r',time,yout,'b');
xlabel('time(s)');ylabel('rin,yout');
figure(2);
plot(time,error,'r');
xlabel('time(s)');ylabel('error');
figure(3);
plot(time,u,'r');
xlabel('time(s)');ylabel('u');
figure(4);
subplot(311);
plot(time,kp,'r');
xlabel('time(s)');ylabel('kp');
subplot(312);
plot(time,ki,'g');
xlabel('time(s)');ylabel('ki');
subplot(313);
plot(time,kd,'b');
xlabel('time(s)');ylabel('kd');
图形用户界面(GUI)的设计
图形用户界面(GUI)是在MATLAB中建立的,为的是可以用户与计算机或计算机程
序的接触点或交互方式交换信息。图形用户界面或GUI是包含图形对象,在智能控制虚
拟实验室中,MATLAB的图形用户界面(GUI)的主要功能是建立一个友好快捷的用户界
面,整合实验的相关部分,方便用户对实验的操作和控制。所以GUI的设计也是本次课
题十分重要的组成部分。
图形用户界面简介
MATLAT一向注重数据的图形表示,并不断地采用新技术改进和完备其可视化功能.
作为一个优秀的科技应用型软件,MATLAB在数据可视化方面有着很强的功能[17]。MATLAB
中包含有许多可视化函数,其图形功能可以以点线、棒图、直方图、表面图和其它各种
图形形式来显示矢量数据、矩阵数据和数学函数等;可以以二维、三维乃至四维的形式
显示数据;可以动态地显示图形的生成过程以及变量的变化过程;可以打开并显示位图;
可以改变图形的外观参数;可以对图形进行多种形式的输出操作;可以通过对图形线型、
立面、色彩、渲染、光线、视角等的控制把数据的特征表现得淋漓尽致;甚至可以自己
编写图形生成文件[18]。
用户界面是人与计算机或计算机程序的接触点或交互方式,是用户与计算机进行信
息交流的方式。计算机在屏幕显示图形和文本,若有扬声器还可产生声音。用户通过输
入设备,如:键盘、鼠标、跟踪球、绘制板或麦克风,与计算机通讯。用户界面设定了
如何观看和如何感知计算机、操作系统或应用程序。通常,多是根据悦目的结构和用户
界面功能的有效性来选择计算机或程序。
MATLAB提供了图形用户界面(GraphicalUserInterfaces,GUI)的设计与开发功能.
图形用户界面是由图形窗口、菜单、按键、对话框、文字说明等图形控制对象构成的一
个用户界面,利用这些界面,用户可以和计算机之间进行信息交流。
MATLAB中的基本图形用户界面对象分为三类:用户界面控件对象(uicontrol)、下
拉式菜单对象(uimenu)和内容式菜单对象(uicontextmenu)。其中,uicontrol对象能建
立按钮、列表框、编辑框等图形用户界面对象,uimenu能建立下拉式菜单和子菜单等图
形用户界面对象,uicontextmenu能建立内容式菜单用户界面对象(类似Visua1C++等程
序设计软件中的弹出式菜单)。MATLAB中的GUI对象层次结构如图4-9所示:
图4-9GUI对象层结构
上图中,根对象可包含一个或多个图形窗口对象,每个图形窗口也可包含一个或多
个 Uimenu对象、 uicontextmenu对象、 Uicontrol对象或坐标轴 (Axes)对象,每个
Uimenu、 Uicontextmenu对象可包含一个或多个 Uimenu、 Uicontextmenu子对象,
Uicontrol对象虽无子对象结点,但它也有多种类型,如按钮框、检验框、文本框、编
辑框等,所有其他对象都是坐标轴的子对象,并且在坐标轴上显示。通过利用从ATLAB
的上述各类对象,进行周密的组织、设计,就可以设计出一个界面良好、操作简便、功
能强大的图形用户界面。
图形用户界面实现的功能
在智能控制虚拟实验室中,MATLAB的图形用户界面(GUI)的主要功能是建立一个
友好快捷的用户界面,整合实验的相关部分,方便用户对实验的操作和控制。以控制GUI
界面的设计为例,其实现的主要功能如下[18]:
1.加入实验指导,通过单击“实验指导”或“浏览源程序”按钮,可以打开一个Word
文档,查看实验的目的和具体的操作步骤或源程序。
2.建立与VRML的连接,单击“浏览实验装置”按钮,用户可以方便的对虚拟实验装
置浏览观看。
3.建立BP神经网络控制器,通过单击“查看曲线”按钮用户可以对仿真图进行查看
及对比。
4.点击“清空曲线”按钮可将曲线清除。
图形用户界面的实现过程
GUI实现的功能及实现过程:
1.打开Word文档改成查看源程序及实验指导
实现与word文档的交互,制作按钮,单击可以直接打开实验指导书。通过GUI的按
钮设计达到此要求。
在GUI界面中,加入实验指导按钮,通过对其单击,打开一个Word文档对实验进行
说明是非常必要的,用户通过查看实验指导,可以明确实验的目的和意义,了解实验步
骤,方便用户进行实验。
通过M文件与Word文档进行交互,首先需要建立一个word文档对实验进行说明,文
件命名为。创建好word文档后,可通过MATLAB中的winopen语句打开word文档。通
过以下语句可以创建一个实验指导按钮打开实验指导:
functionpushbutton1_Callback(hObject,eventdata,handles)
winopen('F:\学习\毕业设计\李慧慧\论文\')
2.建立与VRML的交互
虚拟现实工具箱(Virtua1Rea1ityToolbox)为能在一个三维虚拟现实环境中进行可
视化操作和与动态系统进行交互提供了一种有效的解决方案[19]。使用标准的VRML技术,
就可以通过MATLAB生成三维场景,在MATLAB的命令窗口中直接输入命令或使用M文件来
控制虚拟世界。
本次我选用M文件来设计控制VR,这样实现起来相对简单。也可构成总体性。
虚拟现实工具箱中的对象分为vrworld对象、vrnode对象和vrfigure对象三种。
vrworld对象是虚拟场景的句柄。表4-1为vrworld对象的方法。通过这些方法,可以与
场景交互并控制场景。vrnode对象是VRML节点的句柄。vrnode对象是vrworld对象的子
对象。vrfigure对象是虚拟现实工具箱查看器的句柄,通过它,可以获取和设置查看器
的属性。
方法 描述
vrworld 创建一个虚拟世界相关的vrworld新对象
vrworld/close 关闭虚拟对象
vrworld/delete 从内存中删除虚拟世界
vrworld/open 打开虚拟世界
vrworld/save 从虚拟世界写到VRML文件
vrworld/view 查看虚拟世界
vrworld/get 读取vrworld对象的属性值
vrworld/set 改变vrworld对象的属性值
vrworld/reloand 从相关vrml文件中重新载入虚拟世界
表4-1vrworld对象的方法
安装虚拟现实工具箱时,将虚拟现实工具箱提供的VRML查看器设置为默认查看器。
虚拟世界显示在主窗口中,利用窗口下方的各种按钮可以进行平移、旋转等操作。在窗
口上方的菜单栏中,可以设置显示哪个虚拟世界、控制面板的显示方式、场景漫游的方
法和渲染方式等。
通过M文件与虚拟世界进行交互以前,首先需要创建vrworld对象。不能直接与虚拟
世界交互。虚拟世界在VRML文件中定义,文件名为。创建虚拟世界后,就可
以创建一个vrworld对象。其完整的创建语句为:
shiyan=vrworld('');
创建完vrworld对象以后,需要打开虚拟世界,其目的是为了可以在VRML查看器中
查看虚拟世界,扫描它的结构并从MATLAB命令窗口中改变虚拟世界的属性。打开与虚拟
世界连接的vrworld对象的语句为:
open(vrml);
在完成了vrworld对象的创建和打开虚拟世界以后,就可以通过view(vrml)语句,
用默认的查看器打开和显示虚拟世界。将该语句放入“浏览实验装置”按钮
中的callback属性中,即实现了点击按钮弹出3D实验装备的效果:
functionpushbutton10_Callback(hObject,eventdata,handles)
vrml=vrworld('');
open(vrml);
view(vrml)
%hObjecthandletopushbutton10(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
3.查看曲线用M文件回调函数来实现
仿真曲线可以通过GUI中的Axes组件直接在GUI中显示出来,根据预想的要达到的效
果:实验者可以同时看到不同输入函数的控制的曲线,我在GUI界面上放置了两组Axes
组件。调出曲线的方法仍是通过点击相应的两个按钮来实现。
达到预期效果的重点在于按钮回调函数的编写,我编写这两个回调函数的思想是:
将整个仿真过程的代码都放在这两个回调函数中。由于仿真程序中用到的变量数目很多,
这样能够避免在不同组件中调用全局变量的麻烦。
选择坐标轴的语句为:
axes()
其中为指定坐标轴的句柄。这也是利用GUIDE辅助设计GUI的一个好处,
所有的交互组件都有一个统一格式的句柄—。tag为该交互组件的标签名。
利用全命令行的M文件编程则没有这么方便,在调用任何一个交互组件时都需要预先设
定其句柄,容易造成混乱。
4.清空曲线是清除所有曲线和输入数据
单击“清空曲线”后,输出的波形和输入数据都在GUI上清除,程序如下:
functionpushbutton3_Callback(hObject,eventdata,handles)
axes();
cla;
axes();
cla;
axes();
cla;
axes();
cla;
axes();
cla;
axes();
cla;
axes();
cla;
axes();
cla;
set(,'string','');
set(,'string','');
5.新建一个GUI,在其中用鼠标拖拽的方式添加按钮、动态文本、坐标曲线和文本
等。与对应的部件相对应起来,形成完整的可执行GUI。
最终形成的GUI主界面如图4-10所示:
图4-10GUI界面
系统的封装
这是本次课题的最后一部分。主要功能是要把前面所制作的内容整合封装成一个完
整的系统,即做成一个独立的可执行文件,以使用户能够方便的使用智能控制虚拟实验
室所提供的虚拟实验服务,实现虚拟实验的各种功能。
封装目的
在进行过3D模型的建立,具体实验环节的设计,GUI的设计等工作之后,虚拟实验
室的雏形已经基本建立。但是仅做到这样的程度是不够的,用户为了进行虚拟实验,还
要打开MATLAB找到指定的文件运行,这显然没有达到让用户进行方便实验的目的。为了
达到预期的目的,还需要将之前已经做好的MATLAB的GUI相关文件封装成可执行程序,
用户只需运行这个程序,就能够打开MATLAB并调出相应的GUI界面,直接开始实验。
封装具体过程
生成exe文件,对和进行打包[20]。
1)设置编译器:
在确定安装好Matlabpiler后,还需要对piler进行适当的配置,方法是在Matlab命
令窗口输入:
Mbuild–setup,按提示选择matlab自带编译器LCC。
2)将脚本编译为可执行文件:
如项目文件包含:,
在 此 路 径 下 命 令 行 输 入 : mcc–, 生 成 : ,
,,,,,,gui_mcr。
其中:,为脱离matlab环境运行必需的文件。
3)在未安装matlab的机器上运行可执行程序。
将R22007b\toolbox\piler\deploy\win32中的安装到该计算机
上,将生成可执行程序脱离matlab运行所需的函数库。
将2)中生成的,拷贝到该计算机同一路径。运行将生成
gui_mcr文件夹,包含程序运行所需的库。
4)去除独立可执行程序运行时的“DOS黑窗口”。
以上生成的exe程序运行时首先弹出一个DOS界面窗口,如果不需要其输出数据和错
误信息,可将其去除。
matlab命令行输入:
cd(prefdir)
此时打开,在文件最后添加:
setLINKFLAGS=%LINKFLAGS%-subsystemwindows即可。
第五章结论
虚拟实验室是传统教学手段的一种很好的补充。它可以解决教学资金不足、教学设
备陈旧和有些实验危险性的问题,从而增加学生动手做实验的机会,提高学生的实际操
作能力。同时虚拟实验室具有直观、灵活、方便的特点,有利于培养学生的创新精神和
创造能力。并且可以通过互联网进行远程实验,更加有利于同学相互学习,促进学习的
乐趣,可快捷的进行实验。
按照智能控制实验的要求,智能控制虚拟实验室被设计成三个部分:虚拟实验室与
实验设备、智能控制系统设计、各实验图形用户界面设计(GUI)。虚拟设备由VRML进行
创建;控制系统和控制算法使用Matlab的M文件来设计基于BP神经网络的PID控制器;并
用M文件设计各实验的图形用户界面将虚拟实验设备和智能控制系统、win32联系在一起;
最后MATLAB封装整个系统。经过使用表明,本系统基本达到了预期的设想,基本实现了
在虚拟环境下进行智能控制实验的目的,并且可以通过GUI进行实验观察对比,通过改
变α,η的值来查看曲线,查看控制效果并进行对比实验。
参考文献
[1] 张茂军。虚拟现实系统[M]。北京:科学出版社,
[2] 苏金明,黄国明,刘波。MATLAB与外部程序接口。[M]北京:电子工业出版社,
[3] , ,
“ OntheDesignMethodofCellularNeuralNetworksforAssociateMemoriesBasedonGeneralized
EigenvalueProblem”,IntelWorkshoponCellularNeuralNetworksandTheirApplications,2002
[4] 张家祥,方凌江,毛全胜。基于的系统分析与设计——虚拟现实[M]。西安:西安
电子科技大学出版社,
[5] 曾芬芳主编,虚拟现实技术[M]。上海交通大学出版社,1999-6
[6] Wen-huachen, , ’Reily。
ANonlinearDisturbanceObserverforRoboticManipulators。
IEEETransactionsonIndustrialEletronics,2000,47(4):932~938
[7] 赛博科技工作室编。VRML与Java编程技术。北京:人民邮电出版社,2002
[8] WeiminGe, ZuoliangCao, shagnxianPeng。
ATeleroboticSystemBasedonVirtualRealityTechnique[A]。
ProceedingsofVirtualRealityApplicationinIndustry[C]。USA:SPIE,Oct,2003
[9] 常晓丽。基于Matlab的BP神经网络设计[J]。机械工程与自动化,2006,(04)
[10]蒲春,孙政顺。Matlab神经网络工具箱BP算法比较[J]。计算机仿真,2006
[11] 辅助神经网络与设计。电子工业出版社,2002
[12]姚俊,马松辉。Simulink建模与仿真。西安:西安电子科技大学出版社,2002
[13] WeiLiu,JingtongMatlab’sdesign。0719318,9787900719317
[14]陈宇,郑绍春。基于SIMULINK和VRML的一种简易仿真方法[J]。中国水运。
[15] ,, DigitalsignalprocessingusingMATLAB。
[16]陈玉农,刘红波。模型参考自适应控制、模糊控制及 PID控制的综合应用 [J]。
AutomationandInstrumentation,
[17]戴连奎。PID控制器的参数整定与应用问题。浙江大学智能系统与决策研究所,
[18]葛为民,曹作良,彭商贤。基于MATLAB和VR技术的移动机器人建模及仿真。天津理工学院学报,
[19]刘金琨。先进PID控制MATLAB仿真[M]。北京:电子工业出版社,
[20]葛哲学,孙志强。神经网络理论与MATLABR2007实现。北京:电子工业出版社,2007
致谢
时光匆匆如流水,很快就到了大学毕业时节。离校日期已日趋临近,毕业设计也随
之进入了尾声。从开始进入课题到论文的顺利完成,一直都离不开老师、同学、朋友给
我热情的帮助,在这里请接受我诚挚的谢意!
本学位论文是在我的指导老师欧阳玲老师的亲切关怀与细心指导下完成的。从课题的选
择到论文的最终完成,欧阳老师始终都给予了细心的指导和不懈的支持,欧阳老师对学
生认真负责,无论多忙她坚持每周抽时间指导我们的论文和工作,叮咛嘱咐我在设计当
中应该注意的问题,让我从知道题目,到了解内容,到最后的独立完成所有毕业设计,
一点一滴吸收设计内容的养分,在她的身上,我可以感受到一个学者的严谨和务实,这
些都让我获益菲浅,并且将终生受用无穷。毕竟“经师易得,人师难求”,希望借此机
会向欧阳老师表示最衷心的感谢!
此外,本文最终得以顺利完成也是与电子信息院其他老师的帮助分不开的,虽然他们没
有直接参与我的论文指导,但在开题和中期检查时也给我提供了不少的意见,提出了一
系列可行性的建议,督促我的毕业设计完成。他们是王瑷珲老师,高辉老师,王永林老
师,蒋群老师,他们在百忙之中抽时间对本文进行审阅、评议和参加本人论文答辩,在
此向他们表示深深的感谢!
最后要感谢的是我的父母,感谢他们这么多年来一如既往的对我的学业的支持,用他们
的辛苦奋斗作为我才可以顺利的往前迈步的源动力,他们也为我能够顺利的完成毕业论
文提供了巨大的支持与帮助。在未来的日子里,我会更加努力的学习和工作,不辜负父
母对我的殷殷期望!我一定会好好孝敬和报答他们!
附录一VRML设计部分程序
按钮
#
Group
{
children
[
Transform
{
translation04-20
children[
Shape{
appearanceAppearance
{
materialMaterial
{
diffuseColor100
}
}
geometrySphere
{
}
}
Transform
{
children
Shape{
appearanceAppearance
{
materialMaterial
{
diffuseColor001
}
}
geometryCylinder
{
radius2
height5
}
}
}
]
}
]
}
把手开关
Transform{
children[
Transform{
children[
Shape{
appearanceDEFblackAppearance{
materialMaterial{
diffuseColor000
}
}
geometryCylinder{
}
}
]
}
Transform{
children[
Shape{
appearanceDEFyinseAppearance{
materialMaterial{
diffuseColor111
}
}
geometryCylinder{
}
}
]
}
Transform{
children[
Shape{
appearanceUSEblack
geometryExtrusion{
crossSection[
,,,,,
,,,,,,,
,,,,,,
,,
]
spine[
]
}
}
]
}
Transform{
children[
Shape{
appearanceUSEyinse
geometryExtrusion{
crossSection[
,,,,,
,,,,,,,
,,,,,,
,,
]
spine[
]
}
}
]
}
]
}
#大插孔的代码
Transform{
children[
Transform{
childrenShape{
appearanceAppearance{
materialMaterial{
}
}
geometryCylinder{
}
}
}
Transform{
childrenShape{
appearanceAppearance{
materialMaterial{
}
}
geometryCylinder{
}
}
}
Transform{
childrenShape{
appearanceAppearance{
materialMaterial{
}
}
geometryCylinder{
}
}
}
Transform{
childrenShape{
appearanceAppearance{
materialMaterial{
}
}
geometryCylinder{
}
}
}
]
}
附录二MATLAB设计GUI程序
functionvarargout=PID(varargin)
gui_Singleton=1;
gui_State=struct('gui_Name',mfilename,...
'gui_Singleton',gui_Singleton,...
'gui_OpeningF',@PID_OpeningF,...
'gui_OutputF',@PID_OutputF,...
'gui_LayoutF',[],...
'gui_Callback',[]);
ifnargin&&ischar(varargin{1})
_Callback=str2func(varargin{1});
end
ifnargout
[varargout{1:nargout}]=gui_mainf(gui_State,varargin{:});
else
gui_mainf(gui_State,varargin{:});
end
functionPID_OpeningF(hObject,eventdata,handles,varargin)
=hObject;
guidata(hObject,handles);
functionvarargout=PID_OutputF(hObject,eventdata,handles)
varargout{1}=;
%---Executesonbuttonpressinpushbutton1-阶跃.
functionpushbutton1_Callback(hObject,eventdata,handles)
xite1=str2num(get(,'string'));
alfa1=str2num(get(,'string'));
xite=xite1;
alfa=alfa1;
IN=4;H=5;Out=3;%NNStructure
wi=[;
;
;
;
];
%wi=*rands(H,IN);
wi_1=wi;wi_2=wi;wi_3=wi;
wo=[;
;
];
%wo=*rands(Out,H);
wo_1=wo;wo_2=wo;wo_3=wo;
x=[0,0,0];
u_1=0;u_2=0;u_3=0;u_4=0;u_5=0;
y_1=0;y_2=0;y_3=0;
Oh=zeros(H,1);%OutputfromNNmiddlelayer
I=Oh;%InputtoNNmiddlelayer
error_2=0;
error_1=0;
ts=;
fork=1:1:6000
time(k)=k*ts;
rin(k)=;
%Unlinearmodel
a(k)=*(*exp(*k));
yout(k)=a(k)*y_1/(1+y_1^2)+u_1;
error(k)=rin(k)-yout(k);
xi=[rin(k),yout(k),error(k),1];
x(1)=error(k)-error_1;
x(2)=error(k);
x(3)=error(k)-2*error_1+error_2;
epid=[x(1);x(2);x(3)];
I=xi*wi';
forj=1:1:H
Oh(j)=(exp(I(j))-exp(-I(j)))/(exp(I(j))+exp(-I(j)));%MiddleLayer
end
K=wo*Oh;%OutputLayer
forl=1:1:Out
K(l)=exp(K(l))/(exp(K(l))+exp(-K(l)));%Gettingkp,ki,kd
end
kp(k)=K(1);ki(k)=K(2);kd(k)=K(3);
Kpid=[kp(k),ki(k),kd(k)];
du(k)=Kpid*epid;
u(k)=u_1+du(k);
ifu(k)>=10%Restrictingtheoutputofcontroller
u(k)=10;
end
ifu(k)<=-10
u(k)=-10;
end
dyu(k)=sign((yout(k)-y_1)/(u(k)-u_1+));
%Outputlayer
forj=1:1:Out
dK(j)=2/(exp(K(j))+exp(-K(j)))^2;
end
forl=1:1:Out
delta3(l)=error(k)*dyu(k)*epid(l)*dK(l);
end
forl=1:1:Out
fori=1:1:H
d_wo=xite*delta3(l)*Oh(i)+alfa*(wo_1-wo_2);
end
end
wo=wo_1+d_wo+alfa*(wo_1-wo_2);
%Hiddenlayer
fori=1:1:H
dO(i)=4/(exp(I(i))+exp(-I(i)))^2;
end
segma=delta3*wo;
fori=1:1:H
delta2(i)=dO(i)*segma(i);
end
d_wi=xite*delta2'*xi;
wi=wi_1+d_wi+alfa*(wi_1-wi_2);
%ParametersUpdate
u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);
y_2=y_1;y_1=yout(k);
wo_3=wo_2;
wo_2=wo_1;
wo_1=wo;
wi_3=wi_2;
wi_2=wi_1;
wi_1=wi;
error_2=error_1;
error_1=error(k);
end
axes();
plot(time,rin,'b',time,yout,'r');
xlabel('time(s)');ylabel('rin,yout');
axes();
plot(time,kp,'r');
xlabel('time(s)');ylabel('kp');
axes();
plot(time,ki,'r');
xlabel('time(s)');ylabel('ki');
axes();
plot(time,kd,'r');
xlabel('time(s)');ylabel('kd');
%---Executesonbuttonpressinpushbutton2-正弦.
functionpushbutton2_Callback(hObject,eventdata,handles)
xite1=str2num(get(,'string'));
alfa1=str2num(get(,'string'));
xite=xite1;
alfa=alfa1;
IN=4;H=5;Out=3;%NNStructure
wi=[;
;
;
;
];
%wi=*rands(H,IN);
wi_1=wi;wi_2=wi;wi_3=wi;
wo=[;
;
];
%wo=*rands(Out,H);
wo_1=wo;wo_2=wo;wo_3=wo;
x=[0,0,0];
u_1=0;u_2=0;u_3=0;u_4=0;u_5=0;
y_1=0;y_2=0;y_3=0;
Oh=zeros(H,1);%OutputfromNNmiddlelayer
I=Oh;%InputtoNNmiddlelayer
error_2=0;
error_1=0;
ts=;
fork=1:1:6000
time(k)=k*ts;
rin(k)=sin(1*2*pi*k*ts);
%Unlinearmodel
a(k)=*(*exp(*k));
yout(k)=a(k)*y_1/(1+y_1^2)+u_1;
error(k)=rin(k)-yout(k);
xi=[rin(k),yout(k),error(k),1];
x(1)=error(k)-error_1;
x(2)=error(k);
x(3)=error(k)-2*error_1+error_2;
epid=[x(1);x(2);x(3)];
I=xi*wi';
forj=1:1:H
Oh(j)=(exp(I(j))-exp(-I(j)))/(exp(I(j))+exp(-I(j)));%MiddleLayer
end
K=wo*Oh;%OutputLayer
forl=1:1:Out
K(l)=exp(K(l))/(exp(K(l))+exp(-K(l)));%Gettingkp,ki,kd
end
kp(k)=K(1);ki(k)=K(2);kd(k)=K(3);
Kpid=[kp(k),ki(k),kd(k)];
du(k)=Kpid*epid;
u(k)=u_1+du(k);
ifu(k)>=10%Restrictingtheoutputofcontroller
u(k)=10;
end
ifu(k)<=-10
u(k)=-10;
end
dyu(k)=sign((yout(k)-y_1)/(u(k)-u_1+));
%Outputlayer
forj=1:1:Out
dK(j)=2/(exp(K(j))+exp(-K(j)))^2;
end
forl=1:1:Out
delta3(l)=error(k)*dyu(k)*epid(l)*dK(l);
end
forl=1:1:Out
fori=1:1:H
d_wo=xite*delta3(l)*Oh(i)+alfa*(wo_1-wo_2);
end
end
wo=wo_1+d_wo+alfa*(wo_1-wo_2);
%Hiddenlayer
fori=1:1:H
dO(i)=4/(exp(I(i))+exp(-I(i)))^2;
end
segma=delta3*wo;
fori=1:1:H
delta2(i)=dO(i)*segma(i);
end
d_wi=xite*delta2'*xi;
wi=wi_1+d_wi+alfa*(wi_1-wi_2);
%ParametersUpdate
u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);
y_2=y_1;y_1=yout(k);
wo_3=wo_2;
wo_2=wo_1;
wo_1=wo;
wi_3=wi_2;
wi_2=wi_1;
wi_1=wi;
error_2=error_1;
error_1=error(k);
end
axes();
plot(time,rin,'b',time,yout,'r');
xlabel('time(s)');ylabel('rin,yout');
axes();
plot(time,kp,'r');
xlabel('time(s)');ylabel('kp');
axes();
plot(time,ki,'r');
xlabel('time(s)');ylabel('ki');
axes();
plot(time,kd,'r');
xlabel('time(s)');ylabel('kd');
functionedit1_Callback(hObject,eventdata,handles)
functionedit1_CreateF(hObject,eventdata,handles)
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor
'))
set(hObject,'BackgroundColor','white');
end
functionedit2_Callback(hObject,eventdata,handles)
functionedit2_CreateF(hObject,eventdata,handles)
ifispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
%---Executesonbuttonpressinpushbutton3-清空.
functionpushbutton3_Callback(hObject,eventdata,handles)
axes();
cla;
axes();
cla;
axes();
cla;
axes();
cla;
axes();
cla;
axes();
cla;
axes();
cla;
axes();
cla;
set(,'string','');
set(,'string','');
%---Executesonbuttonpressinpushbutton4-随机参数.
functionpushbutton4_Callback(hObject,eventdata,handles)
xite1=rand;
alfa1=rand;
set(,'String',xite1);
set(,'String',alfa1);
%---Executesonbuttonpressinpushbutton5-与windows交互.
functionpushbutton5_Callback(hObject,eventdata,handles)
winopen('F:\学习\毕业设计\李慧慧\论文\')
functionpushbutton8_Callback(hObject,eventdata,handles)
winopen('F:\学习\毕业设计\李慧慧\论文\')
%---Executesonbuttonpressinpushbutton10-与vr交互
functionpushbutton10_Callback(hObject,eventdata,handles)
vrml=vrworld('');
open(vrml);
view(vrml)