張 文,周金宇,任維彬,徐先宜
(1.江蘇理工學(xué)院機(jī)械工程學(xué)院,江蘇 常州 213001;2.金陵科技學(xué)院機(jī)電工程學(xué)院,江蘇 南京 211169;3.機(jī)械科學(xué)研究總院江蘇分院有限公司,江蘇 常州 213001)
激光熔覆是激光再制造的重要形式之一,作為先進(jìn)的表面工程工藝和增材制造手段,成為了我國工業(yè)4.0發(fā)展的重點(diǎn)目標(biāo)和內(nèi)容。尤其是2017年2月以來,國家教育部積極推進(jìn)新工科建設(shè),先后發(fā)布了《關(guān)于開展新工科研究與實(shí)踐的通知》、《關(guān)于推進(jìn)新工科研究與實(shí)踐項(xiàng)目的通知》等文件[1],其中都將激光增材制造技術(shù)作為新工科教育發(fā)展和研究的重點(diǎn)內(nèi)容。但由于激光熔覆試驗(yàn)開展準(zhǔn)備周期長、設(shè)備運(yùn)行費(fèi)用高、工藝開展過程要求較高、具有現(xiàn)場教學(xué)安全隱患等缺點(diǎn),因此在試驗(yàn)廣泛性開展和學(xué)生教學(xué)實(shí)踐的個(gè)性化指導(dǎo)方面還需亟待提升。
基于三維計(jì)算機(jī)圖形技術(shù)、云計(jì)算、人機(jī)交互以及數(shù)據(jù)庫等技術(shù)的不斷成熟,虛擬現(xiàn)實(shí)技術(shù)不斷發(fā)展,其良好的交互性、浸入性以及智能化等特征優(yōu)勢愈加彰顯[2]。尤其是該技術(shù)與教育教學(xué)試驗(yàn)的有機(jī)融合,極大程度地解決了試驗(yàn)危險(xiǎn)性、時(shí)間地域限制性以及研究過程反復(fù)性等關(guān)鍵性的教育教學(xué)試驗(yàn)開展難題,對于提升教學(xué)資源有效利用率、教學(xué)服務(wù)對象廣泛性、教學(xué)質(zhì)量具有較大裨益
因此,本系統(tǒng)選取虛擬現(xiàn)實(shí)開發(fā)引擎Unity3D建立以激光熔覆工藝為支撐的網(wǎng)絡(luò)化虛擬試驗(yàn)平臺,該虛擬試驗(yàn)平臺通過多款軟件共同開發(fā),有效地彌補(bǔ)了我國高校激光熔覆試驗(yàn)課程體系的不足。學(xué)生通過自行下載客戶端操作虛擬試驗(yàn)平臺不僅可以看到逼真形象的激光熔覆實(shí)驗(yàn)室現(xiàn)場和設(shè)備,還能在虛擬環(huán)境下完成沉浸式激光熔覆工藝操作體驗(yàn)。
利用Unity3D等軟件開發(fā)激光熔覆虛擬試驗(yàn)平臺的過程,實(shí)質(zhì)上也就是開發(fā)虛擬現(xiàn)實(shí)內(nèi)容的過程[3]。通過對激光熔覆實(shí)驗(yàn)室實(shí)景拍攝及網(wǎng)上信息采集,利用SolidWorks軟件建立激光熔覆設(shè)備三維模型,其中重點(diǎn)建立KUKA(KR60HA)機(jī)器人以及激光熔覆頭三維模型,然后將三維模型導(dǎo)入至3dsMax軟件中,修剪多余貼圖及調(diào)整各旋轉(zhuǎn)軸軸心位置,導(dǎo)出為FBX 文件。在Unity3D中使用C#腳本編程完成激光熔覆仿真控制,采用NGUI制作系統(tǒng)界面完成人機(jī)交互功能。通過與Photon Server 服務(wù)器、MYSQL 數(shù)據(jù)庫協(xié)同工作,實(shí)現(xiàn)系統(tǒng)多人協(xié)作以及試驗(yàn)評價(jià)反饋等功能。開發(fā)具體流程圖,如圖1所示。
圖1 虛擬試驗(yàn)平臺開發(fā)流程Fig.1 Development Process of Virtual Trial Platform
激光熔覆虛擬試驗(yàn)平臺其功能結(jié)構(gòu),如圖2所示。大致分為試驗(yàn)場景漫游、試驗(yàn)參數(shù)制定、試驗(yàn)過程動(dòng)態(tài)模擬、試驗(yàn)評價(jià)反饋四大模塊,學(xué)生和老師分別使用指定賬號登錄系統(tǒng)。在場景漫游模塊中,學(xué)生通過第一人稱角色控制器瀏覽整個(gè)虛擬實(shí)驗(yàn)室,加強(qiáng)對激光熔覆實(shí)驗(yàn)室的認(rèn)知。在試驗(yàn)參數(shù)制定模塊,學(xué)生通過試驗(yàn)對象選擇、工藝參數(shù)選擇(主要為激光功率、送粉速度、掃描速度)、熔覆頭運(yùn)動(dòng)路徑選擇制定熔覆計(jì)劃。在試驗(yàn)過程模擬模塊,根據(jù)之前學(xué)生自主選擇的參數(shù)計(jì)劃進(jìn)行相應(yīng)模擬,直觀展現(xiàn)激光熔覆的全過程。而在試驗(yàn)評價(jià)模塊,則是首先通過與服務(wù)器、數(shù)據(jù)庫連接記錄學(xué)生操作訓(xùn)練信息[4],根據(jù)制定的評價(jià)標(biāo)準(zhǔn)針對學(xué)生在虛擬試驗(yàn)環(huán)節(jié)出現(xiàn)的錯(cuò)誤進(jìn)行相應(yīng)點(diǎn)評及糾正。
圖2 虛擬試驗(yàn)平臺功能框架Fig.2 Functional Framework of Virtual Test Platform
由于Unity3D 自身無法建立復(fù)雜模型,因此本系統(tǒng)采用SolidWorks作為建模工具[5],本激光熔覆虛擬試驗(yàn)的主要控制模型為KUKA(KR60HA)轉(zhuǎn)動(dòng)機(jī)器人及激光熔覆頭,在SolidWorks中建立的機(jī)器人及熔覆頭三維模型,如圖3所示。
在模型建立完成后,由于SolidWorks 不支持FBX 格式模型導(dǎo)出,先將三維模型導(dǎo)出為STL零件格式文件,通過3dsMax自帶的合并導(dǎo)入的方式,依次將機(jī)器人各零部件模型導(dǎo)入至3dsMax中[6],同時(shí)用3dsMax 對模型各關(guān)節(jié)零部件旋轉(zhuǎn)軸的位置和角度進(jìn)行調(diào)整來匹配機(jī)器人運(yùn)動(dòng)功能需求。通過合并導(dǎo)入后機(jī)器人在3dsMax的效果圖,如圖3(c)所示。在3dsMax調(diào)整各關(guān)節(jié)旋轉(zhuǎn)軸位置與角度后進(jìn)行面數(shù)優(yōu)化,減少模型占用的系統(tǒng)內(nèi)存。修改完成后,將模型導(dǎo)出為FBX格式文件,拖拽至Unity3D中呈現(xiàn)效果,如圖3(d)所示。
圖3 機(jī)器人及熔覆頭模型優(yōu)化導(dǎo)入Fig.3 Introduction of Robot and Cladding Head Model Optimization
3.2.1 資源導(dǎo)入和場景搭建
模型在3dsMax 中導(dǎo)出為FBX 格式文件后可直接將文件拖拽至Unity3D 的Assets 工程文件下,Unity3D 將自動(dòng)讀取模型[7]。同時(shí),為了方便管理及后續(xù)故障排查,在Assets下創(chuàng)建文件夾將所有工程素材、代碼程序、場景動(dòng)畫分門別類存儲(chǔ)起來。
在完成資源導(dǎo)入后,通過File→NewScene 創(chuàng)建新場景[8],將Assets 中Unity3D 讀取的模型文件直接拖拽至Scene 窗口下,通過界面左側(cè)Hierarchy 面板可查看管理已添加至場景中的模型,整個(gè)工程Asset文件下素材導(dǎo)入分類,如圖4 所示。
圖4 Project下模型及相關(guān)素材導(dǎo)入Fig.4 Model and Relevant Material Import Under Project
3.2.2 人機(jī)交互界面設(shè)計(jì)
一套完整的虛擬試驗(yàn)平臺的開發(fā)不僅僅只滿足于系統(tǒng)的功能設(shè)計(jì),還需要設(shè)計(jì)一套與之相應(yīng)的人機(jī)交互界面來匹配[9]。本系統(tǒng)采用NGUI插件進(jìn)行界面設(shè)計(jì),NGUI組件包含Canvs、Even‐System、Text、Image、Button、Panal等多種元素[10],根據(jù)上述確定的系統(tǒng)總體功能,本試驗(yàn)平臺主要設(shè)計(jì)的UI界面,如圖5所示。
圖5 虛擬平臺主要場景界面Fig.5 Main Scene Interface of Virtual Platform
在利用NGUI設(shè)計(jì)完成UI框架后,其中交互動(dòng)作的實(shí)現(xiàn)主要是通過C#程序腳本編程實(shí)現(xiàn)并通過與MYSQL 數(shù)據(jù)庫、Photon Server服務(wù)器對接完成信息存儲(chǔ)功能。在注冊界面通過Dictionary字典函數(shù)的遍歷存儲(chǔ)用戶名及密碼信息,通過Nhibernate傳遞給數(shù)據(jù)庫。而在登入界面則又通過if函數(shù)判定輸入用戶名及密碼是否符合數(shù)據(jù)庫存儲(chǔ)信息。在四個(gè)場景分別搭建完成后通過Button按鈕及在按鈕中添加Scene Manager函數(shù)實(shí)現(xiàn)場景跳轉(zhuǎn)功能。
為了增強(qiáng)使用者的體驗(yàn)感,虛擬試驗(yàn)系統(tǒng)采用第一人稱視角在整個(gè)場景中進(jìn)行漫游。
通過Assets→import package→characters 導(dǎo)入人物包,將人物包中perfabs文件下第一個(gè)預(yù)設(shè)體“FPS Controller”拖拽至場景中,設(shè)置相應(yīng)屬性,添加膠囊碰撞器,為模擬人的視線高度,調(diào)整預(yù)制體高度距離地面1.6m左右,導(dǎo)入后第一人稱角色控制器顯示,如圖6所示。其第一人稱角色控制器為一個(gè)透明的膠囊體。通過編寫C#腳本可以對實(shí)驗(yàn)室內(nèi)設(shè)備采用鼠標(biāo)進(jìn)行操作,通過鼠標(biāo)右鍵進(jìn)行第一人稱的轉(zhuǎn)向,利用鍵盤上的按鍵進(jìn)行前后左右的移動(dòng),從而達(dá)到在虛擬實(shí)驗(yàn)室中進(jìn)行正常第一人稱操作的真實(shí)感。
圖6 第一人稱角色控制器在系統(tǒng)中使用Fig.6 The First?Person Role Controller Used in the System
導(dǎo)入至Unity3D中的機(jī)器人模型實(shí)際是由基座、腰部、大臂、小臂、手腕等多關(guān)節(jié)組成的多零件模型,其本身各關(guān)節(jié)不具備層級關(guān)系,即在大臂旋轉(zhuǎn)時(shí),小臂、手腕等子關(guān)節(jié)不能跟隨運(yùn)動(dòng),當(dāng)需要控制機(jī)器人運(yùn)動(dòng)時(shí),往往會(huì)出現(xiàn)關(guān)節(jié)散架等情況。因此為實(shí)現(xiàn)機(jī)器人上關(guān)節(jié)轉(zhuǎn)動(dòng)帶動(dòng)下關(guān)節(jié)轉(zhuǎn)動(dòng)的效果,本虛擬試驗(yàn)平臺采用構(gòu)建父子關(guān)系[11]的方式來實(shí)現(xiàn)。在Hierarchy面板下創(chuàng)建六個(gè)空物體,通過C#腳本編程,將各關(guān)節(jié)放置在空物體下作為子物體,相關(guān)代碼如下:
void SetPSRelationship()
{RobotArray[].transform.parent=jointArray[].transform;
jointArray[].transform.parent=jointArray[].transform;
…
}
每個(gè)空物體控制自己子關(guān)節(jié)的轉(zhuǎn)動(dòng),同時(shí)每個(gè)空物體又是上關(guān)節(jié)的子物體,其子關(guān)節(jié)轉(zhuǎn)動(dòng)都是相對于其父物體坐標(biāo)系的。機(jī)器人各關(guān)節(jié)在Unity3D 中Hierarchy 面板下構(gòu)成的層級關(guān)系,如圖7所示。
圖7 在Unity3D中機(jī)械臂各關(guān)節(jié)父子關(guān)系Fig.7 Parent?Child Relationship of Each Joint of the Robotic Arm in Unity3D
在構(gòu)成父子關(guān)系后由于激光熔覆過程機(jī)械臂由示教控制,所謂示教控制就是在使用機(jī)器人完成制定運(yùn)動(dòng)任務(wù)前,先教機(jī)器人如何運(yùn)動(dòng),將機(jī)器人的位置、速度等信息記錄下來。首先添加C#腳本,利用transform.localPosition、transform.localEulerAngles函數(shù)獲取熔覆頭末端位置坐標(biāo)及旋轉(zhuǎn)角度,進(jìn)行熔覆起始點(diǎn)及終點(diǎn)定位。當(dāng)確定熔覆路徑起點(diǎn)及終點(diǎn)后,通過Unity3D的Mecanim系統(tǒng)根據(jù)之前試驗(yàn)參數(shù)選擇模塊選擇的掃描速度、機(jī)器臂移動(dòng)路徑等調(diào)用對應(yīng)動(dòng)畫進(jìn)行熔覆路徑模擬,分別為兩點(diǎn)定位、直線運(yùn)動(dòng)和曲線運(yùn)動(dòng)顯示圖,如圖8所示。
圖8 熔覆頭運(yùn)動(dòng)路徑模擬Fig.8 Motion Path Simulation of Cladding Head
根據(jù)試驗(yàn)參數(shù)制定模塊選擇的工藝參數(shù)的不同,激光熔覆試驗(yàn)過程模擬的顯示效果也應(yīng)有相應(yīng)的變化。在虛擬系統(tǒng)中體現(xiàn)激光功率及送粉速度兩者選擇不同最明顯的特征就是熔覆過程中激光束的粗細(xì)及熔覆過程中試件表面火花飛濺的效果。本平臺利用Unity3D 中的粒子系統(tǒng)(Particle System)和Line Renderer特效模塊分別實(shí)現(xiàn)了激光熔覆過程中的火花飛濺效果和激光束模擬效果[12]。伴隨激光功率和送粉速度逐漸增大,激光束及火花飛濺模擬效果,如圖9所示。在Particle System 組件中設(shè)置粒子的大小、單位時(shí)間發(fā)射的數(shù)量、發(fā)射速度以及消失時(shí)間等參數(shù),在Renderer模塊下添加火花貼圖實(shí)現(xiàn)火花飛濺效果,并將Hierarchy面板中的Particle System放入激光熔覆頭模型文件夾下作為子物體,當(dāng)機(jī)器人及熔覆頭移動(dòng)時(shí)即可模擬出相應(yīng)的火花效果。激光束則由Line Renderer特效組件完成,在Hierarchy面板下新建一個(gè)空物體,給這個(gè)空物體添加Line Renderer 組件。具體操作如下:Component→Effects→Line Renderer。通過給材質(zhì)球賦予激光束貼圖模擬激光束效果。在Inspector面板下調(diào)整Start Width、End Width、Start Color、End Color等參數(shù)并如Particle System一樣列為熔覆頭模型文件的子物體。
圖9 激光及火花濺射效果圖Fig.9 Effect of Laser and Spark Sputtering
在試驗(yàn)評價(jià)模塊,系統(tǒng)需根據(jù)操作者選取的試驗(yàn)對象、試驗(yàn)工藝參數(shù)、熔覆路徑以及在熔覆模擬階段對熔覆速度等調(diào)節(jié)進(jìn)行相應(yīng)評分。為了評分的科學(xué)性、嚴(yán)謹(jǐn)性,制定合理的試驗(yàn)評價(jià)標(biāo)準(zhǔn)顯得尤為重要。本平臺目前以三種試樣(鋼板、軋輥、葉片)為試驗(yàn)對象,其具體工藝參數(shù),如表1所示。一色標(biāo)注為最優(yōu)參數(shù)。在登入界面獲取用戶名及密碼后,具體代碼如下:
表1 實(shí)驗(yàn)工藝參數(shù)選擇表Tab.1 Selection Table of Experimental Process Parameters
loginRequest.Username=usernameIF.text;
loginRequest.Password=passwordIF.text;
進(jìn)入每一名學(xué)生數(shù)據(jù)庫中,通過Dictionary
public UIPopupList TuchenList;
……
public GameObject tishi;
public void onsss()
{
string smsd_value=smsdLabel.value;
string jggl_value=jgglLabel.value;
string sfsd_value=sfsdLabel.value;
m_Score=GameObject.Find("Text").GetComponent
if(int.Parse(smsd_value)>800 || int.Parse(smsd_value) <600)
{
x?=20;
}
if(int.Parse(jggl_value)>12||int.Parse(jggl_value)<8)
{
x ?=20;
}
i(ffloat.Parse(sfsd_value)>1.2||float.Parse(sfsd_value)<0.8)
{
x ?=20;
}
tishi.SetActive(true);
m_Score.text=x.ToString();
}
本試驗(yàn)平臺選用Photon Server服務(wù)器,該服務(wù)器開發(fā)語言為C#語言,因此非常適應(yīng)Unity3D中的編程。同時(shí)該服務(wù)器采用負(fù)載均衡的解決方案,能夠自動(dòng)處理通信過程中的異常[14],減輕了虛擬平臺的開發(fā)難度。Photon Server 服務(wù)器、Unity3D 客戶端和MYSQL數(shù)據(jù)庫三者的交互模型,如圖10所示。
圖10 Photon Server服務(wù)器、MYSQL數(shù)據(jù)庫和客戶端交互模型Fig.10 Photon Server,MYSQL Database and Client Interaction Model
通過在Unity3D 創(chuàng)建空物體(PhotonEngine),調(diào)用Awake 方法,將其設(shè)置為單例模式,管理所有與服務(wù)器、數(shù)據(jù)庫的交互。具體代碼如下:
public static PhotonEngine Instance;
void Awake()
{
if(Instance==null)
{
Instance=this;
DontDestroyOnLoad(this.gameObject);
}
else i(fInstance!=this)
{
Destroy(this.gameObject);return;
}
}
客戶端通過peer.Connec(t“127.0.0.1:UDP端口號”,“服務(wù)器項(xiàng)目號”)連接服務(wù)器端,利用Peer.OpCustom方法向服務(wù)器端發(fā)起請求,服務(wù)器端通過OnOperationRequest方法處理客戶端的請求,并利用SendOperationResponse 方法響應(yīng)客戶端請求。通過Nhibernate工具映射MYSQL數(shù)據(jù)庫,將Nhibernate連接數(shù)據(jù)庫功能集成至服務(wù)器端。最后為保證peer一直在處理與服務(wù)器的連接,在update 中添加peer.Service()方法,通過該方法,peer持續(xù)將隊(duì)列中的請求數(shù)據(jù)序列化發(fā)送給服務(wù)器。
在Photon Server安裝目錄下的deploy文件夾下找到Photon‐Server.config配置文件,創(chuàng)建服務(wù)器新項(xiàng)目,修改UDP協(xié)議,定義服務(wù)器名字、地址和端口號。修改完成后運(yùn)行PhotonControl.exe的文件,然后在電腦右下角小菜單,選擇MyGame項(xiàng)目,選擇Start As application,完成服務(wù)器的啟動(dòng)。具體操作A,如圖11、圖12所示。
圖11 修改UDP協(xié)議Fig.11 Modify UDP Protocol
圖12 啟動(dòng)Photon Server服務(wù)器Fig.12 Start the Photon Server Server
在開啟服務(wù)器后,運(yùn)行虛擬系統(tǒng),在測試虛擬試驗(yàn)平臺能夠滿足與服務(wù)器、數(shù)據(jù)庫對接后,通過Unity3D 中file→build&Run保存并發(fā)布為一個(gè)exe格式運(yùn)行程序和一個(gè)配置文件夾[15]。用戶只需下載這兩個(gè)文件,打開運(yùn)行程序即可啟動(dòng)虛擬試驗(yàn)平臺。
通過將虛擬現(xiàn)實(shí)技術(shù)與激光熔覆工藝相融合,基于虛擬現(xiàn)實(shí)引擎Unity3D 開發(fā)了一款激光熔覆虛擬試驗(yàn)平臺。利用該平臺學(xué)生可以獨(dú)立完成激光熔覆試驗(yàn)的預(yù)習(xí)準(zhǔn)備工作,初步掌握激光熔覆試驗(yàn)操作的流程。
在這種沉浸性強(qiáng)的虛擬試驗(yàn)中,學(xué)生將更加主動(dòng)學(xué)習(xí)激光熔覆實(shí)驗(yàn)課程知識。同時(shí)在該平臺的幫助下,教師也可以更加輕松地完成試驗(yàn)教學(xué)內(nèi)容。實(shí)踐表明,該試驗(yàn)平臺在教學(xué)過程中尤其是模擬教學(xué)起到了較好的作用,可以滿足激光熔覆試驗(yàn)課程的教學(xué)要求。