基于Simulink的船舶运动模型的建立与仿真_第1页
基于Simulink的船舶运动模型的建立与仿真_第2页
基于Simulink的船舶运动模型的建立与仿真_第3页
基于Simulink的船舶运动模型的建立与仿真_第4页
基于Simulink的船舶运动模型的建立与仿真_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE3摘要船舶运动数学模型是船舶运动仿真与控制问题的核心。目前,船舶运动数学模型建模中主要有两大流派:以Abkowite为代表的整体型结构模型和日本拖曳水池委员会(JTTC)提出的分离型结构模型,简称MMG模型。本文主要是对于船舶的回转运动进行研究,采用的是MMG模型。根据13000T散货船的主要参数,通过计算求出所需的相关量,建立了船舶的线性响应型模型。在此模型的基础上,利用MATLAB中的Simulink模块将此数学模型在该软件中建立一个仿真模型。在Simulink中对建立的仿真模型进行运行得到船舶运动参数。通过Simulink的外部模式将仿真结果变成实时输出数据,利用RS232发送并接受数据,用VisualC++连接数据库和RS232的数据提取,再利用VisualC++与SQL的接口读取数据,并通过OSG进行实现船舶回转运动的可视化虚拟仿真。关键词:船舶回转运动;数学模型;Simulink;视觉仿真;OSGAbstractTheshipmotionmathematicalmodelistheproblem’scoreabouttheshipmotionsimulationandcontrol.Currently,therearetwomajorschoolsintheshipmotionmathematicalmodel’smodeling:theoverallstructuremodelrepresentedbyAbkowiteandtheseparationofstructuremodelreferredtoastheMMGmodelproposedbytheJapanTowingTankCommittee(JTTC).Thisarticlemainlyresearchontherotarymovementoftheship,usingtheMMGmodel.Basedonthe13000Tbulkcarrier’smainparameters,weobtaintherequiredrelevantamountbycalculating.Thenweestablishthelinearresponsemodeloftheship.Onthebasisofthismodel,wetransferthismathematicalmodelintoasimulationmodelwiththeSimulinkmoduleofMATLAB.InSimulink,wegettheshipmotionparametersthroughrunningthesimulationmodel.ThroughSimulink’sexternalmode,weconversethesimulationresultsintoreal-timeoutputdata,usingastandardserialportRS232tosendandreceivedata.ThenweuseVisualC++toconnectthedatabasewithRS232dataextraction.UsingVisualC++interfacewithSQLtoreaddatabase,andconductedbyOSGtoenablevisualizationoftheshipturningmotionofthevirtualsimulation.Keywords:shipturningmotion;mathematicalmodel;Simulink;visualsimulation;OSG目录TOC\o"1-3"\u第一章绪论 11.1课题研究现状 11.2本课题的意义 2第二章响应型船舶运动数学模型的建立 42.1线性响应模型 42.1.1线性船舶运动数学模型的建立 42.1.2线性响应模型 112.2船舶运动的风、流干扰力数学模型 122.2.1风的干扰力数学模型 132.2.2水流的干扰力数学模型 142.2.3风和流共同作用下船舶的操纵模型 152.3模型参数的计算 152.3.1船舶质量与转动惯量的计算 162.3.2流体动力及流体动力导数的计算 162.3.3、、的计算 192.3.4风、流模型中的参数计算 19第三章基于Simulink的船舶运动模型的建立与仿真 213.1Simulink的简介 213.2线性响应型船舶运动模型的建立 223.2.1流体动力模型的建立 233.2.2操纵性指数K、T模型的建立 293.2.3线性响应型船舶运动模型的建立 303.3风、流模型的建立 313.3.1风力模型的建立 313.3.2流力模型的建立 343.3.3附加舵角模型的建立 343.4模型的整合 353.4.1压缩子系统 353.4.2模型的组合 363.5仿真试验 383.5.1回转试验 383.5.2风对船舶运动影响 403.5.3流对船舶运动的影响 413.5.4结论 42第四章Simulink与数据库的连接及视觉仿真的实现 444.1Simulink模型仿真结果的实时输出 444.2利用VC++连接数据库与RS232的数据提取 454.3利用0SG实现视觉仿真 48第五章结论 525.1存在的问题及解决方案 525.2发展前景 52致谢 54参考文献 55附录I 56江苏科技大学毕业论文(论文)第一章绪论1.1课题研究现状船舶运动控制以其重要性和复杂性仍然是国内外研究的热点领域。船舶动态具有大惯性的特点,万吨级油轮的时间常数可达百秒以上,对动舵的响应缓慢,且操舵伺服子系统中存在着时滞和继电器特性等非线性因素,船速的变化和装载增减造成船舶质量、惯性矩、重心坐标发生变化,引起各种流体动力导数相应改变,最终导致船舶运动数学模型的参数甚至结构产生摄动,这就是让现研究者感到棘手的不确定性;同时,风、浪、流的存在也造成对船舶运动的附加干扰动力(风的低频干扰动力和浪的高频干扰动力),实质上这些干扰最终也转换成船舶模型的参数和结构的摄动,即干扰同样引起不确定性。这正是当前船舶运动控制研究面临的主要问题之一:船舶运动控制系统表现出大干扰、时变、不确定,非线性的特点和随机的环境干扰。另一方面,在对船舶运动进行闭环控制时,获得反馈信息的测量手段也不可能是完善的,一些重要的量测数据例如航向、船位等都有一定的误差,这就成为了船舶运动控制研究的另一主要问题:测量信息的不精确性,无强鲁棒性,传统控制策略的效果不能令人满意。控制策略是船舶运动控制科学的主要研究对象。从20世纪20年代到70年代,自动舵的PID算法延续了50年;70年代~80年代出现自适应控制并在自动舵商品化方面获得了成功,产生了明显的经济效益;90年代始,控制论的全面繁荣为船舶运动控制系统设计提供了诸多的新控制算法,如神经网络控制、模糊控制、多模态仿人智能控制、混合智能控制、H鲁棒控制等都被不同程度地引入到自动舵研制之中,目前主要有以下几种控制策略:1、PID控制2、自适应控制3、变结构控制4、当前流行的船舶运动控制算法,分为两类,一类为神经网络控制、模糊逻辑控制、混合智能控制;另一类为鲁棒控制。船舶控制目标由航向控制到航迹控制,再到航速、航姿和航迹联和控制等,以实现复杂环境下的自动航行、自动靠泊等,要求越来越高。在自动操舵仪产品设计开发和调试过程中,需要对新的控制算法以及相应的硬件电路的综台性能反复试验,不断改进,最终通过实船试验验证。开发船舶运动控制仿真平台,模拟船舶操纵运动和各种海况,对控制算法和自动舵整体性能进行综合检验,无疑能显著加快开发速度,降低试验成本。船舶运动控制的仿真有三种模式,即单机仿真、双机仿真(半物理仿真)和物理仿真。前面两种都是先建立起船舶运动的数学模型,再对其进行控制仿真,成本较低,容易实现;而物理仿真则是利用缩尺模型代替实船进行各种实时控制实验,要求较大的资金投入,且不易实现。而船舶运动数学模型是船舶运动仿真与控制问题的核心。可以从不同的角度对系统数学模型加以分类,如下所示:1、静态模型和动态模型2、确定性模型和不确定性模型3、连续模型和离散化模型4、线性模型和非线性模型。但是从实际应用上来看,以线性模型或非线性模型的区别为主要线索进行讨论是方便和有益的。严格地说,任何一个实际系统都或多或少存在着非线性,不过从控制器设计的角度看,在大多数情况下都可以应用线性模型,因为闭环反馈控制能使系统的各种时间变量对于它们的平衡状态仅有较小的偏离。船舶运动非线性模型用途广泛,实质都是基于这种模型可精确预报船舶操纵运动特性这一点。船舶运动控制问题的两个重点研究领域是船舶运动控制器设计和船舶动态模型建立。建立一个复杂程度适宜、精度满足要求的数学模型对于进行系统闭环性能研究是至关重要的。太复杂和精细的模型可能包含难于估计的参数,也不便于分析.过于简单的模型不能描述系统的重要性能。近年来,Mathworks公司推出Matlab软件包被越来越多地运用于工程系统的仿真领域,尤其是其Simulink模块具有超强仿真能力,引起了工程界广泛兴趣。本文在状态空间型的船舶运动数学模型的基础上,给出了基于输入—输出信息构造的响应型船舶运动数学模型的系统性方法,这种响应型模型仅考虑了过程线性影响。然后建立基于Matlab/Simulink的船舶运动模型,在此基础上对船舶的操纵性能进行仿真计算。再通过VisualC++将得到的实时数据与数据库连接,利用VisualC++与SQL的接口读取数据,并通过OSG进行船舶运动的视觉仿真实验。1.2本课题的意义船舶运动控制是一个重要的研究领域,其最终目的是提高船舶自动化、智能化水平,保证航行的安全性、经济性和舒适性。而船舶操纵性是船舶航行的重要性能之一,对航运安全有非常大的影响。特别是近年来,随着海运的发展,船舶的吨位急剧增大,航速提高,航运频繁,使船舶航运安全成为一个突出的问题。许多国家都要求新建造的船舶及进入该国水域的船舶提交操纵性计算书和相关的试验报告。国际海事组织(IMO)和各国政府都在致力于“船舶操纵性标准”的制定。随着人们对船舶操纵性的日益关注,准确计算船舶操纵性已经提上了议事日程。基于上述目的本文分析了风和水流对船舶操纵性能的影响,研究船舶对操舵的动态响应。建立了在风和流共同作用下船舶操纵系统的动力学模型,用于模拟船舶在操舵后的运行状况。同时通过回转性实验对该模型进行了验证。通过建立船舶的动态响应型运动模型,并对其运动进行仿真,旨在研究Simulink环境下船舶运动控制的单机仿真,为船舶的操纵性能和船舶运动控制规律的研究提供方便手段。能够使我们了解船舶对于操舵的动态响应,操舵对于船舶的航迹改变的具体影响,也能起到预报船舶操纵特性的作用。通过引入风与水流的动力模型,可以分析风速、风舷角、流速、流舷角对于船舶运动的大致影响,让大家了解在大风流下如何对船舶进行操纵才能保持船舶运动的稳定性。对于船舶的回转运动的仿真,可以加深对船舶回转运动特征的认识,对于定常回转运动的特征参数(定常回转直径、定常回转周期等)有进一步的了解,在仿真过程中也能够让我们了解到影响船舶回转运动的一些因素。判断一个船舶的回转性的好坏可以从其相对回转直径看出。将Simulink模型中仿真的数据通过其外部模式变成实时输出数据,用标准串行端口RS232发送并接受数据,再通过C++编写程序连接数据库和RS232的数据提取,利用VisualC++与SQL的接口读取数据,并通过OSG实现实船的运动视觉仿真。这样可以让我们更形象的观察操舵、风流对于船舶在航行中影响,航迹的具体改变,有助于我们形象具体的进一步认识。第二章响应型船舶运动数学模型的建立响应型模型是船舶运动数学模型的另一种表达形式。50年代末野(Nomoto)从控制工程的观点将船舶看成为一个动态系统,舵角为系统的输入、首向角或首摇角速度为系统的输出。首先从简捷的物理考察上,建立了系统输入输出的响应关系的一阶响应模型。后来又从状态空间型的线性船舶运动数学模型出发,建立了二阶响应模型。以后根据不同的需要,建立了非线性响应型模型。这些模型的一个重要特点是:模型参数可直接从规定的实船试验中获得,从而避免了状态空间型的模型(如MMG模型)参数需用模型试验获得的缺陷,这就自动消除了尺度效应。因此,响应型船舶运动数学模型在船舶操纵性的研究领域中及在船舶航向、航迹自动控制研究中,在早期的航海模拟器、操纵模拟器研制中都得到了广泛的应用。它实质上为船舶运动数学模型的研究开辟了一个新领域。2.1线性响应模型建立一个系统的数学模型主要有两方面的工作要做:一是根据物理意义在一定的简化条件下建立模型的结构;二是根据系统的特征数据,确定模型的参数。线性响应模型的结构,一般是通过对状态空间型的线性船舶运动数学模型进行一定的推导获得。线性响应模型的参数,一方面可通过实船或自航船模进行规定试验的结果求得,另一方面也可由线性船舶运动数学模型中的流体动力导数计算而得。本节首先介绍线性船舶运动数学模型,再建立响应性模型,最后给出由流体动力导数求响应型模型参数的计算公式。2.1.1线性船舶运动数学模型的建立建立线性船舶运动数学模型一般有两种途径:一种途径是利用整体建模思想直接对作用于船舶(包括船体、舵、桨)上的流体动力和力矩进行泰勒级数展开,取一阶项,再根据船舶的几何特征进行整理而得。但是,由于目前可利用的整体性模型流体动力导数资料有限,从而使响应模型的参数计算受到了限制。另一种途径是根据MMG模型,由船舶运动的特点,简化成线性船舶运动数学模型。该方法利用MMG分离建模的优点,能直接有船型参数计算流体动力导数,在此基础上响应模型参数的计算也相当方便了。本节我们采用后一种方法。MMG模型取附体坐标系原点在船舶重心G,则采用如下船舶运动方程式(2-1-1)式(2-1-1)中的第三个方程右端出现了,其原因是模型试验时测量流体动力矩是相对于船舶中心进行的,因此需要将修正到相对于重心的力矩故而作项变动,是船舶中心在坐标系中轴坐标值。按MMG建模的基本要求,将作用于船体上流体动力和力矩分解为(2-1-2)其中,、、分别为裸船体、桨和舵上单独作用的流体动力和力矩,其余为它们之间相互干涉的流体动力和力矩,如表示桨对船体干涉的流体动力等。这样的分解意义明确。但试验时求取有些项会有一定的困难,因为这些项数量级不大可以忽略。另外,为了表示简洁,一般可表示成下式(2-1-3)我们进一步将作用于裸船体上的流体动力和力矩按产生的性质分解为惯性类和粘性类流体动力和力矩,所以式(2-1-3)可改写为(2-1-4)其中,下标表示为惯性类,表示粘性类流体动力和力矩。将式(2-1-4)代入式(2-1-1)可得(2-1-5)一般假设坐标系原点与船舶中心和重心重合,同时将惯性类的力与力矩转换为船舶沿、轴的附加质量和绕轴的附加质量惯性矩。则式(2-1-5)变为下式:对于船舶前进对于船舶横移 (2-1-6)对于船舶转头式中:、、为作用于裸船体上的流体动力,、、为螺旋桨推力,、、为舵力;、为船舶运动的加速度分量;为转首角加速度;为船舶质量;、为船舶沿轴和轴的附加质量;为船舶绕轴的质量惯性矩;为船舶绕轴的附加质量惯性矩。现将式(2-1-6)中有关各项的计算总结如下:作用于船体流体动力的计算裸船体流体动力== (2-1-7)=式中的、是非线性流体动力,相对于线性流体动力来说为高阶小量可以略去。螺旋桨推力==(2-1-8)这里仅考虑船舶的前进运动,螺旋桨横向力和力矩应为零,即==0。舵力, (2-1-9)其中 (2-1-10)二、作用于船体流体动力的线性化所谓线性船舶,是指船舶受到的外界干扰较小,它的运动始终在平衡状态附近。作用于船舶上的各种流体动力是线性项取支配地位,二阶以上项的数量级相对较小可以忽略不计。一般把船舶的匀速直线运动作为初始平衡状态。假设,,,,为船舶的初始纵向速度。船舶受到外界干扰后,运动状态变化量分别为,,和,从而运动状态为,,,。下面讨论由扰动运动产生的作用于船舶上的流体动力。裸船体流体动力保留一阶小量、、和,略去二阶以及上的高阶小量,得== (2-1-11)=其中为船舶直航阻力,可表示为=-,为船舶的总阻力系数,它也是船速的函数,则上式可展示为=-(2-1-12)为船速时的总阻力系数。对上式作对的线性化处理,并令-- (2-1-13)为船舶在初始状态时的直航阻力,则(2-1-14)螺旋桨推力由于(2-1-8)中为进速系数J的函数,而又是的函数,则展开为=(2-1-15)其中,为船舶初始航行状态时的推力系数,且=(2-1-16)令则式(2-1-15)变为(2-1-17)舵力舵处来流的冲角=()中,考虑到小扰动时,()为小量,可用近似,且=,故有=+(2-1-18)因此(2-1-19)其中为小量,≈,得(2-1-20)将式(2-1-20)代入式(2-1-18),并考虑到为小量,有≈,≈1,则(2-1-21)++≈++(2-1-22)++≈++(2-1-23)由于小扰动,上面讨论中最后假设≈1,且采用了下列简化符号分别将上述结果代入式(2-1-6)可得△+++(2-1-24)++在式(2-1-24)中,考虑以下几个问题:在初始状态时,船舶阻力应与螺旋桨推力平衡,即(2-1-25)2)忽略二阶量和并令(2-1-26)则式(2-1-24)为△+(2-1-27)由式(2-1-27)可见,在线性运动时第一方程与第二、三方程解耦,即船舶纵向运动与横向和旋转运动互无影响,可以分别考虑。假设我们暂不考虑纵向速度变化的影响设船舶受外界小扰动时,纵向速度不变,则式(2-1-27)中的第一式可以除去,其余两式可以改为(2-1-28)式(2-1-28)即为线性船舶运动数学模型,它和由整体模型观点而得到的线性船舶运动方程的形式完全相同。 2.1.2线性响应模型一、二阶线性响应模型由式(2-1-28)推导的响应模型一般由两种方法,一种直接消去法,另一种是拉普拉斯变换法,我们采用后一种方法。为使问题简化,假设初始状态为匀速直线运动,则所有运动变量具有零初值,这样,经拉普拉斯变换后,方程组(2-1-28)为一代数方程组(2-1-29)其中,,,。由此可解得舵角到转首角速度的传递函数为(2-1-30)其中,;;;。同理可得舵角到横漂速度的传递函数,但在实际应用中,在技术上人们对转首运动要比对横向速度考虑得多。这在另一方面也是因为在实船或自航船模试验中,航向或转首角速度的测量比较容易,而对横向速度到目前为止还没有足够精确的测量设备。特别是对于实船,更是如此。所以我们仅考虑转首运动。二、一阶线性模型船舶运动时呈现出非常大的惯性,并且操舵机构的能量有限,能提供的舵叶运动速度通常低于,因此船舶运动具有低频特征。传递函数式(2-1-30)在低频下可降阶为一阶模型(2-1-31)其中,与式(2-1-30)中的相同,且。相应地,二阶转首响应方程也可近似简化为一阶转首响应方程,即(2-1-32)其暂态响应方程如下(2-1-33)通过前面的计算求出操纵性指数、,给出舵角则可计算出时间后的转头角。将式(2-1-32)积分求解,可得到(2-1-34)式中:为积分常数。若在正舵直进中开始操舵,在初始条件时,,可得到操舵开始后的变化为:(2-1-35)因此船舶操舵以后的旋回角速度将取决于和的值。2.2船舶运动的风、流干扰力数学模型无论是研究船舶操纵运动仿真还是船舶运动的闭环控制,都要求有相当准确地描述自然环境、海况和气象环境造成的作用于船体上的干扰力的数学模型。本文仅考虑风与流对船舶运动的影响。由于风、流的干扰具有明显的随机性,故建立风、流的干扰力模型较对船舶本身的动态研究困难更大。本节就从比较实用的角度介绍风、流干扰的物理本质,干扰力的计算方法不是那么的精确,只是想让大家认识到风、流对于船舶运动的大致影响。2.2.1风的干扰力数学模型船舶在海上或港内航行时,其上层建筑将受风力的作用,致使船舶偏离航向或引起操船困难。特别是在港内低速航行时,风力对操纵性的影响尤为显著。了解船舶在风中的操纵运动性能,可避免产生事故,还可以利用风力的作用来增加船舶操纵的灵活性。风作用在船体上层建筑以上造成流体动力和力矩,在船舶平面运动情况下,具有分量、和。在船舶上感受的风,风速和风向与实际的不同,原因在于船速的影响。我们将实际风速、风向称为绝对风速、绝对风向;将船舶上感受到的风速、风向称为相对风速、相对风向。下面介绍作用于船体上的平均风压力和力矩的计算。船体上的风压力和力矩的计算作用于船舶的风力其值可用Hughes公式予以估算:(2-2-1)式中:为水线上船体所受风力;为空气密度;为风力系数;为相对风速,;为相对风舷角;为水线上船体正面投影面积;为水线上船体侧面投影面积。相对风速和风舷角可用船上的风速仪测得,受风面积可以从该船资料中根据不同吃水求得。风力系数、风动力作用点至船首的距离以及风动力角等值,根据船体上层建筑的形状、布局的不同及风向的不同而有差异,一般用实船风洞试验获得。表1是根据各个船舶风洞试验结果得到的。表1、、和变化关系00.45~0.95201.20~1.450.25~0.4045~75401.40~1.750.30~0.4570~82601.25~1.500.35~0.4570~82801.05~1.250.40~0.5085~87901.05~1.250.45~0.5587~951201.25~1.500.55~0.7092~1051401.40~1.800.58~0.80100~1151601.25~1.500.60~0.85105~1301800.60~0.90(注:为船舶垂线间长,)当船舶处于运动状态时,以重心为支点,则风动压力转船力矩为:(2-2-2)式中:为重心至船首的距离,(为船舶垂线间长,)。2.2.2水流的干扰力数学模型通常来说,流从时间上分为定常和非定常,从地理位置上分为均匀和非均匀的假设,即流速度的数值和方向不随时间和空间点的位置变化而变化。这种流的干扰模型只适用于海洋上的操纵模拟,在港湾、航道、近海航道等处的流一般会因时因地发生变化。而本文仅考虑均匀流的干扰模型。实用中在考虑水动力时,常将其分为首尾向分力和横向分力加以处理,而首尾向水动力在操纵中可通过用车予以克服,一般商船可不予以考虑。这样,只考虑横向分力:(2-2-3)式中:为水动力系数;为流压力横向分力系数;为船舶吃水;为船舶两柱间长;为相对流速(水流对船速度),。流压力围绕船舶重心所产生的流压力转船力矩可用下式估算:(2-2-4)式中:为重力加速度,;为船舶水线长,;为流压力转船力矩系数。表2列出了不同水深/吃水下,与流舷角的关系。力矩系数20406080901001201401600.010.080.070.000.040.080.120.110.020.100.200.150.010.080.180.300.320.120.280.480.380.050.150.300.600.600.38表2不同水深/吃水下与流舷角的关系当为表中某两值之间时,可用插值法求得。2.2.3风和流共同作用下船舶的操纵模型将风和水流的影响转换为产生同样大小力矩的舵角的变化,这个附加舵角用表示。在式(2-1-33)的基础上,通过计算可得到系统暂态方程为:(2-2-5)将舵转船力矩替换为风和水流产生的转船力矩,则附加舵角可表示为:(2-2-6)这样我们就建立了有外界干扰力的响应型船舶运动数学模型。即输入控制量为舵角,输出量为船舶的首向角或首摇角速度。但是对于该系统我们还需要大量的计算,利用已知的船型参数求出该模型中的参数,我们将在下面的一节中给出详细的参数计算过程。2.3模型参数的计算由于我们模拟是13000DWT散货船,根据提供的船体的基本参数和主机的基本参数(详细见附录),可以对模型的参数进行一系列的计算。但是由于计算过程繁琐,具体分为三个部分来叙述。2.3.1船舶质量与转动惯量的计算1、船舶在运行中其质量为空船质量与其载重量之和,即,由已知条件求出为:2、由阿基米德原理知船舶的浮力即为船舶的质量,即可以求出其排水量为(我们设为淡水,密度为)3、方型系数的计算通过查阅书籍知方形系数,代入数据求出4、附加质量、的计算从实用计算的角度来看,到目前为止,计算附加质量和附加惯性矩有两种方法,一是周昭明等人的回归公式;另一个是Clarke等人的回归公式。在这里主要采用Clarke的回归公式。便于下面计算我们先用周昭明回归公式计算。=2\*GB2⑵根据Clarke回归公式~,代入数据得,5、转动惯量和附加转动惯量计算=1\*GB2⑴查阅书籍知=2\*GB2⑵根据Clarke回归2.3.2流体动力及流体动力导数的计算1、基础量的计算=1\*GB2⑴螺旋桨处的来流速度查阅资料,对于单螺旋桨船其伴流系数,则,代入数据求出=2\*GB2⑵流入舵的有效纵向速度根据藤井提出的公式,其中为桨的增速量,为试验系数,为,为螺旋桨的失滑。取螺距比为,则。而,代入数据可以求出(为螺旋桨的转速)=3\*GB2⑶整流系数可由下式求出=4\*GB2⑷可视为舵的纵向坐标,概念上应为,但是大量的模型试验结果表明,约为的倍,取=5\*GB2⑸、为计入操舵诱导船体横向力后关于舵力的修正因子,可用下面的拟合式:;为操舵诱导船体横向力作用中心到船舶重心的距离,,实用上约为(~),取为,计算结果如下:,=6\*GB2⑹是舵升力系数在时的斜率,在船舶操纵性研究中,对可采用Prandtl公式,其中为展弦比,根据资料查阅单桨货船,代入求出=7\*GB2⑺舵面积查阅得知其计算公式为,其中对于单桨单舵海洋货船~,取为;为垂线间长,将数据代入公式求得2、流体动力导数的计算在第一节建模的过程中我们已经给出了一些公式,利用这些公式将上面求得一些基本量代入公式可求得=1\*GB2⑴=2\*GB2⑵=3\*GB2⑶=4\*GB2⑷由于、是关于、的函数,故、、、可通过、的偏导求得。下面给出、的表达式:(2-3-1)其中,;,而;是处横截面的附加惯性系数的最大值,对于船体而言,一般有>,通过查阅资料令。在求、、、时我们将看作,则计算结果如下:=5\*GB2⑸=6\*GB2⑹=7\*GB2⑺=8\*GB2⑻3、流体动力的计算=1\*GB2⑴=2\*GB2⑵=3\*GB2⑶=4\*GB2⑷=5\*GB2⑸=6\*GB2⑹2.3.3、、的计算由于、、的值的计算公式在第一节中已给出计算公式,因计算结果表达式较为复杂,我们将通过Simulink给出计算公式的模拟,从而求出这些值。2.3.4风、流模型中的参数计算1、风力模型中的力与力矩的计算由公式(2-2-1)、(2-2-2)我们知道式中:为水线上船体所受风力;为空气密度;为风力系数;为相对风速,;为相对风舷角;为水线上船体正面投影面积;为水线上船体侧面投影面积;为重心至船首的距离,(为船舶垂线间长,)。=1\*GB2⑴取空气密度=2\*GB2⑵由船体的参数我们可以计算出、大约为,=3\*GB2⑶由第二节中的表1知、、与相对风舷角有关,但是具体的数学关系不是很清楚,基于这点,这三个量的计算我们将在Simulink中利用其模块进行插值从而求出任意一个下对应的、、的值。从而2、流模型中的力与力矩的计算因为从公式(2-2-6)我们发现只需计算流力矩,而由公式(2-2-4)式中:为重力加速度,;为船舶水线长,;为船舶吃水;为流压力转船力矩系数。=1\*GB2⑴为与前面的计算保持一致我们令=2\*GB2⑵由前面的分析知与流舷角和不同水深有关,我们取对应的值在Simulink中进行数值插值,从而得出不同流舷角对应的因此3、附加舵角的计算由公式(2-2-6)知公式中,其中为有效冲角,由于其计算表达式中、与风速、风舷角、流速、流舷角有关,与柴油机转速和船舶纵向速度有关,所以我们在这不给出的展开表达式,同样将在Simulink中给出模拟,在模拟时由于难以求得,我们令其为。接下来我们将在下一章详细介绍数学模型在Simulink中的建模过程。第三章基于Simulink的船舶运动模型的建立与仿真3.1Simulink的简介Simulink是一种用来实现计算机仿真的软件工具。它是MATLAB的一个附加组件,用来提供一个系统级的建模与动态仿真工作平台。它一般可以附在MATLAB上同时安装,也有独立安装版。Simulink是用模块组合的方法来使用户能够快速、准确地创建动态系统的计算机模型的,特别是对于复杂的非线性系统,它的效果更为明显。Simulink是一种基于MATLAB的框图设计环境,支持线性系统和非线性系统,可以用连续采样时间、离散采样时间或两种混合的采样时间进行建模,它也支持多速率系统,也就是系统中的不同部分具有不同的采样速率。为了创建动态系统模型,Simulink提供了一个建立模型方块图的图形用户接口(GUI),这个创建过程只需要单击和拖动鼠标操作就能完成。利用这个接口,用户可以像用笔在草纸上绘制一样,只要构建出系统的方块图即可,这与以前的仿真软件包要求解算微分方程和编写算法语言程序不同,它提供的是一种更快捷、更直接明了的方式,而且用户可以立即看到系统的仿真结果。Simulink没有单独的语言,但它提供了S函数规则。所谓的S函数可以是一个M文件、FORTRAN程序、C或C++语言程序等,通过特殊的语言规则使之能够被Simulink模型或模块调用。S函数使Simulink更加充实、完备、具有更大的处理能力。同MATLAB一样,Simulink也不是封闭的,它允许用户可以很方便的定制自己的模块或模块库。Simulink中包括了许多实现不同功能的模块库,如Sources(输入源模块库)、Sinks(输出模块库)、连续模块库、MathOperations(数学模块库),以及线性模块和非线性模块等各种组件模块库。用户可以自定义和创建自己的模块,利用这些模块,用户可以创建层次化系统模型,可以自上而下或自下而上地阅读模型,这不仅方便工程人员的设计,而且可以使用自己的模型方块图功能更清晰,结构更合理。创建了系统模型后,用户可以利用Simulink菜单或在MATLAB命令的方式选择不同的积分方法来仿真系统模型。对于交互式的仿真过程,使用菜单是非常方便的,如果要运行大量的仿真,使用命令行方法则非常有效。例如,执行蒙卡洛仿真,或想要扫描某一范围的参数值,可以在命令行输入变参数值,观察参数值改变后的系统输出。此外,利用示波器显示模块或其他显示模块,用户可以在仿真的同时观察仿真结果,而且还可经在仿真运行期间改变仿真参数,并同时观察改变后的结果,最后的结果数据也可以输出到MATLAB工作区进行处理,或利用命令行命令在图形窗口中绘制仿真曲线。Simulink中的模型分析工具包括线性化工具和调整工具,这可以从MATLAB命令行获取。MATLAB及其工具箱内还有许多其他的适用于不同工程领域的分析工具,由于MATLAB与Simulink是集成在一起的因此任何时候用户都可以在这两个环境中仿真、分析和修改模型。Simulink系统建模的主要特性是:=1\*GB3①框图式建模。Simulink提供了一个图形化的建模环境,通过鼠标单击和拖拉操作进行框图式建模;=2\*GB3②支持非线性系统;=3\*GB3③支持混合系统仿真,即系统中包含连续采样时间和离散采样时间;=4\*GB3④支持多速率系统仿真,即系统中存在以不同速率运行的组件;=5\*GB3⑤MATLAB与Simulink是集成在一起,因此,无论何时在任何环境下都可以建模、分析和仿真用户模型3.2线性响应型船舶运动模型的建立要在Simulink中建立一个模型,首先我们需要先启动Simulink,但由于Simulink是MATLAB中的一个附加组件,所以需先启动MATLAB。在MATLAB窗口中单击按钮或在命令窗口中输入命令Simulink,将会进入Simulink库模块浏览界面,如图3-1所示。单击窗口左上方的按钮,Simulink会打开一个名为untitled的模型窗口,如图3-2所示。图3-1Simulink的主界面—库模块浏览器图3-2空的模块窗口下面即可在新创建的空模块窗口进行模型的创建。3.2.1流体动力模型的建立1、流体动力表达式的分析我们在第二章已经将流体动力的表达式给出,如下所示:=1\*GB2⑴=2\*GB2⑵=3\*GB2⑶=4\*GB2⑷=5\*GB2⑸=6\*GB2⑹下面只需要根据得到的公式进行模型的建立,观察得知有三个输入量即、、,且、、、中都含有相同的一个表达式即(3-2-1),所以我们先将建立这个表达式的模型。2、表达式(3-2-1)模型的建立=1\*GB2⑴添加模块=1\*alphabetica、双击Simulink库块浏览器窗口中的源图标,打开源模块库(Sources),如图3-3所示。图3-3打开源模块库从源模块库(Sources)中把常数模块(Constant)拖曳到模型窗口,用鼠标右键点中此模块不放并移动鼠标,则完成了此模块的复制,再次重复这样的操作,即得到三个常数模块,如图3-4所示。图3-4添加常数模块=2\*alphabeticb、打开数学模块库(MathOperations),将增益模块(Gain)、除法模块(Divide)、开方模块(Sqrt)拖到窗口中;再打开用户自定义函数模块库(User-DefinedFunctions),将自定义函数模块(Fcn)拖至窗口中。根据公式(3-2-1)中的运算符号把相应的模块按上述方法进行复制,并将各模块移动至适当位置,如图3-5所示。 图3-5添加剩余所需模块=3\*alphabeticc、各模块参数的设置只需双击各模块即会弹出其参数设置界面。将Constant当作V,Constant1当作u,Constant2当作n。Gain中的值不变为1,Fcn中的参数项的表达式变为u^2,如图3-6所示。图3-6Fcn参数的设置将Gain1中的值变为0.651,Gain2中的值变为3,Fcn1中的表达式改为1+6.3*(1-u)^1.5,如图3-7所示。图3-7Fcn1参数的设置改变Divide1的参数输入个数,只需将输入个数项变为*//,即实现输入量为三,如图3-8所示。图3-8Divide1输入量的设置=2\*GB2⑵改变模块注释如将Constant改为V,双击Constant字样即可以进行操作,如图3-9所示。下面按此方法依次将Constant1改为u,Constant2改为n。当想改变模块大小时需先选中模块,模块四角出现了小方块。单击一个角上的小方块,并按住鼠标键,拖曳鼠标,如图3-10所示。图3-9改变标签的操作图3-10改变模块大小的操作=3\*GB2⑶连接模块一般模块左边的“>”符表示输入,右边的“>”符表示输出。将鼠标指针放到Constant模块的输出口处,则鼠标指针即变为十字叉形,拖曳鼠标从输出口到Gain的输入口,当放开鼠标按键后,信号线就变成了带有指向信号输入方向箭头的有向线段。当遇到需要引信号线的分支时,如在Gain1和Divide1之间,可在信号线某处按下鼠标右键,则指针变为十字叉形。按住鼠标并拖曳到Divide的乘法输入端端口处,则十字叉变为双十字叉形。放开鼠标按键,新的分支信号线形成了。接下来用同样的方法完成剩余模块的连接,如图3-11所示。图3-11表达式(3-2-1)的模型图3、流体动力模型的建立=1\*GB2⑴按照公式将所需的模块按照上述的方法拖入到模型窗口中=2\*GB2⑵设置各模块的参数值,并改变模块的标签=3\*GB2⑶连接模块,结果如图3-12所示。图3-12流体动力模型3.2.2操纵性指数K、T模型的建立我们从K、T的计算公式可以看出其与上节的流体动力以及质量和转动惯量有关,故在上述流体动力模型的基础上来建立K、T的模型。方法同上面的相似。=1\*GB2⑴从模块库中添加所需的模块到模型窗口中=2\*GB2⑵改变模块的参数以及标签名=3\*GB2⑶连接模块。结果如图3-13所示。图3-13K、T模型的建立3.2.3线性响应型船舶运动模型的建立由于在上一小节我们已经将操纵性指数K、T模型建好,现在只需要将表达式(2-1-33)的模型建立好即可实现以舵角为输入,转首角为输出的响应型船舶运动模型。=1\*GB2⑴添加模块因为一阶转首响应方程为(其中),其积分求解后为,所以在建立的模型上再进行一次积分即可求出转首角的变化。根据分析从连续模块库(Continuous)中拖一个积分模块(Integrator)到模型窗口中;从源模块库(Sources)中拖一个仿真时间模块(Clock)到模型窗口中;再从输出显示模块库(Sink)中拖示波器模块(Scope)、显示模块(Display)至窗口中,以便在运行仿真过程中观察所需数值的变化和航迹的变化。其余的所需模块通过在内部进行复制。=2\*GB2⑵设置模块参数以及改变模块标签=3\*GB2⑶连接模块连接好后的模型见图3-14。我们设置V=5,u=5,n=500,δ=35,进行运行仿真,过程中没有报错,所以模型建立基本正确。至于仿真结果我们在下面会进行详细分析。图3-14线性响应型船舶运动模型3.3风、流模型的建立由于刚建好的线性响应型船舶运动模型的界面空间不是很大,考虑到Simulink中有创建子系统的功能,所以我们考虑新创建一个Simulink模型来创建风、流模型,然后将创建好的模型压缩为子系统,最后全部复制到图3-14中。3.3.1风力模型的建立方法同上面的相似,分析公式可知输入量为相对风速和风舷角,而、、和变化关系见第二章的表1。通过计算模拟、和的关系大致可以如下式表达:,则通过查表模块进行拟合。=1\*GB2⑴添加模块对于常用的模块我们在此不再赘述,对于,从查表模块库(LookupTables)中将LookupTable模块添加到窗口中;从数学模块库(MathOperations)中将特殊数学函数(MathFunctions)模块加入到窗口中。=2\*GB2⑵设置模块参数依照表1我们将LookupTable模块中的Main项内的参数改为图3-15所示;对于MathFunctions模块,其参数设置模块界面中的Function后有一个下拉符号,点击将公式变为square,如图3-16所示。图3-15的拟合图3-16MathFunctions模块公式的设置=3\*GB2⑶连接模块由于在Simulink中三角函数的默认输入是弧度,所以在sin(u)前需要将弧度转化为角度,连接后的见图3-17。图3-17风力模型3.3.2流力模型的建立同样根据公式分析输入量,由于与流舷角有关,且研究方法同的一样,参数设置见图3-18。可知输入量为流线角和相对流速。因为建立的方法同风力模型相似,所以就不再叙述,结果如图3-19。图3-18的拟合图3-19流力模型3.3.3附加舵角模型的建立根据公式,可知与有关,而与线性响应型船舶运动模型的相关量有关,所以在这我们先把当作常数输入。结果如图3-20所示。图3-20风、流引起的附加舵角模型3.4模型的整合通过上几节的操作已经将所需的模型建好,但是并不在一个文件中,所以需要将这几个分散的模型整合到一个模型中。我们知道只需要将风、流引起的附加舵角的模型加入到线性响应型船舶运动模型中即可。但是由于操作界面尺寸的限制,同时为了模型简洁化,将采用Simulink中的压缩子系统的方法。3.4.1压缩子系统随着模型变得越来越大、越来越复杂,人们很难轻易地读懂它们。在这种情况下,子系统通过把大的模型分割成几个小的模型系统以使得整个模型更简捷、可读性更高,而且这种操作并不复杂。创建Simulink子系统共有两种方法:第一种是对已存在的模型的某些部分或全部使用菜单命令【Edit〉CreateSubsystem】进行压缩转化,使之成为子系统;另一种方法是使用Connections模块库中的Subsystem模块直接创建子系统。我们采用第一种方法将附加舵角模型压缩为子系统。1、首先使用范围框将要压缩成子系统的部分选中,包括模块和信号线;也可以通过shift键逐一添加。如图3-21所示。图3-21选中要压缩的模块2、在模块窗口菜单选项中选择【Edit〉CreateSubsystem】,Simulink将会用一个子系统模块代替被选中的模块组,将模块位置适当调整,结果如图3-22所示。图3-22压缩后的模型图3、若想查看子系统的内容或对子系统进行再编辑,可以双击子系统模块。3.4.2模型的组合1、将压缩后的子系统整体复制到线性响应型船舶运动模型中,由于图3-22模型中的Vr与图3-14中的量有关,所以根据关系将两者进行连接。结果如图3-23所示。图3-23组合后的模型2、由于这样不容易观察输入量和输出量,故采用相同的方法压缩子系统,将图3-23的模块进行压缩,压缩后的模块见图3-24。图3-24压缩后的船舶运动模型3、运行模型在过程中没有发现任何问题,但是将所有输入量值设为零时,系统报错,由于模块中存在除法且为零项位于分母位置,故将其做稍微修改,修改处见图3-25。在后面的仿真过程中表明对原系统的精确度影响甚小。 图3-25对于原模型的修改处3.5仿真试验由于在建立船舶运动数学模型和随后确定流体动力及其导数等参数时,引用了一系列的简化和假设,从而得到的结果只能是近似的。而这种方法本身不能证实它自己的近似程度,故我们将对其作一些典型的试验来进行分析和比较。同时还通过试验来观察风与流对船舶运动的影响。船舶在实际操作中可能遇到的操纵情况是各种各样的,不可能一一进行试验,因此只进行几个典型的试验。3.5.1回转试验船舶的回转运动是船舶最基本的操纵运动。船舶作回转运动时,其重心G的运动轨迹称为回转圈。船舶的回转圈是衡量船舶操纵性优劣的方法之一。回转试验的目的是评价回转的迅速程度和所需要的水域大小。回转圈可用下列参数表征:进距;正横距;战术回转直径;定常回转直径。船舶在满舵回转时的定常回转直径称为最小回转直径,它是评价船舶回转性的重要指标。定常回转直径与船长的比值(D/L)称为相对回转直径,常用此比值来衡量船舶的回转性能。为了检验本模型是否能达到操纵的基本要求,做了如下船舶回转性实验。由于本模型的限制,回转试验的操作步骤大致如下:设置船速和柴油机转速(都设为额定值),并保持不变。先设舵角为,暂不考虑风、流的影响。开始运行模块,待船舶回转一圈时立马将变为;再等船舶以此舵角航行一圈时,将舵角变为。在此过程中记录航行轨迹见图3-26。图3-26船舶回转性试验图回转圈由大到小,依次为操舵、、时所划轨迹。计算可知对于时的相对回转直径为8.25,而一般大型货船的相对回转直径为3.5~7.5,相对回转直径越小则回转性越好,即船舶操纵性能越好。并且从航向图(见图3-27)读出船舶以额定航速、转速、最大舵角回转一圈的时间是10分钟左右。由上述分析知,本型的操纵性不是很好。图3-27船首转向角随时间的变化3.5.2风对船舶运动影响风对船舶的主要影响是:相对风速作用在船体水线上产生风动力及风动力的纵向分力,使船舶的航迹和冲程增加或降低;风动力的横向分力,使船舶向下风方向漂移;风动力与船舶重心形成的风动力转船力矩,使船舶发生偏转运动。为了使我们对影响有形象的了解做如下几个试验。舵角,航速为额定航速,相对风速,风舷角。船舶的运动轨迹见图3-28。(风向为自北向南)图3-28,的航迹2、舵角,航速为额定航速,相对风速,风舷角。船舶航迹如图3-29所示。(风向为自北向南)图3-29,时的航迹有此图可见,船舶运动时受到风力的作用会发生漂移。3.5.3流对船舶运动的影响船舶在均匀水流的水域中航行,其航速等于船速与流速的矢量和,同时船舶受水流的影响易产生偏转、漂移和横倾。同样试验如下:舵角,航速为额定航速,流舷角,相对流速。船舶航迹如图3-30所示。(流向为自北向南)图30,时的船舶航迹2、舵角,航速为额定航速,流舷角,相对流速。船舶航迹见图3-31。(流方向为自西向东)图3-31,时的船舶航迹3、舵角,航速为额定航速,流舷角从,相对流速。船舶航迹如图3-32所示。图3-32,时的航迹从上面几个试验可知在恒流值的作用下,船舶进行回转运动时,船仍进行回转,但是航迹沿流作用的方向发生了漂移。3.5.4结论本模型是建立船舶对舵响应的操纵模型。在模拟操舵后,船舶航向就会发生变化,虽然每种船舶航向变化大小不同,但其基本规律是相同的。在回转试验中,由于每艘船的操纵性指数不同,故其进入回转时间和回转圈大小就会不同,但它们的轨迹基本都是在做圆周运动;当考虑风、流影响时,船舶的航向就会发生改变,风、流的作用效果有点相似,都会使船舶发生漂移,风还会使船舶的航迹和冲程增加或降低。对于本模型仿真来说,由于它能够进行回转操作,说明模型基本正确,但是D/L值大于一般同类型的船舶范围,说明模型计算时有些参数的计算还存在一点问题;风、流对船舶的影响也只是一个大致描述,还需要进一步研究。第四章Simulink与数据库的连接及视觉仿真的实现为了实现仿真的实时性,模型产生的数据必须要与数据库连接实时更新,再通过一定的函数读取数据库中的数据从而实现视觉仿真。4.1Simulink模型仿真结果的实时输出输出方法是利用Simulink的外部输出模式即:在模型窗口的菜单栏点击Simulation,再点击ConfigurationParameters,弹出如图4-1的对话框。将SolverOptions下的Type类型改为Fixed-step,再点击左边Select的Real-TimeWorkshop,出现如图4-2所示的对话框。将Language改为C++,确定后按Build进行编译,最终编译成一个实时输出文件。同时需要在MATLAB窗口中需要说明下文件的路径。图4-1ConfigurationParameters对话框图4-2利用标准串行端口RS232将编译文件中的数据发送到另一台计算机中,且用RS232接受数据。4.2利用VC++连接数据库与RS232的数据提取进行VC++编程连接数据库的过程与代码如下:进行串口设置,并打开串口:voidCCommWizardDlg::OpenPort(){ if(m_Com.GetPortOpen()) m_Com.SetPortOpen(FALSE); m_Com.SetCommPort(m_nPort);//选择com1 if(!m_Com.GetPortOpen()) m_Com.SetPortOpen(TRUE);//打开串口 else AfxMessageBox("cannotopenserialport"); m_Com.SetSettings(m_strSettings);//波特率9600,无校验,8个数据位,1个停止位 m_Com.SetRThreshold(1);//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件 m_Com.SetInputMode(1); m_Com.SetInputLen(0);//设置当前接收区数据长度为0 m_Com.GetInput();//先预读缓冲区以清除残留数据}接收数据,将其存入缓存区,并进行分类,之后存入数据库,并清除缓存区的数据:voidCCommWizardDlg::OnOnCommCommctrl(){ //TODO:Addyourcontrolnotificationhandlercodehere VARIANTvariant_inp; COleSafeArraysafearray_inp; LONGlen,k; BYTErxdata[2048];//设置BYTE数组An8-bitintegerthatisnotsigned. CStringstrtemp; if(bReceive) { if(m_Com.GetCommEvent()==2)//事件值为2表示接收缓冲区内有字符 { variant_inp=m_Com.GetInput();//读缓冲区 safearray_inp=variant_inp;//VARIANT型变量转换为ColeSafeArray型变量 len=safearray_inp.GetOneDimSize();//得到有效数据长度 for(k=0;k<len;k++) safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组 for(k=0;k<len;k++)//将数组转换为Cstring型变量 { BYTEbt=*(char*)(rxdata+k);//字符型 if(m_nInputMode==2) strtemp.Format("%02X",bt);//将字符以十六进制方式送入临时变量strtemp存放,注意这里加入一个空隔 else strtemp.Format("%c",bt);//将字符送入临时变量strtemp存放 if(strtemp=="s")//检测数据开始位 { m_strReceive=""; check=1; } if(check>=1&&check<checklast) { if(check==1) { strtemp=""; } if(check==2) { name=strtemp; strtemp=""; } if(check==3) { if(strtemp=="-") { checklast=17; } else { checklast=16; } }m_strReceive=m_strReceive+strtemp; check=check+1; } if(check==(checklast-1)) { updataparameters(m_strReceive,name);//更换 UpdateData(FALSE); }} } }//更新编辑框内容重复接收数据并分类进行存储实现实时更新。4.3利用0SG实现视觉仿真利用VisualC++与SQL的接口读取数据,并通过OSG进行视景仿真,主要程序如下:class

Mytransformcallback1

:public

osg::NodeCallback{public://构造函数,传入一个角度,这个角度为计算移动值用的,移动的原理是,每一次时间变化乘以这个角度的量纲Mytransformcallback1(float

angularVelocity){m_angularVelocity=angularVelocity;HRESULT

hr;try

{

hr=m_pConnection.CreateInstance(__uuidof(Connection));if(SUCCEEDED(hr)){m_pConnection->ConnectionString="File

Name=testData.udl";m_pConnection->ConnectionTimeout=20;hr=m_pConnection->Open("","","",adConnectUnspecified);if(FAILED(hr)){AfxMessageBox("open

fail!");;

}

}else{AfxMessageBox("createinstance

of

Connection

fail!");}}catch

(_com_error

e){//_bstr_t

bstrSource(e.Source());//_bstr_t

bstrDescription(e.Description());AfxMessageBox("

数据库连接失败!");

}m_pRecordset.CreateInstance(__uuidof(Recordset));try{m_pRecordset->Open("SELECT

*

FROM

dataupdata",

//

查询DemoTable表中所有字段m_pConnection.GetInterfacePtr(),

//

获取库接库的IDispatch指针adOpenDynamic,adLockOptimistic,adCmdText);}catch(_com_error

*e){AfxMessageBox(e->ErrorMessage());}m_tankPosistion=osg::Vec3(0,0,0);m_tankPosistion1=osg::Vec3(0,0,0);angle=0;}virtual

void

operator()(osg::Node

*node,osg::NodeVisitor*

nv){//验证得到的点是不是MatrixTransformosg::MatrixTransform

*transform=dynamic_cast<osg::MatrixTransform*

>(node);//如果是的if

(nv&&transform&&nv->getFrameStamp()){//得到参考时间与当前时间差,用来计算cos然后改变移动值double

time=nv->getFrameStamp()->getReferenceTime();m_pRecordset->MoveFirst();

_variant_tvar

=

m_pRecordset->GetCollect("hengyao");//

_variant_tvar1

=

m_pRecordset->GetCollect("speed");//

_variant_tvar2

=

m_pRecordset->GetCollect("addangle");

hengyao=var;//

speed=var1;//

addangle=var2;//

angle=addangle;//

m_tankPosistion+=osg::Vec3(speed*cosf(osg::DegreesToRadians(angle+90)),speed*sinf(osg::DegreesToRadians(angle+90)),0);//同时计算速度和转弯角度//

m_tankPosistion1+=osg::Vec3(0.0/*speed*cosf(osg::DegreesToRadians(0.5*angle+180))*/,speed/**sinf(osg::DegreesToRadians(angle+90))*/,0);/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论