一种飞行驾驶模拟器系统及模拟方法与流程

文档序号:12825225阅读:547来源:国知局
一种飞行驾驶模拟器系统及模拟方法与流程

本发明涉及飞行训练模拟领域,具体涉及一种飞行驾驶模拟器系统及模拟方法。



背景技术:

随着科学技术的不断发展,越来越多的高精尖技术运用于当代的军用飞机之中,这就需要飞行员必须具备娴熟且精湛的驾驶技术,才能出色的完成各项操作任务。众所周知,在真实的飞机驾驶舱内训练飞行员,需要耗费大量的物资,而且所需的空域场地不能随意安排,更为关键的是在真实飞机上难以模拟一些特殊的突发状况,基于这不利因素,采用地面模拟器来训练飞行员成为一种经济有效且安全的方式。

目前大多数传统飞行模拟软件的仿真度都比较低,功能模块不够完整,如今飞行驾驶舱内的功能模块十分繁杂,模块中的逻辑比较复杂,同时模块之间又相互影响,具有较强的耦合性,传统的飞行器模拟器软件已经不能完成飞行训练日益增长的需求。同时传统的飞行模拟器面向对象过于泛化,而目前飞行器种类多样,有不少飞行器驾驶舱具有特殊的功能模块,比如夜间灯等,如何针对特殊的飞行器设计特殊的飞行驾驶软件,这对飞行模拟软件的扩展性或者说可复用度有着较高的要求。飞机模拟的仿真度要求日益增高,为了增加飞行模拟的真实感,需采用半物理的方法,即添加实物的驾驶杆和油门杆,传统的软件方式已经不能够满足要求,且由于异地操作的需要,如电传设备软件要外接到飞机上,同时该软件要把采集到的数据返给数公里外的飞行模拟软件上,这样必然对系统的通信功能有着很高的要求。

现有的飞行训练模拟器一般是用于部队训练,训练成果的成绩考核是非常重要的一项。传统的方式一般是教练员观看学员训练并给出成绩,费时费力的同时可能还会出现误差,不能准确评价成绩。所以当下需要对飞行模拟软件添加一种成绩评价的模块,同时该模块还能对操作错误的地方进行提示,实现完全的自动化成绩考核和校正。

传统的飞行模拟软件在设计上功能单一,每个功能模块相互独立、没有联系,不能完成比较复杂的操作,现在的飞行模拟复杂度非常高,操作流程多,有时完成一个飞行操作需要几十步操作,需设计多个驾驶舱单元模块,这就要求驾驶舱各个单元模块必须能够相互通信,同时由于耦合度提高,必须设计一个可靠的主程序保证流程准确运行,同时还需多线程技术保证并发地完成多个功能模块的通信,使流程能够顺利地运行,提高程序的健壮性。



技术实现要素:

本发明的目的在于针对上述现有技术中的问题,提供一种飞行驾驶模拟器系统及模拟方法,该系统能够提高复杂操作的协同性,降低操作难度,功能完善,仿真度高,适于训练。

为了实现上述目的,本发明飞行驾驶模拟器系统由虚拟座舱子系统、检测训练子系统以及电传控制子系统组成;虚拟座舱子系统包括围绕在驾驶座椅四周的左舱操纵控制面板、中舱仪表面板以及右舱操纵控制面板;左舱操纵控制面板上搭载电传控制子系统,电传控制子系统包括操纵杆以及多种虚拟传感器,右舱操纵控制面板上搭载检测训练子系统;中舱仪表面板向左舱操纵控制面板和右舱操纵控制面板发送指令并进行显示,检测训练子系统与电传控制子系统之间实现参数的调整与检测以及故障的排查,且故障信息通过中舱仪表面板显示。

左舱操纵控制面板、中舱仪表面板、右舱操纵控制面板分别连接主机,主机间通过局域网连接。电传控制子系统的虚拟传感器包括转台、双轴传感器、动静压给定器及电传计算机。

本发明飞行驾驶模拟器模拟方法,包括以下步骤:

a.以真实座舱为模板完成虚拟座舱的图形建模;

b.设计图形界面,截取出所需的图片纹理,建立控制面板模型;

c.为各个控件设置属性,并编写行为代码,实现所有的基本功能;

d.座舱中每个面板的界面设计和功能实现后,将其分别生成为独立的动态链接库文件;

e.利用每个面板的功能信息和位置信息为各自的动态链接库文件命名并加载整合;

f.添加函数实现动态链接库文件之间控制参数的传递;

g.为模拟器系统各个元件之间的控制与响应编写逻辑关系代码;

h.整体编译并进行保存及执行。

所述的步骤a通过3dmax软件按照真实座舱图片绘制出虚拟座舱的三维图形;步骤b通过picpick软件截取出所需的图片纹理,并在glstudio软件中建立控制面板模型。

步骤d中对生成为独立的动态链接库文件采用组件调用的形式嵌入到主面板上完成仿真。

所述步骤e中将动态链接库文件插入到glstudio编辑器中完成加载,生成代码后编辑运行使各个功能正常执行。

所述的步骤f中通过glstudio软件中的resource()函数对动态链接库文件进行读写操作。

与现有技术相比,本发明飞行驾驶模拟器系统具有如下的有益效果:为了保证足够的环境仿真度,采用半物理的方式,加载了真实的硬件系统,采用操纵杆以及触摸屏,操纵杆包括驾驶杆和油门杆,驾驶杆1比1仿真a-10c飞机摇杆外形,具有真实的杆力以及触发按钮,能够实现前后推拉以及左右倾斜。该系统由虚拟座舱子系统、检测训练子系统以及电传控制子系统组成,三个部分之间协同操作,提高了内容完成度,不仅仅包含飞机的操作部分,还包含飞机的功能检测部分。虚拟座舱子系统能够实现人机交互功能,操纵控制面板上的控件或模块通过后台程序会返回相应的数值,在仪表面板上显示相应的变化,并通过网络通信将虚拟座舱产生的仿真数据在仿真机之间传输,实现了仿真机之间的实时通讯,通过接收网络输入指令,判断飞行仿真系统的工作状态,从而控制仿真界面的显示。电传控制子系统提供了电位计来反应飞机系统设备的运转情况,如果发生故障,会产生相应的报警信号,从而产生相应的故障处理动作,电位计信息返回给虚拟座舱子系统和检测训练子系统,使得虚拟座舱的仪表和告警灯得到正确的显示,然后自检测系统也能够知道各部件的状态信息。检测训练子系统设计了虚拟检测训练面板,训练过程中设有相应的操作卡,飞行员根据操作卡中的内容完成相应步骤,检测训练面板同时能够测量电传控制子系统以及虚拟座舱子系统的反馈信号,显示其他系统的工作状态,实现实体检查仪的所有功能。

进一步的,本发明左舱操纵控制面板、中舱仪表面板以及右舱操纵控制面板分别连接不同的主机,主机之间通过局域网连接,采用udp/ip方式通信能够实现模块之间的异地分布,提高系统针对特殊环境的可用性,网络通信的实时性、可靠性和可扩展性较好。

与现有技术相比,本发明飞行驾驶模拟器的模拟方法为各个控件设置属性,并分别编写行为代码,实现所有的基本功能,形成各个功能的模块类,这样就能够保证系统功能的可扩展性和代码的可复用性。座舱中每个面板的界面设计和功能实现后,将其分别生成为独立的动态链接库文件在模拟器后期的联合调试和完善过程中,如果需要对某个面板的功能进行修改和补充,只需要修改该虚拟面板的程序代码即可,不会干涉到其他面板功能的正常进行。本发明方法能够提高复杂操作的协同性,降低操作难度,功能完善,仿真度高,适于训练。

进一步的,本发明模拟方法采用3dmax软件进行图片素材的绘制,界面设计人性化,拥有可堆叠的建模步骤,使得模型制作更加弹性,同时具有渲染的功能,从而使驾驶舱模拟器在视觉上更加真实,方便飞行学员进行学习。通过glstudio软件建立控制面板模型,将虚拟座舱子系统的每个部分模块化,添加函数来设定模块的功能属性,便于维护和故障排查。

附图说明

图1本发明模拟器系统的整体结构模块图;

图2本发明模拟器系统的数据传输框图;

图3飞行驾驶模拟器虚拟座舱示意图;

图4驾驶杆数据获取流程图;

图5udp通信流程图;

图6地平仪显示界面示意图;

图7气压高度表显示界面示意图;

图8多功能显示屏显示界面示意图;

图9mfd中hvr界面示意图;

图10mfd中tst界面示意图;

附图中:1-虚拟座舱子系统;2-检测训练子系统;3-电传控制子系统;4-左舱操纵控制面板;5-中舱仪表面板;6-右舱操纵控制面板;7-检测训练虚拟面板。

具体实施方式

下面结合附图对本发明做进一步的详细说明。

参见图1-3,本发明飞行驾驶模拟器系统由虚拟座舱子系统1、检测训练子系统2以及电传控制子系统3组成。虚拟座舱子系统1包括围绕在驾驶座椅四周的左舱操纵控制面板4、中舱仪表面板5以及右舱操纵控制面板6;左舱操纵控制面板4上搭载电传控制子系统3,电传控制子系统3包括操纵杆以及多种虚拟传感器,虚拟传感器包括转台、双轴传感器、动静压给定器以及电传计算机等。右舱操纵控制面板6上搭载检测训练子系统2,中舱仪表面板5向左舱操纵控制面板4和右舱操纵控制面板6发送指令并进行显示。左舱操纵控制面板4、中舱仪表面板5以及右舱操纵控制面板6分别连接主机,主机之间通过局域网连接。

本发明触摸屏能让飞行学员通过触摸的方式和系统进行交互,代替了鼠标,直接通过手指按压界面上的虚拟开关和旋钮,反馈更加真实。为获取飞机操作杆信息,具体操作过程为:

参见图4,directinput提供api函数,为获取飞机操纵杆的数据信息,使用initdirectinput函数完成驾驶杆信息初始化工作,使用createdevice函数创建设备,设计数据格式,设置并获取设备属性,调用acquire函数获得设备,updateinputstate函数获取数据信息,freedirectinput函数放在程序最后,用来释放所有directinput对象占用的系统资源。

中舱仿真主机接收到驾驶杆信息,通过glstudio下角度偏转函数来实现飞机模型中方向舵控制、平尾俯仰状态控制,调节左右前后缘襟翼的倾斜角度(glstudio平台下有控制图片旋转的函数)。检测模拟装置接收到驾驶杆信息后进行相关操作卡的判断和执行。

使用glstudio设计图形界面,对各个控件编写行为代码,实现其基本功能,实现其基本功能,行为代码中需要每个功能模块或者控件抽象出来,形成各个功能模块类,这样就能够保证系统功能的可扩展性和代码的可复用性。明确每一块虚拟座舱的按钮、旋钮等输入部件和模块内外部的输出部件之间的控制逻辑,比如定义座舱左侧第三个面板中某个开关的值为l3_swith_1,这个是个bool型变量,它的值为true,被自己座舱内的告警灯调用,告警灯检测到它的值为true,所以执行灯闪亮的程序逻辑,同时它把自己的状态输出到主控程序中去,其他模块比如说中舱mfd显示模块知道变量值为true,就显示出开关状态位为打开状态。

设计控制面板的详细过程如下:

1、参照真实座舱图片,确定虚拟座舱的各面板及各模块的内容、相对位置和比例大小,完成虚拟座舱图形建模。利用3dmax软件按照真实座舱中控制面板中的图片,绘制三维图形。

2、设计图形界面,利用picpick等截图软件,截取出所需要的图片纹理。在glstudio中用制作好的纹理素材建立控制面板模型。

3、为各个控件设置属性,并编写行为代码,实现其基本功能。

4、座舱中的每一块面板的界面设计和功能实现完成后,将其生成为一个个独立的动态链接库文件(dll)。因为每块面板上的元件数量都很多,在glstudio中依次创建后会造成层次不清,不利于维护。因此采用dll设计方法,将虚拟座舱的各个面板模块化、独立化。先逐个设计面板模型,在glstudio定义与外界数据交换的接口函数,编写行为代码,并将其编译成dll,再用组件调用的形式,将其嵌入到主面板上完成仿真。在模拟器后期联合调试和完善的过程中,如需对某个面板的功能进行修改和补充,只需要修改该虚拟面板的程序代码,编译生成新的dll,用新的dll替换原有的dll即可,不会干涉其他面板功能的正常进行。

4、为了方便起见,利用每个面板的功能信息和位置信息为它们的dll命名,如ruone代表右舱上侧的第一块面板,ldtwo代表座舱下册的第二块面板,等等。将完成设计的几个dll文件全部加载到最后的整体文件中。具体的dll加载方式如下:

glstudio中对dll的加载方式非常简便,不需要了解底层的加载方式,即可对dll直接进行操作。在工具栏点击“(insertacomponent)”按键,选中需要加载的dll,即可将该虚拟装置插入到glstudio编辑器中。调整各个面板的大小,把它们放到合适的位置。点击生成代码,编辑运行该文件。在生成的exe文件中,所有面板的功能都能够执行。在该文件中,每个面板都是一个独立运行的整体,无论哪一部分出现了问题,都能够单独对它进行修改完善,而不会影响其他部分的正常运行。

6、添加函数来实现各个dll之间的参数传递,因为面板上的元件需要有交互响应,比如ruone.dll中的开关会控制ruthree.dll上等的亮暗等。因此加载各个面板的dll后,需要添加函数来实现各个dll之间的参数传递。接下来的工作就是在(中控)calculate()中对虚拟面板的接口进行读写操作,即传递控制参数。

a.在glstudio中,resource()函数可以读写dll的属性,这也是在创建各个dll的时候将所有输入输出接口定义为属性的原因;

b.ruone->resource(“hangdianxitong”)>>g1;//将右舱上侧第一块面板上的“航电系统开关”的值读出来,赋值给变量g1;

c.rutwo->resource(“canshuxianshi”)<<a1;//将变量a1的值传递给右舱上侧第二块面板上的“参数显示”元件。

7、为元件之间的控制与响应编写逻辑关系代码。如航电系统开关g1的值为1时,红灯亮,利用mode属性中红灯图片和白灯图片的显示与隐藏来实现该功能。

8、保存设计并生成代码,在vc++窗口中编译并执行工程。

以下是一些具体案例的实现,包括地平仪、气压高度表,以及多功能显示器的功能实现。

地平仪是用来测量和显示飞机俯仰和倾斜姿态的陀螺仪表,如图6所示。根据接收到的数据,利用dynamicrotate(value,z_axis)函数实现地平仪转动。

气压高度表实际上是一种气压计,它通过测量航空器所在高度的大气压力,间接测出飞行高度,如图7所示。在该图中指针以及方框中的示数都是动态的,不断地在发生变化。

旋转左侧的按钮,利用value(28.6f+(selfvalue()/100.0f)*2.4f)函数使气压示数发生变化,高度值的获取利用value((rampfloat(time*0.07,0.0f,12000.0f))来实现。

多功能显示屏主要由一些周边键以及显示屏组成,如图8所示。通过按压不同的周边键来查看不同的子画面,子画面主要是显示飞机灯光告警系统、座舱照明系统、飞机参数以及电传子系统故障等信息。多功能显示器需要显示十几个页面,因此在mfd界面中设置属性std::stringmode(“”)。利用visibility(false)函数将各个页面初始化隐藏,按压相应的周边键,只能显示对应的页面,利用visibility(true)函数将该画面显示出来。设置方法displaylocaltime(void),利用localtime(&localtime)获取时间并将其显示在界面上。

hrv界面通过代码location(targetfield->location()+value)实现crosshair位置的改变。

tst界面设置方法testpassed(inttestnumber,boolpassed),通过switch(testnumber)语句来实现文本框的显示。利用glscolorgreen(0,255,0,255),glscolorred(255,0,0,255)来实现绿色(pass)和红色(fail)的变化。综合告警灯盒的实现原理与多功能显示器类似,也是利用图片的隐藏和显示来实现灯颜色的变化,不再赘述。

虚拟座舱整体的通信实现采用udp/ip的方式(不同主机之间),可以实现模块之间的异地分布,提高系统针对特殊环境的可用性位于三台仿真计算机上的左舱、中舱、右舱,右舱需要实现交联功能,使三部分座舱能够实现数据的实时传送,并且中舱部分需要对接收到的左舱和右舱的数据进行判断,然后执行一定的显示,因此实现三者之间的通信是最主要的前提。网络通信的选择需要考虑实时性、可靠和扩展。实时性要求数据能够快速的进行传输。数据可靠性是由软件和硬件来保证的,软件上可以通过选择网络通讯的多种协议来保证数据传输的可靠性。硬件上,局域网以提供更循环冗余校验。在可扩展性方面,网络通讯方式比采用串口更容易进行系统的扩展。本设计基于局域网进行数据通讯来保证系统的实时性和可靠。因为考虑到要不断的传递数据,而且中舱的界面也需要实时的刷新,为了保证数据能现快速收发,虚拟座舱的三台仿真机之间利用udp/ip的协议交换数据。udp具有tcp所不具备的速度优势,极大地降低了执行时间,使速度得到了保证。应用程序体系结构采用客户机、服务器体系结构,即代码实现采用server/client的通信形式,其中中舱仿真机作为server端,左右舱主仿真计算机作为client端。建立通信连接后,进行双向的数据流通信,来实现三者之间的数据交换。套接字被称为程序和网络之间的api(applicationprogramminginterface,应用程序编辑接口)。使用套接字(socket)编写的通讯程序,可以较好的实现两个网络进程之间的数据交互。在本文的网络通讯中,使用的主要是windows提供的套接字接口。winsock是windows下网络编程的标准接口,是真正的协议无关的接口,借助于winsock可以较好地实现网内通信。现在开发网络应用程序都使用winsock2版本,需要将程序中包含头文件winsock2.h,它包含了绝大部分socket函数和相关结构类型的声明和定义,同时要添加ws2_32.lib库的链接。使用winsock编程步骤是比较固定的,如图5所示。

综上所述,本发明场景效果逼真,功能模块相互之间不冲突,可以各自维护,不互相干扰,代码可复用性好,实现了模块之间的通信,能够完成涉及多控件的复杂流程动作。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1