張佳麗,郎誠(chéng)廉
(同濟(jì)大學(xué) 電氣工程系,上海 200331)
隨著中國(guó)城市化進(jìn)程的加快,人口密度迅速擴(kuò)大,地鐵出行已成為必不可少的交通方式。地鐵系統(tǒng)運(yùn)營(yíng)壓力的日益繁重,運(yùn)行中產(chǎn)生故障概率將大幅提高,列車車輛段檢修人員的日常維護(hù)與檢修工作確保了列車安全運(yùn)營(yíng)。所以有必要對(duì)檢修人員進(jìn)行列車檢修的培訓(xùn),鑒于城市軌道交通的運(yùn)營(yíng)特點(diǎn),學(xué)員培訓(xùn)有時(shí)不可能完全在現(xiàn)場(chǎng)進(jìn)行,大部分培訓(xùn)工作都需要在培訓(xùn)中心或?qū)嵙?xí)基地內(nèi)完成,因此教學(xué)過程中使用城軌列車仿真系統(tǒng)進(jìn)行輔助培訓(xùn)是一種很好的選擇[1]。
虛擬現(xiàn)實(shí)(VR ,virtual reality)技術(shù)已被應(yīng)用到軍事、醫(yī)學(xué)、石油、航空、建筑、房地產(chǎn)、影視等眾多領(lǐng)域中,一些高校將VR技術(shù)應(yīng)用于數(shù)字電路實(shí)驗(yàn)、船舶輔機(jī)拆裝訓(xùn)練等實(shí)訓(xùn)教學(xué)中并取得了一定成效[2-3],但其輸入設(shè)備普遍采用鼠標(biāo)、鍵盤和觸屏,顯示設(shè)備為顯示器、投影儀等,局限于桌面式平面虛擬化,用戶參與感、體驗(yàn)感、沉浸感不強(qiáng)。
本文主要是將沉浸式虛擬現(xiàn)實(shí)技術(shù)引入軌道交通仿真與研究,以Visual Studio C# 2017 作為程序編譯器,利用Unity3D 應(yīng)用開發(fā)引擎,外接HTC vive虛擬現(xiàn)實(shí)頭戴式顯示器(VR 頭顯),結(jié)合HTC 手柄來搭建地鐵列車故障檢修平臺(tái)?;赩R設(shè)備的地鐵列車故障檢修,其優(yōu)點(diǎn)包括:(1)采用HTC vive虛擬現(xiàn)實(shí)頭戴式顯示器(VR 頭顯)替代傳統(tǒng)的顯示設(shè)備,使用戶身臨其境地沉浸于三維虛擬場(chǎng)景;(2)編輯腳本控制手柄,實(shí)現(xiàn)虛擬場(chǎng)景中設(shè)備的操控,具有更好的人機(jī)交互性能,提高了學(xué)員的體驗(yàn)效果,達(dá)到沉浸式體驗(yàn)效果。學(xué)員通過平臺(tái)可以直觀準(zhǔn)確地學(xué)習(xí)到列車運(yùn)行中發(fā)生的故障類型及相應(yīng)的故障排除方法。
利用3ds MAX建立地鐵列車故障檢修所需要的列車,3ds MAX是基于PC 系統(tǒng)的三維動(dòng)畫渲染和制作軟件,與別的軟件相比,它擁有強(qiáng)大的角色動(dòng)畫制作能力。Unity3D 所需要的FBX 格式的模型文件,可由3ds MAX導(dǎo)出。
列車模型的尺寸,內(nèi)部設(shè)備的結(jié)構(gòu)及安裝位置等數(shù)據(jù)根據(jù)實(shí)際的軌道交通的真實(shí)環(huán)境進(jìn)行收集。使用Photoshop對(duì)模型紋理、材質(zhì)、尺寸進(jìn)行修正。
利用3ds MAX將采集好的材料與處理好的貼圖以列車內(nèi)部的零部件為單位,分別對(duì)電器柜、操縱臺(tái)、車門等設(shè)備以及列車整體進(jìn)行建模。同時(shí),在建模過程中合理確定各個(gè)零部件的坐標(biāo),確保在導(dǎo)入U(xiǎn)nity3D 中,將各個(gè)模型坐標(biāo)歸零后,零部件位置不會(huì)出現(xiàn)偏差。
(1)將3dsMax 建立好的模型導(dǎo)入工程的Assets文件夾下,Unity 會(huì)自動(dòng)讀取模型的材質(zhì)、貼圖、動(dòng)畫等內(nèi)容并創(chuàng)建文件夾予以歸類。
(2)通過將Assets 文件夾下的對(duì)象,拖入層級(jí)視圖中,創(chuàng)建場(chǎng)景中的模型對(duì)象。
(3)通過面板右側(cè)Inspector 界面調(diào)節(jié)模型在場(chǎng)景中的坐標(biāo)位置,旋轉(zhuǎn)角度和縮放比例,將各個(gè)零部件模型拼裝成一列完整的虛擬列車。
虛擬列車模型以上海軌道交通3號(hào)線為原型,列車編組為6 節(jié),因此場(chǎng)景由TC1、MP1、M1、M2、MP2、TC2,6 節(jié)車廂構(gòu)成。
Unity3D 是一款跨平臺(tái)應(yīng)用開發(fā)引擎,可以輕松創(chuàng)建諸如虛擬現(xiàn)實(shí)場(chǎng)景、建筑可視化、實(shí)時(shí)三維動(dòng)畫等類型互動(dòng)內(nèi)容的多平臺(tái)綜合型開發(fā)工具。其內(nèi)置的NVIDIA PhysX 物理引擎,可以逼真模擬剛體碰撞、外力作用等效果。Unity3D 平臺(tái)可以使用內(nèi)置MonoDevelop 編譯器,并支持Visual Studio C# 2017作為外部編譯器對(duì)代碼進(jìn)行調(diào)試。同時(shí)Unity3D 對(duì)跨平臺(tái)開發(fā)提供了最佳支持,支持各種編譯語言,包括C#,JavaScript,boo 等,并能夠?qū)︱?qū)動(dòng)程序進(jìn)行多平臺(tái)的封裝。本虛擬場(chǎng)景主要模擬了列車運(yùn)行狀態(tài)中故障的前后現(xiàn)象,外接HTC Vive虛擬現(xiàn)實(shí)頭戴式顯示器(VR 頭顯),結(jié)合HTC 手柄來實(shí)現(xiàn)與場(chǎng)景的交互功能。
HTC Vive 是一個(gè)虛擬現(xiàn)實(shí)頭盔,由 HTC 和Valve 公司制造。它提供一種在虛擬世界中的浸入式體驗(yàn),結(jié)合HTC 手柄可以在與場(chǎng)景交互過程中達(dá)到更逼真的效果。
2.1.1 SteamVR的配置
將HTC Vive 設(shè)備外部硬件配置好,通過Unity3D 的Asset 商店下載SteamVR SDK,在我們的項(xiàng)目中導(dǎo)入SteamVR,打開這個(gè)文件夾,從Prefabs 文件中將[CameraRig] 拖到結(jié)構(gòu)窗口,同時(shí)刪除結(jié)構(gòu)視圖中的主攝像機(jī),避免干擾 [CameraRig]的相機(jī)。[CameraRig] 插件控制 Vive 頭盔和HTC 的左右手柄。圖1的SteamVR綠色圖標(biāo)表明HTC Vive的頭戴式顯示器、手柄、定位器都已經(jīng)配置完成,可以對(duì)其進(jìn)行后續(xù)的控制編程。
圖1 SteamVR配置圖
2.1.2 HTC輸入手柄的確定
HTC手柄是被跟蹤的對(duì)象——它們?cè)谡鎸?shí)世界中的移動(dòng)和旋轉(zhuǎn)都會(huì)被 HTC Vive 跟蹤到并傳遞到虛擬世界里。在對(duì)手柄上加載各種功能之前,要確定事件觸發(fā)的具體手柄。HTC左右手柄下面都有SteamVR_TrackedObject這個(gè)組件,在這個(gè)組件下,系統(tǒng)內(nèi)部隨機(jī)分配了不同的index值,通過讀取index值就可以確定具體觸發(fā)的手柄。
其實(shí)現(xiàn)步驟如下:
(1)創(chuàng)建c#,將腳本掛載到[CameraRig]下面的左右手柄controller(left)和 controller(right)中,添加一個(gè)控制與追蹤的組件SteamVR_TrackObject trackedobject;
(2)在 Update() 上方添加代碼,通過獲取手柄的index值來確定具體觸發(fā)的手柄,當(dāng)腳本加載時(shí)trackedObject 會(huì)被賦值為 SteamVR_TrackedObject對(duì)象,這個(gè)對(duì)象和手柄是關(guān)聯(lián)的,就可以對(duì)手柄進(jìn)行訪問,其具體流程,如圖2所示。
圖2 HTC輸入手柄確定的流程圖
地鐵列車檢修的漫游包括小范圍的實(shí)時(shí)移動(dòng)和大范圍的瞬移,考慮到HTC Vive活動(dòng)范圍有限制(3 m×5 m),小范圍的實(shí)時(shí)移動(dòng)可以通過改變HTC Vive頭戴式顯示器(VR 頭顯)的位置來實(shí)現(xiàn),大范圍的移動(dòng)通過瞬移的方式來實(shí)現(xiàn)。
在檢修場(chǎng)景中,利用HTC的手柄選取檢修場(chǎng)景的位置,通過扳機(jī)鍵進(jìn)行瞬間移動(dòng),視野就會(huì)跳轉(zhuǎn)到所選擇的區(qū)域。利用瞬移的檢修方式,可以對(duì)列車進(jìn)行大范圍的一個(gè)檢查。利用HTC的手柄來進(jìn)行瞬移功能要使用到3個(gè)組件,Vive NavMesh 組件控制Unity的NavMesh系統(tǒng)到可渲染網(wǎng)格的轉(zhuǎn)換。它還會(huì)計(jì)算NavMesh的邊界,在選擇瞬移位置時(shí),可以被顯示出來。Parabolic Pointer 組件生成一個(gè)指示網(wǎng)格并從Vive NavMesh進(jìn)行采樣。Vive Teleporter組件控制實(shí)際傳送機(jī)制,它從Parabolic Pointer 找出指示數(shù)據(jù)確定瞬移的具體位置。
將這3個(gè)組件拖到結(jié)構(gòu)窗口,利用Vive Nav-Mesh 組件確定將可進(jìn)行瞬移的合理區(qū)域進(jìn)行渲染,避免瞬移到列車邊界及不透明的物體內(nèi)部。利用Vive Teleporter 組件,進(jìn)行位置的傳送,當(dāng)觸發(fā)扳機(jī)鍵時(shí),本系統(tǒng)通過貝塞爾曲線,使用了直觀的拋物線選擇機(jī)制。生成選擇地點(diǎn)的遠(yuǎn)近將由用戶將控制器手柄舉到更高的角度來決定。如果用戶將手柄舉起角度>45。(拋物線的最大距離)時(shí),角度將會(huì)鎖定在這個(gè)距離,從而實(shí)現(xiàn)瞬時(shí)移動(dòng)。列車檢修場(chǎng)景的瞬移流程圖,如圖3所示,漫游效果,如圖4所示。
本章主要通過學(xué)習(xí)列車設(shè)備中的邏輯關(guān)系,包括電器柜、車門邏輯等,根據(jù)列車設(shè)備電氣邏輯圖,進(jìn)行常見的故障設(shè)置,根據(jù)設(shè)備出現(xiàn)的故障利用外接HTC的手柄進(jìn)行檢修,排查故障。
圖3 場(chǎng)景瞬移流程圖
圖4 場(chǎng)景瞬移效果圖
2.3.1 列車故障現(xiàn)象模擬
將每節(jié)車廂作為一個(gè)單位,通過各自獨(dú)立的腳本來傳送當(dāng)前場(chǎng)景的數(shù)據(jù),封裝為一個(gè)以Mono-Behaviour 為基類的類對(duì)象??紤]到大多數(shù)設(shè)備按鈕只有兩個(gè)狀態(tài),因此設(shè)定0 為關(guān)(故障)狀態(tài),1 為開(運(yùn)行)狀態(tài),少數(shù)設(shè)備有多種狀態(tài)根據(jù)實(shí)際情況進(jìn)行定義。
通過數(shù)據(jù)監(jiān)測(cè)器讀取場(chǎng)景中的腳本,接收到列車的設(shè)備狀態(tài),當(dāng)切換場(chǎng)景時(shí)由于場(chǎng)景內(nèi)資源被釋放,列車設(shè)備狀態(tài)數(shù)據(jù)由監(jiān)測(cè)器保留,當(dāng)進(jìn)入下一場(chǎng)景后,場(chǎng)景中的腳本讀取監(jiān)測(cè)監(jiān)測(cè)器中的數(shù)據(jù),根據(jù)電氣邏輯做出相應(yīng)的響應(yīng)。如圖5所示,以電器柜中操作臺(tái)中開門電路斷路器(DOCB) 過流狀態(tài)為例。
當(dāng)電器柜DOCB 過流跳下,監(jiān)測(cè)器接收到其數(shù)據(jù)狀態(tài)從1 變?yōu)?,根據(jù)列車電氣邏輯進(jìn)行處理后,顯示故障現(xiàn)象為:開門時(shí),列車門無法打開。
2.3.2 基于VR設(shè)備的人機(jī)交互
利用外接VR設(shè)備,HTC手柄來代替手對(duì)列車故障進(jìn)行檢修,可以使學(xué)員在沉浸的場(chǎng)景中實(shí)現(xiàn)自然、有效的人機(jī)交互動(dòng)作。
以檢修電器柜中操作臺(tái)中開門電路斷路器(DOCB)為例,闡述交互的過程。確定發(fā)出信號(hào)的HTC手柄,再采用 Lighthouse 光學(xué)跟蹤技術(shù),跟蹤用戶的頭部以及手部的傳感器位置,將位置信息傳遞給場(chǎng)景內(nèi),在開門電路斷路器(DOCB)中掛載Box Collider 碰撞器的組件。利用手部的代替模型(HTC手柄)與開門電路斷路器(DOCB)發(fā)生碰撞檢測(cè)。若HTC手柄與開門電路斷路器(DOCB)發(fā)生碰撞并且符合檢修的條件時(shí),觸發(fā)手柄的按鍵,將開門電路斷路器(DOCB)合上,排除電器柜中開門電路斷路器(DOCB)的故障。
圖5 電器柜DOCB過流故障
輔助教學(xué)程序的主要功能是對(duì)學(xué)員在地鐵列車維修仿真培訓(xùn)過程中進(jìn)行相應(yīng)理論知識(shí)內(nèi)容的配套學(xué)習(xí)。
在輔助教學(xué)程序中,學(xué)習(xí)場(chǎng)景的主要功能是提供整個(gè)列車結(jié)構(gòu)、零部件知識(shí)的學(xué)習(xí),主要關(guān)于TC1、MP1、M1、M2、MP2、TC2,6 節(jié)車廂以及車廂各自的零部件知識(shí)內(nèi)容,通過可視化的界面,使學(xué)員能在學(xué)習(xí)中很快找到自己所需的信息。以講解零部件為例,在界面上方顯示展示的零部件,界面下方會(huì)出現(xiàn)零部件文字部分的講解,長(zhǎng)滑塊下方上、下、左、右按鍵可輔助控制零部件視角的位移變換,學(xué)員可以更好、更深刻地了解各個(gè)零部件的重要知識(shí)。
本文以上海軌道交通3號(hào)線為原型,通過3ds MAX 建模軟件完成對(duì)虛擬列車場(chǎng)景的建立,對(duì)列車各車廂零部件如電器柜,受電弓等進(jìn)行詳細(xì)建模,以C# 為底層編碼,利用Unity3D 作為驅(qū)動(dòng),外接HTC Vive的頭戴式顯示器(VR 頭顯),結(jié)合HTC 手柄,實(shí)現(xiàn)對(duì)場(chǎng)景的驅(qū)動(dòng)控制?;赩R設(shè)備的列車檢修系統(tǒng)具有很強(qiáng)的真實(shí)性和交互性,能夠逼真地模擬故障發(fā)生的情況,提高了檢修人員在遇到故障時(shí)的反應(yīng)能力,強(qiáng)化檢修人員對(duì)列車故障如列車電器柜斷路器故障、受電弓故障、車門故障等有相對(duì)應(yīng)的應(yīng)急能力,具有實(shí)際應(yīng)用價(jià)值。