馬忠麗,吳麗麗,李嘉迪,曾玥涵,趙俊楠
成都信息工程大學(xué) 控制工程學(xué)院,四川 成都 610225
在越來越多領(lǐng)域得到廣泛應(yīng)用的基于Unity3D(U3D)開發(fā)的虛擬仿真系統(tǒng)為學(xué)習(xí)者提供了豐富的學(xué)習(xí)環(huán)境和條件。Wang等[1]提出U3D在虛擬仿真和虛擬現(xiàn)實(shí)等方面具有廣泛應(yīng)用的價(jià)值。Wang等[2]設(shè)計(jì)了基于Unity3D的飛機(jī)飛行控制系統(tǒng)虛擬裝配仿真系統(tǒng),實(shí)現(xiàn)了虛擬裝配和模擬飛機(jī)控制系統(tǒng)等,降低了學(xué)習(xí)成本。楊鑫科等[3]設(shè)計(jì)的基于Unity3D的虛擬反恐排爆機(jī)器人,實(shí)現(xiàn)了反恐排爆機(jī)器人結(jié)構(gòu)認(rèn)知、裝配操作和運(yùn)動(dòng)控制等功能,有較好的沉浸性與交互性。從較早機(jī)電時(shí)代開始,飛行器模擬器就被運(yùn)用到飛行員的飛行訓(xùn)練中。隨著虛擬現(xiàn)實(shí)技術(shù)發(fā)展,模擬飛行訓(xùn)練系統(tǒng)實(shí)現(xiàn)了接近真實(shí)系統(tǒng)的模擬效果[4]。模擬系統(tǒng)一般利用計(jì)算機(jī)渲染與物理運(yùn)算技術(shù),生成逼真、動(dòng)態(tài)的可交互虛擬訓(xùn)練環(huán)境,模擬飛行器實(shí)際運(yùn)動(dòng)飛行狀態(tài),再結(jié)合用戶操作行為,使用戶沉浸到虛擬環(huán)境中[5]。目前,飛行器模擬訓(xùn)練系統(tǒng)已經(jīng)被廣泛應(yīng)用到農(nóng)業(yè)無人機(jī)灌溉操作訓(xùn)練[6]、電力電線無人機(jī)巡檢操作訓(xùn)練[7]和軍事士兵無人機(jī)探測的先行操作訓(xùn)練等領(lǐng)域上[8]。針對多旋翼飛行器愛好者前期飛行操控訓(xùn)練要求,本文設(shè)計(jì)了基于U3D的多旋翼飛行器飛行訓(xùn)練仿真系統(tǒng),采用Solidworks制作多種類多旋翼飛行器模型,經(jīng)CINEMA 4D渲染后導(dǎo)入U(xiǎn)3D,通過運(yùn)動(dòng)場景虛擬、物理系統(tǒng)模擬、運(yùn)動(dòng)控制仿真和外部輸入設(shè)備操控,實(shí)現(xiàn)了多旋翼飛行器飛行訓(xùn)練沉浸式體驗(yàn)。
系統(tǒng)由仿真軟件端和操作硬件端2部分組成,軟件端包含技能訓(xùn)練、挑戰(zhàn)訓(xùn)練和考級訓(xùn)練3種模式,每種模式都由虛擬運(yùn)動(dòng)場景、模擬物理系統(tǒng)和仿真運(yùn)動(dòng)控制3大功能要素構(gòu)成;操作硬件端包括鍵盤操作和遙控器2種外部輸入方式。系統(tǒng)總體構(gòu)架如圖1所示。
圖1 多旋翼飛行器飛行訓(xùn)練仿真系統(tǒng)總體架構(gòu)圖
1.1.1 3種訓(xùn)練模式
技能訓(xùn)練:針對飛行器初學(xué)者設(shè)定,目的是使多旋翼飛行器操作者熟悉環(huán)境信息,訓(xùn)練飛行器用遙控器或鍵盤操作的操作飛行技巧,用戶可以在場景中任意飛行,沒有任何飛行路線和考核要求。
挑戰(zhàn)訓(xùn)練:針對飛行器有一定經(jīng)驗(yàn)的學(xué)習(xí)者,目的是通過逐級訓(xùn)練使操作者熟練掌握飛行器操作飛行技巧,此模式以關(guān)卡形式為用戶提供訓(xùn)練。
考級訓(xùn)練:針對有飛手考級需求的多旋翼飛行器操作者,目的是模擬考級飛行路線要求,使多旋翼飛行器操作者熟悉飛行器考級流程,并熟練掌握考核要求的操作技巧。
1.1.2 三大功能要素
虛擬運(yùn)動(dòng)場景:作用是虛擬飛行運(yùn)動(dòng)場景,場景按訓(xùn)練難度等級設(shè)置,難度越高設(shè)置的障礙物越多、越復(fù)雜,用來幫助操作者練習(xí)飛行操作技巧、提高操作水平。
模擬物理系統(tǒng):作用是虛擬操作多旋翼無人機(jī),完成無人機(jī)與周圍環(huán)境(如樹木、建筑物和地表等)障礙物的碰撞等行為的物理交互,給予用戶最真實(shí)的操作反饋,增加訓(xùn)練趣味性[9]。
仿真運(yùn)動(dòng)控制:作用是模擬多旋翼無人機(jī)的飛行動(dòng)作,包括起降、俯仰、橫滾、偏航和懸停等,給予用戶操控沉浸體驗(yàn)感,提高訓(xùn)練效果[10]。
1.1.3 2種操控方式
多旋翼飛行器操控包括鍵盤和遙控器2種形式:鍵盤方式是采用臺(tái)式或筆記本電腦的鍵盤完成的;遙控器方式可以采用多旋翼飛行器專門配置的遙控器,也可以采用游戲用手柄;具體操作方式的選擇可以通過U3D軟件進(jìn)行設(shè)置。
系統(tǒng)設(shè)計(jì)流程如圖2所示。
圖2 系統(tǒng)設(shè)計(jì)流程圖
主流多旋翼無人機(jī)可分為四旋翼、六旋翼、八旋翼3類,它們結(jié)構(gòu)相似,都是將多旋翼對稱地安裝在機(jī)架四周,且處于同一高度平面[11]。系統(tǒng)采用Solidworks制作了微型四旋翼、四旋翼、八旋翼3類wrl格式的模型,如圖3所示。
圖3 多旋翼飛行器物理模型
然后將wrl格式模型導(dǎo)入CINEMA 4D中進(jìn)行渲染并生成fbx格式文件,最后導(dǎo)入U(xiǎn)3D中。
虛擬運(yùn)動(dòng)場景的設(shè)計(jì)借助U3D引擎的地形系統(tǒng),自定義地形地貌,再使用光照系統(tǒng)提供真實(shí)的光照效果,最后配以各種三維立體模型,如樹木、石塊和房屋建筑等,搭建出完整的訓(xùn)練運(yùn)動(dòng)場景[12]。
2.2.1 地形地貌場景的虛擬實(shí)現(xiàn)
使用U3D內(nèi)置地形系統(tǒng)Terrain繪制飛行訓(xùn)練場地地形,包括地形的面積、高度和起伏等。地形紋理采用紋理貼圖和法線貼圖2種模式,既使場景物體表面看上去凹凸不平更為真實(shí),又能表現(xiàn)場景地形地質(zhì),如草地、泥地和沙地等特征。上述功能實(shí)現(xiàn)主要使用Terrain中的“Paint Terrain”工具。如,將繪制植被的三維模型分別拖入“Trees”和“Detail”中,選擇Terrain的“Paint Trees”可以繪制樹木,選擇“Paint Detail”可以繪制花草。
2.2.2 天空盒和光影場景的虛擬實(shí)現(xiàn)
天空盒是光照系統(tǒng)(Lighting)中的一個(gè)屬性,是全景視圖,通常在場景中最后被渲染,并且旋轉(zhuǎn)以匹配相機(jī)(Camera)的當(dāng)前方向。在U3D中,默認(rèn)用平行光光源模擬現(xiàn)實(shí)世界中太陽,給場景帶來真實(shí)光影效果。在光照系統(tǒng)中添加完天空盒之后,會(huì)帶來微弱的光影效果,如晴天、陰天和黃昏等。根據(jù)多旋翼飛行器飛行訓(xùn)練要求,繪制了海島沼澤地、電力巡檢和室內(nèi)空間3類場景及其光影效果,如圖4所示。
圖4 地形地貌場景繪制和天空光影實(shí)現(xiàn)
根據(jù)需求設(shè)計(jì)了技能訓(xùn)練、挑戰(zhàn)訓(xùn)練和考級訓(xùn)練3種訓(xùn)練模式的虛擬運(yùn)動(dòng)場景。
技能訓(xùn)練包括自由飛行、電力巡檢和室內(nèi)飛行3種作業(yè)模式,提供沼澤地、室外電力巡線和室內(nèi)空間3種訓(xùn)練場景,如圖5所示。虛擬飛行效果如圖5(a)所示。
挑戰(zhàn)訓(xùn)練設(shè)計(jì)了關(guān)卡性質(zhì)的場景,包含4個(gè)關(guān)卡,各包含4種飛行路線:“8”字環(huán)繞、“Z”字上升、山地起伏和螺旋上升,只有正確完成上一關(guān)卡才能進(jìn)入到下一關(guān)卡,效果如圖5(b)所示。
考級訓(xùn)練為用戶提供多旋翼無人機(jī)飛行技巧等級考試要求的8種飛行訓(xùn)練路線(垂直升降、懸停、自旋、垂直三角和機(jī)頭向外盤旋等),用戶可參考等級考試路線圖進(jìn)行飛行訓(xùn)練,效果如圖5(c)所示。
圖5 多旋翼飛行器虛擬運(yùn)動(dòng)場景虛擬測試圖
無人機(jī)與周圍環(huán)境的物理交互是通過物理檢測實(shí)現(xiàn)的,在U3D中使用內(nèi)置Physx物理引擎來完成。Physx是目前使用最為廣泛的物理引擎,可以通過此引擎高效、逼真地模擬剛體碰撞、車輛駕駛、布料和重力等物理效果,使畫面更加真實(shí)生動(dòng)。
3.1.1 重力與慣性的模擬實(shí)現(xiàn)
重力和慣性的模擬通過添加U3D引擎中最基礎(chǔ)、最重要組件——?jiǎng)傮w(Rigidbody)組件實(shí)現(xiàn)。添加剛體組件后會(huì)默認(rèn)使用重力,并進(jìn)行重力計(jì)算,實(shí)現(xiàn)重力模擬;物理系統(tǒng)添加剛體組件后可以依據(jù)剛體的質(zhì)量(Mass)和空氣阻力(Drag)計(jì)算出剛體的速度衰減,從而實(shí)現(xiàn)運(yùn)動(dòng)慣性模擬。
3.1.2 物體碰撞和邊界檢測的模擬實(shí)現(xiàn)
在模擬訓(xùn)練系統(tǒng)中,有地形和其他物體2類碰撞器。地形在創(chuàng)建時(shí)會(huì)自動(dòng)添加TerrainCollider(地形碰撞器),其他物體則需根據(jù)各自形狀和大小,手動(dòng)添加相應(yīng)類型的碰撞器,如BoxCollider(盒子碰撞器)、SphereCollider(球形碰撞器)等。添加完碰撞器后,通過設(shè)置碰撞器的屬性IsTrigger(觸發(fā)器)決定2個(gè)物體是否產(chǎn)生碰撞。對于形狀復(fù)雜的物體,可以同時(shí)掛載多個(gè)碰撞器,然后拼裝成需要的形狀。設(shè)置完碰撞器后,即可在腳本中對碰撞進(jìn)行檢測,方法為OnCollisionOnEnter()(碰撞檢測),當(dāng)無人機(jī)與物體碰撞時(shí)U3D會(huì)自動(dòng)調(diào)用此方法[13]。
邊界檢測主要用來限定飛行,控制范圍。邊界檢測的方法是:在訓(xùn)練場地四周邊緣處,一定高度的天空以及水面共設(shè)置了6組觸發(fā)器,將訓(xùn)練場地包裹在其中,每組觸發(fā)器由一前一后2個(gè)小觸發(fā)器構(gòu)成,當(dāng)無人機(jī)進(jìn)入前一個(gè)觸發(fā)器時(shí),系統(tǒng)會(huì)彈出提示窗口告知用戶即將達(dá)到控制邊界。若繼續(xù)邊界方向飛行,進(jìn)入后一個(gè)觸發(fā)器則判定無人機(jī)墜毀。
設(shè)計(jì)的四旋翼無人機(jī)的碰撞器如圖6(a)所示,復(fù)雜環(huán)形障礙物的碰撞器設(shè)計(jì)如圖6(b)所示,訓(xùn)練場地的邊界觸發(fā)器如圖6(c)所示。
圖6 多旋翼飛行器物體碰撞和邊界檢測的模擬
3.1.3 視角切換的模擬實(shí)現(xiàn)
為使用戶能夠在操控?zé)o人機(jī)時(shí)更好地了解多旋翼無人機(jī)的運(yùn)動(dòng)特性,模擬訓(xùn)練系統(tǒng)設(shè)計(jì)了第一人稱視角和跟隨式第三人稱視角,兩者可自由切換。
實(shí)現(xiàn)方式是在主攝像機(jī)(MainCamera)外創(chuàng)建2個(gè)虛擬相機(jī)(VirtualCamera),如圖7(a)所示。一個(gè)放置在無人機(jī)正下方,作為第一人稱;另外一個(gè)放置在無人機(jī)的正后上方,作為跟隨式第三人稱。進(jìn)入訓(xùn)練場景時(shí),默認(rèn)處于跟隨式第三人稱視角,即只有正后上方虛擬相機(jī)被激活;用戶可以利用鍵盤“V”鍵或者手柄“RB”右肩鍵,調(diào)用SetActive()(激活設(shè)置)切換視角,即激活正下方虛擬相機(jī)關(guān)閉正后上方虛擬相機(jī),進(jìn)入第一人稱視角。無人機(jī)第一人稱、跟隨式第三人稱視角如圖7(b)和圖7(c)所示。
圖7 多旋翼飛行器視角切換的模擬
3.2.1 升降和俯仰運(yùn)動(dòng)的仿真
飛行器升降、前后、左右和懸停等運(yùn)動(dòng)通過添加剛體組件(Rigidbody),然后給剛體施加不同方向和大小的力來實(shí)現(xiàn)。調(diào)用施加力(AddForce())來實(shí)現(xiàn),力大小不變,方向結(jié)合圖8中的U3D場景的世界坐標(biāo)系,依據(jù)用戶輸入計(jì)算得到。
圖8 世界坐標(biāo)系
U3D會(huì)根據(jù)用戶輸入的方向返回值1或者?1,如前、上、右方向返回值1,后、下、左方向返回值?1。用返回的值乘以基準(zhǔn)移動(dòng)方向,便可以計(jì)算出正確的移動(dòng)方向。
3.2.2 偏航運(yùn)動(dòng)的模擬
在U3D中,任何存在于場景中的物體都帶有一個(gè)變換組件(Transform),偏航運(yùn)動(dòng)可以通過修改Transform的旋轉(zhuǎn)(Rotation)屬性進(jìn)行模擬。通過U3D接收用戶控制輸入,依據(jù)輸入確定旋轉(zhuǎn)的方向,再調(diào)用Rotate()方法,給定旋轉(zhuǎn)軸(Y軸)、旋轉(zhuǎn)方向和旋轉(zhuǎn)速度即可。Transform組件屬性檢視面板如圖9所示。
圖9 Transform組件屬性檢視面板
3.2.3 姿態(tài)變化的模擬
無人機(jī)姿態(tài)變化時(shí)要求不改變無人機(jī)當(dāng)前運(yùn)動(dòng)的飛行方向,實(shí)現(xiàn)方法是:在場景中創(chuàng)建當(dāng)前無人機(jī)的父物體,父物體負(fù)責(zé)移動(dòng),無人機(jī)只負(fù)責(zé)姿態(tài)變化。以俯仰運(yùn)動(dòng)為例,根據(jù)父物體移動(dòng)方向,確定無人機(jī)傾斜的方向,然后調(diào)用Rotate()方法,改變無人機(jī)Transform的rotation屬性,使其朝運(yùn)動(dòng)方向傾斜,體現(xiàn)了無人機(jī)姿態(tài)變化的模擬。四旋翼無人機(jī)右飛、前飛時(shí)姿態(tài)變化如圖10所示。
圖10 四旋翼無人機(jī)右飛和前飛時(shí)姿態(tài)變化
用戶可通過鍵盤鼠標(biāo)或遙控器(手柄)2種外設(shè)控制器傳入控制信號(hào)。在U3D的項(xiàng)目設(shè)置(Project Setting)界面選擇輸入(Input)配置,將每個(gè)軸與外設(shè)鍵位配對,U3D會(huì)自動(dòng)接收外設(shè)對應(yīng)按鍵的輸入,并轉(zhuǎn)換為?1到1的值,通過獲取軸信息方法(Input.GetAxis())獲取到該值,然后用到飛行器的控制中。遙控器和鍵盤外設(shè)輸入設(shè)備控制方式如圖11所示。以鍵盤為例:同時(shí)按下“Q+R”表示解鎖飛行器,按下“W、S、A、D”分別表示飛行器前進(jìn)、后退、左飛、右飛,按下“上、下、左、右”箭頭分別表示飛行器加油、減油、左偏航、右偏航。
圖11 外設(shè)輸入設(shè)備的設(shè)置與控制
交互界面使用U3D提供的UI制作組件UGUI實(shí)現(xiàn),可以連接系統(tǒng)的不同場景、提供用戶可視化的系統(tǒng)設(shè)置界面、提供用戶訓(xùn)練信息提示界面。界面之間的交互邏輯,即界面切換,由C#腳本代碼控制。交互界面如圖12所示。
圖12 系統(tǒng)人機(jī)交互界面
4.3.1 動(dòng)畫功能
該功能主要用來向初學(xué)者展示飛行器運(yùn)動(dòng)過程,使用U3D的動(dòng)畫控制器(Animator)完成。使用Animation組件錄制旋翼旋轉(zhuǎn)的關(guān)鍵幀動(dòng)畫片段,保存為動(dòng)畫片段。添加Animator組件為其創(chuàng)建并分配動(dòng)畫控制器,再將動(dòng)畫片段拖入控制器中,便完成了動(dòng)畫制作,進(jìn)入場景后會(huì)自動(dòng)循環(huán)播放。
4.3.2 音效功能
多旋翼飛行器在飛行過程中主要的聲音來源是旋翼高速旋轉(zhuǎn)時(shí)產(chǎn)生的尖嘯聲。U3D內(nèi)置音源(AudioSource)組件,將其掛載在對象上,分配一個(gè)音頻片段,即可播放該音頻。對象獲得音源組件后,設(shè)置播放模式為循環(huán)(Loop),播放間為開始時(shí)播放(PlayOnAwake),進(jìn)入場景時(shí)Unity3D便會(huì)自動(dòng)播放該音頻。
將開發(fā)完成的系統(tǒng)打包封裝后,在64位Windows10和32位Windows7操作系統(tǒng)上分別進(jìn)行了安裝測試,八旋翼飛行器在電力巡檢場景運(yùn)行效果如圖13所示。
圖13 電力巡檢場景飛行訓(xùn)練實(shí)際運(yùn)行效果
測試運(yùn)行效果表明,設(shè)計(jì)的多旋翼飛行器模擬飛行訓(xùn)練系統(tǒng)能高度還原,并模擬多種旋翼飛行器在多樣作業(yè)環(huán)境,操作仿真性強(qiáng),可以作為多旋翼飛行器愛好者日常飛行訓(xùn)練使用。
本文針對多旋翼飛行器初學(xué)愛好者的不同階段訓(xùn)練要求,基于U3D技術(shù)設(shè)計(jì)開發(fā)了多旋翼飛行器模擬飛行訓(xùn)練仿真系統(tǒng),測試運(yùn)行結(jié)果表明,系統(tǒng)安裝簡單、運(yùn)行速度流暢、界面操作友好,模擬效果逼真,可以作為多旋翼飛行器操作訓(xùn)練輔助學(xué)習(xí)系統(tǒng)推廣使用。后續(xù)需要進(jìn)一步完善系統(tǒng)如下功能:在重力、慣性和飛行姿態(tài)等方面加以優(yōu)化,使飛行運(yùn)動(dòng)仿真更加自然;增加外部風(fēng)力干擾下,飛行器飛行姿態(tài)變化的模擬[14]。