基于Unity的VR模拟飞行软件设计
2020-10-13惠铎铎马进胡文东柳平
惠铎铎 马进 胡文东 柳平
摘 要: 为了改善模拟飞行的操纵感和体验感,使模拟飞行更加贴近真实飞行,更好的为航空飞行服务,将VR技术应用于模拟飞行软件开发中,用户通过外接交互设备,使模拟飞行与虚拟现实技术结合起来,实现模拟飞行过程体验和操控质感的飞跃。本文详细的介绍了软件的设计流程及核心关键技术要点,同时给出源代码及解释。该软件较传统的模拟飞行软件在操纵感和体验感有了较大的提升,可进一步应用于航空飞行的训练选拔中。
关键词: Unity; 模拟飞行; VR
中图分类号: TP311.5 文献标志码: A
Abstract: In order to improve the sense of control and experience of simulated flight, make simulated flight closer to real flight, and better serve aviation flight, this article applies VR technology to the development of simulated flight software. Users can connect external interactive equipment to make combination of simulated flight and virtual flight realistic technology to achieve a leap in the texture of the simulated flight process. This article details the software design process and core key technical points, and at the same time gives the source code and explanation. Compared with the traditional flight simulation software, the software has greatly improved the sense of control and experience, and can be further applied to the training and selection of aviation flight.
Key words: unity; simulated flight; VR
0 引言
模拟飞行也可以称做飞行模拟,是指通过计算机软件及外部硬件设备来对真实世界飞行中所遇到的各种元素,例如空气动力,地理环境,飞行操控系统等,综合在计算机中进行仿真模拟,并通过外部硬件设备进行飞行仿真操控和飞行感官回馈的一项事物。模拟飞行是依托计算机硬件和软件技术,应用互联网、局域网环境,进行近似于真实的真飞机的仿真飞行操作技术的运动[1]。高度仿真和互动性强是模拟飞行最显著的特点。模拟飞行十分经济,所使用的器材仅仅是普通的家用PC,辅以价格低廉的游戏摇杆等,使经费大大低于实际航空飞行。而模拟飞行和真实飞行的基础训练具有融通性,航空领域专家认为模拟飞行是进行真实飞行基础训练的最好途径。模拟飞行还有更加的现实作用是引导青少年投身航空事业,为国家储备更多的航空人才[2]。
VR(Virtual Reality)即虚拟现实技术,是一种能够产生与真实场景在视觉、听觉以及触觉等方面及其相似的虚拟场景的计算机技术,用户通过必要的交互设备,在虚拟场景中进行交互操作,达到身临其境的效果,具有强大的沉浸性、交互性和构想性等特征[3]。将该技术应用到模拟飞行领域中将大大提高模拟飞行设备的性能,使模拟飞行设备更加贴近真实飞行,增强操纵体验的真实感,将大大提高应用飞行模拟器进行教学、训练等的效率[4]。
1 软件设计
该软件是应用Unity Technologies公司的游戏引擎Unity开发的,Unity提供了一个功能齐备、容易操作的开发环境,帮用户轻松创建如三维视频游戏、建筑可视化、实时三维动画等类型互动内容,是一个全面整合的专业游戏引擎[5]。它可以利用交互图形化开发软件,可运行在Windows和Mac OS操作系统下,开发出来的软件可发布至Windows、Android等多个平台[6]。
本软件是应用Unity自带的C#脚本语言开发,要求开发和部署电脑的最低配置为独立显卡,4G内存,主频为3.4GHz,Unity开发版本为5.1.1。软件的硬件部分由外接操纵杆和油门杆以及脚舵组成,分别采用赛钛客X52pro和赛钛客Rudder Peddal,同时还有外接的虚拟现实头戴设备索尼HMZ-T1,如图1所示。
软件设计流程如图2所示。
本软件塑造了一个虚拟现实的三维立体环境,该环境是模拟真实的机场创建,在机场上空虚拟了一条可视的航线,该航线的参数来源于真实的飞行参数。操作者通过操纵游戏杆,油门杆和脚舵来控制飞机模型沿着航线飞行。航线的设置总共分为5种,这5种航線的难易程度是等效的。每选择一种航线的模拟飞行时间是5分钟,5分钟结束的时候程序退出。
1.1 登录界面
运行程序后登录界面,如图3所示。
被试输入姓名同时选择好轨迹后,点击开始就可以进入测试,点击退出则可以退出程序。轨迹的选择从1-5,难度由低到高,随着难度的增加,轨迹的坡度逐渐变大,弯度逐渐增多。
界面设计使用Unity自带的NGUI,NGUI是严格遵循KISS原则并用C#编写的Unity插件,提供强大的UI系统和事件通知框架[7]。NGUI完全集成到Inspector面板中,不需要点击Play按钮就能查看结果,在场景视图中看到的就是在游戏视图中得到的。每一个UI场景,都是以一个UIRoot为UI游戏对象树的根。在菜单栏中点击“NGUI”→“Create”→“2D UI”,本软件中UIRoot设计,如图4所示。
1.2 场景参数初始化
当用户在输入用户名和选择好航线轨迹的时候,点击开始,程序将初始化模拟飞行场景参数同时打开数据库。初始化模拟飞行场景参数包括场景地图的建立、飞机模型的预制、飞行航线的渲染。预设轨迹参数:
void Start()
{
PublicApplicationData.verticallevel = 50;
PublicApplicationData.horizontalleve = 100;
roudwid = 5f;
PreSet();
CreateData();
CreateUpmesh("roud", roudface, roud, physicmaterial, false);
CreateUpmesh("roudV", roudface, roudV, physicmaterial, false);
}
在Unity中,Start()函数是在加载场景后只运行一次的函数,该函数可以用来设置预设场景。
1.3 模拟飞行操作
在模拟飞行过程中,油门杆控制飞机的飞行速度,游戏杆和脚舵控制飞机的飞行方向和姿态,其中前后推游戏杆表示控制飞机的俯仰角度,左右推游戏杆表示控制飞机的滚转角,脚舵控制飞机的偏航角。在飞行过程中,数据库打开,实时采集飞行数据,采集数据的频率为0.2秒/次,采集数据的样本是飞机模型的重心与飞行航线之间的距离。在模拟飞行中外接虚拟现实头戴设备索尼HMZ-T1,选择并排输入模式,实现三维场景飞行。模拟飞行的场景,如图5所示。
模拟飞行过程中对飞机操纵的源代码如下:
void FixedUpdate ()
{
Control();
CaculateParameters();
AddForceAndTouque();
}
在Unity中,FixedUpdate()函数在每固定时间内刷新一次。该函数在固定时间内计算舵面偏角、飞行参数及加载力和力矩。
1.4 数据的采集
本软件的数据库是采用Access2007数据库,在数据库中包含两张数据表包括基本信息表(basicMessage)和测试数据记录表(testRecord),basicMessage表记录了操作者的姓名和选择的航线轨迹,testRecord表记录了飞机模型的重心与飞行航线之间的距离,以及记录该数据时距离程序运行开始时的时间[8],如图6所示。
2 关键技术
2.1 VR虚拟现实技术
为了使模拟飞行场景更加贴近真实的飞行环境,我们采用了虚拟现实技术,利用计算机模拟人的双眼立体视觉,人的双眼之所以能够感受到物体的前后远近位置,是因为人的左右两眼的视角不同所致,左眼看到的物体稍微偏左侧,右眼看到物体稍微偏右侧,经由视神经传至大脑,再由大脑将两个影像整合成单一个立体影像[9]。我们软件开发时在场景中设置两个摄像机,模拟人的两只眼睛,两个摄像机之间的距离模拟人的瞳孔之间的距离。左右摄像机加载在飞机模型上,作为其的子物体跟随在飞机模型的后方[10],具体设置方法如图7所示。
摄像机位置之间的设置如图8、图9所示。
摄像机初始化脚本为:
using UnityEngine;
using System.Collections;
publicclassCamraControl : MonoBehaviour {
publicCamera camra;
publicGameObject target;
publicRigidbody rigi;
void Start ()
{
rigi=target.GetComponent();
}
}
2.2 飞机飞行动力模型
本程序的飞机模型采用通航飞行气动模型,在程序初始化时,首先获取飞机模型刚体,同时预设飞机各项飞行参数。获取飞机模型刚体代码planeRigi=this.GetComponent〈Rigidbody〉();在飞机飞行过程中,计算机实时获取飞机各项操纵值,首先获取游戏杆横向、纵向操纵杆量dx、dz,以及左右蹬舵的量dy。
dx = -Input.GetAxis("X");
dz = Input.GetAxis("Z");
dy = Input.GetAxis("Y");
再计算飞机的副翼偏角、平尾偏角、方向舵偏角,以及由油门杆位置计算动力系数。
dx = -dx * 45;
dz = dz *35;
dy = -dy * 25;
dp = -Input.GetAxis("Power") + 1;
計算气动力的方程为
Y = (Cy0 + Cya * aDeg + Cywy * wy + Cydz * dz) * pf;
X = (Cx0 + Cxa * aDeg * aDeg ) * pf;
Z = Czb * bDeg * pf;
P = Pd * dp;
其中,Y为升力、X为阻力、Z为侧力、P为推力。Cy0为零升力系数,Cya为迎角升力系数,aDeg为迎角,Cywy为俯仰升力系数,wy为偏航角速度,Cydz为平尾升力系数,dz为平尾偏转角,pf为气动力,Cxa为阻力系数,Czb为测力系数,bDeg为侧滑角,Pd为推力系数,dp为油门位置。
Fx = P * Mathf.Cos(aRad) - X;
Fy = P * Mathf.Sin(aRad) + Y;
Fz = Z;
Fx为机头方向的力,Fy为机背方向的力,Fz为机翼方向的力。计算气动力矩:
mx = (mxb * bDeg + mxwx * wx + mxwy * wy + mxdx * dx + mxdy * dy)*pf*b;
my = (myb * bDeg + mywx * wx + mywy * wy + mydx * dx + mydy * dy)*pf*b;
mz = (mz0 + mza * aDeg + mzda * da + mzwz * wz + mzdz * dz)*pf*c;
mx为滚转力矩,my为偏航力矩,mz为俯仰力矩。mxb为側滑角滚转力矩导数,mxwx为滚转阻尼系数,wx为滚转角速度,mxwy为偏航滚转力矩系数,wy为偏航角速度,mxdx为副翼偏航力矩系数,dx为副翼偏转角,mxdy为方向舵滚转力矩系数,dy为方向舵偏转角,mza为迎角俯仰力矩导数,mzda为迎角变化率俯仰力矩导数,da为迎角变化率,mzwz为俯仰阻尼系数,dz为平尾偏转角,b为翼展,c为平均气动弦长。
对飞机加载力和力矩:
Force.x = Fz;
Force.y = Fy;
Force.z = Fx;
Torque.x = Mz;
Torque.y = My;
Torque.z = Mx;
planeRigi.AddRelativeForce(Force, ForceMode.Force);
planeRigi.AddRelativeTorque(Torque,ForceMode.Force);
3 总结
对基于unity的VR模拟飞行软件的软件需求和软件设计进行了详细的说明,同时对开发过程中的几个关键问题进行详细的阐述。将VR引入模拟飞行软件的开发中,是让新兴的技术融入模拟飞行中,为该领域增添新的血液和动力,增强人们的模拟飞行体验,更好服务人类具有重要的意义。在下一步工作中,在与真实飞机操纵感之间的对比中,进一步改进技术,缩小两者之间的差距,使该软件可用于飞行员选拔和训练中。
参考文献
[1] 惠铎铎,马进,张利利,等.飞行团队协作能力测试系统研究与开发[J].微型电脑应用,2019,35(5):8-10.
[2] 惠铎铎,马进,柳平,等.基于VR技术心理测试软件开发[J].计算机技术与发展,2018,28(2):188-190.
[3] 张雪峰,施浩,朱正,等.基于VR/AR的初教六飞机起落架模型设计制作[J].计算机工程应用技术,2019,15(3):264-265.
[4] Yu-Cheng Lin,Yen-Pei Chen,Huey-Wen Yien,et al. Integrated BIM, game engine andVRtechnologies for healthcare design: A case study in cancer hospital[J]. Advanced Engineering Informatics,2018(36):55-58.
[5] 宣雨松. Unity3D游戏开发[M]. 北京: 人民邮电出版社,2012: 108-113.
[6] 曲小宇.民用飞机模拟飞行软件研究[J].软件导刊,2016,15(7):115-117.
[7] 王爱军,李中永,颜世波.基于Unity3D的博物馆虚拟漫游系统设计[J].湖南工程学院学报,2019,29(1):49-53.
[8] 惠铎铎,沈超,马进,等.基于Unity的团队绩效测评软件开发[J].电子测试,2014,10(305):151-152.
[9] 张利利,李仁义,李晓京,等.Unity3D与数据库通信方法的研究[J].计算机技术与发展,2014,3(24):229-231.
[10] 张志安.基于VR技术的虚拟校园系统的设计与实现[J].光子学报,2011,5(40):769-772.
(收稿日期: 2019.06.24)