,,,,,,
(大連交通大學(xué)交通運(yùn)輸工程學(xué)院,遼寧大連116028)
動(dòng)車組作為我國(guó)鐵路運(yùn)輸?shù)闹匾M成部分,已經(jīng)成為新時(shí)期我國(guó)鐵路建設(shè)的關(guān)鍵。為保障動(dòng)車組車輛的可靠運(yùn)行,需要定期對(duì)動(dòng)車組車輛進(jìn)行檢修[1]。受電弓作為動(dòng)車組運(yùn)行安全的重要設(shè)備之一,其檢修人員隨著動(dòng)車組產(chǎn)量的增加也在不斷增多,在檢修培訓(xùn)過(guò)程中如果采用物理樣機(jī),不但成本巨大,而且會(huì)造成人力物力的浪費(fèi)[2]。虛擬現(xiàn)實(shí)技術(shù)(virtual reality,VR)是一種可以創(chuàng)建和體驗(yàn)虛擬世界的計(jì)算機(jī)仿真系統(tǒng),它利用計(jì)算機(jī)生成多源信息融合的、交互式的、逼真的模擬環(huán)境,給用戶一種身臨其境的感覺,增強(qiáng)用戶的沉浸感和體驗(yàn)感[3]。
虛擬培訓(xùn)作為虛擬現(xiàn)實(shí)技術(shù)的一個(gè)重要分支,并利用虛擬現(xiàn)實(shí)技術(shù)構(gòu)建三維虛擬環(huán)境,使學(xué)員更好地完成知識(shí)的學(xué)習(xí)和技能的提升,從而解決傳統(tǒng)的集中培訓(xùn)教學(xué)中的一些難題[4]。如在高速動(dòng)車組中,受電弓作為動(dòng)車組車輛中的復(fù)雜機(jī)械裝備,對(duì)于其拆裝培訓(xùn)的學(xué)習(xí)成本較高,反復(fù)拆裝會(huì)導(dǎo)致其功能的減弱,并且在實(shí)際培訓(xùn)過(guò)程中如果操作不當(dāng),會(huì)造成受電弓零部件的損壞,并且培訓(xùn)過(guò)程安全性難以保證,容易發(fā)生安全事故。虛擬培訓(xùn)能夠擺脫人們對(duì)于物理樣機(jī)的依賴,受訓(xùn)人員可以通過(guò)虛擬現(xiàn)實(shí)的培訓(xùn)場(chǎng)景反復(fù)進(jìn)行拆裝練習(xí),實(shí)現(xiàn)良好的人機(jī)協(xié)同,快速掌握產(chǎn)品的內(nèi)部結(jié)構(gòu)、充分了解實(shí)際運(yùn)行過(guò)程中的工作狀態(tài)。該系統(tǒng)不受時(shí)間地域等條件的限制,很好地解決了受電弓拆裝訓(xùn)練場(chǎng)地限制的難題,并且實(shí)際交互性強(qiáng),可用于企業(yè)技術(shù)培訓(xùn)和高校教學(xué)培訓(xùn)[5]。
本文所應(yīng)用的Unity3D是一款全面的游戲開發(fā)軟件,界面簡(jiǎn)潔、功能強(qiáng)大,玩家能夠在此平臺(tái)上輕松創(chuàng)建2D、3D游戲的動(dòng)畫及建筑可視化等互動(dòng)內(nèi)容,同時(shí)可以將多種軟件平臺(tái)提供的資源整合于一體。支持C#,JavaScript和Boo Script等多種開發(fā)語(yǔ)言,用戶可自由選擇,提高了工作效率;實(shí)時(shí)的光照渲染和光影烘焙技術(shù)、聲音、圖像等多種功能的添加,能夠滿足系統(tǒng)開發(fā)過(guò)程中對(duì)于游戲品質(zhì)的要求;強(qiáng)大的跨平臺(tái)特性,使得開發(fā)的游戲可以在Windows、Mac、Android、IOS、VR設(shè)備等20多重平臺(tái)上發(fā)布[6]。
動(dòng)車組受電弓虛擬拆裝培訓(xùn)系統(tǒng)的目的就是開發(fā)出適合動(dòng)車組檢修培訓(xùn)的通用軟件架構(gòu)和平臺(tái)。采用目前流行的軟件開發(fā)思想——面向?qū)ο缶幊谭绞?,完成虛擬培訓(xùn)系統(tǒng)和功能模塊構(gòu)建[7],系統(tǒng)總體框架如圖1,從下向上依次為系統(tǒng)數(shù)據(jù)層、系統(tǒng)開發(fā)層、系統(tǒng)功能層和用戶界面層。
圖1 系統(tǒng)總體框架
對(duì)系統(tǒng)總體框架作如下概述:
系統(tǒng)數(shù)據(jù)層。主要完成用戶信息、受電弓結(jié)構(gòu)和尺寸參數(shù)以及檢修工藝資料等的數(shù)據(jù)收集,是整個(gè)系統(tǒng)的基礎(chǔ)部分。
系統(tǒng)開發(fā)層。是系統(tǒng)的核心層,通過(guò)三維模型建立、虛擬場(chǎng)景搭建、程序軟件開發(fā)、數(shù)據(jù)庫(kù)的管理和維護(hù)來(lái)實(shí)現(xiàn)系統(tǒng)的主要功能。
系統(tǒng)功能層。主要包括理論學(xué)習(xí)、虛擬拆卸、虛擬裝配、練習(xí)操作、考核操作等功能,由用戶界面層展現(xiàn)。
用戶界面層。把整個(gè)系統(tǒng)的功能呈現(xiàn)給用戶,用戶根據(jù)界面的指引完成受電弓的培訓(xùn)任務(wù),逐步提高工作技能。用戶界面層主要包括用戶登錄界面、系統(tǒng)主界面和受電弓虛擬拆裝界面。
受電弓虛擬培訓(xùn)系統(tǒng)基于Unity3D開發(fā)平臺(tái),結(jié)合前期素材的收集和整理,利用三維建模軟件3DsMax創(chuàng)建標(biāo)準(zhǔn)受電弓模型、程序語(yǔ)言開發(fā)交互腳本以及通過(guò)NGUI實(shí)現(xiàn)界面交互。數(shù)據(jù)庫(kù)技術(shù)則完成受電弓內(nèi)部結(jié)構(gòu)、工作原理、拆裝培訓(xùn)、評(píng)估考核、個(gè)人信息等模塊信息的整理和存儲(chǔ)。
圖2 受電弓模型
根據(jù)要培訓(xùn)的受電弓模型,收集其對(duì)應(yīng)的結(jié)構(gòu)資料及其尺寸參數(shù),利用3DsMax進(jìn)行三維建模。在建模時(shí),參考前期收集到的CAD圖紙,并保證系統(tǒng)中模型的尺寸和規(guī)格相同[8]。由于受電弓零部件較多,本文采用分層建模的方法,將受電弓分為弓頭組裝、上臂組裝、上導(dǎo)桿組裝、下臂組裝、下導(dǎo)桿組裝、底架組裝、弓裝配組裝和升弓裝置組裝分別進(jìn)行建模。每一層中把需要同時(shí)拆裝的零部件組合在一起。同時(shí)為了保證后期培訓(xùn)平臺(tái)的流暢性,需要對(duì)模型面數(shù)進(jìn)行優(yōu)化,將看不到的點(diǎn)、線、面進(jìn)行刪除,進(jìn)而降低受電弓模型在Unity3D場(chǎng)景中所占資源度。整個(gè)模型完成之后,應(yīng)用V-Ray渲染器對(duì)其進(jìn)行貼圖渲染以及模型細(xì)節(jié)的優(yōu)化處理,最后保存為.FBX格式文件導(dǎo)入到Unity3D中。如圖2所示創(chuàng)建完成的受電弓模型。
導(dǎo)入到Unity3D場(chǎng)景中的受電弓模型可能會(huì)出現(xiàn)材質(zhì)失效、坐標(biāo)錯(cuò)誤等問(wèn)題,為了達(dá)到真實(shí)的拆裝工藝效果,需要對(duì)場(chǎng)景進(jìn)行一系列設(shè)置。例如:通過(guò)鼠標(biāo)的拖拽調(diào)整模型坐標(biāo)和相機(jī)位置、導(dǎo)入所需的資源文件、設(shè)置場(chǎng)景燈光等。通過(guò)交互腳本的編寫完成對(duì)虛擬場(chǎng)景的控制,例如:編寫MouseView.cs腳本實(shí)現(xiàn)鼠標(biāo)滾輪對(duì)零部件的縮放和旋轉(zhuǎn)移動(dòng)功能,并將其掛載到主攝像機(jī)上便于用戶多角度查看模型。
數(shù)據(jù)庫(kù)設(shè)計(jì)在已有的數(shù)據(jù)庫(kù)管理系統(tǒng)基礎(chǔ)上開發(fā)新的數(shù)據(jù)庫(kù)結(jié)構(gòu)。根據(jù)已有的應(yīng)用需求和應(yīng)用環(huán)境,構(gòu)造最優(yōu)的數(shù)據(jù)庫(kù)模式有效的存儲(chǔ)和管理數(shù)據(jù)。滿足用戶和開發(fā)者的使用需求。良好的數(shù)據(jù)庫(kù)結(jié)構(gòu)有利于整個(gè)系統(tǒng)的開發(fā)和維護(hù),本系統(tǒng)使用SQLServer2012對(duì)數(shù)據(jù)庫(kù)進(jìn)行開發(fā)設(shè)計(jì),存儲(chǔ)和管理其工作原理、拆裝順序、個(gè)人信息和考試題目等數(shù)據(jù),通過(guò)C#編寫腳本實(shí)現(xiàn)與Unity3D端數(shù)據(jù)傳輸?shù)墓δ?。例如:在?shù)據(jù)庫(kù)中每個(gè)零件都有對(duì)應(yīng)的ID,為了能夠快速提取模型信息并將其顯示在虛擬場(chǎng)景中,C#將數(shù)據(jù)庫(kù)以數(shù)組的形式存儲(chǔ)。
碰撞檢測(cè)是模擬現(xiàn)實(shí)環(huán)境中物體之間是否發(fā)生接觸,以及接觸之后的本能反應(yīng)。例如,當(dāng)人伸手觸碰墻壁時(shí),如果沒有設(shè)計(jì)碰撞檢測(cè),則手會(huì)透過(guò)墻壁發(fā)生穿插現(xiàn)象。在現(xiàn)實(shí)中,當(dāng)手觸碰到墻壁時(shí)應(yīng)當(dāng)停止前進(jìn),改變運(yùn)動(dòng)方向,而不是穿過(guò)墻壁。所以,需要對(duì)手部及墻壁添加合適的碰撞器[9]。在Unity3D中常用的碰撞器主要有:盒碰撞器、球形碰撞器、膠囊碰撞器和網(wǎng)絡(luò)碰撞器。比如,對(duì)手部和墻壁分別添加一個(gè)盒碰撞器,一旦兩個(gè)物體相互接觸則會(huì)產(chǎn)生碰撞檢測(cè),阻止物體相向運(yùn)動(dòng)。本系統(tǒng)針對(duì)不同的零件模型添加不同的碰撞器如圖3所示。
圖3 不同碰撞器
在三維虛擬場(chǎng)景中,受電弓模型的移動(dòng)、旋轉(zhuǎn)和縮放等交互操作,都是通過(guò)三維幾何變換實(shí)現(xiàn)的,這種操作的變換運(yùn)算可以用一個(gè)4×4的矩陣來(lái)表示。三維場(chǎng)景當(dāng)中的幾何變換實(shí)質(zhì)上是在二維變換的基礎(chǔ)上增加了空間坐標(biāo)Z軸組成的。在三維系統(tǒng)中,對(duì)實(shí)體做平移變換的基本原則是在實(shí)體的三維坐標(biāo)軸方向通過(guò)移動(dòng)一定距離的三維變換向量來(lái)對(duì)實(shí)體做變換;對(duì)虛擬場(chǎng)景進(jìn)行縮放變換則是通過(guò)縮放因子實(shí)現(xiàn);而對(duì)虛擬場(chǎng)景的旋轉(zhuǎn)變換則是通過(guò)利用給定軸的方向和旋轉(zhuǎn)角度建立旋轉(zhuǎn)矩陣。以下是對(duì)這三種幾何變換做運(yùn)算,實(shí)體的集合變換用矩陣T3表示。
利用Unity3D開發(fā)引擎中NGUI的Tween功能來(lái)完成受電弓拆裝動(dòng)畫的的設(shè)計(jì),Tween功能窗口下設(shè)有包括顏色、位置、寬度、高度、透明度、大小的動(dòng)畫類型[11],由Tween Position功能實(shí)現(xiàn)受電弓零部件的運(yùn)動(dòng),將零部件運(yùn)動(dòng)前后的位置坐標(biāo)及其運(yùn)動(dòng)軌跡通過(guò)C#腳本語(yǔ)言編寫完成,將受電弓零件的運(yùn)動(dòng)軌跡設(shè)置為重力加速度軌跡,用來(lái)模擬真實(shí)的受電弓拆裝效果,腳本中通過(guò)調(diào)整Gameobject.active實(shí)現(xiàn)零件在完成運(yùn)動(dòng)軌跡之后的消失狀態(tài)。此時(shí)則可以模擬出受電弓零件在拆裝過(guò)程中的動(dòng)畫。
系統(tǒng)采用Unity自帶的NGUI插件進(jìn)行界面設(shè)計(jì),該系統(tǒng)主界面由受電弓基本結(jié)構(gòu)、工作原理、拆裝工藝、檢修工藝四個(gè)模塊組成,培訓(xùn)人員可按照需求分別進(jìn)人相應(yīng)模塊學(xué)習(xí)。本文培訓(xùn)系統(tǒng)主要針對(duì)受電弓弓頭拆裝模塊,用戶參考界面上方文字提示,通過(guò)鼠標(biāo)、鍵盤控制零件運(yùn)動(dòng)完成拆裝過(guò)程。以DSA380受電弓弓頭拆裝交互界面為例。
4.4.1 拆卸過(guò)程的實(shí)現(xiàn)
拆卸過(guò)程根據(jù)受電弓真實(shí)拆卸工藝流程、工具的選擇以及所需要注意的事項(xiàng)等實(shí)時(shí)模擬拆卸過(guò)程。圖4為弓頭拆卸交互界面。
圖4 弓頭拆卸交互界面
拆卸過(guò)程如下:
1)學(xué)員進(jìn)入虛擬拆卸場(chǎng)景后,可以根據(jù)場(chǎng)景中的操作提示面板,使用鼠標(biāo)移動(dòng)旋轉(zhuǎn)至所要拆卸零件的物體附近,鼠標(biāo)放置到零件上方通過(guò)零件外發(fā)光的顏色判斷該零件是否可以被拆卸。
2)當(dāng)零件的外發(fā)光為綠色時(shí),需要在場(chǎng)景界面下方選擇正確的拆卸工具,包括:棘輪扳手,套筒扳手或不使用扳手等選項(xiàng),完成該零件的拆裝操作。
3)選擇工具后,移動(dòng)鼠標(biāo)至需要拆卸的位置點(diǎn)擊該零部件,若選擇的工具正確,則可以進(jìn)行拆卸該零件,播放該零件的拆卸動(dòng)畫。若某部件的所包含的零件都拆解完成后,該部件會(huì)自動(dòng)上一層的拆卸。
實(shí)現(xiàn)其拆卸功能的核心代碼如下:
{
case "0"://零件已經(jīng)不可被拆卸
Text_Title.text = "零件已經(jīng)不可被拆卸";
Debug.Log("零件已經(jīng)不可被拆卸");
break;
case "1"://零件可以被拆卸
if(useToolName == selectToolName)//選擇工具是否正確,如果正確
{
PlayAnim(GO);
GO.GetComponent
StartCoroutine(StartScecondAnim(AnimTime));
Text_Title.text = "工具選擇正確";
Debug.Log("工具選擇正確");
}
else
{
Debug.Log("工具選擇錯(cuò)誤");
Text_Title.text = "工具選擇錯(cuò)誤";
}
break;
case "2"://零件目前不可被拆卸
Debug.Log("請(qǐng)先拆卸掉該部件上剩余部分的螺栓");
Text_Title.text = "請(qǐng)先拆卸掉該部件上剩余部分的螺栓";
break;
}
4.4.2 裝配過(guò)程的實(shí)現(xiàn)
裝配過(guò)程依照規(guī)劃好的裝配序列,選擇正確的安裝工具對(duì)零部件實(shí)現(xiàn)有序裝配,直到受電弓的全部零部件安裝完成,提示裝配結(jié)束。圖5弓頭裝配交互界面。
圖5 弓頭裝配交互界面
裝配過(guò)程如下:
1)學(xué)員進(jìn)入受電弓虛擬裝配場(chǎng)景后,界面下方會(huì)有受電弓各部分零部件的選擇面板,通過(guò)鼠標(biāo)點(diǎn)擊各部分的零件后,所選擇的零部件會(huì)在場(chǎng)景中出現(xiàn),并使用鼠標(biāo)可以進(jìn)行拖動(dòng)和旋轉(zhuǎn)瀏覽查看。
2)通過(guò)再次選擇下方零部件選擇面板,在三維場(chǎng)景中進(jìn)行實(shí)例化顯示,通過(guò)鼠標(biāo)的拖動(dòng),移動(dòng)至所要裝配的位置進(jìn)行碰觸,若裝配正確,拖動(dòng)的零件會(huì)出現(xiàn)綠色邊緣發(fā)光效果,松開鼠標(biāo)后會(huì)播放裝配動(dòng)畫;若裝配錯(cuò)誤,拖動(dòng)的零部件會(huì)出現(xiàn)紅色邊緣發(fā)光的效果,并且松開鼠標(biāo)零件不會(huì)進(jìn)行裝配。
3)按照2)的裝配方式,將零件選擇面板中的所有零部件安裝至正確的位置,系統(tǒng)會(huì)自動(dòng)提示裝配完成。根據(jù)學(xué)員完成裝配過(guò)程所用的時(shí)間和裝配中錯(cuò)誤的次數(shù)等參數(shù),系統(tǒng)會(huì)對(duì)本次的裝配進(jìn)行評(píng)分,并保存在學(xué)員的數(shù)據(jù)庫(kù)中,便于以后查看和統(tǒng)計(jì)分析。
實(shí)現(xiàn)其裝配功能的部分核心代碼如下:
{
case "0"://零件已經(jīng)不可被拆卸
Text_Title.text = "零件已經(jīng)不可被拆卸";
Debug.Log("零件已經(jīng)不可被拆卸");
break;
case "1"://零件可以被拆卸
if( useToolName == selectToolName )//選擇工具是否正確,如果正確
{
PlayAnim(GO);
GO.GetComponent
StartCoroutine(StartScecondAnim(AnimTime));
Text_Title.text = "工具選擇正確";
Debug.Log("工具選擇正確");
}
else
{
Debug.Log("工具選擇錯(cuò)誤");
Text_Title.text = "工具選擇錯(cuò)誤";
}
break;
case "2"://零件目前不可被拆卸
Debug.Log("請(qǐng)先拆卸掉該部件上剩余部分的螺栓");
Text_Title.text = "請(qǐng)先拆卸掉該部件上剩余部分的螺栓";
break;
}
本系統(tǒng)結(jié)合虛擬現(xiàn)實(shí)技術(shù)和虛擬培訓(xùn)技術(shù),以Unity3D為平臺(tái)進(jìn)行了受電弓虛擬拆裝相關(guān)技術(shù)的理論探討和開發(fā)實(shí)踐,通過(guò)合適碰撞器的添加解決了零件之間的穿插現(xiàn)象,利用NGUI的Tween功能完成受電弓拆裝動(dòng)畫的設(shè)計(jì);創(chuàng)建的數(shù)據(jù)庫(kù)為用戶提供基本信息、結(jié)構(gòu)、工作原理、拆裝練習(xí)、評(píng)級(jí)考核等模塊的操作和學(xué)習(xí),提高了學(xué)習(xí)效率;完成的系統(tǒng)具有很好的三維交互功能,給培訓(xùn)人員一種真實(shí)感、沉浸感,同時(shí)該系統(tǒng)的研究為動(dòng)車組受電弓制造生產(chǎn)、維修檢修等方面的研究起到了積極的推動(dòng)作用,為傳統(tǒng)的培訓(xùn)模式提供了借鑒和參考。