馮立艷, 關(guān)鐵成, 何世偉, 李宗巖
(華北理工大學(xué) 機(jī)械工程學(xué)院,河北 唐山 063210 )
隨著高校教育體制的深入改革,招生人數(shù)的不斷擴(kuò)大,實(shí)驗(yàn)室的設(shè)備及規(guī)模已經(jīng)不能滿足日益增長的教學(xué)需要[1]。伴隨計(jì)算機(jī)技術(shù)、信息技術(shù)、網(wǎng)絡(luò)技術(shù)、虛擬現(xiàn)實(shí)技術(shù)的發(fā)展,虛擬實(shí)驗(yàn)受到了廣泛重視,同時(shí)網(wǎng)絡(luò)教育作為一種新興的教育形式得到了快速發(fā)展[2-3]。因機(jī)械設(shè)備內(nèi)部結(jié)構(gòu)復(fù)雜,反復(fù)拆裝易造成零件損壞、人員受傷等,故開發(fā)機(jī)械學(xué)科的虛擬實(shí)驗(yàn)系統(tǒng)有著廣闊的市場前景[4-5]。
國內(nèi)有些學(xué)者對機(jī)械學(xué)科的虛擬實(shí)驗(yàn)平臺(tái)做了研究與開發(fā)。吳青鳳等[6]開發(fā)了基于VB的減速器虛擬拆裝平臺(tái),彌補(bǔ)了傳統(tǒng)減速器拆裝實(shí)驗(yàn)的不足,但該平臺(tái)拆裝演示部分,依靠調(diào)用SolidWorks保存的AVI格式視頻,學(xué)生無法任意控制拆裝演示的速度和觀察角度。王世超[7]提出了在 HTML5 標(biāo)準(zhǔn)下建立水輪機(jī)虛擬裝配系統(tǒng),但該系統(tǒng)的拆裝約束存在一些缺陷。鄔宗鵬[8]基于Virtools 軟件開發(fā)減速器虛擬拆裝實(shí)驗(yàn)教學(xué)平臺(tái),但拆裝操作性較差。
本文以傳統(tǒng)的真實(shí)實(shí)驗(yàn)為依據(jù),將三維建模軟件SolidWorks、編程語言C#、虛擬現(xiàn)實(shí)開發(fā)引擎Unity3D有機(jī)集成,采用虛擬現(xiàn)實(shí)(Virtual Reality,VR)和增強(qiáng)現(xiàn)實(shí)(Augmented Reality,AR)技術(shù),開發(fā)了形象逼真、便于操作的機(jī)械基礎(chǔ)虛擬實(shí)驗(yàn)平臺(tái),達(dá)到了虛實(shí)結(jié)合、以虛促實(shí)的預(yù)期目的,徹底解決了實(shí)驗(yàn)設(shè)備短缺,實(shí)驗(yàn)場地和實(shí)驗(yàn)時(shí)間受限等問題。
圖1為機(jī)械基礎(chǔ)虛擬實(shí)驗(yàn)平臺(tái)的總體框架及開發(fā)流程。由于Unity3D軟件平臺(tái)不具備構(gòu)建復(fù)雜幾何模型的功能,故采用三維建模工具 SolidWorks進(jìn)行幾何建模,然后將幾何模型導(dǎo)入 3D Max中,利用3D Max進(jìn)行貼圖、烘培和材質(zhì)渲染,構(gòu)建逼真感強(qiáng)的模型,將模型保存成 FBX 格式導(dǎo)入到 Unity 3D 的資源文件夾 Assets中。在Unity3D虛擬現(xiàn)實(shí)平臺(tái)中,需要根據(jù)交互和運(yùn)動(dòng)控制的需求,構(gòu)建虛擬模型的層次數(shù)據(jù)結(jié)構(gòu),對每個(gè)模型的父子關(guān)系進(jìn)行設(shè)定,構(gòu)建復(fù)合邏輯的模型樹層次關(guān)系。實(shí)驗(yàn)的具體操作和場景需通過C#編程來實(shí)現(xiàn)。
圖1虛擬實(shí)驗(yàn)系統(tǒng)的整體框架圖
目前,該平臺(tái)包括減速器(一級圓柱齒輪減速器、二級展開式圓柱齒輪減速器、二級同軸式圓柱齒輪減速器、蝸輪蝸桿減速器、圓錐圓柱齒輪減速器共5種)的虛擬裝拆、發(fā)動(dòng)機(jī)的虛擬裝拆、平面連桿機(jī)構(gòu)的創(chuàng)意設(shè)計(jì)及虛擬仿真等。每個(gè)虛擬實(shí)驗(yàn)均分為認(rèn)知和實(shí)戰(zhàn)兩部分。認(rèn)知部分用于引導(dǎo)學(xué)生自主學(xué)習(xí),以掌握實(shí)驗(yàn)的具體操作方法,為實(shí)戰(zhàn)做準(zhǔn)備。包括實(shí)驗(yàn)?zāi)康?、注意事?xiàng)、實(shí)驗(yàn)指導(dǎo)等。
當(dāng)今比較流行的虛擬仿真教學(xué)開發(fā)軟件主要有Virtools、Quest3D、LabVIEW、Eon和Unity3D等。雖然前4種也能開發(fā)虛擬仿真實(shí)驗(yàn)平臺(tái),但只能發(fā)布成單機(jī)版或網(wǎng)頁版,而且維護(hù)難度較大,應(yīng)用范圍受到極大限制[9]。而Unity3D技術(shù)則使用面向?qū)ο蠹夹g(shù),相對簡單的就能夠開發(fā)出虛擬仿真教學(xué)系統(tǒng),同時(shí)該開發(fā)引擎還支持Windows、Mac、Wii、iPhone、Android、Web網(wǎng)頁等平臺(tái)[10]。開發(fā)者可以任意選擇所需要發(fā)布的平臺(tái),從而實(shí)現(xiàn)只需開發(fā)一次,就可實(shí)現(xiàn)在單機(jī)、網(wǎng)頁、移動(dòng)終端及其他平臺(tái)同時(shí)使用的要求[11]。
Unity3D支持的編程語言有JavaScript、C#和Boo。用戶可以根據(jù)需要選擇編程語言,腳本之間可以相互調(diào)用[12]。JavaScript是用戶端腳本語言,相對Java語言比較簡單,編程效率較高;C#是一種面向?qū)ο蟮摹⑦\(yùn)行于.NET Framework之上的高級程序設(shè)計(jì)語言,符合人的思維習(xí)慣,適合編寫復(fù)雜程序[13-14]。綜合考慮,本課題采用C#編程。
Unity3D幾乎支持所有主流的3D模型文件格式,例如.FBX、.OBJ等格式,在3D Max、 Maya等軟件中制作并導(dǎo)出的模型文件,添加到項(xiàng)目資源文件夾中,Unity3D會(huì)自動(dòng)刷新資源列表,模型就會(huì)出現(xiàn)在Assets面板中并供使用[15]。
二級斜齒圓柱減速器主要包括3類零件,即軸類(高速軸、中間軸、低速軸等)、盤類(齒輪、套筒、封油盤等)和箱體類(箱蓋、箱座)[16]。采用SolidWorks,使用拉伸、旋轉(zhuǎn)、挖切和打孔等諸多造型方法構(gòu)建了準(zhǔn)確的各零部件三維模型,其主要部件的三維模型及編號如表1和圖2所示。
拆卸是裝配的反過程,無論是裝還是拆,都必須遵循一定的順序,就如同必須先裝上軸承端蓋,才能擰上其固定螺釘一樣。減速器的裝配順序如圖3所示,分別為高速軸組件、中速軸組件、低速軸組件、箱蓋組件、箱座組件和總體裝配的路徑規(guī)劃圖。圖中,P表示零部件,A是組件,e是用字符串表示的裝配條件。
為了讓初學(xué)者提前了解減速器的拆裝順序,需要在虛擬實(shí)驗(yàn)平臺(tái)中實(shí)現(xiàn)自動(dòng)拆裝的功能,而Unity 3D引擎外部插件iTween 能方便地實(shí)現(xiàn)該功能。它主要是運(yùn)用數(shù)值插值的原理,處理模型從起始點(diǎn)到結(jié)束點(diǎn)之間的運(yùn)動(dòng)軌跡。如圖4(a)所示,為自動(dòng)拆裝場景,通過按鈕控制減速器的裝配與拆卸,通過攝像機(jī)的位置和旋轉(zhuǎn)角度實(shí)現(xiàn)多角度觀察自動(dòng)拆裝的過程。
表1 零部件名稱及編號
(a)高速軸(b)中速軸(c)低速軸(d)總裝圖
圖2 減速器的三維模型
(d) 低速軸
(f) 總體裝配
圖3減速器的裝配路徑
下行為用于實(shí)現(xiàn)物體移動(dòng)的代碼:
iTween.MoveTo(GameObject,iTween.Hash("position", Vector3, "time", float1, "delay", float2));
這里,GameObject—執(zhí)行命令的對象;Vector3—對象運(yùn)動(dòng)的目標(biāo)位置;float1—從原來位置移動(dòng)到目標(biāo)位置的時(shí)間;float2—開始移動(dòng)時(shí)的延遲時(shí)間。
虛擬場景主要分為虛擬裝配和虛擬拆卸兩個(gè)場景,拆卸邏輯與約束是裝配的逆過程。故只介紹虛擬裝配場景設(shè)置的技術(shù)關(guān)鍵。
在裝配場景中進(jìn)行手動(dòng)裝配時(shí),除了基準(zhǔn)零件(圖3中,每個(gè)拆裝路徑圖的第一個(gè)零件為基準(zhǔn)零件,分別是P5、P6、P20、P22、P33和A5)外,其余零件都需隱藏。零部件的安裝位置靠碰撞器控制。如圖4(b)所示,根據(jù)軸上零件的位置,給軸添加a、b、c三個(gè)橢圓碰撞器,左側(cè)的封油盤和軸承被碰撞器a包圍、中間部位的鍵和大齒輪被碰撞器b包圍、右側(cè)的封油盤和軸承被碰撞器c包圍,橢圓的尺寸控制著裝配時(shí)的精準(zhǔn)位置,即只有把待裝配的零部件放在橢圓尺寸以內(nèi)時(shí)才被認(rèn)可。跟隨鼠標(biāo)移動(dòng)的零件,是通過實(shí)例化得到的,如圖4(c)所示。當(dāng)主攝像機(jī)發(fā)出的射線碰到碰撞器上(鼠標(biāo)點(diǎn)擊到碰撞器上),對應(yīng)的零件則從隱藏模式變成顯示模式,跟隨鼠標(biāo)實(shí)例化的零件就此消失。
從主攝像機(jī)發(fā)射出到鼠標(biāo)點(diǎn)擊位置的射線代碼為:
Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);
在場景中,必須使實(shí)例化的零件,能靈活地跟隨鼠標(biāo)在屏幕上移動(dòng)。需要將世界坐標(biāo)轉(zhuǎn)化成屏幕坐標(biāo),采取的辦法是:在sence視圖中添加一個(gè)很小Cube,并將其放到坐標(biāo)為(0,0,0)的位置。其主要代碼為:
screenSpace=Camera.main.WorldToScreenPoint(GameObject.transform.position);
CompPos=Camera.main.ScreenToWorldPoint(newVector3(Input.mousePosition.x,Input.mousePosition.y,screenSpace.z));
這里,screenSpace—屏幕坐標(biāo);CompPos—世界坐標(biāo);GameObject—Cube;
從頭到尾進(jìn)行各個(gè)零部件的虛擬裝配和拆卸,來模擬替代真實(shí)的裝配或拆卸過程。通過虛擬裝拆,不僅觀察設(shè)備的外部形態(tài),更重要的是分析其內(nèi)部結(jié)構(gòu),深入研究其組成和結(jié)構(gòu)特征、配合關(guān)系,思考其設(shè)計(jì)意圖。若拆、裝順序不對,則不能往下進(jìn)行,并彈出錯(cuò)誤警示。
如圖3所示,e1—e35是裝配條件,比如在圖3(f)中,A1裝配完畢,再裝A2需要滿足條件e26,才可裝配成功。每一次的裝配成功都會(huì)為相關(guān)字符串重新賦值,所賦值也恰巧是下一組的裝配條件。保證了裝配實(shí)驗(yàn)的有序操作。
(a)(b)(c)(d)
圖4虛擬實(shí)驗(yàn)場景的功能圖
整個(gè)零件拆裝過程中,菜單欄上方會(huì)有對應(yīng)的二維碼圖片切換,通過增強(qiáng)現(xiàn)實(shí)技術(shù)開發(fā)的手機(jī)APP掃描該二維碼,對應(yīng)的3D零件可在手機(jī)屏幕顯示,可對其任意旋轉(zhuǎn),多角度觀察,如圖4(d)所示。
通過Vuforia官網(wǎng)獲取Vuforia SDK和制作Database,并將其導(dǎo)入U(xiǎn)nity3D中,將Unity3D中的三維零件與對應(yīng)的ImageTarget結(jié)合,即可發(fā)布對應(yīng)的手機(jī)APP,有時(shí)手機(jī)攝像頭掃描圖片的時(shí)候,會(huì)出現(xiàn)攝像頭不能準(zhǔn)確識(shí)別二維碼圖片,需要開發(fā)自動(dòng)對焦攝像頭的腳本文件 ,其腳本的主要代碼如下:
CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO);
因Unity3D可發(fā)布多個(gè)平臺(tái),所以整個(gè)平臺(tái)也可以在手機(jī)上運(yùn)行,解決了學(xué)生異地操作等問題。
把當(dāng)今最流行的VR技術(shù)與AR技術(shù)融入到機(jī)械基礎(chǔ)實(shí)驗(yàn)教學(xué)中,將SolidWorks、C#、Unity3D有機(jī)集成開發(fā)的近于真實(shí)的虛擬實(shí)驗(yàn)系統(tǒng),提高了學(xué)習(xí)興趣和學(xué)習(xí)主動(dòng)性,方便異地學(xué)習(xí)與操作,解決了實(shí)驗(yàn)設(shè)備短缺,實(shí)驗(yàn)場地不足,學(xué)生動(dòng)手操作危險(xiǎn)等限制條件,可實(shí)現(xiàn)資源共享,有力促進(jìn)機(jī)械原理及機(jī)械設(shè)計(jì)的實(shí)驗(yàn)教學(xué)。本文詳細(xì)闡述了開發(fā)過程中遇到的關(guān)鍵問題及解決方法、各種軟件的集成方法等,這些技術(shù)可為開發(fā)虛擬實(shí)驗(yàn)系統(tǒng)的同仁們提供參考。
參考文獻(xiàn)(References):
[1]鄭鑫,張曉潔.虛擬實(shí)驗(yàn)室立體化教學(xué)資源平臺(tái)建設(shè)[J].實(shí)驗(yàn)室研究與探索,2014,33(8):109-111.
[2]孫澄宇,許迪瓊,湯眾.在線虛擬實(shí)驗(yàn)在建筑教育中的技術(shù)應(yīng)用方案討論與效果評估[J].實(shí)驗(yàn)室技術(shù)與管理,2017,34(1):10-15.
[3]羅曉東,尹立孟,王青峽,等.基于虛擬仿真技術(shù)的實(shí)驗(yàn)教學(xué)平臺(tái)設(shè)計(jì)[J].實(shí)驗(yàn)室研究與探索,2016,35(4):104-107.
[4]張青,趙洪利,郭慶,等.航空發(fā)動(dòng)機(jī)虛擬裝配培訓(xùn)實(shí)驗(yàn)平臺(tái)的構(gòu)建與實(shí)現(xiàn)[J].實(shí)驗(yàn)室研究與探索,2016,35(5):97-100.
[5]郭芮,蔣明,鄭劼恒,等.基于Unity3D的加油車虛擬訓(xùn)練系統(tǒng)設(shè)計(jì)[J].機(jī)械設(shè)計(jì),2014,31(3):84-87.
[6]吳青鳳,江帆,李東煒.基于VB的減速器拆裝虛擬實(shí)驗(yàn)系統(tǒng)的開發(fā)[J].實(shí)驗(yàn)室技術(shù)與管理,2014,31(1):104-106.
[7]王世超.基于HTML5的水輪機(jī)虛擬裝配系統(tǒng)研究[J].煤礦機(jī)械,2016,37(3):46-48.
[8]鄔宗鵬.Virtools軟件在開發(fā)減速器虛擬拆裝實(shí)驗(yàn)教學(xué)平臺(tái)中的應(yīng)用[J].銅陵學(xué)院學(xué)報(bào),2015(2):109-110.
[9]趙蔚,段紅.虛擬現(xiàn)實(shí)軟件研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2012,22(2):229-233.
[10]王娜,徐魯雄.基于Unity3D的計(jì)算機(jī)網(wǎng)絡(luò)虛擬實(shí)驗(yàn)室建設(shè)研究[J].實(shí)驗(yàn)室技術(shù)與管理,2016,33(9):242-245.
[11]修春華,孫秀娟,苗坡,等.基于Unity3D的虛擬礦山漫游仿真系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].金屬礦山,2015(4):262-266.
[12]王文潤,王陽萍,雍玖.基于Unity3d的鐵路信號設(shè)備虛擬現(xiàn)實(shí)系統(tǒng)研究[J].鐵道標(biāo)準(zhǔn)設(shè)計(jì),2016,60(8):144-146.
[13]季錚,謝予星,王玥.基于 Unity 3D的虛擬測量實(shí)驗(yàn)系統(tǒng)[J].測繪通報(bào),2016(10):97-100.
[14]吳亞峰,索依娜.Unity5.X3D游戲開發(fā)技術(shù)詳解與典型案例[M].北京:人民郵電出版社,2016.
[15]楊壹斌,李敏,解鴻文. 基于Unity3D 的桌面式虛擬維修訓(xùn)練系統(tǒng)[J].計(jì)算機(jī)應(yīng)用,2016,36(S2):125-128.
[16]馮立艷.機(jī)械設(shè)計(jì)課程設(shè)計(jì)[M].北京:機(jī)械工業(yè)出版社,2016.