韓瑞凱, 池建斌
(石家莊鐵道大學(xué) 機(jī)械工程學(xué)院,河北 石家莊 050043)
虛擬實(shí)驗(yàn)是以計(jì)算機(jī)為控制中心,利用軟件技術(shù)構(gòu)建系統(tǒng)的邏輯結(jié)構(gòu)模型,基于模塊化和層次化的設(shè)計(jì)思想,采用軟硬件結(jié)合的方式,協(xié)調(diào)相關(guān)硬件和設(shè)備形成的虛擬實(shí)驗(yàn)系統(tǒng)[1]。虛擬實(shí)驗(yàn)按照應(yīng)用形式分為桌面式和沉浸式。傳統(tǒng)實(shí)驗(yàn)主要借助專業(yè)硬件設(shè)備實(shí)現(xiàn),實(shí)驗(yàn)效率低,靈活性差,受時(shí)間和空間的限制。虛擬實(shí)驗(yàn)的實(shí)驗(yàn)設(shè)備和實(shí)驗(yàn)場(chǎng)景是數(shù)字的和虛擬的,方便擴(kuò)展與維護(hù),內(nèi)容和形式更加靈活。隨著移動(dòng)設(shè)備性能的提高和Android及IOS等操作系統(tǒng)的普及,手機(jī)、平板電腦等移動(dòng)設(shè)備因其便捷性和靈活性逐漸成為重要的信息交流平臺(tái)。在移動(dòng)設(shè)備上運(yùn)行的凸輪機(jī)構(gòu)虛擬實(shí)驗(yàn)進(jìn)一步打破了空間和時(shí)間對(duì)實(shí)驗(yàn)的限制,用戶可以隨時(shí)隨地進(jìn)行實(shí)驗(yàn),面對(duì)面交流,分享實(shí)驗(yàn)結(jié)果和實(shí)驗(yàn)過(guò)程。
凸輪機(jī)構(gòu)虛擬實(shí)驗(yàn)系統(tǒng)主要用于凸輪機(jī)構(gòu)實(shí)驗(yàn)驗(yàn)證和實(shí)驗(yàn)教學(xué),目前主要使用CAD軟件和動(dòng)力學(xué)仿真軟件開(kāi)發(fā),使用平臺(tái)主要為PC平臺(tái)。使用Unity3D開(kāi)發(fā)虛擬實(shí)驗(yàn)臺(tái)可以發(fā)布到PC平臺(tái)和移動(dòng)平臺(tái)上使用。因?yàn)橛?jì)算機(jī)的性能較高,計(jì)算精度高,可以運(yùn)行要求相對(duì)復(fù)雜的實(shí)驗(yàn)。而移動(dòng)平臺(tái)凸輪虛擬實(shí)驗(yàn)不受時(shí)空的限制,可以隨時(shí)隨地進(jìn)行實(shí)驗(yàn),展示實(shí)驗(yàn)過(guò)程,分享實(shí)驗(yàn)結(jié)果。結(jié)合二者的優(yōu)勢(shì),一個(gè)虛擬實(shí)驗(yàn)臺(tái)有計(jì)算機(jī)和移動(dòng)平臺(tái)兩個(gè)版本,功能類似但是各有側(cè)重。
凸輪機(jī)構(gòu)虛擬實(shí)驗(yàn)主要為桌面式,包括虛擬實(shí)驗(yàn)構(gòu)件,交互界面,虛擬實(shí)驗(yàn)場(chǎng)景等。虛擬實(shí)驗(yàn)構(gòu)件包括凸輪,從動(dòng)件,機(jī)架和其他構(gòu)件。主要功能包括凸輪廓線設(shè)計(jì),凸輪運(yùn)動(dòng)仿真和凸輪機(jī)構(gòu)設(shè)計(jì)及運(yùn)動(dòng)仿真。目前,構(gòu)建凸輪機(jī)構(gòu)虛擬實(shí)驗(yàn)使用的工具主要有CAD軟件的二次開(kāi)發(fā)和動(dòng)力學(xué)仿真軟件等。
CAD軟件和動(dòng)力學(xué)仿真軟件具有較為完善的圖形編輯功能,建模功能和仿真功能,通過(guò)對(duì)其進(jìn)行二次開(kāi)發(fā)可以實(shí)現(xiàn)自定義的功能。如穆立茂等人使用CAXA二次開(kāi)發(fā)功能開(kāi)發(fā)出了直動(dòng)從動(dòng)件盤(pán)形凸輪廓線設(shè)計(jì)虛擬實(shí)驗(yàn)[2]。實(shí)驗(yàn)系統(tǒng)可以演示凸輪廓線設(shè)計(jì)過(guò)程和繪制從動(dòng)件運(yùn)動(dòng)規(guī)律。劉善林等人借助Solidworks二次開(kāi)發(fā)功能開(kāi)發(fā)出了凸輪廓線的精確設(shè)計(jì)和運(yùn)動(dòng)仿真系統(tǒng)[3]。范云霄等人使用ADAMS建立凸輪虛擬樣機(jī)。根據(jù)凸輪理論尺寸計(jì)算出凸輪廓線曲線,輸入到ADAMS中生成凸輪模型,然后使用ADAMS的自動(dòng)修改功能對(duì)廓線進(jìn)行修改,減少失真[4]。但是使用CAD軟件和動(dòng)力學(xué)軟件構(gòu)建虛擬實(shí)驗(yàn),需要用戶掌握相應(yīng)的軟件,操作過(guò)程復(fù)雜,擴(kuò)展性和可移植性差。
____使用虛擬現(xiàn)實(shí)工具構(gòu)建的凸輪機(jī)構(gòu)虛擬實(shí)驗(yàn)系統(tǒng)有更好的交互性和沉浸感,可以獲得較為真實(shí)的實(shí)驗(yàn)過(guò)程,其組成如圖1。虛擬現(xiàn)實(shí)工具主要包括Java3D,X3D和Unity3D等。高校使用虛擬現(xiàn)實(shí)工具構(gòu)建了不同學(xué)科領(lǐng)域的虛擬實(shí)驗(yàn)。不僅解決了高校中實(shí)驗(yàn)設(shè)備和場(chǎng)地緊張問(wèn)題,而且可以使學(xué)生盡快接觸到價(jià)格昂貴或者前沿的實(shí)驗(yàn)設(shè)備。如合肥工業(yè)大學(xué)開(kāi)發(fā)出了機(jī)械基礎(chǔ)虛擬實(shí)驗(yàn)軟件,加強(qiáng)了學(xué)生對(duì)問(wèn)題的認(rèn)識(shí)和理解[5]。王榮芝等人利用Java3D和3DMAX研究了虛擬實(shí)驗(yàn)元件的建模和與可視化[6]。陳敏等人使用X3D實(shí)現(xiàn)了網(wǎng)絡(luò)分布式機(jī)械創(chuàng)新設(shè)計(jì)虛擬實(shí)驗(yàn)系統(tǒng),用戶可以利用網(wǎng)絡(luò)與其他用戶交流[7]。Unity3D目前主要應(yīng)用于游戲、場(chǎng)景漫游、虛擬培訓(xùn)、工業(yè)仿真等領(lǐng)域,可以進(jìn)行場(chǎng)景漫游,構(gòu)建虛擬場(chǎng)景和實(shí)現(xiàn)交互[8-10]。使用虛擬現(xiàn)實(shí)工具構(gòu)建的虛擬實(shí)驗(yàn)效果比較真實(shí),而且用戶不需要掌握專業(yè)CAD軟件和仿真軟件即可進(jìn)行凸輪設(shè)計(jì)與運(yùn)動(dòng)仿真,擴(kuò)展性和靈活性高。
圖1 凸輪機(jī)構(gòu)虛擬實(shí)驗(yàn)臺(tái)組成
凸輪機(jī)構(gòu)實(shí)驗(yàn)主要涉及凸輪廓線設(shè)計(jì)、凸輪運(yùn)動(dòng)仿真和凸輪機(jī)構(gòu)設(shè)計(jì)及其運(yùn)動(dòng)仿真等。凸輪廓線設(shè)計(jì)是指根據(jù)運(yùn)動(dòng)曲線設(shè)計(jì)凸輪廓線,基本原理是“反轉(zhuǎn)法”,包括作圖法和解析法。傳統(tǒng)作圖法簡(jiǎn)單直觀但是精度不高。解析法通過(guò)構(gòu)建數(shù)學(xué)模型計(jì)算得到廓線方程,精度高,需要大量運(yùn)算。虛擬實(shí)驗(yàn)中結(jié)合兩種方法,從運(yùn)動(dòng)曲線中讀取點(diǎn),通過(guò)數(shù)學(xué)模型計(jì)算得到廓線點(diǎn)[11]。凸輪運(yùn)動(dòng)仿真包含獲取從動(dòng)件運(yùn)動(dòng)曲線和獲取凸輪相關(guān)參數(shù)的功能。
使用Unity3D開(kāi)凸輪機(jī)構(gòu)虛擬實(shí)驗(yàn)系統(tǒng),涉及虛擬實(shí)驗(yàn)設(shè)備的建模、物理引擎、交互界面、凸輪廓線設(shè)計(jì)、凸輪機(jī)構(gòu)運(yùn)動(dòng)仿真等,包括設(shè)計(jì)運(yùn)動(dòng)曲線、生成平面凸輪實(shí)體、界面布局、機(jī)構(gòu)組裝等技術(shù)。
凸輪輪廓廓線設(shè)計(jì)的依據(jù)是從動(dòng)件運(yùn)動(dòng)曲線,從動(dòng)件運(yùn)動(dòng)曲線用于描述從動(dòng)件在各個(gè)階段的運(yùn)動(dòng)狀態(tài),包括各個(gè)階段的運(yùn)動(dòng)初始狀態(tài)和運(yùn)動(dòng)規(guī)律。運(yùn)動(dòng)曲線具體通過(guò)位移時(shí)間曲線,速度時(shí)間曲線,加速度時(shí)間曲線描述運(yùn)動(dòng)。
文獻(xiàn)[12]介紹了使用7段加速度曲線作為通用運(yùn)動(dòng)曲線,通過(guò)修改各段曲線的時(shí)間區(qū)間和最大(最小)加速度即可生成不同運(yùn)動(dòng)規(guī)律的運(yùn)動(dòng)曲線[12]。借助通用運(yùn)動(dòng)曲線可以生成不同類型的運(yùn)動(dòng)規(guī)律,作為實(shí)驗(yàn)系統(tǒng)內(nèi)置的曲線類型提供給用戶,但是實(shí)際應(yīng)用中用戶希望自定義運(yùn)動(dòng)曲線。解決方法是允許用戶輸入曲線方程,由曲線方程生成運(yùn)動(dòng)曲線。
凸輪機(jī)構(gòu)每個(gè)區(qū)間內(nèi)的位移曲線一般是單調(diào)連續(xù)的,曲線表達(dá)式由數(shù)字、常量、變量、運(yùn)算符、數(shù)字分組符號(hào)等組成,運(yùn)算符的優(yōu)先級(jí)和操作符數(shù)如表1所示。用戶輸入的表達(dá)式屬于字符類型,需要將字符型表達(dá)式轉(zhuǎn)化為可讀的表達(dá)式。
表1 表達(dá)式運(yùn)算
表達(dá)式實(shí)質(zhì)是變量x到變量y的映射關(guān)系,x與y一一對(duì)應(yīng),變量x是一系列離散值,得到的變量y也是一系列離散值。讀取表達(dá)式基本思想是按照優(yōu)先級(jí)逐步計(jì)算表達(dá)式y(tǒng)值,具體過(guò)程如圖2所示。
圖2 讀取表達(dá)式
(1)將字符型表達(dá)式中的x值替換為給定值。
(2)檢測(cè)表達(dá)式中是否存在括號(hào)。如存在則提取括號(hào)內(nèi)表達(dá)式并記錄為子表達(dá)式,回到步驟(1),按照讀取表達(dá)式過(guò)程計(jì)算該子表達(dá)式值。通過(guò)此步驟,表達(dá)式中括號(hào)內(nèi)的表達(dá)式轉(zhuǎn)化為常值。
(3)檢測(cè)表達(dá)式中是否存在字符串”sin”,”cos”,”tan”,”cot”,若存在,則獲取該字符串附近的數(shù)字字符,記錄為子表達(dá)式,計(jì)算該子表達(dá)式的值。通過(guò)此步驟,表達(dá)式中三角函數(shù)運(yùn)算轉(zhuǎn)化為常值
(4)檢測(cè)表達(dá)式中是否存在字符’^’,若存在,則獲取字符’^’附近的數(shù)字字符,記錄為子表達(dá)式,計(jì)算該子表達(dá)式的值。通過(guò)此步驟,表達(dá)中的乘方和開(kāi)方運(yùn)算轉(zhuǎn)化為常值。
(5)至此,表達(dá)式中僅有加減法運(yùn)算。按照字符”+”和”-”分隔表達(dá)式為若干變量,相加得到最終結(jié)果。
設(shè)計(jì)凸輪廓線的過(guò)程主要是設(shè)計(jì)運(yùn)動(dòng)曲線的過(guò)程。設(shè)計(jì)運(yùn)動(dòng)曲線的步驟是:①確定運(yùn)動(dòng)區(qū)間和每個(gè)區(qū)間的初始條件。②確定每個(gè)運(yùn)動(dòng)區(qū)間內(nèi)的運(yùn)動(dòng)規(guī)律。用戶既可以使用預(yù)設(shè)的運(yùn)動(dòng)規(guī)律,也可以輸入表達(dá)式自定義運(yùn)動(dòng)規(guī)律。通過(guò)此方法,用戶可以快速地設(shè)計(jì)符合要求的運(yùn)動(dòng)曲線。
從動(dòng)件運(yùn)動(dòng)曲線由若干離散點(diǎn)組成,與凸輪廓線點(diǎn)一一對(duì)應(yīng)。根據(jù)從動(dòng)件運(yùn)動(dòng)曲線點(diǎn)計(jì)算得到凸輪廓線上的點(diǎn)。從運(yùn)動(dòng)曲線上選取的點(diǎn)越多,生成的凸輪模型就越精細(xì),但是過(guò)多的點(diǎn)會(huì)影響程序的執(zhí)行速度。因此需要在保證模型精細(xì)程度前提下,選取最少點(diǎn)。
平面凸輪一般由三個(gè)面組成,工作面和兩個(gè)非工作面。工作面需要滿足工程需要,網(wǎng)格面相對(duì)較多,而非工作面使用較少的三角面。具體過(guò)程是:
(1)從從動(dòng)件運(yùn)動(dòng)曲線上選取離散點(diǎn)。運(yùn)動(dòng)曲線是由不同區(qū)間的曲線組成,每段曲線的區(qū)間大小不一樣,運(yùn)動(dòng)規(guī)律也不一樣。為了減少模型的面數(shù),應(yīng)該根據(jù)每段曲線的區(qū)間大小確定每段曲線應(yīng)該選取的點(diǎn)數(shù)。
(2)根據(jù)運(yùn)動(dòng)曲線點(diǎn)集合和凸輪厚度計(jì)算凸輪廓線點(diǎn)集合。
(3)由凸輪廓線點(diǎn)生成凸輪網(wǎng)格模型。構(gòu)造網(wǎng)格模型需要指定構(gòu)造網(wǎng)格用到的點(diǎn),面法線,點(diǎn)構(gòu)成的三角面等。Mesh.vertices()函數(shù)功能是為模型指定構(gòu)造網(wǎng)格用到的所有點(diǎn)。點(diǎn)按照列舉的順序依次用0、1、2、3……代表。平面凸輪的工作面由兩組數(shù)組點(diǎn)生成,非工作面由一組數(shù)組點(diǎn)和中心點(diǎn)生成。所以,構(gòu)造平面凸輪網(wǎng)格需要4組凸輪廓線點(diǎn)集合和兩個(gè)中心點(diǎn)。Mesh.triangles()函數(shù)的功能是使用Mesh.vertices中包含的點(diǎn)為每個(gè)網(wǎng)格三角面指定頂點(diǎn),頂點(diǎn)的列舉順序決定面法線的方向。如圖3所示。
(4)將點(diǎn)、三角面等參數(shù)賦給凸輪模型的MeshFilter組件,得到凸輪網(wǎng)格模型。
通過(guò)解析法得到凸輪廓線點(diǎn)集合可以精確地將運(yùn)動(dòng)曲線映射為凸輪廓線,生成精細(xì)的凸輪。用戶根據(jù)需要選擇凸輪模型的精細(xì)程度以滿足不同要求。
圖3 凸輪網(wǎng)格的生成
虛擬實(shí)驗(yàn)系統(tǒng)應(yīng)該有友好的交互界面,友好的交互界面保證了用戶與虛擬實(shí)驗(yàn)系統(tǒng)信息交流的流暢性和便捷性。使用Unity3D開(kāi)發(fā)的凸輪機(jī)構(gòu)虛擬實(shí)驗(yàn)臺(tái)可以跨平臺(tái)使用,提高了實(shí)驗(yàn)臺(tái)的便捷性,但帶來(lái)的問(wèn)題是不同分辨率的平臺(tái)可能引起界面布局的錯(cuò)位。為了使虛擬實(shí)驗(yàn)系統(tǒng)有友好的交互界面,交互界面上的菜單、按鈕等控件應(yīng)該自動(dòng)定位到設(shè)定的位置并有合理的比例大小。具體包括控件的絕對(duì)位置,相對(duì)位置和比例大小。
界面控件包括按鈕、列表、菜單、輸入框等,按照形式可以分為固定控件和浮動(dòng)控件,按照功能分為顯示控件和操作控件。根據(jù)移動(dòng)設(shè)備操作習(xí)慣,操作控件應(yīng)該在屏幕下側(cè)和左右側(cè),上側(cè)主要是提示控件。操作控件組以屏幕左下側(cè)或者右下側(cè)為基準(zhǔn)點(diǎn),調(diào)整組內(nèi)控件相對(duì)位置設(shè)計(jì)布局,提示控件組類似。屏幕坐標(biāo)系的原點(diǎn)在屏幕中心,通過(guò)Screen.width和Screen.height獲取屏幕長(zhǎng)寬分辨率大小,屏幕左下側(cè)位置為(-Screen.width/2,-Screen.height/2)。使用浮動(dòng)控件組將類似且不常用的控件集合起來(lái),默認(rèn)狀態(tài)下不顯示。這樣整個(gè)界面布局比較整潔,方便交互。
控件組的比例大小使用縮放因數(shù)S控制,縮放因數(shù)由兩個(gè)參數(shù)S1,S2確定。分別為:
S1=當(dāng)前分辨率的長(zhǎng)度/預(yù)先設(shè)定分辨率的長(zhǎng)度;
S2=當(dāng)前分辨率的寬度/預(yù)先設(shè)定分辨率的寬度。
當(dāng)實(shí)驗(yàn)臺(tái)運(yùn)行的屏幕分辨率改變時(shí),縮放因數(shù)也會(huì)改變。避免了界面控件過(guò)大或者過(guò)小的情況。
機(jī)構(gòu)組裝是用戶控制虛擬實(shí)驗(yàn)系統(tǒng)中的實(shí)驗(yàn)構(gòu)件到達(dá)指定位置,賦予其運(yùn)動(dòng)副,組成機(jī)構(gòu)。主要包括構(gòu)件的平移,旋轉(zhuǎn)和運(yùn)動(dòng)副的添加等。平移和旋轉(zhuǎn)用于調(diào)節(jié)構(gòu)件的相對(duì)位置和相對(duì)姿態(tài)。運(yùn)動(dòng)副主要包括旋轉(zhuǎn)副,移動(dòng)副,滾動(dòng)副等,主要應(yīng)用于從動(dòng)件。凸輪機(jī)構(gòu)中主要包括凸輪、從動(dòng)件、機(jī)架和其他構(gòu)件等。
在使用過(guò)程中,用戶需要調(diào)整構(gòu)件姿態(tài)和移動(dòng)構(gòu)件。調(diào)整構(gòu)件姿態(tài)通過(guò)Transform.Rotate()函數(shù)實(shí)現(xiàn)。移動(dòng)構(gòu)件通過(guò)實(shí)時(shí)監(jiān)測(cè)鼠標(biāo)或觸點(diǎn)位置來(lái)改變構(gòu)件位置。
凸輪一般用作主動(dòng)件,做旋轉(zhuǎn)運(yùn)動(dòng)和直線往返運(yùn)動(dòng)。主動(dòng)件旋轉(zhuǎn)使用Transform.Rotate()函數(shù)實(shí)現(xiàn)。在FixedUpdate()函數(shù)中使用Transform.Rotate()函數(shù),表示在特定時(shí)間內(nèi)模型旋轉(zhuǎn)特定角度。通過(guò)控制每段時(shí)間內(nèi)的旋轉(zhuǎn)角度控制凸輪的旋轉(zhuǎn)方向和旋轉(zhuǎn)速度。直線往返運(yùn)動(dòng)使用Transform.Translate()實(shí)現(xiàn),具體過(guò)程是:實(shí)時(shí)檢測(cè)并記錄凸輪位移值,位移大于特定值后反向運(yùn)動(dòng),且凸輪位移值歸零。Transform.Rotate和Transform.Translate均是通過(guò)控制構(gòu)件的世界坐標(biāo)值實(shí)現(xiàn)凸輪運(yùn)動(dòng),其他力和碰撞體不會(huì)對(duì)主動(dòng)件產(chǎn)生影響,保證主動(dòng)件運(yùn)動(dòng)的流暢性。
Rigidbody組件和MeshCollider組件使模型擁有質(zhì)量屬性和碰撞屬性,質(zhì)量和碰撞體是構(gòu)件之間發(fā)生相互作用的前提條件,具體通過(guò)運(yùn)動(dòng)副與其他構(gòu)件發(fā)生作用。機(jī)構(gòu)運(yùn)動(dòng)副主要包括移動(dòng)副,旋轉(zhuǎn)副,滾動(dòng)副。移動(dòng)副實(shí)現(xiàn)方法是設(shè)定構(gòu)件的Rigidbody組件中的Constrains屬性值,Constrains屬性提供限定模型在特定軸向移動(dòng)和旋轉(zhuǎn)的功能。移動(dòng)副參數(shù)包括限定軸的方向和移動(dòng)副構(gòu)件。旋轉(zhuǎn)副實(shí)現(xiàn)方法是給模型添加HingeJoint組件。HingeJoint組件可以使構(gòu)件繞其他構(gòu)件或者場(chǎng)景(即機(jī)架)的特定點(diǎn)旋轉(zhuǎn)。旋轉(zhuǎn)副參數(shù)包括旋轉(zhuǎn)軸位置,旋轉(zhuǎn)軸方向和旋轉(zhuǎn)構(gòu)件。
機(jī)構(gòu)組裝步驟為:(1)用戶添加和調(diào)整機(jī)構(gòu)所需構(gòu)件至特定位置,此時(shí)構(gòu)件的重力不起作用。(2)為構(gòu)件添加運(yùn)動(dòng)副并設(shè)置運(yùn)動(dòng)副參數(shù),設(shè)定后開(kāi)啟構(gòu)件重力,從動(dòng)件在重力作用下與凸輪接觸。(3)在已經(jīng)添加的構(gòu)件的基礎(chǔ)上添加其他構(gòu)件。實(shí)驗(yàn)系統(tǒng)提供基本或者常見(jiàn)的構(gòu)件庫(kù),同樣允許由用戶導(dǎo)入自己設(shè)計(jì)或者創(chuàng)建的模型。用戶導(dǎo)入的模型一般是網(wǎng)格模型,加入質(zhì)量,碰撞體和運(yùn)動(dòng)副后,可以進(jìn)行運(yùn)動(dòng)仿真。因此,虛擬實(shí)驗(yàn)系統(tǒng)不局限于預(yù)設(shè)的凸輪機(jī)構(gòu),允許用戶自定義凸輪機(jī)構(gòu),有助于提高用戶創(chuàng)新設(shè)計(jì)能力。
根據(jù)凸輪機(jī)構(gòu)相關(guān)理論和虛擬實(shí)驗(yàn)系統(tǒng)設(shè)計(jì),使用Unity3D工具開(kāi)發(fā)凸輪機(jī)構(gòu)移動(dòng)虛擬實(shí)驗(yàn)系統(tǒng)。該系統(tǒng)能夠在Android系統(tǒng)下運(yùn)行,版本最低要求為Android4.2。凸輪機(jī)構(gòu)移動(dòng)虛擬實(shí)驗(yàn)系統(tǒng)包括三個(gè)模塊:凸輪廓線設(shè)計(jì)模塊、凸輪運(yùn)動(dòng)仿真模塊和凸輪機(jī)構(gòu)設(shè)計(jì)模塊。凸輪廓線設(shè)計(jì)模塊和凸輪運(yùn)動(dòng)仿真模塊主要功能是演示凸輪機(jī)構(gòu)相關(guān)理論知識(shí),凸輪機(jī)構(gòu)設(shè)計(jì)模塊主要是培養(yǎng)用戶創(chuàng)新設(shè)計(jì)能力。
凸輪廓線設(shè)計(jì)模塊主要是根據(jù)運(yùn)動(dòng)要求分段設(shè)計(jì)運(yùn)動(dòng)曲線,然后根據(jù)運(yùn)動(dòng)曲線生成凸輪。運(yùn)動(dòng)曲線橫坐標(biāo)為凸輪旋轉(zhuǎn)角度,與時(shí)間成比正。該模塊包含功能如下:分段描述運(yùn)動(dòng)曲線,生成凸輪廓線及凸輪模型實(shí)體,數(shù)據(jù)讀取與導(dǎo)出。
分段描述運(yùn)動(dòng)曲線包括曲線分段數(shù)目、每段曲線初始和終止點(diǎn)的坐標(biāo)值、每段運(yùn)動(dòng)曲線的運(yùn)動(dòng)規(guī)律。分段數(shù)目通過(guò)位置點(diǎn)的添加和刪除確定,每個(gè)位置點(diǎn)的坐標(biāo)可以隨時(shí)改變。運(yùn)動(dòng)規(guī)律包括系統(tǒng)內(nèi)置運(yùn)動(dòng)規(guī)律和自定義運(yùn)動(dòng)規(guī)律。系統(tǒng)提供的運(yùn)動(dòng)規(guī)律包括均速運(yùn)動(dòng)、等加速度運(yùn)動(dòng)、簡(jiǎn)諧運(yùn)動(dòng)、擺線運(yùn)動(dòng)和修正梯形運(yùn)動(dòng)。凸輪模型根據(jù)運(yùn)動(dòng)曲線和相關(guān)凸輪基本參數(shù)生成。如圖4(a)所示,此運(yùn)動(dòng)曲線分為4段,各段運(yùn)動(dòng)規(guī)律分別為等加速等減速運(yùn)動(dòng)、靜止、勻速運(yùn)動(dòng)和靜止,對(duì)應(yīng)的凸輪在其右側(cè)顯示。用戶可以觀察每段運(yùn)動(dòng)曲線的無(wú)量綱位移曲線,無(wú)量綱速度曲線和無(wú)量綱加速度曲線。如圖4(b)所示。
圖4 凸輪機(jī)構(gòu)仿真模塊
凸輪運(yùn)動(dòng)仿真模塊是對(duì)凸輪機(jī)構(gòu)進(jìn)行運(yùn)動(dòng)仿真,以運(yùn)動(dòng)曲線的形式表達(dá)從動(dòng)件運(yùn)動(dòng)狀態(tài),識(shí)別凸輪相關(guān)基本參數(shù)。具體功能包括導(dǎo)入STL格式的凸輪模型,選擇從動(dòng)件,設(shè)置偏距,識(shí)別凸輪基圓半徑,行程,最大速度,繪制從動(dòng)件運(yùn)動(dòng)曲線。如圖5所示。
凸輪機(jī)構(gòu)設(shè)計(jì)模塊是用戶自定義凸輪機(jī)構(gòu)的主動(dòng)件、從動(dòng)件和運(yùn)動(dòng)副。功能包括編輯構(gòu)件,添加運(yùn)動(dòng)副,組裝機(jī)構(gòu),觀察構(gòu)件運(yùn)動(dòng)和機(jī)構(gòu)可視化框圖展示。系統(tǒng)不僅向用戶提供構(gòu)件庫(kù)和運(yùn)動(dòng)副庫(kù),而且允許用戶導(dǎo)入外部模型以實(shí)現(xiàn)構(gòu)件的自定義,這樣既提高了機(jī)構(gòu)豐富性,又有助于培養(yǎng)用戶創(chuàng)新設(shè)計(jì)能力。構(gòu)件庫(kù)包括平面盤(pán)形凸輪,直動(dòng)凸輪,圓柱凸輪,圓柱共軛凸輪等。運(yùn)動(dòng)副庫(kù)包括移動(dòng)副,轉(zhuǎn)動(dòng)副,平面高副和圓柱套筒副。如圖6所示。
圖5 凸輪機(jī)構(gòu)仿真模塊界面
圖6 凸輪機(jī)構(gòu)設(shè)計(jì)模塊
根據(jù)相關(guān)關(guān)鍵技術(shù),實(shí)現(xiàn)了凸輪機(jī)構(gòu)虛擬實(shí)驗(yàn)仿真系統(tǒng),使用系統(tǒng)時(shí),用戶根據(jù)運(yùn)動(dòng)要求設(shè)計(jì)凸輪運(yùn)動(dòng)曲線,系統(tǒng)根據(jù)運(yùn)動(dòng)曲線計(jì)算得到凸輪輪廓廓線,通過(guò)凸輪廓線點(diǎn)構(gòu)造三角網(wǎng)格,生成凸輪實(shí)體。完成凸輪實(shí)體后放入自定義的機(jī)構(gòu)中進(jìn)行運(yùn)動(dòng)仿真,此時(shí)可觀察特定構(gòu)件的運(yùn)動(dòng)情況。用戶通過(guò)交互界面控制虛擬實(shí)驗(yàn)系統(tǒng),實(shí)時(shí)動(dòng)態(tài)地編輯凸輪機(jī)構(gòu)參數(shù),達(dá)到設(shè)計(jì)凸輪和進(jìn)行運(yùn)動(dòng)仿真的目的。使用Unity3D開(kāi)發(fā)的凸輪機(jī)構(gòu)虛擬實(shí)驗(yàn)系統(tǒng)可以跨平臺(tái)使用,而且可以自適應(yīng)不同分辨率的屏幕。
[1]朱敏.虛擬實(shí)驗(yàn)與教學(xué)應(yīng)用研究[D].上海:華東師范大學(xué),2006.
[2]穆立茂,黃海英,王克印,等.直動(dòng)從動(dòng)件盤(pán)形凸輪輪廓線設(shè)計(jì)虛擬實(shí)驗(yàn)的實(shí)現(xiàn)[J].設(shè)計(jì)與研究,2011(4):13-16.
[3]劉善林,胡鵬浩,王會(huì)生.基于SolidWorks二次開(kāi)發(fā)的凸輪廓線精確設(shè)計(jì)及運(yùn)動(dòng)仿真[J].機(jī)械傳動(dòng),2008(5):46-49.
[4]范云霄,尤振環(huán).基于 ADAMS的凸輪設(shè)計(jì)[J].煤礦機(jī)械,2011,32(2):35-37.
[5]陳小紅.虛擬實(shí)驗(yàn)室的研究現(xiàn)狀及其發(fā)展趨勢(shì)[J].中國(guó)現(xiàn)代教育技術(shù)裝備,2010(17):107-109.
[6]王榮芝,楊雪.基于Java3D的網(wǎng)絡(luò)虛擬實(shí)驗(yàn)的開(kāi)發(fā)[J].實(shí)驗(yàn)室研究與探索,2006,25(8):933-936.
[7]陳敏,伍勝男,劉曉秋.基于 X3D實(shí)現(xiàn)機(jī)械創(chuàng)新設(shè)計(jì)虛擬實(shí)驗(yàn)系統(tǒng)的構(gòu)建[J].機(jī)械設(shè)計(jì),2008,25(7):13-16.
[8]干建松.基于 Unity3d的室內(nèi)漫游的關(guān)鍵技術(shù)研究[J].鹽城工學(xué)院學(xué)報(bào),2011,24(4):56-59.
[9]陳曉青,王少偉.基于 Unity的虛擬現(xiàn)實(shí)技術(shù)在教育中的應(yīng)用[J].技術(shù)應(yīng)用,2011,12:76-78.
[10]孫恒宇,尤超,王洋.基于 Unity3D的數(shù)字站區(qū)管理應(yīng)用系統(tǒng)優(yōu)化研究[J].技術(shù)應(yīng)用,2012,20(1):103-106.
[11]張婉云,陸穎榮,梁冬青,等.圖解法與解析法設(shè)計(jì)凸輪機(jī)構(gòu)的精度對(duì)比[J].機(jī)械與電氣,2011(10):57-58.
[12]劉昌祺,牧野洋,曹西京.凸輪機(jī)構(gòu)設(shè)計(jì)[M].北京:機(jī)械工業(yè)出版社,2005.