基于Vega Prime的无人直升机飞行模拟训练系统研究与实现
2019-04-10李婷婷
李婷婷
(中国直升机设计研究所,江西 景德镇 333001)
0 引言
现阶段的无人直升机飞行操作员的职能是控制无人直升机的起飞与着陆过程,飞行操作员在工作中必须随时监视无人直升机的状态,并且能够在紧急情况下控制无人直升机返航并着陆。总结该项工作存在以下问题:
1) 飞行操作员实装训练容易受到天气、场地等环境因素的影响;
2) 由于无人直升机的飞行特效,其试飞存在较高的安全风险;
3) 特别是初期接受训练的操作员,操作不当容易损坏飞机,降低飞机寿命。
无人直升机飞行模拟训练系统是对实际飞行操作环境的一个虚拟再现,可以模拟飞行操作员实际操作无人直升机,通过培训可以提高操控无人直升机及应对处理突发事件的能力,继而很好地为飞行操作员实装训练做基础。既能提高飞行安全,又降低了飞行试验的成本。
论文基于Vega Prime研究,实现了一套无人直升机飞行模拟训练系统。系统集成了某型无人直升机飞行动力学模型、FUTABA操控盒、3D视景演示、故障模拟训练、考核机制和通用训练软件。系统设计简单、逼真度高、人机交互性强。
1 硬件组成与设计方案
1.1 硬件组成
如图1所示,系统硬件由主控计算机、FUTABA操控盒、视景显示系统组成。主控计算机使用HP Z230图形工作站并配置NVIDIA Quadro K2000显卡,计算机内运行飞行模拟训练软件,承担某型无人直升机飞行动力学控制运算、三维视景实时渲染等核心任务。操控盒使用FUTABA,飞行操作员通过FUTABA控制杆分别对无人机模型的总距、俯仰、尾桨、滚转舵机通道进行控制。视景显示系统由曲面液晶电视和显示支架组成,接收来自主控计算机的视频和音频信号,通过DVI转接HDMI线缆传输并显示。
图1 飞行模拟训练系统组成
1.2 设计方案
按图1所示,系统设计方案如下:
1) 建立训练软件选择界面,选择进入通用训练软件或某型无人直升机飞行训练软件。通用训练软件为普通航模训练者使用的应用软件。
2) 某型无人直升机飞行训练软件包括三维视景演示模块、飞行控制模块和FUTABA操控盒,飞行控制模块包含该型机飞行动力学模型,是整个系统的控制对象。操控盒的连续输出量直接被飞行控制模块调用,经飞行控制模块解算出无人机的当前位置和姿态等信息。
3) 三维视景演示模块实时接收飞行控制模块输出的位置和姿态信息,并在3D场景和2D地图中显示无人直升机的目标态势信息,同时完成3D场景下的不同视角切换和视图显示。
4) 三维视景演示模块设飞行模拟设置接口,飞行模拟设置信息实时发送给飞行控制模块,飞行控制模块接收并进入接口设置的模拟飞行。
5) 三维视景演示模块实时记录飞行模拟过程,并事后对记录过程进行回放。
2 软件结构与实现
2.1 软件结构
飞行模拟训练软件在vs2008环境下利用MFC单文件框架编程实现,使用Vega Prime(简称vp)平台实现三维视景渲染,渲染过程在定时器响应函数中完成。vp是美国Presagis公司在vega基础上推出的新一代实时视景驱动平台,是高性能实时三维视景仿真软件开发包,接口函数以C++类形式出现,工作效率高,在虚拟现实领域应用广泛[1]。
vp专门设计的用户图形界面Lynx Prime工具大大简化了应用程序的开发过程。在Lynx Prime设计界面,加载使用Terra Vista生成的.mft地形数据库文件和Multigen Creator构建的.flt三维可视化模型,对vp使用的场景元素类定义及参数初始化,生成.acf配置文件。Terra Vista是Presagis公司基于Windows平台的实时3D复杂地形数据库生成工具系统软件,专门应用于处理高精度大面积地形数据[2]。Multigen Creator提供了强大的多边形建模、矢量建模以及大面积地形精确生成等功能,生成的实时三维模型数据库,能够和实时视景仿真软件进行无缝焊接[3]。
如图2所示,按照功能模块划分,系统软件结构由训练软件选择、FUTABA操控盒、飞行控制模块、三维视景演示组成,通过UDP协议实现三维视景演示与飞行控制模块之间的数据实时交互。
图2 系统软件结构
2.2 程序实现
2.2.1 FUTABA操控盒
FUTABA操控盒的控制杆量线性输出0-255数值,使用JoyStick操纵杆库的JS4_Attach()、JS4_IsWorking()、JS4_GetAxesNums()、JS4_ReadValue()、JS4_Release()实现操控盒的加载、查询,操纵杆量获取,操纵数据读取、释放。把该操纵数据进行线性转换,使总距、纵向周期变距、横向周期变距和尾桨距满足某型无人直升机操纵范围。
2.2.2 飞行控制模块
飞行控制模块把总距、纵向周期变距、横向周期变距、尾桨距作为输入,对无人机模型进行模拟飞行处理,输出无人机的位置、姿态信息。在定时器响应函数中,通过WinSock2的sendto()将飞行控制模块的无人机姿态、位置信息以UDP方式发送给三维视景演示模块。同时通过WinSock2的recvfrom()接收三维视景演示模块发送过来的飞行模拟设置信息,并完成对应设置的模拟处理[4]。
2.2.3 三维视景演示
1) ACF文件配置
图3为系统视景的acf文件配置界面。新建配置文件,自动调用vpEnv模块的EnvSun、EnvMoon、EnvSkyDome、EnvCloudLayer、EnvWind、EnvStars类建立天空中太阳、云层等元素。在此基础上,创建vp以下类的例程并设置,实现视景元素的建立和初始化。
vpEnv模块的EnvRain、EnvSnow类:创建场景中雨雪特效实例,初始状态下使特效隐藏。
MetaFlight模块的Database类:分别创建地形数据库类实例,通过1.27G大小的.mft地景文件把大地形场景加入。利用vpLADBMPagingStrategyPoint和vpLADBMGeometryGridDataset数据库管理实例,在vp的管道式流水线渲染过程中,动态查阅管理和AOI优化大地形数据库的装载和卸载过程,根据LOD功能节点当前视点范围,平滑切换显示不同分辨率的层级,保证效率最优化[5]。
图3 ACF文件配置界面
vp模块的Object类:分别创建无人直升机模型、基地周边100m的高程数据地形、停机坪实例,模型根据的外观尺寸均为MultiGen Creator创建的.flt文件。分别设定各模型的坐标位置,使之吻合地加入3D视景场景。
vp模块的Scene场景类:创建3D地景场景实例myScene,在该地景场景中加入无人直升机、停机坪、基地周围地景,并作为vpLADBMGeometryGridDataset数据库管理的场景,与大地形数据库同时管理。
vpShadow模块的ShadowDynamicShadows类:创建动态阴影实例,模拟无人机在天空下的阴影效果,有利于观察无人机的位置变化,增加运动真实感。
vp模块的IsectorZ类:创建地形高度检测实例,选择Z检测方法,获取无人直升机所在位置地形高度,飞行控制模块根据此地形高度进行悬停,避免出现无人机继续向地下飞行的不真实现象。
2) 线程UDP信息交互
启动一个线程,基于UDP协议接收飞行控制模块发送来的位置姿态数据并通过WinSock2的recvfrom()来实现。飞行操纵模式和传感器故障等飞行模拟设置在该线程中基于UDP方式发送给飞行控制模块,WinSock2的sendto()实现设置信息的发送。
3) 无人机视景实时显示
在Helicopter类中建立vp的无人机模型对象vpObject,通过对模型对象的位置和姿态赋值传递,在视景演示框中实时更新显示。
vp::initialize()完成视景的内核、场景渲染库初始化和内存分配,vpKernel::instance()->define(acfFile.c_str())ACF文件代码转换,configure()完成文件配置,然后在定时器OnTimer中完成系统的视景渲染,部分实现代码如下:
int frameNum = vpKernel::instance()-> beginFrame(); //进入仿真
myDeltaTime = vpKernel::instance()-> getSimulationDeltaTime(); //两帧时间间隔
_p_UAV->updateEntity(myDeltaTime);
//完成无人机位置、场景更新
int result=vpKernel::instance()->endFrame();
//结束当前帧循环
vpObject模型对象的setPosition()和setRotate()更新无人机的位置和姿态,同时利用vpObserver观察者对象的setPosition()和setRotate()更新观察者的观察位置和角度。根据现有无人机的飞行品质,设置当俯仰角或滚转角大于60°时,处理无人机垂直落地并切换坠毁模型,使用vpAudioSoundSpatial和vpFxSmoke实例模拟坠地时的声音和烟雾特效。
4) 导航及仪表视图
图4为仪表视图,在ACF配置文件中创建GLS仪表窗口实例WindowGLS、管道实例channelGLS,channelGLS作为仪表窗口的显示通道。无人机位置和姿态通过vpGLStudioComponent* _p_glsViewCmp的setAttrib()函数赋值给GLS仪表各参数,然后绑定在MFC仪表视图中显示。
图4 仪表视图
图5为导航视图,设计在导航视图窗口嵌入2D地图,基于窗口消息映射机制传递无人机的当前位置,并通过动态叠加无人机标识示意,同时绘制飞行轨迹和偏离基地直线轨迹。2D地图为3D视景相对应的矢量电子地图,包含道路、河流、边界以及辅助显示信息多个图层。在MFC中创建导航视图窗口,在视图窗口类中嵌入使用MapWinGis绘图控件,SetProperty()完成图层设置,DrawLineEx()轨迹绘制,ZoomIn()视场缩小,ZoomOut()视场放大,SetBounds()视场移动。
图5 导航视图
5) 航迹显示及航迹预设
航迹显示:把航迹显示的绘画点放置在无人机的尾翼上,随着无人机的位置、姿态的改变以红色透明带的形式绘制飞行航迹。绘制中利用vpTransform的getMatrixAffine()和vuMatrixConvert()等函数获得完整矩阵并转换,几何绘制工具vrGeometry绘制飞机当前位置与上一时刻飞机位置的直线。
在主程序添加工具栏按钮,利用命令消息实现预设点的导入和预设航迹绘制,利用vrGeometry几何绘制工具以白色曲线绘制。
6) 模拟设置
模拟设置包括视景环境模拟设置、飞行操纵模拟模式、故障模拟、训练科目设置等。视景环境模拟包括一天24小时、雾雨雪天气环境。重写vpApp::onKeyInput(vrWindow::Key key, int mod),编写键盘按键对应的功能,通过switch(key)和case vrWindow::KEY_X实现天气、视角快捷键选择。设置界面见图6。
7) 观察视角切换
观察视角有飞行仪表视角、跟随视角、漫游视角。各视角的实现通过联合设置vpObserver的setStrategy()、setLookAt()、setLookFrom()和vpTransform的setStrategy()实现,飞行仪表视角用vpGLStudioComponent仪表类实例完成飞机姿态信息仪表显示。
8) 记录及回放
把vuFile的open()、writeString()、readString()等函数与定时器WM_TIMER()相结合,实现对飞行过程的记录与控制回放。控制回放过程包括开始播放、暂停播放、重新播放、快速与减速播放,并实时显示考核过程中的失分因素。
图6 视景场景初始设置
3 系统运行测试
该系统运行时,通过配合操控盒转换器的不同开关可以进行两种环境的飞行模拟训练,即通用飞行训练和某型无人直升机飞行训练。某型无人直升机飞行训练运行效果如图7所示,系统可以接收操控盒的控制输入,仿真模拟某型无人直升机的飞行状态,同步驱动更新无人直升机模型的位置、姿态并完成三维场景的实时渲染。同时,系统可以模拟无人直升机在不同飞行控制理论模式下的飞行,随时接入常见传感器故障模拟飞行,以提高无人直升机操纵水平并锻炼突发事件的应急处理能力。
图7 某型无人直升机飞行训练过程
通过对系统的长期使用和用户测试评价,证明该系统运行可靠,且具有良好的真实感和较强的人机交互性,能够满足某型无人直升机飞行模拟训练系统建设的需求。
4 结论
该无人直升机飞行模拟训练系统是无人直升机领域针对飞行操作员开发和使用的一套系统。它调用了先进建模工具Terra Vista生成的地形数据库文件和Multigen Creator构建的三维可视化模型,使用了虚拟现实技术Vega Prime完成模拟系统视景场景的开发,视景模拟真实度大大提高,飞行操作员使用该系统的真实感大大增强。系统首次集成某型无人直升机飞行动力学模型,实现了对无人直升机的飞行控制,使飞行操作员可以像对真实无人直升机一样进行操作和控制。
在该系统基础上,可通过更换无人直升机飞行动力学模型动态链接库,来用于其他型号无人直升机的飞行操作员模拟训练。伴随飞控模型的非线性化研究发展,可以进行动力学模型的仿真验证。经过进一步的席位扩展有望实现多架无人直升机甚至与其他武器装备的联合作战模拟。