倪晨杰,郎誠廉
(同濟大學 電氣與信息工程學院,上海 201804)
三維虛擬列車的建模及在故障訓練中的應用與研究
倪晨杰,郎誠廉
(同濟大學 電氣與信息工程學院,上海 201804)
本文將虛擬現實技術引入城市軌道交通培訓領域,著重從列車設備建模、列車設備狀態監控、列車故障現象模擬等方面對三維虛擬列車故障訓練平臺進行研究。利用3ds MAX建模軟件設計了三維虛擬列車模型,以Unity3D為應用平臺,VC# 2010為編譯器實現對三維模型的驅動控制和人機互動。
三維建模;Unity3D;軌道交通;故障模擬;交互設計
軌道交通設備的維護工作順利開展是保證城市軌道列車運行的安全、穩定及可靠的前提,因此采用科學合理的方法培訓軌道列車維修方面的專業人才尤為重要。在軌道交通系統中,由于專業設備多,且體積大、結構復雜,檢測難度增加,傳統的培訓方式因其成本大、效率低等缺點在當前市場需求下已經顯得力不從心。利用虛擬現實技術協助整個維修培訓過程,構建一個能夠準確模擬復現列車運行故障情況的開放性培訓平臺,使學員更好地掌握設備維修技術方面的知識并提升突發情況下處理問題的能力。
本文目標是將虛擬現實技術引入軌道交通安全維護方向,以Visual Studio C# 2010作為程序編譯器,利用Unity3D應用開發引擎來構建一個具有教學意義的虛擬列車故障維修平臺,學員通過平臺能夠了解軌道交通列車設備的相關知識和列車運行中發生的故障類型及相應的故障排除方法,直觀準確地復現列車運行中的故障并模擬了從故障發生到故障排除的整個過程。
本文選用3ds MAX為建模軟件。3ds MAX是基于PC系統的三維動畫渲染和制作軟件,相比其他建模軟件,它擁有強大的角色動畫制作能力。FBX是一個用于跨平臺的免費三維數據交換格式,目前被眾多的標準建模軟件支持,由3ds MAX導出的FBX文件作為Unity3D的標準格式擁有多記錄支持,能夠準確地繼承骨骼及動畫效果,并能夠良好地記錄模型的網格和材質。
1.1 數據采集及素材收集
數據采集內容包括整個列車的輪廓、列車設備尺寸、設備結構和設備安裝位置等。貼圖素材通過使用Photoshop進行裁剪修正、格式轉換及亮度調節等,紋理圖像的尺寸規格需滿足 。
1.2 元件建模
基于已處理的貼圖,利用3ds MAX以列車設備零部件為單位,分別對車鉤、轉向架、受電弓等設備及列車整體進行建模,并對列車設備零部件進行模擬動畫制作,目的是通過動畫模擬設備運行過程。值得注意的是,3ds MAX采用的是右手坐標系,而Unity3D采用的是左手坐標系,因此模型導入Unity3D中X軸會自動偏轉-90°,影響程序對物體的控制。同時,在建模過程中合理確定各個模型的局部坐標系及世界坐標系,在導入Unity3D中將模型坐標歸零后確保不會出現位置上的偏移誤差。
1.3 虛擬場景搭建
將3ds MAX建立的三維模型導入Unity3D后,在層級視圖中按名稱對模型歸類、確定父對象和子對象關系、添加碰撞組件、動畫組建等,并將列車零部件模型制作成預設體。
預設體類似一個組件模板,將預設體拖入場景中就會創建一個實例,當對預設體進行更改,實例會同步修改。制作預設體的目的是使模型對象及資源能夠被重復使用,三維虛擬列車場景中需重復調用設備模型,例如:電池、轉向架、受電弓、車鉤等,預設體的應用不僅能夠方便地動態調用三維模型,并且能有效地節省內存及提高資源利用率。如圖1所示,為預處理后的列車制動器模型。

圖1 制動器預設體實例模型
Unity3D是一款跨平臺應用開發引擎,可以輕松創建諸如虛擬現實場景、建筑可視化、實時三維動畫等類型互動內容的多平臺綜合型開發工具。其內置的NVIDIA PhysX物理引擎,可以逼真的模擬剛體碰撞、外力作用等效果。Unity3D平臺可以使用內置MonoDevelop編譯器,并支持Visual Studio C# 2010作為外部編譯器對代碼進行調試。同時Unity3D對跨平臺開發提供了最佳支持,支持各種編譯語言,包括C#,JavaScript,boo等,并能夠對驅動程序進行多平臺的封裝。本虛擬場景主要模擬了列車運行狀態中故障的前后現象,并進行了列車設備知識的講解,同時實現了設備運行狀態之間的數據交互及三維虛擬列車中的人機互動。
2.1 Unity3D的事件響應
Unity3D的事件響應包括圖形用戶界面組件(NGUI)的響應及三維模型驅動場景的響應兩方面。
2.1.1 圖形用戶界面的事件響應
在NGUI的事件響應中,處理事件的是UIEvent Listener類,其中,UIEvent Listener類是使用底層C#編譯中的Delegate機制實現的一種類似觀察者模式的系統,可以將事件的產生與事件的處理相分離,使得系統可以盡量的解耦合。系統在捕捉到用戶發出的點擊、雙擊、拖動、滑動等消息后進行事件的處理。掛載UIEvent Listener腳本的界面按鈕響應流程如圖2所示。

圖2 圖形用戶界面響應流程圖
2.1.2 三維模型驅動場景的事件響應
驅動程序中三維模型的響應則是利用射線原理。射線檢測碰撞原理如圖3所示,本文中規定射線的起點是攝像機視角位置即視點位置,并由該位置向一個方向發射一條無終點的線,在發射軌跡中與其他物體發生碰撞時,觸發該物體上的邏輯響應。射線碰撞的優勢是可以使用C#中out關鍵詞來傳入碰撞后物體的各類屬性,同時可以批量地對模型進行LayerMask屬性的設定,從而可以用來區分不同的物體并進行選擇性過濾。

圖3 場景對象響應流程圖
2.2 設備模型之間的狀態關聯
本文主要構建了三維虛擬列車設備中一些主要的設備故障邏輯關系,包括電器柜、車門、操作臺邏輯等。根據列車設備電氣邏輯圖,考慮列車設備的狀態參數并進行數據的實時監測,由數據監測器接收并傳輸數據。
2.2.1 模型數據結構體的定義
列車控制系統主要由控制臺、電器柜、逆變器、斷路器、信號燈等設備構成,根據列車設備所在車廂、設備名稱定義結構體類型,以Console、CEC、Break、Switch、Light、Ohters定義了6個結構體,并根據列車設備實際情況確定結構體的成員。考慮到大多數設備按鈕只有兩個狀態,因此定義0為關(故障)狀態,1為開(運行)狀態,少數設備如車門、受電弓高度等具有多狀態的根據實際情況進行定義。
2.2.2 設備數據的實時監測
Unity3D中,由于驅動程序延拓性的需要,需合理地將模型對象分配在不同場景中用來實現不同的功能。由于場景的切換會默認對原場景進行數據清理和資源回收,原先場景內的對象或者其擁有的屬性全部變為空值,導致監測列車設備狀態的腳本被銷毀后造成數據丟失。為了保留各個場景中的設備狀態數據,需創建一個隨著場景切換而不被銷毀的腳本用來實時監測數據,直到程序終止運行。
設計步驟如下:
(1)在程序運行初始場景中創建一個空物體對象,掛載用于監測整個列車數據的腳本文件。
(2)使用DontDestroyOnLoad()方法,當場景切換釋放所有GameObject時保留該空物體進入下一個場景,其實現代碼如下所示。GameObject為模型對象。

2.2.3 列車故障現象的模擬
以列車車廂為單位,每一個車廂場景中都有獨立的腳本用于實時發送及接收當前場景中的數據,封裝為一個以MonoBehaviour為基類的類對象。數據監測器讀取場景中該腳本接收到的列車設備狀態,當切換場景時由于場景內資源被釋放,此時列車設備狀態數據由監測器保留,當進入下一場景后,場景中的腳本讀取監測器中的數據,根據電氣邏輯作出相應的響應。如圖4,以電器柜中操作臺顯示屏電路斷路器(DDUCB)過流狀態為例。

圖4 電器柜DDUCB過流故障狀態顯示圖
當電器柜DDUCB過流跳下,監測器接收到其數據狀態從1變為0,根據列車電氣邏輯進行處理后,顯示故障現象為:列車合鑰匙工作正常,按列車喚醒按鈕后其他燈顯示均正常,但DDU不能顯示。
2.3 設備模型的人機交互
在虛擬場景中的設備模型與用戶進行流暢的人機交互是構建三維虛擬列車必不可少的組成部分。Unity3D場景中每個物體都擁有Transform類,用來存儲并處理物體的位移、旋轉及縮放。通過鼠標及按鈕發出的事件,實時改變物體Transform類中的屬性以達到對模型進行操控的效果。控制模型旋轉公式為:

其中,R(x)及R(y)表示當前x,y方向上鼠標拖動物體形成的偏移量,Quaternion.Euler是以歐拉角作為旋轉體系,是Unity3D中用于控制物體旋轉角度的方法。φ為控制旋轉的靈敏度系數,根據對模型操作流暢度的測試,一般取φ=0.5。
模型是通過存放在Rresources文件夾下的預設體進行動態調用,在場景中首先確定攝像機Main Camera對應模型視角的位置節點,當攝像機接收事件消息后位移至對應節點位置,達到實時轉換視角的效果。并利用函數ClickGameObject(GameObject obj)和ShowText(string inputTexts)來控制當前顯示模塊的狀態。以列車車鉤操作界面為顯示界面,如圖5所示。紅色加深部分為車鉤當前被選中零部件,上方提示性文字為該零部件的介紹內容。

圖5 列車車鉤操作界面
虛擬列車模型以上海軌道交通3號線為原型,列車編組為6節,因此場景由TC1、MP1、M1、M2、MP2、TC2,6節車廂構成。當前以TC1車廂作為初始場景界面,根據軟件界面的美觀性及操作的便捷性設計了虛擬列車操作界面。列車TC1車廂設備零部件可由右側長條形滑塊上下拖動,選中不同的圖標可將主視點切換至對應設備零部件;長滑塊下方上、下、左、右按鍵可輔助控制視角的位移變換;界面正下方的按鈕可以切換列車車廂場景,實現不同場景中對列車設備的操作;右下角左側的初始狀態按鈕可將模型位置復位至初始位置便于用戶重新操作模型,右側的退出按鈕提供了有效退出客戶端的方法。
本文主要介紹了三維虛擬列車的建模與驅動,利用3ds MAX建模軟件完成對三維虛擬列車場景的建立,并著重對列車零部件設備進行建模,以C#為底層編碼,使用Unity3D三維驅動程序實現對場景的驅動控制。此三維虛擬列車有很強的延拓性和綜合性,能夠接近現實情況模擬列車的運行狀況進行模擬故障的演練,解決了傳統培訓方式資源占用大的情況。它能夠反映列車故障情況,包括列車電器柜斷路器故障、空氣與制動系統故障、車門故障、牽引系統故障等,在地鐵維修培訓過程中具有積極的作用。
[1]吳 芳.城市軌道交通設備[M].北京:人民交通出版社,2012.
[2]張金釗.Unity3D游戲開發與設計案例教程[M].北京:清華大學出版社,2015.
[3]高 楠,張 強.虛擬現實技術在電力機車設計中的應用[J].電力機車與城軌車輛,2010(2).
[4]彭國安.3ds Max 建模與動畫[M].北京:人民郵電出版社,2012.
[5]孫志輝.C#程序設計[M].北京:人民郵電出版社,2015.
[6]劉夢成,孔繁虹.城軌列車故障仿真培訓系統的研究[J].鐵路計算機應用,2015,24(10).
責任編輯 徐侃春
Modeling of three-dimensional virtual train and its application in fault training
NI Chenjie ,LANG Chenglian
( School of Electronics and Information Engineering,Tongji University,Shanghai 201804,China)
Based on the technology of virtual reality,which was applied in the feld of Urban Transit training,the article studied on the fault training platform of three-dimensional virtual train from the train equipment modeling,train equipment status monitoring and the fault phenomenon simulation.The design of three-dimensional virtual train model was based on 3ds MAX.Unity3D was taken as a platform,VC# 2010 was used as a compiler to drive and control 3D models,implement the human-machine interaction.
3D modeling;Unity3D;Urban Transit;fault simulation;interaction design
U260.42∶TP39
A
1005-8451(2016)07-0004-04
2015-12-18
倪晨杰,在讀碩士研究生;郎誠廉,高級工程師。