盧梅麗
(天津職業(yè)技術(shù)師范大學(xué)信息技術(shù)工程學(xué)院,天津 300222)
電力行業(yè)作為關(guān)系國家能源安全和國民經(jīng)濟(jì)命脈的傳統(tǒng)行業(yè),其新設(shè)備、新技術(shù)的應(yīng)用和工廠工人的大規(guī)模培訓(xùn)工作日趨廣泛和復(fù)雜。由于電網(wǎng)具有高危險(xiǎn)性和不可輕易斷電等特殊性,傳統(tǒng)的培訓(xùn)方式在電力系統(tǒng)的應(yīng)用中具有極大的局限性[1]。近年來,隨著計(jì)算機(jī)技術(shù)的發(fā)展,虛擬現(xiàn)實(shí)技術(shù)(virtual reality,VR)在各個(gè)領(lǐng)域得到了廣泛的應(yīng)用,如教育、機(jī)械制造、煤礦行業(yè),化工以及醫(yī)療等領(lǐng)域[2-8]。VR即一種能創(chuàng)建虛擬場景的計(jì)算機(jī)系統(tǒng),該系統(tǒng)生成的各種虛擬場景作用于用戶的視覺、聽覺和觸覺,能使用戶產(chǎn)生身臨其境的感覺[9]。電力系統(tǒng)對操作正確性要求非常高,各種復(fù)雜的操作流程必須通過反復(fù)的操作訓(xùn)練才能使從業(yè)人員的技術(shù)水平得以提高,因此其運(yùn)行維護(hù)具有一定的特殊性。由于VR能夠整合多種資源,將復(fù)雜的數(shù)據(jù)通過立體直觀和可交互的方式呈現(xiàn)出來,非常適合于電力系統(tǒng)運(yùn)行維護(hù)這種高復(fù)雜性以及需要反復(fù)操作系統(tǒng)的仿真培訓(xùn)研究。近些年,VR已經(jīng)在電力教育和培訓(xùn)以及電力系統(tǒng)運(yùn)行等方面有了成功的應(yīng)用,如變電站運(yùn)行虛擬培訓(xùn)系統(tǒng),輸電線路檢修虛擬培訓(xùn)系統(tǒng)以及電力工程設(shè)計(jì)虛擬系統(tǒng)等[10-11]。但目前大多數(shù)的電力系統(tǒng)虛擬培訓(xùn)基于PC端,要獲得沉浸感較強(qiáng)的虛擬體驗(yàn)效果,用戶需要配置HTC VIVE和Oculus Rift等專業(yè)設(shè)備,但這些設(shè)備成本昂貴,而且受PC端場地的選擇、系統(tǒng)的搭建以及線纜的規(guī)格等約束,很難實(shí)施。近些年,隨著智能移動(dòng)終端設(shè)備的高速發(fā)展以及計(jì)算平臺的普適化,基于移動(dòng)端的VR受到了越來越多的重視,移動(dòng)端VR只需要一部手機(jī)和相應(yīng)的VR盒子,結(jié)合無線網(wǎng)絡(luò)便能較好地滿足實(shí)際使用中便捷和移動(dòng)的要求。目前基于移動(dòng)設(shè)備的虛擬仿真系統(tǒng)也倍受關(guān)注,如針對油田工作的移動(dòng)客戶端仿真考核系統(tǒng)以及手機(jī)終端的機(jī)械拆裝應(yīng)用等[12-13]。本文設(shè)計(jì)和開發(fā)了一種基于移動(dòng)端VR和增強(qiáng)現(xiàn)實(shí)(augemented reality,AR)的電力變電站虛擬培訓(xùn)仿真系統(tǒng),采用Unity3D引擎,結(jié)合安卓操作系統(tǒng),在移動(dòng)端將虛擬現(xiàn)實(shí)技術(shù)與電力變電站系統(tǒng)相結(jié)合,開發(fā)了一種移動(dòng)便攜式的變電站仿真培訓(xùn)系統(tǒng)。通過移動(dòng)端VR和AR的應(yīng)用,既節(jié)省了培訓(xùn)成本,又克服了PC端VR場地和線纜的局限。
虛擬現(xiàn)實(shí)系統(tǒng)主要由三維建模軟件、系統(tǒng)集成開發(fā)引擎、輸入輸出設(shè)備等構(gòu)成。三維建模是利用三維數(shù)據(jù)將現(xiàn)實(shí)中的三維物體在計(jì)算機(jī)中重建,是虛擬現(xiàn)實(shí)場景開發(fā)的第一步。目前廣泛使用的三維建模工具主要有XSI、Maya和3ds Max等,每種建模工具都有其特點(diǎn)及適用范圍,本系統(tǒng)采用3ds Max 2014三維制作軟件進(jìn)行變電站三維建模。3ds Max是由Autodesk公司旗下的Discreet公司開發(fā)的三維造型與動(dòng)畫制作軟件,集建模、材料、燈光、渲染、動(dòng)畫、輸出于一體,廣泛應(yīng)用于建筑藝術(shù)、計(jì)算機(jī)輔助教育、工業(yè)造型、軍事和建筑設(shè)計(jì)等。3ds Max制作流程簡潔高效,具備較好的兼容性,提供了多邊形建模及NURBS等多種建模工具,極大豐富和簡化了虛擬現(xiàn)實(shí)的場景構(gòu)造。
現(xiàn)階段虛擬現(xiàn)實(shí)行業(yè)市場5個(gè)主要的開發(fā)集成軟件和平臺分別為 Virtools,Quest3D,VR-Platform,Unreal Engine 4和Unity3D。其中Unity3D是目前開發(fā)者最為常用的一款全面整合的專業(yè)引擎,其已在三維游戲、建筑可視化和商品宣傳等領(lǐng)域得到了廣泛應(yīng)用。Unity3D較好的跨平臺性及簡單易用的特性使其在虛擬現(xiàn)實(shí)領(lǐng)域得到了越來越多的應(yīng)用。本系統(tǒng)采用Unity3D 5.3.2版本,用C#編寫腳本實(shí)現(xiàn)人機(jī)交互和場景跳轉(zhuǎn)等功能。計(jì)算機(jī)采用Win8操作系統(tǒng),頭戴顯示器采用暴風(fēng)墨鏡4黃金頂配版和Android 4.4.2版Smartian T1測試真機(jī)。
本培訓(xùn)系統(tǒng)由VR部分和AR部分組成,其中VR部分主要包括變電站工廠場景虛擬漫游、母線及電容器組安全巡回檢查,以及電站作業(yè)前相關(guān)的安全措施查詢。AR部分主要是利用AR技術(shù)將平面圖紙中的電路模型進(jìn)行立體化顯示,實(shí)現(xiàn)電路圖的培訓(xùn)。系統(tǒng)總體結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)總體結(jié)構(gòu)
變電站虛擬漫游主要實(shí)現(xiàn)從變電站大門外至廠區(qū)內(nèi)主控樓、變壓器區(qū)、配電控制室內(nèi)以及職工生活區(qū)和周邊小區(qū)等整個(gè)場景的虛擬漫游。變電站場景概況如圖2所示。專業(yè)巡檢包括母線專業(yè)巡檢,如母線基礎(chǔ)支架檢查,主要檢查支架牢固、焊接處有無開裂等。支持絕緣子檢查,主要檢查絕緣子是否完整無破損,垂直度是否符合要求等;母線本體檢查,主要檢查母線表面是否光滑,管母線內(nèi)阻尼線是否完好等。另一項(xiàng)專業(yè)巡檢是電容器組專業(yè)巡檢,主要進(jìn)行電容器組的基礎(chǔ)檢查、套管檢查、外殼檢查、導(dǎo)電部分檢查及接地檢查等。安全作業(yè)規(guī)程提供給用戶關(guān)于作業(yè)前、作業(yè)中及作業(yè)后的各種安全措施。
圖2 變電站場景概況
變電站模型包括變電站場景和設(shè)備,其中變電站設(shè)備分為一次設(shè)備和二次設(shè)備2類。一次設(shè)備主要由變壓器、斷路器、隔離開關(guān)等構(gòu)成,二次設(shè)備主要由繼電器、測量儀表、控制開關(guān)和機(jī)構(gòu)柜等構(gòu)成。一次設(shè)備模型通常比二次設(shè)備模型復(fù)雜,尤其是變壓器模型細(xì)節(jié)較多,包括變壓器底座、散熱片、機(jī)構(gòu)箱等。在3ds Max中利用樣條線建立設(shè)備的高精度白模,為增加模型的真實(shí)感,將3d模型保存成.FBX格式的文件,導(dǎo)入到Unity3D引擎中進(jìn)行紋理材質(zhì)的貼圖,并添加光照陰影和粒子系統(tǒng)。
場景中模型數(shù)量眾多,且部分變壓器和刀閘模型非常復(fù)雜,如果不加處理會影響整個(gè)場景的運(yùn)行速度。為了提高系統(tǒng)性能,分別在3ds Max軟件和Unity3D引擎中對模型進(jìn)行了優(yōu)化。
(1)如果場景模型的個(gè)數(shù)和面數(shù)過多,會影響計(jì)算機(jī)對圖形的加載速度,導(dǎo)致模型加載不全,出現(xiàn)丟失現(xiàn)象。因此,需要在3ds Max中進(jìn)行模型優(yōu)化。一方面模型個(gè)數(shù)的優(yōu)化主要通過將相同材質(zhì)的物體進(jìn)行合并,在3D軟件中采用Attach合并精簡模型的方法:先給物體賦材質(zhì),然后調(diào)整好各物體材質(zhì)的坐標(biāo),將模型轉(zhuǎn)換成Edit Mesh,通過鼠標(biāo)右鍵選擇Attach合并。要保證虛擬場景的運(yùn)行速度,合并后的模型總面數(shù)不超過10萬面。另一方面是精簡模型的總面數(shù),主要通過降低Plane面片模型截面上的段數(shù)和Cylinder模型的高度段數(shù)與截面數(shù),更改線型物體的厚度,然后將其轉(zhuǎn)換成Editable poly導(dǎo)出,刪除各物體間的重合面,刪除模型中看不見的面等技術(shù)來實(shí)現(xiàn)。
(2)將場景模型導(dǎo)入到Unity3D引擎后,需要進(jìn)行材質(zhì)和貼圖設(shè)置,并添加陰影和光照。影響Unity3D性能的主要因素是中央處理器CPU和圖形處理器GPU的計(jì)算速度。GPU的性能會受到需要處理的頂點(diǎn)數(shù)和像素、屏幕分辨率以及內(nèi)存帶寬等因素的影響,對GPU的優(yōu)化除了通過在3D建模軟件中采用減少模型中三角形的數(shù)目和盡可能重用頂點(diǎn)的方法來減少頂點(diǎn)數(shù)外,還可以通過在Unity3D引擎中采用遮擋剔除(occlusion culling)技術(shù)消除隱藏在其他物體后面看不見的物體來實(shí)現(xiàn)。同時(shí),通過對貼圖的圖片進(jìn)行壓縮和紋理合并處理,減少圖片所占內(nèi)存和優(yōu)化帶寬。目前Android平臺主要支持ETC1格式的圖片壓縮,能在獲得清晰圖片的同時(shí)極大地減少內(nèi)存。紋理合并就是通過UIAtlas將多張貼圖合并做成一個(gè)大圖,使用的時(shí)候再進(jìn)行拆分,每一個(gè)大圖能拆分的小貼圖長寬比最好為正方形,且長度值是2的整數(shù)冪,以便于對紋理圖進(jìn)行切割和優(yōu)化。針對CPU的優(yōu)化主要是減少Draw Call的數(shù)量,在Unity3D中,將每一次引擎準(zhǔn)備數(shù)據(jù)并發(fā)送渲染物體命令給GPU的過程稱為一次Draw Call,因此每一幀的Draw Call次數(shù)是非常重要的性能指標(biāo),為了減少Draw Call的次數(shù),可以通過合并相似的模型并對這些模型使用相同的材質(zhì),然后采用靜態(tài)批處理的方式減少渲染次數(shù),從而減少對Draw Call的調(diào)用。
Unity3D是一款面向組件的開發(fā)引擎,一個(gè)工程由多個(gè)場景構(gòu)成,每一個(gè)場景中的所有物體都被稱為游戲?qū)ο?,對每一個(gè)游戲?qū)ο髞碚f,通過對其添加組件的方式來實(shí)現(xiàn)游戲?qū)ο蟮母鞣N功能,即游戲?qū)ο蟮乃泄δ芏家ㄟ^組件來實(shí)現(xiàn)。腳本是一種特殊的組件,通過添加到游戲?qū)ο笊蟻韺?shí)現(xiàn)用戶自定義的一些功能。在設(shè)計(jì)一個(gè)游戲?qū)ο蟮木唧w功能時(shí),可以將組件分為3個(gè)層次,從低到高分別為:基礎(chǔ)組件,指的是Unity3D提供的內(nèi)部功能組件,如物理組件、聲音組件、渲染組件等;模塊功能腳本組件是通過腳本實(shí)現(xiàn)的、相對獨(dú)立的、可重用的功能模塊組件;高層的整合代碼腳本,這些腳本將引擎基礎(chǔ)組件和模塊功能組件整合到一起,實(shí)現(xiàn)最終游戲?qū)ο筮壿嫛?/p>
在進(jìn)行腳本開發(fā)時(shí),必須注意到作為一個(gè)組件,腳本不能孤立于游戲?qū)ο蠖?dú)立運(yùn)行,即必須添加到游戲?qū)ο笊喜拍苌?。每一個(gè)腳本文件必然包含一個(gè)與腳本文件名相同且繼承自MonoBehaviour的Public類,MonoBehaviour類中常用的方法構(gòu)成了Unity腳本的生命周期,Unity腳本的生命周期如圖3所示。
圖3 Unity腳本的生命周期
從Awake方法到Start方法屬于初始化階段,Awake是生命周期的開始,用于在游戲開始前初始化變量或游戲狀態(tài)。向下執(zhí)行時(shí),先進(jìn)行一個(gè)判斷,如果Start方法已經(jīng)被執(zhí)行過,則不會再被執(zhí)行,即Start方法在生命周期中只被執(zhí)行一次。FixedUpdate在固定的時(shí)間間隔執(zhí)行,不受游戲幀率的影響,類似于定時(shí)器,如果幀率很低,一幀可被調(diào)用多次,一般用于處理物理邏輯。LateUpdate總是在Update方法執(zhí)行之后被調(diào)用,與Update方法一樣,每一幀調(diào)用一次,LateUpdate常用于第三人稱攝像頭的實(shí)時(shí)跟隨。OnGUI屬于渲染模塊,每幀調(diào)用多次,用于繪制圖形界面。OnDisable在游戲?qū)ο蟊唤脮r(shí)調(diào)用,一旦激活游戲?qū)ο螅梢灾匦禄氐絆nEnable狀態(tài)。當(dāng)游戲?qū)ο蟊讳N毀時(shí),就會執(zhí)行OnDestroy,然后通過OnApplicationQuit退出應(yīng)用程序,結(jié)束一個(gè)腳本的生命周期。
Unity引擎常用的腳本語言有C#和JavaScript,本項(xiàng)目采用C#實(shí)現(xiàn)人機(jī)交互功能。人機(jī)交互指用戶通過鍵盤、鼠標(biāo)和一些外部輸入設(shè)備控制和操縱虛擬場景中的動(dòng)作。本項(xiàng)目采用暴風(fēng)魔鏡的手柄作為輸入設(shè)備,利用設(shè)備上的OK鍵和搖桿控制虛擬場景的跳轉(zhuǎn)和漫游。為了在Unity中獲取手柄的按鍵和搖桿信息,首先將暴風(fēng)墨鏡手柄的資源包Mojing SDK for unity導(dǎo)入到Unity引擎中,然后加入IntegrateInputManager跨平臺交互預(yù)設(shè)和Overlay聚焦預(yù)設(shè),IntegrateInputManager用來獲取手柄的按鍵事件,Overlay實(shí)現(xiàn)場景中的射線準(zhǔn)星,用于聚焦UI按鈕。獲取按鍵事件的腳本中需要引入using Mojing Sample.Cross Plat form Input,然后采用Cross Plat form Input Manager獲取手柄的按鍵和搖桿信息。入口場景界面采用UGUI中的Button元素實(shí)現(xiàn)進(jìn)入培訓(xùn)系統(tǒng)場景和退出培訓(xùn)系統(tǒng)的功能。手柄對虛擬場景中Button的控制通過手柄射線觸發(fā)UI實(shí)現(xiàn),在培訓(xùn)系統(tǒng)入口這個(gè)場景的主攝像機(jī)Main Camera下添加腳本MainFrom,通過手柄的OK鍵控制進(jìn)入或退出系統(tǒng)。主要代碼如下:
進(jìn)入虛擬漫游培訓(xùn)場景后,可以通過手柄搖桿控制場景中的漫游動(dòng)作。將場景中的主攝像機(jī)Main Camera替換為MojingMain預(yù)設(shè)攝像頭,添加腳本組件MojingWalk掛在MojingMain上,實(shí)例代碼如下:
虛擬漫游培訓(xùn)系統(tǒng)采用暴風(fēng)魔鏡IV系列進(jìn)行測試,其頭盔顯示器和手柄如圖4所示。
圖4 暴風(fēng)魔鏡IV系列頭盔顯示器和手柄
只需要將開發(fā)的.apk文件下載到手機(jī)中,然后將手機(jī)插入頭盔顯示器即可使用。
手機(jī)端.apk文件打包步驟如下:
(1)下載安裝Java的JDK,然后在我的電腦-屬性-高級系統(tǒng)設(shè)置中對Java進(jìn)行環(huán)境變量設(shè)置。
(2)下載安裝Android SDK。
(3)在Unity引擎環(huán)境的菜單Edit的下拉菜單Preferences中,對External Tools項(xiàng)進(jìn)行設(shè)置,使其中JDK和SDK分別指向步驟(1)和(2)中安裝的路徑。
(4)安裝Android設(shè)備驅(qū)動(dòng),打開Android SDK Manager,安裝 Google USB Driver,最后在 Unity3D 中build場景,設(shè)置合適的參數(shù)后,發(fā)布成Android apk文件,然后下載到手機(jī)中。手機(jī)中的效果圖如圖5和圖6所示。
圖5 手機(jī)端效果圖1
圖6 手機(jī)端效果圖2
本培訓(xùn)系統(tǒng)對電路圖的培訓(xùn)采用AR技術(shù),AR技術(shù)可以在真實(shí)世界中疊加虛擬信息,主要通過跟蹤注冊技術(shù)實(shí)現(xiàn)。目前的增強(qiáng)現(xiàn)實(shí)AR系統(tǒng)中,主要有2大類跟蹤注冊技術(shù)[14-15]:一類是基于硬件的跟蹤注冊,另一類是基于計(jì)算機(jī)視覺跟蹤注冊。本文采用計(jì)算機(jī)視覺技術(shù)中的人工標(biāo)志方法進(jìn)行跟蹤注冊,基于人工標(biāo)記的AR系統(tǒng)能夠?qū)⑻摂M場景準(zhǔn)確定位到真實(shí)世界,具有快速、穩(wěn)定、準(zhǔn)確的特點(diǎn),可以快速從復(fù)雜的真實(shí)環(huán)境中檢測出人工標(biāo)記且對硬件配置要求不高??梢苑譃橐韵聨撞綄?shí)現(xiàn):首先采用手機(jī)攝像頭獲取視頻圖像,然后根據(jù)模式識別匹配算法,將標(biāo)記圖像與標(biāo)記庫中的模版標(biāo)記圖像進(jìn)行比較匹配來判斷此標(biāo)記是否為合法標(biāo)記,若匹配則可進(jìn)行標(biāo)記識別[16]。本系統(tǒng)AR部分采用高通Vuforia系統(tǒng),具體實(shí)現(xiàn)步驟如下:
(1)進(jìn)入Vuforia官網(wǎng)注冊賬戶,在網(wǎng)站主頁的選項(xiàng)Develop下的License Manager中注冊得到注冊碼。
(2)在Develop的Target Manager注冊數(shù)據(jù)庫,在新建的數(shù)據(jù)庫中添加需要立體顯示的虛擬場景識別圖。
(3)將所有的場景識別圖下載成Unity資源包,將該資源包和Vuforia SDK一起導(dǎo)入到Unity引擎中。
(4)在Unity場景中對ARCamera和ImageTarget分別進(jìn)行設(shè)置,將ARCamera、ImageTarget拖入場景。在ARCamera的Inspector窗口中點(diǎn)擊Open V uforia Configuration,在打開的界面中的App License Key項(xiàng)中填寫步驟(1)獲得的注冊碼,導(dǎo)入識別圖數(shù)據(jù)庫并激活。然后將需要識別后展示的虛擬場景作為ImageTarget子物體,設(shè)置多個(gè)需要識別的場景位置。
本文設(shè)計(jì)并開發(fā)了一種基于移動(dòng)端的變電站虛擬培訓(xùn)系統(tǒng),結(jié)果表明:虛擬培訓(xùn)系統(tǒng)基于3D場景的優(yōu)化和Unity引擎中GPU性能的改善,能夠?qū)崿F(xiàn)流暢的虛擬場景漫游以及友好的人機(jī)交互界面。與傳統(tǒng)的PC端虛擬培訓(xùn)系統(tǒng)相比,手機(jī)端漫游系統(tǒng)不受場地和線纜的約束,操作更加靈活方便。但是,由于手機(jī)端受手機(jī)性能如分辨率、視場角以及陀螺儀精度的限制,使用時(shí)容易產(chǎn)生一定的延遲感,從而造成用戶眩暈的感覺。因此,在開發(fā)中應(yīng)盡量選擇分辨率高的手機(jī)型號,同時(shí)控制漫游系統(tǒng)的使用時(shí)間,能一定程度上緩解手機(jī)端漫游給用戶造成的不適感。