馬忠麗,吳麗麗,李嘉迪,曾玥涵,趙俊楠
成都信息工程大學 控制工程學院,四川 成都 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]。