李皓杰,李 鋼,丁浩杰,陳子恒,賈家和,李子興,周之翔
(南京工程學(xué)院,南京 211167)
目前,機械裝配類虛擬實驗多以汽車、發(fā)動機、葉輪等載體,多借助爆炸圖、立體動畫以及圖文介紹等表達結(jié)構(gòu)關(guān)系和標(biāo)準拆裝要領(lǐng)。而機械類相關(guān)沉浸式體驗虛擬過程、多路徑裝配的研究較少。焦祥等[1]利用Solidworks、3Ds Max 等軟件實現(xiàn)了場景模型和夾具原件模型的構(gòu)建。成功將裝配素材導(dǎo)入到Unity3D平臺中,實現(xiàn)了夾具拆裝實訓(xùn)的虛擬仿真。丁毓峰[2]利用Unity3D 的虛擬場景搭建和Web開發(fā)技術(shù),實現(xiàn)了Web 網(wǎng)頁和Unity3D 軟件的交互。陳晨等[3]利用VR 技術(shù)和Make Real3D軟件構(gòu)思了一種新的設(shè)計模式。獨創(chuàng)性地提出了使用動態(tài)捕捉與仿真交互的想法,合理地證明了虛擬仿真技術(shù)的不受時空限制的優(yōu)越性。杜來紅等[4]根據(jù)企業(yè)里的實際生產(chǎn)情況,利用HumanCAD 設(shè)計了虛擬裝配環(huán)境。在對分配閥的裝配過程進行典型案例分析的過程中,證明了在虛擬環(huán)境下進行裝配可以準確發(fā)現(xiàn)問題,并且后續(xù)可以以此提出解決措施,大大減少相似錯誤的發(fā)生率。成建群等[5]通過研究Unity3D 引擎的架構(gòu),研發(fā)了一種輕量化服務(wù)器。體現(xiàn)了虛擬仿真系統(tǒng)所具有的良好的開發(fā)前景,較好地滿足了數(shù)據(jù)庫與互聯(lián)網(wǎng)網(wǎng)頁開發(fā)的需求。
通過以上的綜述可以看出,應(yīng)用虛擬實驗平臺對工程機械裝配的開發(fā)很少涉及,尤其是高校與企業(yè)迫切需要這一方面?zhèn)鹘y(tǒng)教學(xué)模式的改革。另外,對裝載機零件建模的優(yōu)化設(shè)計以及平臺的開發(fā)還很少有實際性的研究。
UI 設(shè)計是一門高深的學(xué)問,本文所展示的UI 設(shè)計是在Unity3D 環(huán)境下開發(fā)設(shè)計出的實驗操作功能界面。本著簡潔大方的設(shè)計理念,通過canvas實現(xiàn)多個按鈕的設(shè)計,包括預(yù)期拆除、裝配的功能按鈕,也包括為了方便實驗而設(shè)計的重置與返回主視角按鈕,同時不忘預(yù)留退出按鈕的位置。報錯界面的設(shè)計也是簡約美觀,醒目的彈框報錯文本與返回主界面的按鈕,更使得操作流暢,富有人性化。字體的選擇,大小的設(shè)置都是經(jīng)過反復(fù)推敲與測試,按鈕的功能不僅與預(yù)期功能相契合,也符合簡約大方的設(shè)計理念。
在智能制造領(lǐng)域大熱的今天,數(shù)據(jù)庫技術(shù)逐漸嶄露頭角。本文所設(shè)計的虛擬仿真實驗系統(tǒng)也在該方面進行了少量的研究。主要運用的技術(shù)軟件有Tomcat、Eclipse、Mysql 等,主要設(shè)計的方向是對Unity3D 所生成的WebGL 文件進行二次開發(fā),主要目標(biāo)是實現(xiàn)簡單服務(wù)器的搭建、網(wǎng)站式登錄界面的設(shè)計與登錄信息數(shù)據(jù)庫的連接。
本次虛擬仿真系統(tǒng)功能的實現(xiàn),主要使用的是Unity3D 軟件。在版本上選擇的是Unity 2017.3.1f1,因2019版本后的Unity3D軟件,許多默認的素材包和腳本功能需要自行下載,而一些方便快捷的素材在2019 版本后的使用中,往往要進行版本的自適應(yīng),代碼和導(dǎo)出exe文件時容易出現(xiàn)報錯的現(xiàn)象。
本次虛擬仿真系統(tǒng)的主要功能:實現(xiàn)主傳動裝配體的拆裝功能,實現(xiàn)裝、拆操作時視角的自由切換,實現(xiàn)鼠標(biāo)懸停顯示零件名的功能等。
本次針對零件的虛擬拆裝,選用了Unity3D 的Dotween 插件,往transform 屬性方向編寫代碼來實現(xiàn)功能。通過transform拓展方法里的position 程序段,可以巧妙地預(yù)設(shè)零件的初始位置和末位置。程序設(shè)置后,使用順序語句,對各個零件進行0~21 的設(shè)定,通過鼠標(biāo)點擊事件實現(xiàn)拆、裝動作的開始。另一方面,Dotween 插件也能實現(xiàn)Camera 的視角移動,不僅可以調(diào)整屏幕視角的寬高比,也可以改變相機進切面、遠切面的值,可以按照屏幕百分比計算顯示的范圍。并且在后續(xù)切換主視角的開發(fā)中Dowteen插件的運動曲線的設(shè)置也起了一定的作用。
將FBX 格式下的文件拖入Unity3D 操作界面下的Assets 文件夾下,為了方便操作,在Assets 文件下新建Scprits 文件夾預(yù)存寫好的組成代碼,同時在Game 文件下添加一個Cube,將主傳動FBX 格式的文件拖入Cube中,同時取消勾選“Mesh Renderer”使其消隱。此時調(diào)整好主攝像機和放零件的Cube 的位置關(guān)系,以確保主畫面中能夠完整顯示主傳動零件。記錄此時Inspector 功能框下的transform 坐標(biāo),之后再預(yù)設(shè)好該零件的末位置。在Scprits文件夾中將組成代碼直接拖入該零件的Inspector 功能框下,此時即可掛上First Pos 的坐標(biāo)與Second Pos 的坐標(biāo),即為零件拆裝前后的兩個坐標(biāo)。
在第一個零件組成代碼下應(yīng)該輸入0,聲明為第一個拆裝的零件。以此類推22 個零件,組成代碼都應(yīng)該掛好兩個坐標(biāo)與0~21 的排序。后期為了實現(xiàn)不同零件的區(qū)別展示,此時可以創(chuàng)建素材球,不同的素材球?qū)Ⅲw現(xiàn)不同的外觀色彩顯示。最重要的是,為了實現(xiàn)點擊不同的零件觸發(fā)不同的零件的操作指令,需要在每一個零件的Inspector 功能框下通過“Add Component”增加碰撞事件,即增加“Mesh Collider”功能。
本文交互界面框架的設(shè)計主要實現(xiàn)原理是通過在Game界面下右鍵后添加UI,應(yīng)當(dāng)注意的是按鈕的排布不應(yīng)該超過整個畫布的設(shè)置,而畫布大小的設(shè)置應(yīng)當(dāng)先去Game界面下在分辨率一欄中修改,本文設(shè)置為目前較常用的1 920×1 080格式。而之所以在鼠標(biāo)懸停顯示零件名稱功能和報錯功能的實現(xiàn)中,著重強調(diào)按鈕功能的設(shè)計,也是因為在實現(xiàn)文字顯示和報錯功能時,離不開按鈕功能選擇后的前置環(huán)境??梢哉f在設(shè)計時是層層嵌套、環(huán)環(huán)相扣的。在對整個Canvas掛腳本的時候,會用到設(shè)置好的按鈕為目標(biāo),也會用到0~21排序的主傳動零件,更會用到一開始便設(shè)計好的主相機的位置。在添加報錯UI時,為了使其達到觸發(fā)顯示,應(yīng)該取消勾選其的顯示性,并在其子列表下添加文本于關(guān)閉報錯按鈕于關(guān)閉報錯按鈕的文本。當(dāng)鼠標(biāo)點擊順序與預(yù)設(shè)的0~21序號順序不同時,就會觸發(fā)報錯UI的運行,彈出報錯對話框。
而另一功能顯示零件名稱,本文是通過預(yù)設(shè)體Prefab 實現(xiàn),進行預(yù)設(shè)時可以輸入任意零件名,合理設(shè)置字體大小與格式后,返回Word 文件,通過“Add Component”功能添加“Image”,選擇”Source Image”,導(dǎo)入找到的顯示文字的文本框圖片資源,合理設(shè)置文本框大小、透明度等功能。最后在將預(yù)設(shè)好的Word Follow 腳本拖入其“Inspector”界面,控制好顯示物體名稱功能的偏移量等設(shè)置。
Unity3D 軟件高仿真性的一個主要原因便是其強大的相機功能。對于本文的第一人稱視角實現(xiàn)主傳動零件的拆裝,視角的全方位移動與自由地拉近拉遠,極大程度地影響著虛擬環(huán)境的視覺體驗,本文不僅在最初導(dǎo)入FBX文件的時候就考慮到了Cube 與主相機的位置關(guān)系,同時將文件放入Cube 中也是為了通過Cube 的旋轉(zhuǎn)和位置屬性,去實現(xiàn)主相機的旋轉(zhuǎn)和拉近拉遠。本文的鼠標(biāo)控制視角的自由移動代碼便是由此而生,掛在了Main Camera下,作用的Target便是一開始設(shè)置的Cube。
整個實驗的外部環(huán)境的設(shè)計,使用的是skybox功能。天空盒的資源可以從網(wǎng)絡(luò)上進行下載,下載完成后通過點擊“assets”-“importpackage”-“skyboxes”即可導(dǎo)入虛擬環(huán)境。注意有些skybox導(dǎo)入后仍要手動修改圖片的順序才能正常使用。
本文的界面設(shè)計實現(xiàn)了在Unity環(huán)境下通過按鈕控制多個界面切換,其主要思路是設(shè)計認知與實驗操作兩個模塊。認知模塊包含主傳動拆裝的目的,主傳動結(jié)構(gòu)介紹和虛擬拆裝的順序介紹3個子界面,界面與界面之間的切換通過“返回”按鈕實現(xiàn)。實驗操作模塊鏈接上一章所做的虛擬裝配環(huán)境。每個子二級界面各自擁有獨立界面,擁有一個返回認知模塊主界面的按鈕。在實際編程之前,列好每一個界面的功能和其返回按鈕對應(yīng)的界面關(guān)系,可以較好的理清楚各個界面直接的跳轉(zhuǎn)關(guān)系,這樣既方便在Unity中進行代碼的設(shè)計,又能起到檢查整個界面框架的完整性的功能。
本次界面設(shè)計共需要制作5 張界面,即:主界面、實驗理論模塊界面、主傳動拆裝實驗?zāi)康慕缑?、主傳動結(jié)構(gòu)介紹界面和虛擬拆裝順序介紹界面。認清各個界面的跳轉(zhuǎn)關(guān)系后,即可開始素材的準備以及界面按鈕的設(shè)計規(guī)劃。
在通過if 判斷語句實現(xiàn)實現(xiàn)按需顯示界面之后,需要對5個界面進行邏輯設(shè)計,基于Unity Engine.Scene Management 控件,實現(xiàn)從主界面上“虛擬拆裝實驗?zāi)K”按鈕導(dǎo)向上一章的Unity 虛擬拆裝環(huán)境,實現(xiàn)從Unity 虛擬拆裝環(huán)境下的“退出”按鈕返回主界面。
在實現(xiàn)了各個模塊與對應(yīng)界面的邏輯切換后,便是對各個界面的詳細內(nèi)容進行設(shè)計。鑒于Unity3D 中強大的UI模塊,撇去按鈕模塊,本文的界面設(shè)計還采用了text 和image 模塊。其中text 模塊實現(xiàn)的是簡單的文字顯示功能,包括所顯示文字的字體、字號、格式、顏色等。而image 模塊則是背景圖片功能的選擇,在將原素材導(dǎo)入Unity 項目之后,需要將其更改為“Sprite(2D and UI)”才可以使用。
當(dāng)點擊上一章所發(fā)布的index.html 后,將直接進入實驗界面。而對于一個實驗系統(tǒng)而言,仍缺少適當(dāng)?shù)挠脩舻卿浥c注冊功能,尚未實現(xiàn)與數(shù)據(jù)庫連接的功能,更不用說記錄一些基本的登錄用戶信息,這樣的實驗系統(tǒng)是不完善的。為此,本文通過使用Eclipse 軟件,進一步補充了該部分的功能。具體的開發(fā)流程如下:首先,配置適當(dāng)版本的JDK,本文使用的是version11;其次,配置Web 服務(wù)器,本文使用的是Tomcat9;最后,在Eclipse 中完成整個網(wǎng)頁界面的開發(fā),本文使用的Eclipse版本為Eclipse2020-12-R。
在進行JDK配置前,應(yīng)安裝好所需要的適宜版本的JDK 文件。JDK 文件的具體配置方法如下:打開控制面板—系統(tǒng)—高級系統(tǒng)設(shè)置—環(huán)境變量—系統(tǒng)變量—新建,在變量名中輸入“JAVA_HOME”,在變量值中輸入下載JDK 文件的地址,之后點擊確定即可。調(diào)試可以通過在命令程序符中輸入java -version進行,JDK已經(jīng)配置完畢。
同樣地,在進行Web服務(wù)器配置前,應(yīng)該先安裝好適當(dāng)版本的Tomcat文件。安裝完成后打開Bin 文件夾中的Startup 文件即可獲得端口,本文獲取的端口為7878。配置成功后,在瀏覽器中輸入localhost:7788,服務(wù)器搭建完成。
由于本次網(wǎng)頁的設(shè)計,主要是想對從Unity3D 平臺發(fā)布出來的WebGL網(wǎng)頁進行二次開發(fā),所以需要Eclipse版本符合web項目開發(fā)的要求,本文選取的是Eclipse2020-12-R的版本。
啟動后,在電腦上新建一個命名為simmis 的Workplace,之后點擊launch 進入開發(fā)界面。在File 中新建一個Dynamic Web Project,命名為testsumilateMIS,version 選擇2.5,Target runtime 選擇對應(yīng)的Tomcatv9.0。至此web 工程項目便有了雛形,之后便需要不斷地在Webcontent文件下進行頁面的開發(fā)設(shè)計。首先先新建一個命名為index 的首頁jsp file,注意應(yīng)將字符集改為utf-8。之后即可在Body 中進行首頁的開發(fā)設(shè)計。本文將首頁分為4 個部分,分別是頭部(header)、菜單欄(menu)、展示區(qū)(show)與頁腳(footer)。為了避免index 命名重復(fù),將第六章生成的Web 文件更名為“show”,同時將3個文件統(tǒng)一導(dǎo)入Webcontent 文件下。之后對header.jsp、menu.jsp 與footer.jsp 進行開發(fā)設(shè)計,達到首頁上頭部顯示歡迎來到仿真系統(tǒng)平臺,菜單欄上顯示仿真系統(tǒng)|用戶登錄|用戶注冊,展示區(qū)顯示Unity3D 導(dǎo)出的html 文件,頁腳處顯示版權(quán)的功能。在show.html中可以通過更改title的方法,更改右下角顯示的字符串,完成index界面設(shè)計。
完成了index 界面的設(shè)計后,應(yīng)該對該界面上的菜單欄顯示的功能按鈕進行設(shè)計,此時在考慮登錄功能的開發(fā)前,應(yīng)該先進行虛擬仿真系統(tǒng)數(shù)據(jù)庫的建立,之后再進行登錄與注冊功能的腳本開發(fā)。本文采用的數(shù)據(jù)庫為userinfo表,選用的MySQL版本為8.0。數(shù)據(jù)庫建立完成后,通過在Java Resources 文件下創(chuàng)建多個工具包與庫,逐步分層實現(xiàn)網(wǎng)站的注冊與登錄功能。
基于廣大機械專業(yè)對裝載機拆裝學(xué)習(xí)與實訓(xùn)的實際需求,本文對裝載機上主傳動部分進行了一定程度地虛擬拆裝?;赨nity3D 平臺,對裝載機主傳動部分進行了虛擬仿真系統(tǒng)的開發(fā),實現(xiàn)了裝載機主傳動虛擬拆裝操作、實現(xiàn)了鼠標(biāo)自由控制視角的旋轉(zhuǎn)和距離、實現(xiàn)了鼠標(biāo)懸停顯示零件名的功能、實現(xiàn)了拆裝順序設(shè)計與報錯功能、實現(xiàn)了拆裝過程中主視角的返回與隨時重置拆裝操作的功能。基于Eclipse 平臺對數(shù)據(jù)庫進行了有效連接,實現(xiàn)了實驗系統(tǒng)應(yīng)該具備的用戶注冊與登錄功能。該實驗系統(tǒng)有助于增強機械專業(yè)的教學(xué)質(zhì)量,提高教學(xué)效率,能讓操作者更好地掌握主傳動拆裝時的技術(shù)要點與結(jié)構(gòu)原理。