,,,,,,
(大連交通大學交通運輸工程學院,遼寧大連116028)
動車組作為我國鐵路運輸的重要組成部分,已經成為新時期我國鐵路建設的關鍵。為保障動車組車輛的可靠運行,需要定期對動車組車輛進行檢修[1]。受電弓作為動車組運行安全的重要設備之一,其檢修人員隨著動車組產量的增加也在不斷增多,在檢修培訓過程中如果采用物理樣機,不但成本巨大,而且會造成人力物力的浪費[2]。虛擬現實技術(virtual reality,VR)是一種可以創建和體驗虛擬世界的計算機仿真系統,它利用計算機生成多源信息融合的、交互式的、逼真的模擬環境,給用戶一種身臨其境的感覺,增強用戶的沉浸感和體驗感[3]。
虛擬培訓作為虛擬現實技術的一個重要分支,并利用虛擬現實技術構建三維虛擬環境,使學員更好地完成知識的學習和技能的提升,從而解決傳統的集中培訓教學中的一些難題[4]。如在高速動車組中,受電弓作為動車組車輛中的復雜機械裝備,對于其拆裝培訓的學習成本較高,反復拆裝會導致其功能的減弱,并且在實際培訓過程中如果操作不當,會造成受電弓零部件的損壞,并且培訓過程安全性難以保證,容易發生安全事故。虛擬培訓能夠擺脫人們對于物理樣機的依賴,受訓人員可以通過虛擬現實的培訓場景反復進行拆裝練習,實現良好的人機協同,快速掌握產品的內部結構、充分了解實際運行過程中的工作狀態。該系統不受時間地域等條件的限制,很好地解決了受電弓拆裝訓練場地限制的難題,并且實際交互性強,可用于企業技術培訓和高校教學培訓[5]。
本文所應用的Unity3D是一款全面的游戲開發軟件,界面簡潔、功能強大,玩家能夠在此平臺上輕松創建2D、3D游戲的動畫及建筑可視化等互動內容,同時可以將多種軟件平臺提供的資源整合于一體。支持C#,JavaScript和Boo Script等多種開發語言,用戶可自由選擇,提高了工作效率;實時的光照渲染和光影烘焙技術、聲音、圖像等多種功能的添加,能夠滿足系統開發過程中對于游戲品質的要求;強大的跨平臺特性,使得開發的游戲可以在Windows、Mac、Android、IOS、VR設備等20多重平臺上發布[6]。
動車組受電弓虛擬拆裝培訓系統的目的就是開發出適合動車組檢修培訓的通用軟件架構和平臺。采用目前流行的軟件開發思想——面向對象編程方式,完成虛擬培訓系統和功能模塊構建[7],系統總體框架如圖1,從下向上依次為系統數據層、系統開發層、系統功能層和用戶界面層。

圖1 系統總體框架
對系統總體框架作如下概述:
系統數據層。主要完成用戶信息、受電弓結構和尺寸參數以及檢修工藝資料等的數據收集,是整個系統的基礎部分。
系統開發層。是系統的核心層,通過三維模型建立、虛擬場景搭建、程序軟件開發、數據庫的管理和維護來實現系統的主要功能。
系統功能層。主要包括理論學習、虛擬拆卸、虛擬裝配、練習操作、考核操作等功能,由用戶界面層展現。
用戶界面層。把整個系統的功能呈現給用戶,用戶根據界面的指引完成受電弓的培訓任務,逐步提高工作技能。用戶界面層主要包括用戶登錄界面、系統主界面和受電弓虛擬拆裝界面。
受電弓虛擬培訓系統基于Unity3D開發平臺,結合前期素材的收集和整理,利用三維建模軟件3DsMax創建標準受電弓模型、程序語言開發交互腳本以及通過NGUI實現界面交互。數據庫技術則完成受電弓內部結構、工作原理、拆裝培訓、評估考核、個人信息等模塊信息的整理和存儲。

圖2 受電弓模型
根據要培訓的受電弓模型,收集其對應的結構資料及其尺寸參數,利用3DsMax進行三維建模。在建模時,參考前期收集到的CAD圖紙,并保證系統中模型的尺寸和規格相同[8]。由于受電弓零部件較多,本文采用分層建模的方法,將受電弓分為弓頭組裝、上臂組裝、上導桿組裝、下臂組裝、下導桿組裝、底架組裝、弓裝配組裝和升弓裝置組裝分別進行建模。每一層中把需要同時拆裝的零部件組合在一起。同時為了保證后期培訓平臺的流暢性,需要對模型面數進行優化,將看不到的點、線、面進行刪除,進而降低受電弓模型在Unity3D場景中所占資源度。整個模型完成之后,應用V-Ray渲染器對其進行貼圖渲染以及模型細節的優化處理,最后保存為.FBX格式文件導入到Unity3D中。如圖2所示創建完成的受電弓模型。
導入到Unity3D場景中的受電弓模型可能會出現材質失效、坐標錯誤等問題,為了達到真實的拆裝工藝效果,需要對場景進行一系列設置。例如:通過鼠標的拖拽調整模型坐標和相機位置、導入所需的資源文件、設置場景燈光等。通過交互腳本的編寫完成對虛擬場景的控制,例如:編寫MouseView.cs腳本實現鼠標滾輪對零部件的縮放和旋轉移動功能,并將其掛載到主攝像機上便于用戶多角度查看模型。
數據庫設計在已有的數據庫管理系統基礎上開發新的數據庫結構。根據已有的應用需求和應用環境,構造最優的數據庫模式有效的存儲和管理數據。滿足用戶和開發者的使用需求。良好的數據庫結構有利于整個系統的開發和維護,本系統使用SQLServer2012對數據庫進行開發設計,存儲和管理其工作原理、拆裝順序、個人信息和考試題目等數據,通過C#編寫腳本實現與Unity3D端數據傳輸的功能。例如:在數據庫中每個零件都有對應的ID,為了能夠快速提取模型信息并將其顯示在虛擬場景中,C#將數據庫以數組的形式存儲。
碰撞檢測是模擬現實環境中物體之間是否發生接觸,以及接觸之后的本能反應。例如,當人伸手觸碰墻壁時,如果沒有設計碰撞檢測,則手會透過墻壁發生穿插現象。在現實中,當手觸碰到墻壁時應當停止前進,改變運動方向,而不是穿過墻壁。所以,需要對手部及墻壁添加合適的碰撞器[9]。在Unity3D中常用的碰撞器主要有:盒碰撞器、球形碰撞器、膠囊碰撞器和網絡碰撞器。比如,對手部和墻壁分別添加一個盒碰撞器,一旦兩個物體相互接觸則會產生碰撞檢測,阻止物體相向運動。本系統針對不同的零件模型添加不同的碰撞器如圖3所示。

圖3 不同碰撞器
在三維虛擬場景中,受電弓模型的移動、旋轉和縮放等交互操作,都是通過三維幾何變換實現的,這種操作的變換運算可以用一個4×4的矩陣來表示。三維場景當中的幾何變換實質上是在二維變換的基礎上增加了空間坐標Z軸組成的。在三維系統中,對實體做平移變換的基本原則是在實體的三維坐標軸方向通過移動一定距離的三維變換向量來對實體做變換;對虛擬場景進行縮放變換則是通過縮放因子實現;而對虛擬場景的旋轉變換則是通過利用給定軸的方向和旋轉角度建立旋轉矩陣。以下是對這三種幾何變換做運算,實體的集合變換用矩陣T3表示。
利用Unity3D開發引擎中NGUI的Tween功能來完成受電弓拆裝動畫的的設計,Tween功能窗口下設有包括顏色、位置、寬度、高度、透明度、大小的動畫類型[11],由Tween Position功能實現受電弓零部件的運動,將零部件運動前后的位置坐標及其運動軌跡通過C#腳本語言編寫完成,將受電弓零件的運動軌跡設置為重力加速度軌跡,用來模擬真實的受電弓拆裝效果,腳本中通過調整Gameobject.active實現零件在完成運動軌跡之后的消失狀態。此時則可以模擬出受電弓零件在拆裝過程中的動畫。
系統采用Unity自帶的NGUI插件進行界面設計,該系統主界面由受電弓基本結構、工作原理、拆裝工藝、檢修工藝四個模塊組成,培訓人員可按照需求分別進人相應模塊學習。本文培訓系統主要針對受電弓弓頭拆裝模塊,用戶參考界面上方文字提示,通過鼠標、鍵盤控制零件運動完成拆裝過程。以DSA380受電弓弓頭拆裝交互界面為例。
4.4.1 拆卸過程的實現
拆卸過程根據受電弓真實拆卸工藝流程、工具的選擇以及所需要注意的事項等實時模擬拆卸過程。圖4為弓頭拆卸交互界面。

圖4 弓頭拆卸交互界面
拆卸過程如下:
1)學員進入虛擬拆卸場景后,可以根據場景中的操作提示面板,使用鼠標移動旋轉至所要拆卸零件的物體附近,鼠標放置到零件上方通過零件外發光的顏色判斷該零件是否可以被拆卸。
2)當零件的外發光為綠色時,需要在場景界面下方選擇正確的拆卸工具,包括:棘輪扳手,套筒扳手或不使用扳手等選項,完成該零件的拆裝操作。
3)選擇工具后,移動鼠標至需要拆卸的位置點擊該零部件,若選擇的工具正確,則可以進行拆卸該零件,播放該零件的拆卸動畫。若某部件的所包含的零件都拆解完成后,該部件會自動上一層的拆卸。
實現其拆卸功能的核心代碼如下:
{
case "0"://零件已經不可被拆卸
Text_Title.text = "零件已經不可被拆卸";
Debug.Log("零件已經不可被拆卸");
break;
case "1"://零件可以被拆卸
if(useToolName == selectToolName)//選擇工具是否正確,如果正確
{
PlayAnim(GO);
GO.GetComponent
StartCoroutine(StartScecondAnim(AnimTime));
Text_Title.text = "工具選擇正確";
Debug.Log("工具選擇正確");
}
else
{
Debug.Log("工具選擇錯誤");
Text_Title.text = "工具選擇錯誤";
}
break;
case "2"://零件目前不可被拆卸
Debug.Log("請先拆卸掉該部件上剩余部分的螺栓");
Text_Title.text = "請先拆卸掉該部件上剩余部分的螺栓";
break;
}
4.4.2 裝配過程的實現
裝配過程依照規劃好的裝配序列,選擇正確的安裝工具對零部件實現有序裝配,直到受電弓的全部零部件安裝完成,提示裝配結束。圖5弓頭裝配交互界面。

圖5 弓頭裝配交互界面
裝配過程如下:
1)學員進入受電弓虛擬裝配場景后,界面下方會有受電弓各部分零部件的選擇面板,通過鼠標點擊各部分的零件后,所選擇的零部件會在場景中出現,并使用鼠標可以進行拖動和旋轉瀏覽查看。
2)通過再次選擇下方零部件選擇面板,在三維場景中進行實例化顯示,通過鼠標的拖動,移動至所要裝配的位置進行碰觸,若裝配正確,拖動的零件會出現綠色邊緣發光效果,松開鼠標后會播放裝配動畫;若裝配錯誤,拖動的零部件會出現紅色邊緣發光的效果,并且松開鼠標零件不會進行裝配。
3)按照2)的裝配方式,將零件選擇面板中的所有零部件安裝至正確的位置,系統會自動提示裝配完成。根據學員完成裝配過程所用的時間和裝配中錯誤的次數等參數,系統會對本次的裝配進行評分,并保存在學員的數據庫中,便于以后查看和統計分析。
實現其裝配功能的部分核心代碼如下:
{
case "0"://零件已經不可被拆卸
Text_Title.text = "零件已經不可被拆卸";
Debug.Log("零件已經不可被拆卸");
break;
case "1"://零件可以被拆卸
if( useToolName == selectToolName )//選擇工具是否正確,如果正確
{
PlayAnim(GO);
GO.GetComponent
StartCoroutine(StartScecondAnim(AnimTime));
Text_Title.text = "工具選擇正確";
Debug.Log("工具選擇正確");
}
else
{
Debug.Log("工具選擇錯誤");
Text_Title.text = "工具選擇錯誤";
}
break;
case "2"://零件目前不可被拆卸
Debug.Log("請先拆卸掉該部件上剩余部分的螺栓");
Text_Title.text = "請先拆卸掉該部件上剩余部分的螺栓";
break;
}
本系統結合虛擬現實技術和虛擬培訓技術,以Unity3D為平臺進行了受電弓虛擬拆裝相關技術的理論探討和開發實踐,通過合適碰撞器的添加解決了零件之間的穿插現象,利用NGUI的Tween功能完成受電弓拆裝動畫的設計;創建的數據庫為用戶提供基本信息、結構、工作原理、拆裝練習、評級考核等模塊的操作和學習,提高了學習效率;完成的系統具有很好的三維交互功能,給培訓人員一種真實感、沉浸感,同時該系統的研究為動車組受電弓制造生產、維修檢修等方面的研究起到了積極的推動作用,為傳統的培訓模式提供了借鑒和參考。