采用Simulink和VRML的六自由度弹道多视角可视化仿真
2019-02-25王意存常思江
王意存,陈 琦,常思江
(南京理工大学 能源与动力工程学院, 南京 210094)
Simulink是MATLAB重要组成部分,它能够对连续系统、离散系统、混合系统进行充分建模与仿真,操作直观简单,只需鼠标拖动选出库模块,通过信号线连接即可构造复杂仿真模型[1]。Simulink结合了MATLAB强大的计算能力,越来越多被应用到弹道仿真设计中。
VRML(Virtual Reality Modeling Language) 即虚拟现实建模语言,是一种三维造型和渲染的图形描述语言。VRML文件主要由节点、事件、世界、原型脚本和路由等组成[2]。编辑VRML文件的软件有很多,比如VrmlPad、Cosmo World、3Ds max、V-Realm Builder等。V-Realm Builder 2.0是MATLAB自带的一款功能强大的可视化VRML编辑器[3]。它简单易用,在生成复杂世界时无需输入大量的命令而只需要轻轻拖动鼠标即可实现大量程序才可能完成的功能[4]。
Simulink可以很好实现六自由度弹道仿真,文献[5-7]均进行了详细的研究分析,然而只是纯粹数值仿真,没有实现可视化。文献[8]利用MATLAB中的GUIDE工具建立了外弹道系统的图形用户界面,实现了仿真界面的可视化,并不是导弹飞行过程的可视化。文献[9-10]成功实现了导弹飞行过程的可视化。其中,文献[9]只有动力学和运动学模块,并未加入制导,且没有跟踪视角,不能很好观察导弹的姿态变化。文献[10]基于网络化控制系统(NCSLab)设计开发了导弹3D实时仿真平台,然而系统开发设计的过程复杂,使用不便。为了弥补上述不足,本研究在完整实现闭环六自由度弹道仿真的基础上,利用虚拟现实技术,加入可视化仿真,并创造性地设置跟踪观察视角,以便能更好观察导弹的飞行姿态。
1 六自由度弹道数值仿真模型的建立
搭建六自由度弹道数值仿真模型时,采用了模块化建模设计思想[11]。为便于调试和修改参数,将复杂系统分成多个子模块,分别搭建子模块,明确各模块输入输出关系,然后把各个子模块连接起来,从而建立一个清晰的Simulink仿真系统。
导弹仿真系统由4个子模块组成,分别是导弹运动模块、气动力计算模块、制导模块和自动驾驶仪模块。其中,导弹运动模块的核心在于导弹六自由度运动方程的搭建,详细方程及其推导见文献[12-13]。该模块的主要作用是根据导弹的受力及力矩,结合导弹的结构解算出导弹的姿态、位置等信息。气动力计算模块根据弹体姿态、导弹受力及控制指令解算出导弹的受力和力矩,本研究将其包含在导弹运动模块中。制导模块根据导弹信息和目标信息,计算出过载指令。制导模块分为导引头子模块和制导律子模块,导引头子模块的输入是弹目位置信息,计算出视线角和视线角速率等信息,而制导律子模块则根据上述信息计算得到导弹的过载指令。过载自动驾驶仪模块的输入是导弹状态及过载指令,然后根据PID控制律,最终输出舵偏角信号,以实现对导弹的控制。
搭建好上述各个子模块后,通过封装,将其对应连接起来,从而建立六自由度弹道Simulink数值仿真模型,如图1所示。
2 虚拟现实模型的建立
考虑到导弹模型的精准美观,本研究先运用Solidworks软件建立导弹3D模型,如图2所示。将模型另存为WRL格式文件,再导入到V-Realm Builder 2.0中。
图1 六自由度弹道Simulink数值仿真模型
图2 Solidworks建立的导弹3D模型图
V-Realm Builder 中一个重要部分是Object Library(对象库),它包含有已设计好的虚拟对象,可以直接将对象库中的标本对象加入到虚拟现实模型中[8]。本文的目标模型就是利用对象库直接获得,通过Libraries菜单栏下的Import From选项可选择所需模型。本文选用的目标模型是一栋大楼。
对于导入的导弹模型和目标模型,其初始参数并不尽合理,需对其进行调整,主要调整参数是调节大小的scale参数和调节位置的position参数。需要说明的是,位置参数position也并非必须调节,因为在后续过程中,会对虚拟现实模型设置translation端口来导入仿真数据。
视角(Viewpoint)的添加和设计是整个虚拟现实模型建立的重要问题,关于视角的添加方式参见文献[14]。视角设计的关键是设置好视角的orientation参数和position参数。为了能够直观跟踪观察导弹飞行姿态,本文设置了三视图视角,分别是右侧视角,前方视角以及俯视视角,如图3所示。为了实现跟踪观察,本文先为视角设置position端口,然后导入Simulink仿真数据。
3 使用VR工具箱连接虚拟现实模型
当产生一个数值仿真模型和虚拟现实模型后,便可以通过虚拟现实工具箱(VR工具箱)将二者连接起来。连接的核心模块是VR Sink模块,它提供了从Simulink到虚拟现实模型的接口,是连接数值仿真和虚拟现实的纽带[15]。
图3 导弹的跟踪观察视角图
本文设置的VR Sink接口包括控制导弹位置的Missile translation接口,控制导弹姿态变化的Missile rotation接口,控制目标位置的Building translation接口,以及控制跟踪观察视角位置的ViewRight position、ViewForward position、ViewUp position接口。
由Simulink数值仿真模型生成的数据信号并不能直接导入到虚拟现实模型中,必须要经过转换。信号转换过程主要包含如下两方面。
首先,对于控制视角位置的3个接口,视角的位置一定要与导弹位置相距合适的距离,否则并不能观察到导弹。其次,对于导弹的姿态角,需要转换成虚拟现实模型中的角度。方法是通过Rotation Angles to Direction Cosine Matrix模块把3个姿态角转换为方向余弦矩阵,然后利用Rotation Matrix to VRML Rotation模块把方向余弦矩阵转换为一个四元素向量,代表了旋转轴和绕该轴旋转的角度[14]。最终建立的虚拟现实信号转化模块如图4所示。
将前文搭建的数值仿真模块、信号转换模块和VR Sink模块进行相应连接,从而搭建成可视化仿真模型,如图5所示。
4 仿真结果分析
应用搭建好的Simulink数值仿真模型,设定仿真参数,主要参数值的设置见表1所示。
运行仿真,仿真计算的部分结果如图6~图9所示。
从图6可以看出,导弹先是在x-y面飞行,当弹目距离小于设定值R*时开始启动末制导。从图7可以看出,俯仰角是先从正值减小到0,然后继续减小为负值,在该阶段,导弹无控飞行。当飞行时间t=85 s左右时,弹目距离开始小于设定值,制导系统开始启动。由于目标的位置大于导弹无控飞行射程,因此在制导系统的作用下,导弹俯仰角逐渐增大,以使导弹继续向前飞行,变化情况符合导弹实际飞行情况。从图8可以看出,在t=85 s左右攻角和侧滑角发生剧烈变化,说明在此时开始末制导。导弹舵偏角变化曲线如图9所示,从中可以看出,在末制导过程中,俯仰舵偏角为正值,而偏航舵偏角为负值。正的俯仰舵操纵导弹抬头,进而增大俯仰角,这和图7中的现象是一致的。
图4 虚拟现实信号转化模块框图
图5 六自由度弹道可视化仿真模型框图
参数数值初速V0/(m·s-1)800弹道倾角θ0/(°)45导弹初位置坐标P0/m(0,0,0)目标位置坐标PT/m(32 000,0,500)末制导启动距离R*/m5 000
运行六自由度弹道可视化仿真模型,在VR Viewer中观看仿真动画,同时可以切换3种跟踪视角,观察导弹的飞行姿态。通过仿真动画可以看出大约在t=85 s左右俯仰角达到最小值,然后启动制导,俯仰角开始增大,与数值仿真结果吻合。分别截取t=20 s,t=80 s和t= 95 s的飞行姿态三视图如图10~图12所示。对比数值仿真结果,可以验证模型的正确性。
图6 导弹飞行三维轨迹
图7 导弹姿态角变化
图8 攻角和侧滑角变化
图9 导弹舵偏角变化
图10 飞行时间t=20 s导弹飞行姿态三视图
图11 飞行时间t=80 s导弹飞行姿态三视图
图12 飞行时间t=95 s导弹飞行姿态三视图
5 结论
1) 利用Simulink平台,先后建立了六自由度弹道数值仿真模型和可视化仿真模型,得出了数值仿真结果和可视化仿真结果,并进行了对比验证,结果符合实际情况。
2) 利用添加的多个跟踪观察视角,可以实时、直观地观察到导弹飞行姿态变化。
3) 可视化结果清晰直观,便于观察,有助于增强对模型的理解,在教学、演示、实验中都将起到重要作用。