基于Vega Prime 的无人直升机飞行模拟系统
2023-05-30史永胜夏志超
史永胜,夏志超
(中国民航大学航空工程学院,天津 300300)
无人直升机飞行模拟系统可模拟不同的飞行任务,且不受场地和环境的影响,增强了飞行安全性并降低了成本,对学员的培训和教学工作有重要的意义。另外,其可作为直升机研发工作的辅助工具,进行试验和仿真验证,缩短研发周期。因此,对于无人直升机飞行模拟系统的研究是有必要的。杨宏亮[1]以OSG(open scene graph)为仿真平台,建立了一种共轴双旋翼无人直升机飞行仿真系统,该系统可以实现直升机一些飞行动作的操纵,但OSG 平台缺乏图形化的界面,需要开发者对其很熟悉才能实现需要的功能,对初学者很不利,另外系统的视景界面也略显简单。刘泽群[2]开发了一套飞行仿真系统,设计了串级LADRC控制器提高飞行控制效果,使用OSG 开发视景系统,并调用Matlab 计算引擎实现数据传输,飞行结果更精确,但调用引擎时数据传输实时性不高。王婷婷等[3]基于STK 软件进行了无人直升机作战任务推演视景仿真,并完成了实时状态下的仿真,但仅针对特定飞行任务,不具备普遍性和通用性。
本文基于Vega Prime 实时视景仿真平台,设计了一套某型通用无人直升机飞行模拟系统,该平台具有图形化的界面,方便用户开发自己的功能,使用Creator 软件建立逼真、耗费内存小的模型文件且可直接被视景系统使用,使用GL Studio 软件开发出照片级的三维仪表面板显示飞行数据且可方便地通过插件实现与视景系统的嵌合,自主设计的用户数据报协议(UDP,user datagram protocol)通信接口能实现飞行仿真数据的实时快捷传输,采用MFC(microsoft foundation classes)框架搭建更为丰富友好的视景界面。该系统可实现直升机基础的飞行操作,也可拓展出任务和训练模块,具有很高的实用价值。
1 系统配置和方案设计
1.1 系统配置
系统配置包括软硬件配置和编译环境设置。系统的硬件配置为一台台式计算机,软件配置如表1 所示。
表1 软件配置Tab.1 Software configuration
系统的编译环境设置如下。
1)设置VS2005 中的Vega Prime 编译环境
①设置使用的字符集为多字节字符集;②添加附加包含目录和附加库目录Vega_Prime_2_2_1_VC8/include/vegaprime;Vega_Prime_2_2_1_VC8/include/vsg;C:/Presagis/Vega_Prime_2_2_1_VC8/lib;③添加额外的预处理器定义NDEBUG;_HAS_INERATOR_DEBUGGIN G=0;_SECURE_SCL=0;_MBCS。
2)设置Matlab 和VS 的编译环境
在Matlab 命令窗口输入“mex-setup”命令,一直选择“y”,在列出的本机已安装编译器列表中选择VS2005 作为默认的编译器。
1.2 方案设计
一个完整的直升机飞行模拟系统包括飞行仿真模块、座舱仿真模块、视景仿真模块和控制台模块4个部分[4-5],核心部分是飞行仿真和视景仿真两个模块,决定着系统是否是真实可用的,本文的系统方案设计流程如图1 所示。
图1 系统方案设计Fig.1 Design of system scheme
1)飞行仿真模块
分析无人直升机各部件和整机的空气动力特性,在Matlab 中建立非线性动力学模型,并通过编写UDP接口模块将解算出的飞行数据传入系统中。
2)座舱仿真模块
使用GL Studio 仪表开发软件设计得到逼真的直升机座舱飞行仪表面板,并通过插件的方式将该面板嵌入视景系统中,实时读取飞行数据并显示。
3)视景仿真模块
基于Vega Prime 视景仿真平台,联合VS 开发环境进行二次开发,包括对视景仿真线程的管理、数据接收端的编写及各种功能类的设计等。
4)控制台模块
控制台是为了方便用户和系统进交互而设计的对话框界面,用户通过该界面实现对系统某些特性和功能的操作,界面的设计应简洁友好。
2 系统实现
2.1 动力学建模
无人直升机的空气动力部件包括旋翼、尾桨、机身、平尾和垂尾[6-7]。以某型无人直升机为分析对象,各部件的力与力矩计算如下。
1)旋翼的力与力矩
旋翼是直升机的主升力面和操纵面,假设来流为均匀入流,采用动量定理分析可得旋翼的拉力为
式中:ρ 为空气密度(kg/m3);Ωmr为旋翼转速(rad/s);Rmr为旋翼半径(m);Cla,mr为桨叶升力曲线斜率(rad-1);bmr为桨叶数目;cmr为桨叶弦长(m);vjy,mr为垂直于桨叶的空速(m/s);vi,mr为旋翼诱导入流速度,其计算公式为
根据文献[8-9],旋翼挥舞运动可用两个一阶微分方程来表示
式中:as和bs为旋翼纵、横向一阶挥舞角(rad);wp、wq为机体的滚转和俯仰角速度;τmr为挥舞运动的时间常数(s);A 和B 为纵、横向挥舞运动的耦合效应(s-1);θcyc1和θcyc2为纵、横向桨叶挥舞角(rad)。
在机体坐标系中,旋翼的力和力矩为
式中:Fx,mr、Fy,mr和Fz,mr为旋翼在3 个坐标轴上的力(N);ML,mr、MM,mr和MN,mr为旋翼在3 个坐标轴上的力矩(N·m);Kβ为弹性系数(N·m);Hmr为旋翼桨毂中心到离质心的垂向距离(m);Pmr为旋翼总功率(kW)。
2)尾桨的力与力矩
尾桨计算和旋翼类似,但不考虑其挥舞运动。
尾桨拉力Ttr和尾桨诱导入流速度vi,tr为
式中物理量与式(2)旋翼类相对应(下标tr 表示尾桨的相应参数)。
在机体坐标系下,尾桨的力Fy,tr、滚转力矩ML,tr和偏航力矩MN,tr为
式中:Htr为尾桨桨毂中心到质心的垂向距离(m);Dtr为尾桨桨毂中心到质心的纵向距离(m)。
3)机身的力与力矩
由于机身沿纵向对称,产生的力矩忽略不计,考虑主旋翼下洗流对机身的影响,机身在3 个坐标轴受力为
式中:Sfx、Sfy和Sfz分别为机体坐标系各轴上有效阻力面积(m2);vx、vy和vz分别为机体坐标下各轴上的空速(m/s)。
4)平尾的力与力矩
平尾起着纵向配平和俯仰稳定作用,受旋翼下洗流影响。在机体坐标系下,平尾受力的计算公式为
式中:Cla,hf为平尾升力曲线斜率(rad-1);Shf为平尾面积(m2);vhf为平尾垂向空速(m/s);αst为临界攻角(rad)。
平尾俯仰力矩为
式中:Dhf为平尾中心到质心的纵向距离(m)。
5)垂尾的力与力矩
垂尾在横向配平和稳定中起着重要作用,同样受下洗流的影响。
在机体坐标系下,垂尾受力的计算公式为
式中:Cla,vf为垂尾升力曲线斜率(rad-1);Svf为垂尾面积(m2),vvf为垂尾横向空速(m/s)。垂尾滚转力矩ML,vf和垂尾偏航力矩MN,vf为
式中:Hvf为垂尾中心到质心的垂向距离(m);Dvf为垂尾中心到质心的纵向距离(m)。
6)直升机运动方程
由牛顿第二定律,合外力为
由动量矩定理可知,合力矩为
合力与合力矩在机轴系下各分量为
将式(19)和式(20)分别代入式(17)和式(18)可得无人直升机非线性动力学模型。采用S 函数,使用Matlab 的m 语言编写生成可进行仿真的Simulink 模块,流程如图2 所示。
图2 动力学模块编写流程Fig.2 Writing process of dynamic module
2.2 数据通信
由2.1 节建立的非线性动力模型求解得到的飞行数据需要传入到视景系统中,以供直升机模型实时读取。Matlab 和VS 的接口设计有两大类:①VS 调用Matlab 的计算引擎、m 文件编译生成的源文件、头文件以及DLL 文件;②Matlab 调用VS 中C/C++语言文件生成的MEX 文件或动态链接库[10]。
本文采用S 函数中的C 语言编写UDP 协议的发送端,然后将其生成MEX 文件,在视景系统中编写接收端,实现两者间的通信,如图3 所示。
图3 数据传输工作流程Fig.3 Workflow of data transmission
发送端的编写步骤如下:
(1)定义一个结构体变量,用于存储动力学模块输出的飞行数据,其成员变量包括空间位置、速度、姿态角和角速度;
(2)在源文件中编写各个子函数部分,如图4 所示;
图4 接收端编写流程Fig.4 Writing process at receiving end
(3)将S 函数模块名改为和源文件中函数名一致,使用“mex”命令生成可执行文件。
接收端定义相同的结构体变量,并在视图类的定时器中接收发来的数据。需要注意的是动力学模块的求解器设置为合适的定步长。将动力学模块和通信接口连接起来,即得到直升机非线性模型的仿真框图如图5 所示。
图5 直升机非线性模型框图Fig.5 Block diagram of helicopter nonlinear model
2.3 座舱仪表系统
GL Studio 软件是一款可创建实时的、三维的、照片级图形界面的软件,包括图形设计器和代码生成器[11],前者拥有几大工具箱方便用户设计仪表外形,后者通过编译代码实现需要的功能。该软件可以生成应用程序,单独运行,也可以生成DLL 文件,嵌入到其他应用程序中。一个完整的仪表项目开发步骤如下:
(1)收集仪表真实照片,用图形处理软件拆分出可动部件,置于同一图层中并生成纹理;
(2)新建一个仪表项目,打开图形设计器,配置仪表属性,绘制矩形或圆形等基本图形,导入做好的纹理,将拆分的部件重新按原位置添加到仪表上;
(3)在代码编辑页面定义属性、方法、回调、变量,编写相应的代码,以实现仪表需要的功能;
(4)保存所有操作并生成代码,调试并允许。
系统集成了6 大基础机械仪表和PFD(primary flight display)、MFD(multi function display)多功能电子仪表,可以实时显示速度、高度、航向、转弯侧滑等信息。运行效果图如图6 所示。
图6 直升机座舱仪表面板Fig.6 Instrument panel of helicopter cockpit
将建好的直升机仪表项目生成DLL 文件,并在Vega Prime 的用户界面配置ACF 文件,添加一个vpGLStudio 实例,在该实例操作区导入仪表DLL 文件,设置类名与文件名一致,在属性关联框中,根据仪表中定义的属性函数一一添加对应的VP 属性函数,即可实现两者的属性关联[12]。
2.4 视景系统
视景系统是基于Vega prime 视景仿真平台搭建的,是基于VSG 的实时三维视景开发工具[13],支持多种系统运行并且兼容C++运行库,内部封装了大量的仿真模块,同时也允许用户定制扩展模块。
Vega prime 应用程序最小的运行结构包括五大部分:初始化、定义、配置、帧循环[14]以及关闭。初始化阶段对应用程序运行的环境进行检测初始化,用户自己定制的模块也需要执行初始化;定义阶段创建和初始化所需的实例;配置阶段对定义阶段的项进行系统配置;帧循环阶段进行场景图的更新;最后关闭阶段退出程序运行。
在VS 平台上使用MFC 应用程序进行仿真程序的开发,只需通过调用对象提供的方法就可实现,避免了大量底层代码的编写,另外还提供了基础的应用程序框架和相关组件,进一步简化了开发的难度。在基于MFC 的基础上,采用多线程技术[14-17]创建一个工作者线程单独运行Vega Prime 应用程序,其和主应用程序间通过线程消息实现通信,系统运行框架如图7所示。
图7 系统运行框架Fig.7 System operation framework
使用AfxBeginThread()函数创建线程,创建的线程函数为:
通过自定义消息和消息处理函数,并在线程运行中调用,以实现对用户操作的响应。
3 飞行仿真分析
3.1 静态特性分析
静态特性分析指当直升机处于飞行平衡状态时,各状态参数随仿真时间的变化关系。基于前文已建立的直升机非线性Simulink 框图,采用Matlab 配平和线性化工具进行分析,根据飞行状态设定初始的约束值,求得对应的配平点并得到该点处的线性化方程,进而研究该状态下的飞行特性,下面对悬停和平稳前飞两种情况分析。
悬停状态时,高度为100 m,输入参数和状态参数初始约束值为0,得到其配平点处的输入参数值如表2 所示。
表2 输入信号Tab.2 Input signals
将表2 的值作为模型的初始输入值进行仿真,得到各状态参数变化曲线如图8 所示。
由图8 可以看出,初始0 时刻,机体坐标轴下各轴向的角速度(ωp,ωq,ωr)、姿态角(φp,φq,φr)和速度(vx,vy,vz)都为0,高度值为100 m,一段时间后,角速度经过轻微的变化后重新趋于0,姿态角、速度和位移(sx,sy,sz)发生较小的调整后在新的位置处重新保持平衡,有较好的悬停特性。
平稳前飞时,前飞速度保持不变,分别取不同的速度进行分析运算,得到输入信号和姿态角随速度的变化曲线如图9 所示。
图9 前飞状态参数曲线Fig.9 Parameter curves of forward flight state
由图9 可知,控制信号的取值范围是(-1,1),随着飞行速度的增大,俯仰信号值有略微地增大,横滚信号值略微减小,尾桨因加装了锁尾装置,基本不变化,总距呈倒马鞍形状,对应的俯仰角先增大后减小,俯仰和滚转角变化不大,保持在0 附近。
3.2 动态特性分析
动态特性分析即当人为操纵输入信号时直升机的飞行状态实时动态改变的过程,以模拟操纵直升机起飞到平稳飞行过程为例,得到角速度、姿态角、速度及位移随时间的变化曲线如图10 所示。
图10 模拟飞行曲线图Fig.10 Simulated flight graph
由图10 可以看出,直升机各飞行状态初始值为0,经过一段时间的爬升,当仿真时间达到50 s时,角速度变为0,姿态角、速度趋于某一固定值,达到平稳飞行状态。
4 结语
本文分析了无人直升机各部件的受力,建立了无人直升机非线性动力学模型,通过二次开发在VS 平台搭建了视景系统,设计接口模块,实现了飞行数据的导入,并开发了真实仪表以显示飞行数据,最后进行了飞行仿真,对静态特性的悬停和平稳前飞以及动态特性进行了分析验证。结果表明,建立的无人直升机非线性动力学模型能模拟实际的飞行情况,且仿真过程中,系统的运行画面逼真流畅,各仪表也能实时显示直升机的飞行数据,达到了系统设计目的,可实现较为真实的模拟飞行仿真,可作为实验教学的辅助工具。