石 洋 高志廣 郭 爽
(三一重型裝備有限公司,遼寧 沈陽 110027)
虛擬現(xiàn)實技術是物聯(lián)網的關鍵技術之一,將虛擬現(xiàn)實技術引入采煤機培訓系統(tǒng),可以直觀地展示產品的參數(shù)規(guī)格、功能特性等信息。同時,采煤機長期處于地下惡劣的工況環(huán)境中,一旦發(fā)生停機故障就會嚴重損害企業(yè)利益。因此,在采煤機無故障運行時,積極展開有針對性地數(shù)字化虛擬培訓尤為重要。
運用Unity 3D技術對采煤機虛擬培訓系統(tǒng)進行開發(fā),通過設置密碼管理、設備基本信息、結構展示、工作原理、維修保養(yǎng)、平臺拓展等模塊,可以為使用者搭建一個實時交互的虛擬環(huán)境,模擬采煤機在運行過程中的狀態(tài),從而完成全面了解采煤機以及對企業(yè)員工進行崗前培訓的工作,使員工快速掌握采煤機的相關知識。該文介紹了基于Unity 3D的采煤機虛擬培訓系統(tǒng)的設計流程、結構和功能,分析了該系統(tǒng)的優(yōu)點,對開展有針對性的虛擬培訓具有重要意義。
采煤機虛擬培訓系統(tǒng)以Unity 3D引擎作為系統(tǒng)開發(fā)平臺,建模工具采用Creo6.0,在Maya中進行分級重組之后,導出FBX格式,然后導入Unity 3D中,完成培訓系統(tǒng)場景設計。Unity 3D是由Unity Technologies 開發(fā)的跨平臺引擎,該軟件具有可視化編程、支持Open GL、支持Direct11以及集成了Phys X3.3物理系統(tǒng)等特點,因此在虛擬現(xiàn)實仿真領域具有廣泛的應用實例。
采煤機虛擬培訓系統(tǒng)采用三層軟件架構體系,由顯示模塊、操作模塊以及功能模塊組成,系統(tǒng)架構如圖1所示:1)顯示模塊。搭建采煤機作業(yè)環(huán)境,在Unity 3D平臺中對采煤機的工作部件進行展示和管理。2) 操作模塊。操作模塊實現(xiàn)該培訓系統(tǒng)的密碼設置、GUI界面顯示以及人機交互等功能。3) 功能模塊。功能模塊通過編寫C++腳本來展示采煤機的工作原理以及維修保養(yǎng)要點,還可以對采煤機的工作過程、液壓原理以及重要部件的拆卸與安裝進行動畫仿真。
圖1 系統(tǒng)架構圖
采煤機虛擬培訓系統(tǒng)的硬件環(huán)境為云桌面,處理器為Intel(R) Xeon Gold 6254 CPU @ 3.10GHz,RAM 32G??梢酝ㄟ^鍵盤、手柄等硬件對采煤機虛擬培訓系統(tǒng)的功能模塊進行操控。該系統(tǒng)的開發(fā)流程圖如圖2所示。
圖2 系統(tǒng)開發(fā)流程圖
為了實現(xiàn)該系統(tǒng)維修保養(yǎng)的逼真程度和重要部件拆卸與安裝的功能,需要搭建采煤機的三維模型和虛擬作業(yè)環(huán)境。
為了重現(xiàn)采煤機的作業(yè)現(xiàn)場,根據(jù)采煤機外形尺寸并通過Creo6.0軟件搭建采煤機的模型,考慮到后續(xù)要用Maya軟件及Unity 3D開發(fā)平臺對該模型進行操作,為提高Maya軟件及Unity 3D開發(fā)平臺的工作效率,因此需要簡化建模,減少不必要的零件組裝(例如銘牌等部件)。同時,將機械支撐部分建模成整體,便于后續(xù)處理。經過簡化建模后的采煤機包括左截割部組件、右截割部組件、行走部、過橋組件、機身組件、長滑靴組件、短滑靴組件、銷軸組件、拖纜組件、水系統(tǒng)和液壓系統(tǒng)等部分。其中,電氣系統(tǒng)未建模,而是用EPLAN導出電氣系統(tǒng)原理圖,以二維圖的形式展示后續(xù)Unity 3D開發(fā)平臺中的工作原理界面。采煤機建模完成后需要搭建作業(yè)場景,如圖3所示。將采煤機三維模型導入Maya中進行渲染、分級重組以及格式轉換,將導出后的FBX格式的文件再導入Unity 3D中,在Unity 3D中進行場景搭建,搭建完的場景基本可以還原采煤機的真實工作環(huán)境。
圖3 場景模型
Unity 3D支持多種編譯腳本,該系統(tǒng)基于C#語言編寫系統(tǒng)腳本,IDE采用Microsoft Visual Studio 2019。該系統(tǒng)設置了用戶登錄密碼驗證、重要部件結構展示、工作原理仿真、重要部件的拆卸與安裝虛擬動畫展示以及維修保養(yǎng)要點知識等主要界面。這些功能模塊均采用人機交互模式,可人工操縱鼠標對某一項功能進行逐步操作,從而提升使用者的直觀感受。
使用鼠標控制采煤機模型,可以對采煤機模型進行移動、旋轉、縮放和多角度觀察,還可以對采煤機的重要部件的結構、工作原理、重要部件拆卸與安裝以及維修保養(yǎng)方法等內容進行展示、操作,系統(tǒng)地學習采煤機的結構與原理。
用鼠標左鍵按住模型對其進行拖動控制、鼠標滑輪縮放模型、鼠標中鍵按住旋轉模型的部分腳本如下。
if (MoveCam.instance.isRight) {
//獲取目標點坐標。棄用
//x += MoveCam.instance.getTargetPos().x * xSpeed * 0.002f;
//y -=MoveCam.instance.getTargetPos().y * ySpeed * 0.002f;
x += getTargetPos().x * xSpeed * 0.002f;
y -= getTargetPos().y * ySpeed * 0.002f;
} else {
x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
}
x = ClampAngle(x, xMinLimit, xMaxLimit);
y = ClampAngle(y, yMinLimit, yMaxLimit);
//print(Input.GetAxis("Mouse X"));
//print( Input.GetAxis("Mouse Y"));
//print(x);
//print(y);
}
//if( Input.GetMouseButton(1))
//{
//string str = EventSystem.currentToString().Substring(EventSystem.current.ToString().IndexOf(":"), 32);
//string str2 = str.Substring(str.IndexOf("(") + 1, str.IndexOf(")")- str.IndexOf("(") - 1);
// float xx = float.Parse(str2.Split(',')[0]);
// float yy = float.Parse(str2.Split(',')[1]);
// //distanceY += Input.GetAxis("Mouse Y") * ySpeed *0.002f;
// distanceY += yy * ySpeed * 0.0002f;
// //distanceY = Mathf.Clamp(distanceY, minDistanceY,maxDistanceY);
// //print(Input.GetAxis("Mouse X"));
// //print( Input.GetAxis("Mouse Y"));
// //print(x);
// //print(y);
// }
/*if((Input.mousePosition.x > 0)&&
(Input.mousePosition.x < Screen.width * leftCam.rect.width)&&
(Input.mousePosition.y > Screen.height * leftCam.rect.y)&&
(Screen.height > Input.mousePosition.y))
{*/
//if((Input.mousePosition.x > 0)&&
// (Input.mousePosition.x < Screen.width * leftCam.rect.width)&&
// (Input.mousePosition.y > Screen.height * leftCam.rect.y)&&
// (Screen.height > Input.mousePosition.y))
//{
if (!IsRaycastUI02()) {
distance += Input.GetAxis("Mouse ScrollWheel") * mSpeed;
distance = Mathf.Clamp(distance, minDistance, maxDistance);
}
//}
Quaternion rotation = Quaternion.Euler(y, x, 0.0f);
Vector3 disVector = new Vector3( 0.0f, 0.0f, -distance );
Vector3 position = rotation * disVector+target.position;
//adjust the camera
if( needDamping )
{
transform.rotation = Quaternion.Lerp(transform.rotation,rotation, Time.deltaTime*damping);
transform.position = Vector3.Lerp(transform.position, position,Time.deltaTime*damping);
}
else
{
transform.rotation = rotation;
transform.position = position;
}
功能模塊主要包括工作原理仿真和維修保養(yǎng)要點2個部分。其中,工作原理仿真模塊重點展現(xiàn)采煤機重要部件的結構、液壓系統(tǒng)、電氣系統(tǒng)和水系統(tǒng)的工作原理。液壓系統(tǒng)、水系統(tǒng)采用真實的管路布置圖,可直觀展現(xiàn)系統(tǒng)工作時的液體流動線路以及驅動零部件的原理,電氣系統(tǒng)則無具體布置圖,僅通過二維原理圖展示電氣原理。維修保養(yǎng)要點模塊展示重要部件結構、拆卸與安裝動畫過程以及維修保養(yǎng)等相關信息。結構展示和拆卸與安裝動畫均可逐級向下拆解,直至不可分解的焊接件,可以直觀地展現(xiàn)采煤機的結構,并還原真實的拆卸與安裝過程。
將經Creo6.0建模后的整機模型導入Maya軟件后,對重要部件進行分類分組管理,不僅避免了過多零件給Unity 3D的層級視圖管理帶來的困難,而且還加快了查找零件的速度,提升了開發(fā)效率。將分類分組后的模型導入采煤機虛擬培訓系統(tǒng),展示為左截割部、右截割部、左滾筒、右滾筒、長滑靴、短滑靴、行走部、液壓系統(tǒng)、水系統(tǒng)以及電氣系統(tǒng)等部分。截割部等重要部件可以繼續(xù)向下一組成部分逐級分解,直至分解為組成部分。每個重要部件均配有原理展示動畫和功能說明。左截割部的齒輪動力傳動如圖4所示(動力傳輸方向為電機——一軸組件——二軸組件——三軸組件——四軸組件——五軸組件——行星組件,動力傳輸部件用粗線顯示)。
圖4 齒輪動力傳動圖
水系統(tǒng)采用虛擬液流的流動展示水系統(tǒng)的工作原理。外噴霧水路的液流流動圖如圖5所示(外噴霧水路流向為進水口——冷卻器——殼體內部水道——殼體底部水道——噴嘴)。
圖5 外噴霧水路
2.3.2 維修保養(yǎng)模塊
維修保養(yǎng)模塊重點展現(xiàn)重要部件的拆卸與安裝以及保養(yǎng)要點。在模擬拆卸與安裝的過程中,根據(jù)采煤機設計的特點,用動畫形式展示拆卸與安裝過程,可以通過人機交互的操作來控制。Unity 3D的Tween功能包括多種動畫類型。在腳本中設置零部件運動過程中的開始位置坐標和結束位置坐標,可以展現(xiàn)該零件的運動軌跡。通過編寫腳本也可使零件的運動軌跡消失,零部件的拆卸與安裝過程就是通過該功能實現(xiàn)的,在編寫腳本的過程中,需要不斷調整采煤機模型的內部參數(shù),使模擬效果更加絲滑、真實。
針對行走部的維修保養(yǎng),導向滑靴和行走輪的拆卸過程如下:拆下行走箱蓋板螺栓,并拆下行走箱蓋板露出軸頭蓋;采用頂絲將軸頭蓋頂出后拆除行走部螺栓和墊圈;利用殼體螺紋和螺釘拆除行走殼體組焊件后取出油封,最后拆除導向滑靴組焊件和銷軌輪。具體拆卸過程如圖6所示。
圖6 導向滑靴和行走輪拆卸過程圖
采用鼠標和鍵盤對采煤機虛擬培訓系統(tǒng)進行操作控制。使用鍵盤輸入密碼登錄該系統(tǒng)的操作界面。使用鼠標選擇相應功能按鈕觸發(fā)對應功能。
為了驗證該系統(tǒng)是否能滿足采煤機服務人員的培訓要求,邀請100名服務人員對該系統(tǒng)進行測試。通過與100名服務人員的共同測試與交流表明,該系統(tǒng)功能模塊完整,系統(tǒng)響應迅速,動畫過渡絲滑,人機交互性較強。系統(tǒng)測試結果見表1。
表1 系統(tǒng)測試結果
該文設計了一種基于Unity 3D的采煤機虛擬培訓系統(tǒng),以三維模型為載體,采用交互式動畫展示采煤機的重要部件架構。該系統(tǒng)搭載采煤機真實控制面板,用實景化的方式展示了拆卸與安裝過程以及維修保養(yǎng)要點。同時,該系統(tǒng)以三維布管模型為載體,還原真實系統(tǒng)的運行狀態(tài),展示采煤機整機運動及系統(tǒng)的工作原理。服務人員通過學習該系統(tǒng)可以完整、系統(tǒng)地了解采煤機,從而達到提升服務人員故障維修水平的目的。