本发明涉及直升机飞行仿真领域,具体是一种直升机飞行仿真方法及系统。
背景技术:
计算机建模与仿真技术,已被广泛应用于飞行器系统研发、飞行员地面训练、机务培训等领域。
目前,计算机飞行仿真技术,主要从快速复现飞行器原型系统的控制方法、实现机型可重配置的低成本实时仿真环境、提高计算方法的快速性和收敛性等方面,来改善飞行仿真平台的创新性、通用性、实时性和鲁棒性。如常用的桌面飞行仿真产品。
但上述桌面飞行仿真产品,大多受限于现有商业飞行模拟软件的固定架构,难以配置不同的飞行控制算法,不能体现飞行器实际的操纵特性和运动特性,通用性不强。
另外,现有的商业软件所支持的飞行器,多为固定翼飞行器,型号非常有限,能够实现直升机飞行模拟的平台相对缺乏,即使获取了某型飞行器的建模数据,也无法在通用的商业软件上快速生成可实时仿真的代码平台,研发周期长、测试成本也较高。
此为现有技术的不足之处。
技术实现要素:
本发明所要解决的技术问题是,针对现有技术的不足,提供一种直升机飞行仿真方法及系统,用于提高对直升机飞行仿真的通用性和灵活性,还用于缩短研发周期、降低测试成本。
为解决上述技术问题,本发明提供了一种直升机飞行仿真方法,具体包括如下步骤:
a、根据直升机的显模型跟踪飞行控制系统、执行系统、旋翼动力学系统、尾桨动力学系统和直升机机体系统,构建直升机全机数字仿真模型;
b、运用代码生成技术,生成步骤a中所构建的直升机全机数字仿真模型的c++原型代码程序;
c、创建c++工程仿真平台,并将步骤b中生成的c++原型代码程序、以及预先编写的直升机仿真飞行操纵指令采集程序和实时图形绘制程序添加到该c++工程仿真平台;其中,所述的直升机仿真飞行操纵指令采集程序用于采集直升机飞行仿真过程中输入的各相应直升机飞行仿真操纵指令,所述的实时图形绘制程序用于将其当前接收到的直升机飞行仿真状态数据实时生成相应的直升机飞行仿真状态数据曲线;
d、对步骤c中所述的c++原型代码程序、以及所述的直升机仿真飞行操纵指令采集程序和所述的实时图形绘制程序进行实时化配置,使上述c++原型代码程序的输入端与上述直升机仿真飞行操纵指令采集程序的输出端相连、并使上述c++原型代码程序的输出端与上述实时图形绘制程序的输入端相连,之后将该实时化配置后的c++原型代码程序、直升机仿真飞行操纵指令采集程序和实时图形绘制程序封装为核心接口模块;
e、对步骤d中封装形成的核心接口模块的输入端及输出端进行匹配设置,使该核心接口模块的输入端与预设的用于输入直升机仿真飞行操纵指令的相应操纵指令输入单元的输出端相连、并使该核心接口模块的输出端与预设的用于显示直升机飞行仿真状态数据曲线的相应显示单元的输入端相连;
f、接入上述预设的相应操纵指令输入单元和相应显示单元,通过操纵该接入的相应操纵指令输入单元,对直升机的飞行进行仿真。
进一步地,上述步骤a在simulink图形仿真环境下构建直升机全系统数字仿真模型。
在步骤c和步骤e中,所述的直升机飞行仿真状态数据分别包括直升机飞行仿真过程中对应的直升机飞行的俯仰角、横滚角、偏航角速率和垂直升降速率。
步骤c中所述的各相应直升机飞行仿真操纵指令,包括直升机飞行仿真的俯仰操纵指令、横滚操纵指令、航向操纵指令和总距操纵指令。
所述的直升机全机数字仿真模型包括直升机的四通道显模型、pid控制器数字模型、及作动器数字模型、助力器数字模型、旋翼动力学数字模型、尾桨动力学数字模型和直升机机体模型。
所述的c++工程仿真平台采用qt面向对象界面仿真工程平台。
本发明还提供了一种直升机飞行仿真系统,包括:
直升机飞行仿真操纵指令输入单元,用于输入用于控制直升机飞行仿真的操纵指令;
显示单元,用于实时显示直升机飞行仿真过程中形成的各直升机飞行仿真状态数据曲线;
建模单元,用于建立直升机全机数字仿真模型;
原型代码程序生成单元,用于基于代码生成技术,生成通过上述建模单元建立的直升机全机数字仿真模型的c++原型代码程序,该c++原型代码程序用于接收并仿真处理通过上述直升机飞行仿真操纵指令输入单元输入的操纵指令,以获取直升机飞行仿真状态数据;
直升机飞行仿真单元,用于封装上述原型代码程序生成单元生成的c++原型代码程序、以及预先编写的直升机仿真飞行操纵指令采集程序和实时图形绘制程序,形成核心接口模块;该形成的核心接口模块的输入端与所述直升机飞行仿真操纵指令输入单元的输出端相连、输出端与所述显示单元的输入端相连;其中:
所述的直升机仿真飞行操纵指令采集程序,用于采集上述直升机飞行仿真操纵指令输入单元输入的操纵指令,并用于将其采集到的各操纵指令实时发送至核心接口模块的c++原型代码程序;
所述的c++原型代码程序,用于实时对其所接收到的操纵指令进行处理,生成直升机飞行仿真状态数据;
所述的实时图形绘制程序,用于实时接收上述c++原型代码程序生成的直升机飞行仿真状态数据,并用于将其当前接收到的直升机飞行仿真状态数据实时生成相应的直升机飞行仿真状态数据曲线,还用于将其生成的各相应的直升机飞行仿真状态数据曲线发送至所述的显示单元进行显示。
其中,所述的直升机飞行仿真单元基于预先创建的qt工程仿真平台进行实现。
其中,所述的直升机全机数字仿真模型包括直升机的四通道显模型、pid控制器数字模型、及作动器数字模型、助力器数字模型、旋翼动力学数字模型、尾桨动力学数字模型和直升机机体模型。
所述的直升机飞行仿真操纵指令输入单元,采用具有四通道操纵指令的直升机飞行仿真操纵杆,该所述的四通道操纵指令包括直升机飞行仿真的俯仰操纵指令、横滚操纵指令、航向操纵指令和总距操纵指令。
与现有技术相比,本发明的优点在于:
本发明适用基于不同控制方法的任意的直升机全机数字仿真模型,体现了本发明极大的通用性和灵活性;另外,本发明提高了从建模到实时仿真的实施效率,降低了直升机飞控系统的研发周期和测试成本,具有良好的工程应用价值。
由此可见,本发明与现有技术相比,具有突出的实质性特点和显著的进步,其实施的有益效果也是显而易见的。
附图说明
图1为本发明所述直升机飞行仿真方法的方法流程示意图。
图2为本发明所述直升机飞行仿真系统的结构功能框图示意图。
图3为悬停状态下直升机飞行状态实时仿真结果。
具体实施方式
为使本发明的技术方案和优点更加清楚,下面将结合附图,对本发明的技术方案进行清楚、完整地描述。
首先需要说明的是,在本发明中,所涉及的各相应直升机飞行仿真操纵指令,均采用市售的飞行游戏摇杆(下称“直升机飞行仿真操纵杆”),如莱仕达飞行摇杆、赛泰克飞行摇杆等进行输入。具体地,通过直升机飞行仿真操纵杆上的升降控制轴仿真输出直升机俯仰操纵指令、通过直升机飞行仿真操纵杆上的左右方向控制轴仿真输出直升机横滚操纵指令、通过直升机飞行仿真操纵杆上的左右旋转轴仿真输出直升机航向操纵指令、通过直升机飞行仿真操纵杆上的油门滑块仿真输出直升机总距操纵指令。
具体实施方式1:
如图1所示,本发明的一种直升机飞行仿真方法,具体包括如下步骤a-f。
步骤a、根据直升机的显模型跟踪飞行控制系统、执行系统、旋翼动力学系统、尾桨动力学系统和直升机机体系统,构建直升机全机数字仿真模型。
在本实施方式中,首先根据某型直升机acah(姿态指令-姿态保持)飞行模态,定义直升机飞行仿真操纵杆的俯仰、横滚、航向、总距操纵指令为模型输入量,定义直升机飞行俯仰角、横滚角、垂直升降速率、偏航角速率为模型输出量,并基于上述某型直升机的显模型跟踪飞行控制系统,定义与该直升机飞行模态对应的四通道显模型传递函数如下:
纵向通道:
横向通道:
航向通道:
总距通道:
之后再设计上述各通道的pid控制器数字模型,用于调节上述四通道显模型输出指令所形成的误差信号;并利用线性化直升机机体模型
另外,基于直升机的动力学特性,分别建立直升机作动器、助力器、旋翼动力学、尾桨动力学的数字模型,且设定该所述作动器、助力器、旋翼动力学、尾桨动力学的数字模型对应的传递函数如下所示:
作动器:
助力器:
俯仰通道旋翼动力学:
横滚通道旋翼动力学:
总距通道旋翼动力学:
尾桨动力学:
最后,在simulink数字仿真环境下,将上述建立的各显模型(即上述四通道显模型传递函数)、pid控制器数字模型,及上述计算所得的解耦矩阵(即上述矩阵b的广义逆矩阵),及上述建立的直升机作动器、助力器、旋翼动力学、尾桨动力学的数字模型进行级联,飞行状态输出与控制指令形成负反馈调节信号,从而实现对直升机飞行仿真的显模型跟踪,即完成该直升机全机数字仿真模型的建立。
步骤b、运用代码生成技术,生成步骤a中所构建的直升机全机数字仿真模型的c++原型代码程序。
具体地,进入simulink模型参数配置窗口,并完成如下配置:在codegeneration选项的systemtargetfile选择ert.tlccreatevisualc/c++solutionfileforembeddedcoder,语言选择c++;在solver选项中,把type选为固定步长,步长值设置为0.02,在interface项中勾选continuoustime;回到codegeneration选项,点击generatecode生成上述步骤a中所构建的直升机全机数字仿真模型的c++原型代码程序。
步骤c、创建c++工程仿真平台,并将步骤b中生成的c++原型代码程序、以及预先编写的直升机仿真飞行操纵指令采集程序和实时图形绘制程序添加到该c++工程仿真平台。
其中,所述的直升机仿真飞行操纵指令采集程序用于采集直升机飞行仿真过程中输入的各相应直升机飞行仿真操纵指令,所述的实时图形绘制程序用于将其当前接收到的直升机飞行仿真状态数据实时生成相应的直升机飞行仿真状态数据曲线。
具体地,首先基于qt面向对象界面仿真工程平台,创建qt面向对象界面仿真工程,把上述步骤b中生成的c++原型代码程序中除去主函数文件ert_main.cpp以外的所有头文件、源文件,以及matlab安装目录下的头文件rtw_continuous.h、rtw_solver.h、tmwtypes.h一并添加到该qt面向对象界面仿真工程,并将在上述步骤b中生成的c++原型代码程序类名simulinkmodelname+modelclass、对象名simulinkmodelname+_obj中的simulinkmodelname改为simulink_helicopter,增强代码可读性。
上述预设的直升机仿真飞行操纵指令采集程序,包括用于对应指示其当前所接收到的各相应直升机飞行仿真操纵指令的发生位置的操纵指令发生位置指示类posindicator.h、posindicator.cpp;上述预设的实时图形绘制程序包括用于控制在相应显示单元上进行绘图的绘图类widget.h、widget.cpp。
步骤d、对步骤c中所述的c++原型代码程序、以及所述的直升机仿真飞行操纵指令采集程序和所述的实时图形绘制程序,进行实时化配置,之后封装为核心接口模块。
具体实施时,首先将上述直升机飞行仿真操纵杆的驱动类程序添加到上述qt面向对象界面仿真工程。其中,该所述直升机飞行仿真操纵杆的驱动类程序包括两个数据链接库文件dinput8.lib和dxguid.lib。另外,在所述的qt面向对象界面仿真工程中,根据上述直升机飞行仿真操纵杆的驱动类程序,定义结构体数据类型头文件dinput.h和joystick类。
之后在上述定义的joystick类中加入用于实时发送当前直升机飞行仿真操纵指令的发生位置数据的信号函数,用于将位置信号发送给绘图类接收端槽函数,使joystick线程的运行/暂停均可在主线程中控制,实现该线程与绘图线程的并行配置。
其中,在上述步骤b中生成的c++原型代码程序的头文件中,rt_model_modelname_tmodelname_m定义了模型类的步长和计算次数等内容、p_modelname_tmodelname_p定义了模型类的各个可调参数,重置其二者的属性均为public。
另外,在本实施方式中,public成员中的extu_modelname_tmodelname_u和exty_modelname_tmodelname_y分别定义外部输入和输出。因此在实施时,另定义modelname_y结构体,以获取上述步骤b中生成的c++原型代码程序的输出值。
此外,在上述步骤c中所述的操纵指令发生位置指示类posindicator.h、posindicator.cpp中对应添加相应的用于接收数据的槽函数以及用于对所接收到的数据进行实时处理的数据实时处理单元;在上述绘图类widget.h、widget.cpp中,对应添加相应的用于接收数据的槽函数、以及用于对所接收到的数据进行实时处理的数据实时处理单元、以及曲线自适应调节窗体、曲线实时绘制单元等,用于配置控制输出窗体界面尺寸、坐标轴、曲线线型、显示背景等内容。
最后,将上述经过实时化配置的c++原型代码程序、以及所述的直升机仿真飞行操纵指令采集程序和所述的实时图形绘制程序封装为核心接口模块。且在该核心接口模块中,其c++原型代码程序的输入端与其直升机仿真飞行操纵指令采集程序的输出端相连,其c++原型代码程序的输出端与其实时图形绘制程序的输入端相连。
步骤e、对步骤d中封装形成的核心接口模块的输入端及输出端进行匹配设置,使该核心接口模块的输入端与预设的用于输入直升机仿真飞行操纵指令的相应操纵指令输入单元的输出端相连、并使该核心接口模块的输出端与预设的用于显示直升机飞行仿真状态数据曲线的相应显示单元的输入端相连。
具体地,在本实施方式中,所述核心接口模块的输入端为上述直升机仿真飞行操纵指令采集程序的输入端,所述核心接口模块的输出端为上述实时图形绘制程序的输出端,即有:直升机飞行仿真操纵杆的纵向、横向、航向和总距操纵指令分别对应传输给所述核心接口模块的直升机仿真飞行操纵指令采集程序,直升机仿真飞行操纵指令采集程序将其采集到的各相关操纵指令传输给所述核心接口模块的c++原型代码程序,c++原型代码程序对其所接收到的各相关操纵指令实时进行仿真处理,之后将其仿真处理获得的各相关直升机飞行仿真状态数据传输给该核心接口模块的实时图形绘制程序,之后由该核心接口模块的实时图形绘制程序实时生成各相关直升机飞行仿真状态数据曲线。
步骤f、接入上述预设的相应操纵指令输入单元和相应显示单元,通过操纵该接入的相应操纵指令输入单元,对直升机的飞行进行仿真。
待接入上述预设的相应操纵指令输入单元和相应显示单元,操纵当前所接入的相应操纵指令输入单元,观察上述所接入的相应显示单元的显示界面,即可实时且直观地观测直升机的飞行仿真情况。其中,在本实施方式中,该所述的相应的操纵指令输入单元即为所述的直升机飞行仿真操纵杆(本实施方式中采用美加狮f.l.y.5飞行摇杆),所述的相应显示单元采用pc机。
其中,图3给出了该某型直升机在悬停状态下的飞行状态实时仿真结果,其中:图3(a)给出了直升机俯仰角的实时仿真曲线;图3(b)给出了直升机横滚角的实时仿真曲线;图3(c)给出了直升机偏航角速率的实时仿真曲线;图3(d)给出了直升机垂直升降速率的实时仿真曲线。
另外,本发明还提供一种直升机飞行仿真系统,包括:
直升机飞行仿真操纵指令输入单元,用于输入用于控制直升机飞行仿真的操纵指令;
显示单元,用于实时显示直升机飞行仿真过程中形成的各直升机飞行仿真状态数据曲线;
建模单元,用于建立直升机全机数字仿真模型;
原型代码程序生成单元,用于基于代码生成技术,生成通过上述建模单元建立的直升机全机数字仿真模型的c++原型代码程序,该c++原型代码程序用于接收并仿真处理通过上述直升机飞行仿真操纵指令输入单元输入的操纵指令,以获取直升机飞行仿真状态数据;
直升机飞行仿真单元,用于封装上述原型代码程序生成单元生成的c++原型代码程序、以及预先编写的直升机仿真飞行操纵指令采集程序和实时图形绘制程序,形成核心接口模块;该形成的核心接口模块的输入端与所述直升机飞行仿真操纵指令输入单元的输出端相连、输出端与所述显示单元的输入端相连;其中:
所述的直升机仿真飞行操纵指令采集程序,用于采集上述直升机飞行仿真操纵指令输入单元输入的操纵指令,并用于将其采集到的各操纵指令实时发送至核心接口模块的c++原型代码程序;
所述的c++原型代码程序,用于实时对其所接收到的操纵指令进行处理,仿真生成直升机飞行仿真状态数据;
所述的实时图形绘制程序,用于实时接收上述c++原型代码程序仿真生成的直升机飞行仿真状态数据,并用于将其当前接收到的直升机飞行仿真状态数据实时生成相应的直升机飞行仿真状态数据曲线,还用于将其生成的各相应的直升机飞行仿真状态数据曲线发送至所述的显示单元进行显示。
其中,所述的直升机飞行仿真单元基于预先创建的qt面向对象界面仿真工程进行实现。
其中,所述的直升机全机数字仿真模型包括直升机的四通道显模型、pid控制器数字模型、及作动器数字模型、助力器数字模型、旋翼动力学数字模型、尾桨动力学数字模型和直升机机体模型。
所述的直升机飞行仿真操纵指令输入单元,采用具有四通道操纵指令的直升机飞行仿真操纵杆(本实施方式中采用美加狮f.l.y.5飞行摇杆),该所述的四通道操纵指令包括直升机飞行仿真操纵杆的俯仰操纵指令、横滚操纵指令、航向操纵指令和总距操纵指令。
所述的相应显示单元采用pc机。
所述的直升机飞行仿真状态数据包括直升机飞行仿真过程中对应的直升机飞行的俯仰角、横滚角、偏航角速率和垂直升降速率。
具体实现时,本领域技术人员可依据上述直升机飞行仿真方法中采用的具体实施办法进行本系统中相应模块的实现,为简化说明书的结构,在此不再赘述。
其中,需要说明的一点是,本发明说明书中未详细记载的内容,均为现有技术,本领域技术人员依据现有技术,均很容易能够实现,为简化本说明书的结构,在此不再赘述。
综上,本发明对基于不同控制方法建立的直升机全机数字模型均适用,通用性和灵活性强。另外,本发明提高了从数字建模到实时仿真的实施效率,降低了直升机飞控系统的研发周期和测试成本,具有良好的工程应用价值。
以上实施方式仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施方式对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施方式所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施方式技术方案的范围。