马忠丽,吴丽丽,李嘉迪,曾玥涵,赵俊楠
成都信息工程大学 控制工程学院,四川 成都 610225
在越来越多领域得到广泛应用的基于Unity3D(U3D)开发的虚拟仿真系统为学习者提供了丰富的学习环境和条件。Wang等[1]提出U3D在虚拟仿真和虚拟现实等方面具有广泛应用的价值。Wang等[2]设计了基于Unity3D的飞机飞行控制系统虚拟装配仿真系统,实现了虚拟装配和模拟飞机控制系统等,降低了学习成本。杨鑫科等[3]设计的基于Unity3D的虚拟反恐排爆机器人,实现了反恐排爆机器人结构认知、装配操作和运动控制等功能,有较好的沉浸性与交互性。从较早机电时代开始,飞行器模拟器就被运用到飞行员的飞行训练中。随着虚拟现实技术发展,模拟飞行训练系统实现了接近真实系统的模拟效果[4]。模拟系统一般利用计算机渲染与物理运算技术,生成逼真、动态的可交互虚拟训练环境,模拟飞行器实际运动飞行状态,再结合用户操作行为,使用户沉浸到虚拟环境中[5]。目前,飞行器模拟训练系统已经被广泛应用到农业无人机灌溉操作训练[6]、电力电线无人机巡检操作训练[7]和军事士兵无人机探测的先行操作训练等领域上[8]。针对多旋翼飞行器爱好者前期飞行操控训练要求,本文设计了基于U3D的多旋翼飞行器飞行训练仿真系统,采用Solidworks制作多种类多旋翼飞行器模型,经CINEMA 4D渲染后导入U3D,通过运动场景虚拟、物理系统模拟、运动控制仿真和外部输入设备操控,实现了多旋翼飞行器飞行训练沉浸式体验。
系统由仿真软件端和操作硬件端2部分组成,软件端包含技能训练、挑战训练和考级训练3种模式,每种模式都由虚拟运动场景、模拟物理系统和仿真运动控制3大功能要素构成;操作硬件端包括键盘操作和遥控器2种外部输入方式。系统总体构架如图1所示。
图1 多旋翼飞行器飞行训练仿真系统总体架构图
1.1.1 3种训练模式
技能训练:针对飞行器初学者设定,目的是使多旋翼飞行器操作者熟悉环境信息,训练飞行器用遥控器或键盘操作的操作飞行技巧,用户可以在场景中任意飞行,没有任何飞行路线和考核要求。
挑战训练:针对飞行器有一定经验的学习者,目的是通过逐级训练使操作者熟练掌握飞行器操作飞行技巧,此模式以关卡形式为用户提供训练。
考级训练:针对有飞手考级需求的多旋翼飞行器操作者,目的是模拟考级飞行路线要求,使多旋翼飞行器操作者熟悉飞行器考级流程,并熟练掌握考核要求的操作技巧。
1.1.2 三大功能要素
虚拟运动场景:作用是虚拟飞行运动场景,场景按训练难度等级设置,难度越高设置的障碍物越多、越复杂,用来帮助操作者练习飞行操作技巧、提高操作水平。
模拟物理系统:作用是虚拟操作多旋翼无人机,完成无人机与周围环境(如树木、建筑物和地表等)障碍物的碰撞等行为的物理交互,给予用户最真实的操作反馈,增加训练趣味性[9]。
仿真运动控制:作用是模拟多旋翼无人机的飞行动作,包括起降、俯仰、横滚、偏航和悬停等,给予用户操控沉浸体验感,提高训练效果[10]。
1.1.3 2种操控方式
多旋翼飞行器操控包括键盘和遥控器2种形式:键盘方式是采用台式或笔记本电脑的键盘完成的;遥控器方式可以采用多旋翼飞行器专门配置的遥控器,也可以采用游戏用手柄;具体操作方式的选择可以通过U3D软件进行设置。
系统设计流程如图2所示。
图2 系统设计流程图
主流多旋翼无人机可分为四旋翼、六旋翼、八旋翼3类,它们结构相似,都是将多旋翼对称地安装在机架四周,且处于同一高度平面[11]。系统采用Solidworks制作了微型四旋翼、四旋翼、八旋翼3类wrl格式的模型,如图3所示。
图3 多旋翼飞行器物理模型
然后将wrl格式模型导入CINEMA 4D中进行渲染并生成fbx格式文件,最后导入U3D中。
虚拟运动场景的设计借助U3D引擎的地形系统,自定义地形地貌,再使用光照系统提供真实的光照效果,最后配以各种三维立体模型,如树木、石块和房屋建筑等,搭建出完整的训练运动场景[12]。
2.2.1 地形地貌场景的虚拟实现
使用U3D内置地形系统Terrain绘制飞行训练场地地形,包括地形的面积、高度和起伏等。地形纹理采用纹理贴图和法线贴图2种模式,既使场景物体表面看上去凹凸不平更为真实,又能表现场景地形地质,如草地、泥地和沙地等特征。上述功能实现主要使用Terrain中的“Paint Terrain”工具。如,将绘制植被的三维模型分别拖入“Trees”和“Detail”中,选择Terrain的“Paint Trees”可以绘制树木,选择“Paint Detail”可以绘制花草。
2.2.2 天空盒和光影场景的虚拟实现
天空盒是光照系统(Lighting)中的一个属性,是全景视图,通常在场景中最后被渲染,并且旋转以匹配相机(Camera)的当前方向。在U3D中,默认用平行光光源模拟现实世界中太阳,给场景带来真实光影效果。在光照系统中添加完天空盒之后,会带来微弱的光影效果,如晴天、阴天和黄昏等。根据多旋翼飞行器飞行训练要求,绘制了海岛沼泽地、电力巡检和室内空间3类场景及其光影效果,如图4所示。
图4 地形地貌场景绘制和天空光影实现
根据需求设计了技能训练、挑战训练和考级训练3种训练模式的虚拟运动场景。
技能训练包括自由飞行、电力巡检和室内飞行3种作业模式,提供沼泽地、室外电力巡线和室内空间3种训练场景,如图5所示。虚拟飞行效果如图5(a)所示。
挑战训练设计了关卡性质的场景,包含4个关卡,各包含4种飞行路线:“8”字环绕、“Z”字上升、山地起伏和螺旋上升,只有正确完成上一关卡才能进入到下一关卡,效果如图5(b)所示。
考级训练为用户提供多旋翼无人机飞行技巧等级考试要求的8种飞行训练路线(垂直升降、悬停、自旋、垂直三角和机头向外盘旋等),用户可参考等级考试路线图进行飞行训练,效果如图5(c)所示。
图5 多旋翼飞行器虚拟运动场景虚拟测试图
无人机与周围环境的物理交互是通过物理检测实现的,在U3D中使用内置Physx物理引擎来完成。Physx是目前使用最为广泛的物理引擎,可以通过此引擎高效、逼真地模拟刚体碰撞、车辆驾驶、布料和重力等物理效果,使画面更加真实生动。
3.1.1 重力与惯性的模拟实现
重力和惯性的模拟通过添加U3D引擎中最基础、最重要组件——刚体(Rigidbody)组件实现。添加刚体组件后会默认使用重力,并进行重力计算,实现重力模拟;物理系统添加刚体组件后可以依据刚体的质量(Mass)和空气阻力(Drag)计算出刚体的速度衰减,从而实现运动惯性模拟。
3.1.2 物体碰撞和边界检测的模拟实现
在模拟训练系统中,有地形和其他物体2类碰撞器。地形在创建时会自动添加TerrainCollider(地形碰撞器),其他物体则需根据各自形状和大小,手动添加相应类型的碰撞器,如BoxCollider(盒子碰撞器)、SphereCollider(球形碰撞器)等。添加完碰撞器后,通过设置碰撞器的属性IsTrigger(触发器)决定2个物体是否产生碰撞。对于形状复杂的物体,可以同时挂载多个碰撞器,然后拼装成需要的形状。设置完碰撞器后,即可在脚本中对碰撞进行检测,方法为OnCollisionOnEnter()(碰撞检测),当无人机与物体碰撞时U3D会自动调用此方法[13]。
边界检测主要用来限定飞行,控制范围。边界检测的方法是:在训练场地四周边缘处,一定高度的天空以及水面共设置了6组触发器,将训练场地包裹在其中,每组触发器由一前一后2个小触发器构成,当无人机进入前一个触发器时,系统会弹出提示窗口告知用户即将达到控制边界。若继续边界方向飞行,进入后一个触发器则判定无人机坠毁。
设计的四旋翼无人机的碰撞器如图6(a)所示,复杂环形障碍物的碰撞器设计如图6(b)所示,训练场地的边界触发器如图6(c)所示。
图6 多旋翼飞行器物体碰撞和边界检测的模拟
3.1.3 视角切换的模拟实现
为使用户能够在操控无人机时更好地了解多旋翼无人机的运动特性,模拟训练系统设计了第一人称视角和跟随式第三人称视角,两者可自由切换。
实现方式是在主摄像机(MainCamera)外创建2个虚拟相机(VirtualCamera),如图7(a)所示。一个放置在无人机正下方,作为第一人称;另外一个放置在无人机的正后上方,作为跟随式第三人称。进入训练场景时,默认处于跟随式第三人称视角,即只有正后上方虚拟相机被激活;用户可以利用键盘“V”键或者手柄“RB”右肩键,调用SetActive()(激活设置)切换视角,即激活正下方虚拟相机关闭正后上方虚拟相机,进入第一人称视角。无人机第一人称、跟随式第三人称视角如图7(b)和图7(c)所示。
图7 多旋翼飞行器视角切换的模拟
3.2.1 升降和俯仰运动的仿真
飞行器升降、前后、左右和悬停等运动通过添加刚体组件(Rigidbody),然后给刚体施加不同方向和大小的力来实现。调用施加力(AddForce())来实现,力大小不变,方向结合图8中的U3D场景的世界坐标系,依据用户输入计算得到。
图8 世界坐标系
U3D会根据用户输入的方向返回值1或者−1,如前、上、右方向返回值1,后、下、左方向返回值−1。用返回的值乘以基准移动方向,便可以计算出正确的移动方向。
3.2.2 偏航运动的模拟
在U3D中,任何存在于场景中的物体都带有一个变换组件(Transform),偏航运动可以通过修改Transform的旋转(Rotation)属性进行模拟。通过U3D接收用户控制输入,依据输入确定旋转的方向,再调用Rotate()方法,给定旋转轴(Y轴)、旋转方向和旋转速度即可。Transform组件属性检视面板如图9所示。
图9 Transform组件属性检视面板
3.2.3 姿态变化的模拟
无人机姿态变化时要求不改变无人机当前运动的飞行方向,实现方法是:在场景中创建当前无人机的父物体,父物体负责移动,无人机只负责姿态变化。以俯仰运动为例,根据父物体移动方向,确定无人机倾斜的方向,然后调用Rotate()方法,改变无人机Transform的rotation属性,使其朝运动方向倾斜,体现了无人机姿态变化的模拟。四旋翼无人机右飞、前飞时姿态变化如图10所示。
图10 四旋翼无人机右飞和前飞时姿态变化
用户可通过键盘鼠标或遥控器(手柄)2种外设控制器传入控制信号。在U3D的项目设置(Project Setting)界面选择输入(Input)配置,将每个轴与外设键位配对,U3D会自动接收外设对应按键的输入,并转换为−1到1的值,通过获取轴信息方法(Input.GetAxis())获取到该值,然后用到飞行器的控制中。遥控器和键盘外设输入设备控制方式如图11所示。以键盘为例:同时按下“Q+R”表示解锁飞行器,按下“W、S、A、D”分别表示飞行器前进、后退、左飞、右飞,按下“上、下、左、右”箭头分别表示飞行器加油、减油、左偏航、右偏航。
图11 外设输入设备的设置与控制
交互界面使用U3D提供的UI制作组件UGUI实现,可以连接系统的不同场景、提供用户可视化的系统设置界面、提供用户训练信息提示界面。界面之间的交互逻辑,即界面切换,由C#脚本代码控制。交互界面如图12所示。
图12 系统人机交互界面
4.3.1 动画功能
该功能主要用来向初学者展示飞行器运动过程,使用U3D的动画控制器(Animator)完成。使用Animation组件录制旋翼旋转的关键帧动画片段,保存为动画片段。添加Animator组件为其创建并分配动画控制器,再将动画片段拖入控制器中,便完成了动画制作,进入场景后会自动循环播放。
4.3.2 音效功能
多旋翼飞行器在飞行过程中主要的声音来源是旋翼高速旋转时产生的尖啸声。U3D内置音源(AudioSource)组件,将其挂载在对象上,分配一个音频片段,即可播放该音频。对象获得音源组件后,设置播放模式为循环(Loop),播放间为开始时播放(PlayOnAwake),进入场景时Unity3D便会自动播放该音频。
将开发完成的系统打包封装后,在64位Windows10和32位Windows7操作系统上分别进行了安装测试,八旋翼飞行器在电力巡检场景运行效果如图13所示。
图13 电力巡检场景飞行训练实际运行效果
测试运行效果表明,设计的多旋翼飞行器模拟飞行训练系统能高度还原,并模拟多种旋翼飞行器在多样作业环境,操作仿真性强,可以作为多旋翼飞行器爱好者日常飞行训练使用。
本文针对多旋翼飞行器初学爱好者的不同阶段训练要求,基于U3D技术设计开发了多旋翼飞行器模拟飞行训练仿真系统,测试运行结果表明,系统安装简单、运行速度流畅、界面操作友好,模拟效果逼真,可以作为多旋翼飞行器操作训练辅助学习系统推广使用。后续需要进一步完善系统如下功能:在重力、惯性和飞行姿态等方面加以优化,使飞行运动仿真更加自然;增加外部风力干扰下,飞行器飞行姿态变化的模拟[14]。