- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
?
?
基于GLStudio的飞机仪表仿真的研究
?
?
于丽娜崔佳璐王欣怡王佳逸傅懿婕
摘要:为了更好的实现飞机模拟仪表盘的仿真,基于GLStudio软件和VC++6.0进行制作,来进一步学习研究飞机仪表盘的。虚拟仪表通过应用程序将计算机与设备结合起来,用户可以利用计算机软件自主设计仪表的界面和指针来模拟飞机仪表,用程序可以实现指针转动,数字实时显示,图形闪烁,数据传递等,更便捷的实现飞机模拟仪表的仿真。
随着我国通用航空产业的迅速增长,市场对通航模拟训练器材的需求巨大。目前,国内在民用航空和通用航空领域逐渐开始重视飞行仿真技术的研究和仿真产品的研制。飞行模拟器仪表仿真系统作为与飞行员主要的交互窗口,它显示了各种重要的飞行参数和重要的导航参数显示的窗口。GLStudio有内建代码生成器把图形设计创建的文件生成可移植的VC代码。可进行人机互动,实时显示仪表之间的动态关联,效果直观逼真。GLStudio开发流程主要包括创建纹理、图形界面设计、软件设计、系统实现四大方面。
一.任务
依照某直升机座舱主仪表板,制作仿真仪表。虚拟仪表主要应用GLStudio和VC++6.0软件进行制作。通过UDP通讯协议通讯,实现数据交互。
二.技术指标
2.1统功能
模拟飞机的真实座舱仪表环境,以满足与飞行有关数据的指示。
2.2仿真系统总体要求
驾驶舱仪表的相对响应密切耦合,可以提供综合的感觉提示。这些仪表应当在规定时间内对驾驶员位置上快速有力的输入做出响应,但不能短于相应飞机在同样条件下做出响应的时间。
实时性:整体系统响应延迟时间:≯120毫秒。
电源:供电电压:380/220V
电源频率:50Hz
电压波动:±10%
三.总体设计
仿真结构如图一所示。
该项目制作的虚拟仪表均显示在LCD上,程序运行于航电/接口控制计算机上。如图二所示。
所有仿真的组件,均采用虚拟仿真的形式,其中包含仪表板、仪表、告警灯,按钮、旋钮不仿真。
四.开发流程
本次项目的开发流程如下图三所示:
4.1图形设计
图形设计是在仪表开发的第一步,要将大量的飞行信息在有限的仪表面板上显示,特别要注意布局简洁、合理、醒目等。现在应用成熟的飞行仪表界面设计有很多,可以从中借鉴,取其精华。以主仪表板为例,主要向驾驶员提供飞机姿态、飞行航向、飞行高度、飞行速度等信息。
4.2创建模型
开发仪表和控制面板,根据模拟真实飞行,在仿真面板上完成各种图形、字符及相关飞行参数的显示,因此必须建立标准字符库和圖片库。
(1)制作纹理。首先要采集真是纹理数据,然后用Photoshop处理,获得符合要求的png格式纹理贴图。由于GLStudio对中文汉字输入支持不完善,所以把汉字也制作成纹理图片,这样还能提高渲染效率。
(2)实体模型建立。建立仪表图形、画面显示符号的模型,先要把每个仪表页面的模型的位置和内部层次关系弄清楚,进行初步规划。每个对象都是多边形组成,使用GLStudio提供的基本图形元组合完成,通过旋转、剪切、扭曲等操作,能嫁接合成复杂的实体。对于模型中不可模拟的细节,还可以用图片纹理替代,以达到逼真度的要求。显示模块画面完成,下一步就要给定义逻辑结构、动作程序、执行用户事件、时间或数据事件触发的响应动作,实现实时驱动。这一步一般都是和画面模型创建交叉进行。
4.3驱动代码编写
对象的行为事件是各个成员函数的集合,受外部数据的控制,但行为事件本身的驱动程序是在仪表内部描述实现,每个仪表都有自己独立的行为。一般旋转可以使用DynamicRotate()函数进行控制。发动机指示和机组告警系统中燃油、油量、液压等的指针旋转可以使用MoveObject()函数来完成。读数可以使用VaString()函数来完成。
下面介绍主要的驱动方式的实现过程。
(1)旋转(以横滚刻度尺为例)。首先在界面的Code区域,用右键选择“Add”选项,然后点击“Property”选项,在出来的空白表格内填入成员函数的名字为Indicator,类型为float,然后自动派生的成员变量的名字为_indicator。在该成员函数的“set”方法中添加下面代码:
_clampedValue=CLAMP_VALUE(value,-70.0f,70.0f);
//把输入值限定在-70至70,这是因为横滚刻度尺的旋转区间是-70度到70度
_indicator=_clampedValue;
indicator-DynamicRotate(_indicator,Z_AXIS);//横滚刻度尺实现绕Z轴旋转
(2)数字实时显示(以经度为例)
成员函数的名字为Latitude,类型为float,派生的成员变量的名字为_latitude。在该成员函数的“set”方法中添加下面代码:
_
文档评论(0)