产学研创新服务平台(开云优惠体育网页版入口)
专利申请类型:发明专利;专利名称:运输机模拟飞行系统
专利类型:发明专利
专利申请号:CN202210128767.7
专利申请(专利权)人:中国人民解放军91475部队
权利人地址:辽宁省葫芦岛市连山区兴工街51号
专利发明(设计)人:刘剑超,吕游,林亚军,董斐,张威,穆杨,俞艺涵,岳付昌
专利摘要:本发明涉及航天器仿真系统设计技术领域,具体涉及一种运输机模拟飞行系统,包括主控系统、接口系统、图形仪表系统、视景系统,所述主控系统同时接收虚拟系统操作台的操作信息,并通过各种模型解算,实时计算出飞机的状态信息,再由运动方程实时计算出飞机的位置和姿态信息,实时计算出飞机的速度、高度以及导航信息;所述主控系统在单运行周期完成后,将飞机的状态信息一方面通过所述接口系统将相关信息发送到所述图形仪表系统,驱动座舱设备显示,同时通过以太网将有关信息发送给所述视景系统,本发明的有益效果是针对一种给定的机型设计出一套完整和逼真度高的仿真软件,整个软件各模块之间的协调性好,各模块相互独立,可以单独的开发和测试。
主权利要求:
1.一种运输机模拟飞行系统,包括主控系统、接口系统、图形仪表系统、视景系统,其特征在于:
所述主控系统包括全包线飞行仿真模块、飞机之间的相互约束关系仿真模块、训练环境仿真模块,并提供特定接口;
所述图形仪表系统可仿真通用运输机仪表、电子导航系统,并提供特定仪表接口;
所述视景数据库采用通用机。⑻峁└换〉鼐笆菘饨涌冢
所述接口系统采集飞行员的操纵信息,通过UDP网络发送给所述主控系统,所述主控系统同时接收虚拟系统操作台的操作信息,并通过各种模型解算,实时计算出飞机的状态信息,再由运动方程实时计算出飞机的位置和姿态信息,实时计算出飞机的速度、高度以及导航信息;所述主控系统在单运行周期完成后,将飞机的状态信息一方面通过所述接口系统将相关信息发送到所述图形仪表系统,驱动座舱设备显示,同时通过以太网将有关信息发送给所述视景系统;
以运输机型气动数据为基。乖炜掌δP秃痛笃P,建立飞机运动方程和操纵系统、发动机、起落架、襟翼数学模型;
通过内部数据接口读取训练任务设置数据,对飞机数学模型进行初始化;实时采集飞行员对飞机的横向、纵向的操纵信号以及对起落架、减速板、襟翼操作指令,解算飞机数学模型,控制飞机运动;
通过内部数据接口,输出飞机位置、姿态数据,实现与其它模块之间的数据交换;通过对该模块的修改来实现尽可能高匹配度的控制率以及精确的油门响应;
各个所述模型都直接派生于同一个父类CModel,所述父类CModel提供访问各派生子类的抽象接口,所述接口被用来操作派生对象进行初始化、接收数据、运行、输出结果和析构其自身,所述操作在基类中都以保护成员存在,在各派生子类中将被重载以表示各子模型的不同特性,所述父类CModel具有消息处理能力,实现消息的处理和存储。
2.根据权利要求1所述的运输机模拟飞行系统,其特征在于:所述训练任务设置数据,包括飞机初始位置、发动机初始状态、初始油量。
3.根据权利要求1所述的运输机模拟飞行系统,其特征在于:所述解算飞机数学模型,包括建立飞行、目标运动、应急处置、碰撞检测、人体运动数学模型,并进行实时解算。
4.根据权利要求1所述的运输机模拟飞行系统,其特征在于:所述父类CModel拥有两个不同的构造函数,所述派生子类具有不同的层级,一种表示低等级的模型,只计算一种特定类型的力,另一种表示高等级的模型,综合所有的外作用力以计算飞机的飞行状态,每一个所述高等级类都聚合有一系列所述低等级的类并表示所述全包线飞行仿真系统中一个独立的功能子模型,低等级的类也可以聚合其它更低等级的类,所述父类CModel不同的构造函数对应所述派生子类不同的层级。
5.根据权利要求4所述的运输机模拟飞行系统,其特征在于:所述父类CModel里面具有一个记录派生子对象地址的函数PushIntoLinkedList,当由所述父类CModel派生的高等级类被实例化时,所述父类CModel中为高等级类所准备的构造函数首先运行并将指向此对象的指针压入一个链表中,当全部由所述父类CModel派生的类被实例化之后,所述全包线飞行仿真系统模型的链表即被形成,所述链表的形成是一个递归的过程,通过所述链表使用递归和循环方式控制所述全包线飞行仿真系统模型按顺序执行。
6.根据权利要求4 5任一项所述的运输机模拟飞行系统,其特征在于:所述全包线飞行~
仿真系统模型的链表将仿真的各个系统串起来,不进行实例化的系统不存在于链表中,不参与仿真,整个仿真程序无需进行修改,注释掉对操纵负荷类进行实例化的一行代码并启用其备选的虚拟输入类然后重新编译即可,在进行操纵负荷系统调试时则只需调换一下注释符的位置。
7.根据权利要求1所述的运输机模拟飞行系统,其特征在于:所述空气动力模型包括复合于其中的气动力、地面力和起落架力模型。
8.根据权利要求7所述的运输机模拟飞行系统,其特征在于:所述气动力、地面力和起落架力模型类都含有一个特定的输入输出接口cIn和cOut,每一个代表一个独立系统的高等级类都关联有一个全局输入函数,所述全局输入函数只能访问所述cIn和cOut来沟通所述气动力、地面力和起落架力模型类,而不能直接访问类的其它成员变量,实现模块的封装。
9.根据权利要求1所述的运输机模拟飞行系统,其特征在于:外界对所述模型类的操作通过公有成员函数Run(RunModemode,doubleTimeStep)进行,通过改变枚举类型的运行模式“RunMode”来控制所述全包线飞行仿真系统类执行。 说明书 : 运输机模拟飞行系统技术领域[0001] 本发明涉及航天器仿真系统设计技术领域,具体涉及一种运输机模拟飞行系统。背景技术[0002] 飞行模拟设备指各种模拟飞机飞行和训练驾驶员的各种设备和系统的总称,对于培训驾驶员、减少设备损耗风险、培育航空后备力量具有重要的作用。飞行模拟设备在二十世纪三十年代开始出现,之后随着各种技术的发展,飞机飞行性能、航空电子系统和武器系统的仿真有了巨大进步,飞机性能的建模与仿真更加完善。运输机模拟飞行软件是为适应运输机机型特点开发的,能满足初学飞行的学员体验飞行、培养飞行兴趣、熟悉飞行知识的要求。[0003] 由于一架现代化的运输机包含非常众多子系统,而模拟器几乎需要模拟每个系统,现有的模拟飞行系统采取的方法是对各个子模型类分别进行操作,仅实例化这几百个子模型的工作就已经是非常繁琐和容易出错,对各个对象的调用就更加繁琐和困难。发明内容[0004] 为解决现有技术的不足,本发明的目的在于提供一种运输机模拟飞行系统,包括主控系统、接口系统、图形仪表系统、视景系统,[0005] 所述主控系统包括全包线飞行仿真模块、飞机之间的相互约束关系仿真模块、训练环境仿真模块,并提供特定接口;[0006] 所述图形仪表系统可仿真通用运输机仪表、电子导航系统,并提供特定仪表接口;[0007] 所述视景数据库采用通用机。⑻峁└换〉鼐笆菘饨涌冢籟0008] 所述接口系统采集飞行员的操纵信息,通过UDP网络发送给所述主控系统,所述主控系统同时接收虚拟系统操作台的操作信息,并通过各种模型解算,实时计算出飞机的状态信息,再由运动方程实时计算出飞机的位置和姿态信息,实时计算出飞机的速度、高度以及导航信息;所述主控系统在单运行周期完成后,将飞机的状态信息一方面通过所述接口系统将相关信息发送到所述图形仪表系统,驱动座舱设备显示,同时通过以太网将有关信息发送给所述视景系统。[0009] 进一步地,所述全包线飞行仿真模块实现如下功能:[0010] 以运输机型气动数据为基。乖炜掌δP秃痛笃P,建立飞机运动方程和操纵系统、发动机、起落架、襟翼等数学模型;[0011] 通过内部数据接口读取训练任务设置数据,对飞机数学模型进行初始化;实时采集飞行员对飞机的横向、纵向的操纵信号以及对起落架、减速板、襟翼等操作指令,解算飞机数学模型,控制飞机运动;[0012] 通过内部数据接□,输出飞机位置、姿态等数据,实现与其它模块之间的数据交换;通过对该模块的修改来实现尽可能高匹配度的控制率以及精确的油门响应;[0013] 各个所述模型都直接派生于同一个父类CModel,所述父类CModel提供访问各派生子类的抽象接口,所述接口被用来操作派生对象进行初始化、接收数据、运行、输出结果和析构其自身,所述操作在基类中都以保护成员存在,在各派生子类中将被重载以表示各子模型的不同特性,所述父类CModel具有消息处理能力,实现消息的处理和存储。[0014] 进一步地,所述训练任务设置数据,包括飞机初始位置、发动机初始状态、初始油量;[0015] 进一步地,所述解算飞机数学模型,包括建立飞行、目标运动、应急处置、碰撞检测、人体运动数学模型,并进行实时解算。[0016] 进一步地,所述父类CModel拥有两个不同的构造函数,所述派生子类具有不同的层级,一种表示低等级的模型,只计算一种特定类型的力,另一种表示高等级的模型,综合所有的外作用力以计算飞机的飞行状态,每一个所述高等级类都聚合有一系列所述低等级的类并表示所述全包线飞行仿真系统中一个独立的功能子模型,低等级的类也可以聚合其它更低等级的类,所述父类CModel不同的构造函数对应所述派生子类不同的层级。[0017] 进一步地,所述父类CModel里面具有一个记录派生子对象地址的函数PushIntoLinkedList,当由所述父类CModel派生的高等级类被实例化时,所述父类CModel中为高等级类所准备的构造函数首先运行并将指向此对象的指针压入一个链表中,当全部由所述父类CModel派生的类被实例化之后,所述全包线飞行仿真系统模型的链表即被形成,所述链表的形成是一个递归的过程,通过所述链表使用递归和循环方式控制所述全包线飞行仿真系统模型按顺序执行。[0018] 进一步地,所述全包线飞行仿真系统模型的链表将仿真的各个系统串起来,不进行实例化的系统不存在于链表中,不参与仿真,整个仿真程序无需进行修改,注释掉对操纵负荷类进行实例化的一行代码并启用其备选的虚拟输入类然后重新编译即可,在进行操纵负荷系统调试时则只需调换一下注释符的位置。[0019] 进一步地,所述空气动力模型包括复合于其中的气动力、地面力和起落架力模型。[0020] 进一步地,所述气动力、地面力和起落架力模型类都含有一个特定的输入输出接口cIn和cOut,每一个代表一个独立系统的高等级类都关联有一个全局输入函数,所述全局输入函数只能访问所述cIn和cOut来沟通所述气动力、地面力和起落架力模型类,而不能直接访问类的其它成员变量,实现模块的封装。[0021] 进一步地,外界对所述模型类的操作通过公有成员函数Run(RunModemode,doubleTimeStep)进行,通过改变枚举类型的运行模式“RunMode”来控制所述全包线飞行仿真系统类执行。[0022] 与现有技术相比,本发明的有益效果是:[0023] 1、针对一种给定的机型设计出一套尽可能完整和逼真度高的仿真软件,整个软件各模块之间的协调性好,各模块相互独立,可以单独的开发和测试。[0024] 2、飞行仿真的各个组成模型都直接派生于同一个父类CModel,它提供了访问各派生子类的抽象接口,CModel拥有两个不同的构造函数,父类CModel不同的构造函数对应所述派生子类不同的层级。[0025] 3、仿真子模型的链表串起来了仿真的各个大系统,方便了对模型的删减和独立调试。只要不对某个系统进行实例化,它就不存在于链表中,也就不参与仿真,而整个仿真程序无需做任何修改。这样就极大的方便了调试。[0026] 4、每一个模型类都含有一个特定的输入输出接口,cIn和cOut。全局输入函数一般只能访问cIn和cOut来沟通各个子仿真系统,而不能直接访问类的其它成员变量。这样就保护了类中的信息,实现了模块的封装,并有利于单独开发和单独调试。附图说明[0027] 为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。[0028] 图1是本发明实施例中运输机模拟飞行系统总体结构图;[0029] 图2是本发明实施例全包线飞行仿真模块结构示意图;[0030] 图3是本发明实施例中父类CModel结构图;[0031] 图4是本发明实施例飞行仿真模块的模型类之间的关系;[0032] 图5是本发明实施例中由高等级类实例化出的对象形成的链表结构图;[0033] 图6是本发明实施例将一个对象指针压入链表的过程;[0034] 图7是本发明实施例对高等级模型类的顺序操作过程;[0035] 图8是本发明实施例飞行仿真模块的初始化例程;[0036] 图9是本发明实施例主控系统主函数流程图;[0037] 图10是本发明实施例飞行动力学模型及复合于其中的气动力、地面力和起落架力的类结构图。具体实施方式[0038] 下面结合附图并通过具体实施方式来进一步说明本发明的技术方案。[0039] 参照图1所示的一种运输机模拟飞行系统,包括主控系统、接口系统、图形仪表系统、视景系统,运输机模拟飞行系统正常启动后,接口系统采集飞行员的操纵信息(驾驶杆、油门杆、脚蹬及断路器、控制盒信号),通过UDP网络发送给主控系统;主控系统同时接收虚拟系统操作台的操作信息,并通过各种模型解算,实时计算出飞机的发动机、液压、燃油、电源等状态信息,再由运动方程实时计算出飞机的位置和姿态信息,实时计算出飞机的速度、高度以及导航信息;主控系统在单运行周期完成后,将飞机的状态信息一方面通过接口系统将相关信息发送到图形仪表系统,驱动座舱设备显示,同时通过以太网将有关信息发送给视景系统,为飞行员提供逼真的训练环境。[0040] 所述主控系统包括全包线飞行仿真模块、飞机之间的相互约束关系仿真模块、训练环境仿真模块,并提供特定接口;[0041] 所述图形仪表系统可仿真通用运输机仪表、电子导航系统,并提供特定仪表接口;[0042] 所述视景数据库采用通用机。⑻峁└换〉鼐笆菘饨涌冢籟0043] 参照图2,所述全飞行包线的飞行仿真模块主要功能包括:[0044] 以新舟60、运7、安24等运输机型气动数据为基。乖炜掌δP秃痛笃P,建立飞机运动方程和操纵系统、发动机、起落架、襟翼等数学模型;[0045] 通过内部数据接口读取训练任务设置数据,包括飞机初始位置、发动机初始状态、初始油量等,对飞机数学模型进行初始化;[0046] 实时采集飞行员对飞机的横向、纵向的操纵信号以及对起落架、减速板、襟翼等操作指令,解算飞机数学模型,控制飞机运动;[0047] 通过内部数据接□,输出飞机位置、姿态等数据,实现与其它模块之间的数据交换;[0048] 通过对该模块的修改来实现尽可能高匹配度的控制率以及精确的油门响应。[0049] 全飞行包线的飞行仿真模块工作流程分为以下几个步骤:[0050] 模型初始化:根据任务初始设置对各种数学模型进行初始化,某型运输机飞行模拟系统使用XML文件配置尺寸结构信息;[0051] 信号采集:通过输入接口,采集飞行员的操控信息;[0052] 模型解算:建立飞行、目标运动、应急处置、碰撞检测、人体运动数学模型,并进行实时解算。[0053] 主控系统总体框架设计采用面向对象的程序设计思想,是针对一种给定的机型设计出一套尽可能完整和逼真度高的仿真软件,整个软件各模块之间的协调性好,各模块相互独立,可以单独的开发和测试。下面将从类的继承、调度方法、模型定义和数据管理四个方面进行论述。[0054] 参照图3所示,飞行仿真模块的各个组成模型都直接派生于同一个父类CModel,它提供了访问各派生子类的抽象接口。例如,它的公有虚函数Run(RunModemode,doubleTimeStep)可以被用来操作派生对象进行初始化、接收数据、运行、输出结果和析构其自身。这5种操作在基类中都以保护成员存在,在各派生子类中将被重载以表示各子模型的不同特性。同样,CModel也具有消息处理能力,实现了消息的处理和存储。[0055] 参照图4,由于所有飞行仿真模块子模型全部直接派生于父类CModel,为了区分各子模型的层次关系,CModel拥有两个不同的构造函数,因为CModel的这种多态性,派生类可以有不同的层级,一种表示低等级的模型,如CGearForce和CAeroForce,它们只计算一种特定类型的力;另一种表示高等级的模型,如CFlight,它综合所有的外作用力以计算飞机的飞行状态,所以需要集合CGroundForce和CAeroForce等。每一个高等级类都聚合有一系列低等级的类并表示飞行模拟器中一个独立的功能子模型。低等级的类也可以聚合其它低等级的类,例如CGearForce和CCrashForce聚合于CGroundForce来表示两种不同的地面接触力,起落架力和机体与地面的碰撞力。[0056] 为了便于对各个飞行仿真模块子模型进行管理和调用,特在CModel里面增加一个记录派生子对象地址的函数PushIntoLinkedList()。当由CModel派生的高等级类被实例化时,CModel中为高等级类所准备的构造函数首先运行并将指向此对象的指针(‘this’)压入一个链表中。参照图5及图6,CModel中的静态成员指针m_pRoot,m_pTail和m_pNext即起到了形成链表的作用。当全部由CModel派生的类被实例化之后,该链表即被形成,这样就可以使用递归和循环方式控制仿真模型按顺序执行。[0057] 该链表的形成是一个递归的过程。其中m_pRoot,m_pTail和m_pNext均为静态指针变量。在图中颜色框表示的步骤中,首先使原链表末端的指针m_pNext指向当前对象,然后将当前对象作为链表的末端。[0058] 指示所有飞行仿真模块仿真子模型的链表不光在整个仿真中起到了线索的作用,而且使仿真过程更加的有条理。由于该链表串起来了仿真的各个大系统,方便了对模型的删减和独立调试。只要不对某个系统进行实例化,它就不存在于链表中,也就不参与仿真,而整个仿真程序无需做任何修改。这样就极大的方便了调试。例如如果现在希望屏蔽操纵负荷的影响(该系统功能缺失或不完善时)而改用虚拟信号(在计算机屏幕上输入飞行员操作量)输入以检验飞行动力学模型,则只需简单的注释掉对操纵负荷类进行实例化的一行代码并启用其备选的虚拟输入类然后重新编译即可。而在进行操纵负荷系统调试时则只需调换一下注释符的位置。这样就可以将对系统程序的影响降低到最低。[0059] 飞行动力学模型及复合于其中的气动力、地面力和起落架力的类结构如图 10所示。[0060] 由于CFlight被定义为高等级类,其派生对象的指针需要压入链表,所以 CFlight的构造函数要与CModel中为高等级类实例化服务的构造函数相联合: CFlight(char*name,void(*InputFunction)()):CModel(name,InputFunction)[0061] 其中的name标识了该对象的名称,以方便于在链表中被跟踪并方便一些宏命令的使用。指针InputFunction指示了为CFlight类提供输入的全局函数的地址,该函数负责收集其它系统的输出信息并输入给CFlight。每一个代表一个独立系统的高等级类都关联有一个全局输入函数。[0062] 每一个模型类都含有一个特定的输入输出接口,cIn和cOut。全局输入函数一般只能访问cIn和cOut来沟通各个子仿真系统,而不能直接访问类的其它成员变量。这样就保护了类中的信息,实现了模块的封装,并有利于单独开发和单独调试。[0063] 外界对模型类的操作则主要通过公有成员函数Run(RunMode mode,double TimeStep)进行。通过改变枚举类型的运行模式“RunMode”来控制仿真类执行。例如,可以使链表中的一个对象运行于初始化模式[0064] pModel?>Run(_INIT,timestep);[0065] 使用C++的优势之一就是方便代码的重用。例如一般飞机都配置有多个起落架,各个起落架与地面接触的力计算方程都是相似的,所以只需要设计一个起落架类即可以根据不同的飞机配置派生出不同的起落架对象。起落架类中的枚举成员Type就代表了起落架的类型。在实例化对象中对Type赋值即可以使该对象表示一套特定的起落架系统。如图10中起落架类在CGroundForce中实例化三个对象,前起落架(cNoseGear),主左起落架(cLeftGear)和主右起落架(cRightGear)。这三个对象聚合在地面力计算类CGroundForce中,负责输出起落架与地面间的作用力。同样聚合于CGroundForce中的对象还有派生于计算碰撞效果的类CCrashForce。由于操作不当,飞机突出的部分可能会与地面发生碰撞,所以每一个可能的碰撞点都需要实例化一个碰撞力计算对象,如机鼻、机尾、发动机舱和翼尖等。[0066] 聚合于CFlight中的CEarth类和CAtomsphere类也是两个非常重要的类。CEarth类表示了椭圆形大地的地理模型,使用它可以进行直角坐标系和极坐标系位置之间的转换,也可以进行两个参考点之间沿椭球表面距离的计算。 CAtomshpere为标准大气模型,可以计算气压、气温、马赫数、真空速、校正空速、动压、气压高度、冲击压力(impact pressure)等与大气相关的计算。[0067] 高等级的仿真模型类在实例化之后可以形成一个链表,在进行仿真迭代计算时,需要使用这个链表来对仿真步骤进行操作。[0068] 图7表示了使用该链表对高等级模型类的操作过程。CModel类型的中间指针变量*pCur遍历链表中的各个节点,并使该节点运行于希望的模式上,直到对链表中最后一个节点进行操作后即完成了一次迭代。[0069] 当所有的组成对象被构造之后,仿真系统开始于主函数构造CSim对象。该对象中的一个函数调用CModel的静态函数Iterate(RunModemode,double TimeStep)并使其运行于_INIT模式下。Iterate(…)包含有一个如图8的遍历过程,该过程将完成所有高等级类的初始化工作。初始化低等级类的过程则是由其高等级类直接调用它们的Run(RunModemode,doubleTimeStep)完成的。[0070] 初始化完成之后,Iterate(RunModemode,doubleTimeStep)将运行于_RUN模式下。各子系统之间的信息交换通过调用全局指针函数完成,如图7中pCur?>m_pInputFnc()。[0071] 如图9所示,主函数是系统的入口函数,管理着系统的进程。在主函数中对象cSim首先被构造,随后即开始三个过程:初始化、运行和结束。由于飞行仿真是实时仿真,每一帧的时间都需要精确控制,而完成一帧中所有仿真计算的时间是不确定的,所以需要首先测量出完成一次迭代的时间,然后进行延时,补足与步长的插值。[0072] 运输机模拟飞行系统启动之后,系统自动运行于实时模式状态,此时被仿真飞机被自动配平到一个默认的跑道上,飞机处于自动启动状态。初始状态红色油门杆设置为零位,飞机处于刹车状态,首先飞行员通过蓝色配平杆配平飞机,然后推动红色油门杆加速飞机,在飞机滑跑过程中可通过脚舵控制飞机方向,也可以通过操纵杆改变飞机滑跑方向,等待飞机起飞之后可以通过操纵杆控制飞机俯仰和横滚角度,以及通过襟翼按钮和起落架按钮控制飞机相关部位。[0073] 需要声明的是,上述具体实施方式仅仅为本发明的较佳实施例及所运用技术原理。本领域技术人员应该明白,还可以对本发明做各种修改、等同替换、变化等等。但是,这些变换只要未背离本发明的精神,都应在本发明的保护范围之内。另外,本申请说明书和权利要求书所使用的一些术语并不是限制,仅仅是为了便于描述。
专利地区:辽宁
专利申请日期:2022-03-03
专利公开日期:2024-09-06
专利公告号:CN114491818B