李阿樂,鄭曉雯,陳雪婷,李 偉
(中國礦業(yè)大學(xué)(北京)機電與信息工程學(xué)院,北京 100083)
隨著虛擬現(xiàn)實技術(shù)以其所帶來的身臨其境的逼真效果逐漸被應(yīng)用到計算機輔助工業(yè)設(shè)計[1,2],它使得人們不再滿足于像以往一樣觀察產(chǎn)品固定的、靜態(tài)的圖像或文字信息,而是對具有動態(tài)的、三維的、實時可交互的三維虛擬仿真系統(tǒng)具有十分迫切的需求,作為開發(fā)虛擬產(chǎn)品的Unity 3D 虛擬現(xiàn)實軟件就是非常好的一個平臺。目前,無論在國內(nèi)還是國外,利用Unity 3D 來開發(fā)產(chǎn)品的虛擬展示系統(tǒng)和地面的漫游系統(tǒng)都已經(jīng)得到了非常普遍的應(yīng)用[3~7],因此用Unity 3D 來開發(fā)煤礦綜采工作面液壓支架的運動狀態(tài)仿真系統(tǒng),可以實現(xiàn)其他三維建模軟件所不具備的動態(tài)交互功能。本文在Windows 平臺下,利用Unity 3D 虛擬現(xiàn)實開發(fā)軟件和Pro/E 三維建模軟件,并結(jié)合JavaScript 和C# 語言來編寫實現(xiàn)交互的程序,完成了形象逼真的、數(shù)據(jù)量小的、實時可交互的液壓支架運動狀態(tài)仿真系統(tǒng)。
由于Unity 3D 虛擬現(xiàn)實軟件平臺不具備構(gòu)建復(fù)雜幾何模型的功能,因此本文采用Pro/E 三維建模軟件對液壓支架進(jìn)行三維建模,研究對象為ZZ4400/17/35 型四柱支撐掩護式液壓支架。
在三維建模軟件Pro/E 的零件模塊中對液壓支架的主要組成部分,即底座、立柱、立柱缸、前后連桿、頂梁、掩護梁等進(jìn)行三維建模,再在該軟件的裝配模塊中,按照它們之間正確的裝配關(guān)系進(jìn)行裝配得到整體液壓支架的三維模型,即將所建立好的液壓支架底座模型作為下一步要裝配的整機模型的第一個基礎(chǔ)零件加載到工作區(qū)里面,此時底座默認(rèn)被添加為固定的屬性。按照底座和四個連桿、四個立柱缸之間的裝配關(guān)系,依次調(diào)入這些零件的模型并把它們裝配到底座上,其他零部件的裝配也依據(jù)和已有裝配件的裝配關(guān)系進(jìn)行正確裝配。需要注意的是:進(jìn)行液壓支架裝配的時候,是從底座開始的,這里選取的第一個基本零件是底座,然后再根據(jù)約束關(guān)系把其他的組成零部件依次裝上。那么底座的坐標(biāo)系即為后續(xù)液壓支架導(dǎo)入導(dǎo)出時的整體坐標(biāo)系,這也為交互設(shè)計時的腳本編寫提供了很大的方便。液壓支架的整體三維模型如圖1 所示。
圖1 液壓支架的三維模型Fig.1 3D model of hydraulic support
經(jīng)過裝配之后的液壓支架三維模型可以直接在Pro/E中保存為obj 格式的文件,然后導(dǎo)入到3ds Max 中,在此操作環(huán)境中對液壓支架進(jìn)行材質(zhì)的添加和著色渲染。本文液壓支架用來做運動仿真時的材質(zhì)選用的材質(zhì)類型是“Standard”,即系統(tǒng)默認(rèn),未做更改。在建立好所需的不同顏色的材質(zhì)球后依次給液壓支架的組成零部件上色即可得到接近真實外觀的液壓支架,并將其保存為Unity 3D 可兼容的.fbx 格式,然后將模型導(dǎo)入到Unity 3D 中。此時導(dǎo)入到Unity 3D 里面的液壓支架在運行時是一片漆黑的,由于系統(tǒng)在場景視圖中只默認(rèn)添加了一個攝像機“Camera”,因此為了觀察液壓支架,必須在Unity 3D 的場景編輯器里面添加一個燈光。具體方法為在編輯器的組成對象列表上方點擊“Create”按鈕,選擇相應(yīng)的“Directional Light”選項即可完成平行光的添加。這時再調(diào)整視圖中的燈光和攝像機到一個合適的位置,就可以在運行的時候看到液壓支架明亮的顯示狀態(tài)。
在導(dǎo)入之前需要注意的是,液壓支架的每個零件在建模時都自有一個坐標(biāo)系,這個自有的局部坐標(biāo)系會隨著整個液壓支架三維模型一起被導(dǎo)入到Unity 3D 中,為了方便仿真之前的運動狀態(tài)分析,需要在3ds Max 中將每個活動零件的局部坐標(biāo)系調(diào)整到合適的位置。
Unity 3D 在其層次視圖中提供了各組成對象之間父子關(guān)系的設(shè)立,為了模擬控制虛擬液壓支架的升、降、推、移等運動,只需在Unity 3D 中設(shè)置好各零部件之間的父子關(guān)系,然后計算出它們的瞬時位置坐標(biāo)和角度參數(shù),并通過編寫的腳本來表達(dá)即可實現(xiàn)人機之間的交互。
為了方便運動分析時各位姿參數(shù)的求解,并結(jié)合液壓支架各零部件已有的組成關(guān)系,現(xiàn)將它們之間的父子關(guān)系在Unity 3D 的Hierarchy 視圖中設(shè)置為如圖2 所示。
圖2 父子關(guān)系圖Fig.2 Parent-child relationship
下一步就是根據(jù)相應(yīng)的幾何關(guān)系計算出各零部件在系統(tǒng)坐標(biāo)系中的坐標(biāo)值,在后連桿轉(zhuǎn)動的同時,通過這些時刻變化的位姿參數(shù)表達(dá)式來模擬液壓支架其他活動零部件的真實運動。關(guān)于液壓支架組成零部件位姿參數(shù)求解,以圖3 所示的液壓支架運動簡圖為例,簡單加以介紹。圖中把A 點設(shè)置為液壓支架在系統(tǒng)坐標(biāo)系中的原點。那么A、B、C、D 四點所構(gòu)成的部分可看成一個四連桿機構(gòu),如果建立一個以AB方向為x 軸,另一個垂直該軸方向為y 軸的平面坐標(biāo)系,把這個簡化的四連桿機構(gòu)單獨拿出來分析,如圖4 所示。由于A、B兩點高度和水平距離是可以測量得到的,AB 段的長度經(jīng)計算先表示為L0,圖中液壓支架的前后連桿長度分別為L2、L1,CD 長度假定為L,這些已知量都是可以通過測量結(jié)果預(yù)先得到的。由連桿在x 軸和y 軸方向上的投影可得:
L1cos(π-θ1-α)+Lcosβ=L2cos(π-θ2-α)+L0L1sin(π-θ1-α)+Lsinβ=L2sin(π-θ2-α)
XC=L1cosθ1,YC=L1sinθ1
XD=XB+L2cosθ2,YD=YB+L2sinθ2
則計算可得掩護梁的傾角為:
圖3 液壓支架運動簡圖Fig.3 Motion diagram of hydraulic support
圖4 簡化四連桿機構(gòu)Fig.4 Simplified four bar mechanism
上述等式中,角度α 可以通過計算得出,角度β 為中間量。在測量出AB 長度L0、長度L2、L1和后連桿的偏轉(zhuǎn)角θ1后,可以由以上幾組等式計算出前連桿的傾角θ2的大小、C、D 兩點的坐標(biāo)值以及掩護梁的傾角θ3的大小?;氐缴厦嬉簤褐Ъ苓\動簡圖,頂梁的傾角θ4有一個初始設(shè)置的大小,因為頂梁是作為一個子對象附加在掩護梁上,所以頂梁上F、G 兩點的坐標(biāo)可以很容易求解,同理由底座和前后立柱缸之間的父子關(guān)系,H、I 兩點的坐標(biāo)值也可以輕易求解。那么在已知G、I、F、H四點的坐標(biāo)值后,前、后立柱的傾角θ6和θ5可以依次計算出來。依此,根據(jù)頂梁和護幫板之間的父子關(guān)系,可以直接得出點J、K、L 的坐標(biāo)值,再加上L3的長度值,則由余弦定理可計算出角θ7的大小。最后在計算出所有需要的坐標(biāo)參數(shù)表達(dá)式并把它們代入到所編寫的腳本中,則可通過控制液壓支架后連桿的轉(zhuǎn)動來實現(xiàn)其他構(gòu)件的整體虛擬運動。
為了實現(xiàn)整個液壓支架的運動狀態(tài)仿真和人機交互,即達(dá)到一種可以通過鼠標(biāo)和鍵盤來實時操控的效果,Unity 3D 腳本在此時的系統(tǒng)開發(fā)中是關(guān)鍵要素,模型各零部件之間任何邏輯的判斷和GUI 狀態(tài)顯示都需要通過腳本來完成。為此,在Unity 3D 中把編寫好的帶有各零部件準(zhǔn)確位姿參數(shù)的腳本綁定到液壓支架的相關(guān)部件上,經(jīng)調(diào)試無誤后,在運行時即可實現(xiàn)人機之間的動態(tài)交互。本文主要采用的是JavaScript 語言來編寫實現(xiàn)動態(tài)交互的程序,編寫環(huán)境為Unity 3D 軟件自帶的MonoDevelop 腳本編輯器。在處理整個液壓支架的運動狀態(tài)時,所需計算的運動參數(shù)較多,仿真時所編寫的代碼也較多,在此以較為基礎(chǔ)的整架移動和后連桿轉(zhuǎn)動命令為例加以介紹。
操作者若想通過鍵盤或鼠標(biāo)來驅(qū)動虛擬的液壓支架,分別以按鍵“A”、“D”控制前后移架,按鍵“S”同時還可對界面上按鈕的點擊來控制液壓支架后連桿的轉(zhuǎn)動,從而進(jìn)一步實現(xiàn)其他活動零部件的運動為例,部分利用JavaScript 語言的編寫如下:
var RotateSpeed=20;
var MoveSpeed=30;
function OnGUI () {
If (GUI.Button (Rect (10,10,130,30) ,“升架”,)) {
transform.Rotate (Vector3.right*Time.deltaTime*RotateSpeed) ;}
if (GUI.RepeatButton (Rect (Screen.width-150,10,130,30) ," 向前移動液壓支架")) {
transform.Translate (-Vector3.forward*Time.deltaTime*MoveSpeed) ; }
if (GUI.RepeatButton (Rect (Screen.width-150,50,130,30) ," 向后移動液壓支架")) {
transform.Translate (Vector3.forward*Time.deltaTime* MoveSpeed) ;}
}
function Update () {
if (Input.GetKey (KeyCode.S)) {
transform.Rotate (Vector3.right*Time.deltaTime*RotateSpeed) ;
}
if (Input.GetKey (KeyCode.D)) {
transform.Translate (-Vector3.forward*Time.deltaTime*MoveSpeed) ;
}
if (Input.GetKey (KeyCode.A)) {
transform.Translate (Vector3.forward*Time.deltaTime*MoveSpeed) ;
}
}
完成了整個仿真系統(tǒng)的工作之后,最終可以在Unity 3D 平臺中將系統(tǒng)發(fā)布成相應(yīng)的可執(zhí)行文件和網(wǎng)絡(luò)文件。系統(tǒng)發(fā)布之前在Unity 3D 中的顯示界面如圖5 所示。
圖5 系統(tǒng)發(fā)布前顯示界面Fig.5 Display interface
通過三維建模軟件Pro/E、模型渲染工具3ds Max和虛擬現(xiàn)實軟件Unity 3D 的綜合應(yīng)用,最終完成了液壓支架運動狀態(tài)仿真系統(tǒng)。相對于簡單的圖片和視頻展示,操作者可以在人機交互的狀態(tài)下動態(tài)地模擬操控液壓支架的運動,從而更加直觀地了解液壓支架的真實工作狀態(tài)。該系統(tǒng)不僅可以應(yīng)用于虛擬的教學(xué)演示和培訓(xùn)中,也可以在真實液壓支架上添加傳感器進(jìn)行工作狀態(tài)的監(jiān)測和數(shù)據(jù)的采集、傳輸,并通過開發(fā)的虛擬仿真系統(tǒng)進(jìn)行真實驅(qū)動,還可以將該系統(tǒng)擴展到整個綜采工作面上。本文的研究為煤礦綜采工作面設(shè)備的虛擬仿真和遠(yuǎn)程監(jiān)控系統(tǒng)的改進(jìn)奠定了基礎(chǔ)。
[1]宣雨松.Unity 3D 游戲開發(fā)[M].北京:人民郵電出版社,2012.
[2]倪樂波,戚鵬,遇麗娜,等.Unity 3d 產(chǎn)品虛擬展示技術(shù)的研究與應(yīng)用[J].?dāng)?shù)字技術(shù)與應(yīng)用,2010,9.
[3]歐陽攀,李強,盧秀慧.基于Unity 3D 的虛擬校園開發(fā)研究與實現(xiàn)[J].現(xiàn)代電子技術(shù),2013,4.
[4]李紅濤,張驎.人機工程在煤礦中的應(yīng)用現(xiàn)狀及展望[J].礦山機械,2013,5.
[5]胡松剛,李浩雷.淺談虛擬模擬技術(shù)在煤機操作培訓(xùn)中的應(yīng)用前景[J].礦山機械,2010,2.
[6]周廣新,李威,張麗平.基于3D-VR 的煤礦綜采面液壓支架虛擬系統(tǒng)的研究[J].礦山機械,2010,11.
[7]閆海峰,鞏明,唐大放,等.基于Virtools 4.0 的綜采支護虛擬現(xiàn)實系統(tǒng)開發(fā)[J].礦山機械,2009,23.