針對當前精密壓力表標準裝置檢定教學中存在的理論教學過于抽象、多媒體視頻教學缺少互動、實驗教學設備昂貴的問題,設計了一種精密壓力表標準裝置檢定仿真教學系統(tǒng)。使用3DMAX建模軟件創(chuàng)建精密壓力表標準裝置檢定設備模型’Photoshop軟件處理設備貼圖’AdobeAfterEffects軟件制作教學視頻,然后利用Umty3D虛擬仿真引擎搭建虛擬仿真教學系統(tǒng)。系統(tǒng)包括結(jié)構(gòu)原理展示、視頻動畫教學和虛擬仿真實操三種教學方式,實現(xiàn)了精密壓力表標準裝置檢定仿真教學的功能,交互式設計能夠增加學生的學習熱情和效率,彌補了傳統(tǒng)教學方式的不足。
測試表明,系統(tǒng)具有開發(fā)成本低、沉浸性強和教學效果好的特點。
0.引言
精密壓力表是壓力測量測試、檢測校驗、檢驗檢定等壓力參數(shù)相關(guān)領(lǐng)域中最常用的一種計量標準器。由于受到環(huán)境溫濕度、介質(zhì)氣氛、彈簧管變形等因素的影響,其測量準確度會受到影響,因此必須進行周期性檢定,國家計量檢定規(guī)程JJ494013《彈性元件式精密壓力表和真空表》強制規(guī)定精密壓力表的檢定周期不超過1年。因此,精密壓力表標準裝置檢定方法被列為儀器儀表測試類專業(yè)教學中的重要內(nèi)容。
高校對精密壓力表標準裝置檢定的教學以理論講解為主,輔助以多媒體視頻播放,理論講解抽象難懂,缺乏實際練習的學生很難真正掌握檢定方法。無疑通過購買大量精密壓力表標準裝置供學生實操練習是改善教學效果的有效方式,但是由于該設備價格非常昂貴,因此購買大量設備的方法并不現(xiàn)實。
目前,對精密壓力表標準裝置檢定仿真研究尚處于初級階段。林卓凡研究的計算機檢定記錄數(shù)據(jù)處理程序,節(jié)約了運算時間,提高了運算結(jié)果精確度,是將計算機技術(shù)應用于壓力表檢定的先例,但并未進一步對壓力表的檢定過程進行仿真。還有一種基于VisualBasic的壓力表檢定系統(tǒng),設計了計算機管理系統(tǒng)和數(shù)字式壓力計接口程序,免去了大量原始記錄和證書打印過程中的數(shù)據(jù)輸入工作,但是系統(tǒng)只適用于數(shù)字式壓力計,對于廣泛使用的彈簧式壓力表并不適用。另外還出現(xiàn)了一種基于PLC的壓力表自動檢定系統(tǒng),雖然實現(xiàn)了壓力表檢定全程自動化,但系統(tǒng)硬件結(jié)構(gòu)復雜價格昂貴,因此并未得到廣泛使用。
針對以上問題,對仿真教學系統(tǒng)設計關(guān)鍵技術(shù)進行了研究,設計了仿真加壓過程的IK算法,壓力表結(jié)構(gòu)拆解算法和光線投射碰撞檢測方法,開發(fā)了一種交互性強、經(jīng)濟實用、操作方便的精密壓力表標準裝置檢定仿真教學系統(tǒng)。系統(tǒng)由結(jié)構(gòu)原理展示、視頻動畫教學和虛擬仿真實操三部分組成。結(jié)構(gòu)原理展示部分可以使學員對設備的外形結(jié)構(gòu)有一定的感性認識,視頻動畫教學是通過三維視頻對檢定過程的詳細講解,虛擬仿真實操是對學習效果的實際練習和測試。
1.系統(tǒng)總體設計
1.1功能需求分析
精密壓力表標準裝置檢定仿真教學系統(tǒng)主要應用于輔助高校儀器儀表相關(guān)專業(yè)的教學,利用虛擬仿真技術(shù)形象逼真的特點降低相關(guān)知識的理論深度,使抽象理論講解變成可視化、可交互的學習過程。系統(tǒng)需要實現(xiàn)對臺式氣壓泵、臺式水壓泵和精密壓力表三個設備的仿真教學功能,如圖1所示,以臺式氣壓泵為例每一個設備都需要實現(xiàn)以下幾個功能:
(1)結(jié)構(gòu)原理展示。實現(xiàn)臺式氣壓泵的三維模型展示,對實驗室環(huán)境的仿真,以及鼠標對模型的縮放和旋轉(zhuǎn)控制。設定產(chǎn)品概述、技術(shù)參數(shù)介紹、音頻講解和更多操作4個側(cè)邊彈窗,通過按鈕控制彈窗顯示和隱藏。其中技術(shù)參數(shù)應包括臺式氣壓泵使用環(huán)境、壓力范圍、調(diào)節(jié)細度、傳壓介質(zhì)和壓力連接等。更多操作部分需要實現(xiàn)各組成部分名稱顯示和隱藏,以及除去外殼部分的內(nèi)部結(jié)構(gòu)展示和返回主操作界面的功能。
(2)視頻動畫教學。視頻動畫教學的目的是使學生對臺式氣壓泵的結(jié)構(gòu)原理有一定的認識之后,進一步對其技術(shù)規(guī)格和操作規(guī)范的三維動畫講解。包括標準表的清零、單位轉(zhuǎn)換、被檢表的外觀檢查和零位檢查,以及對示值誤差、回程誤差、輕敲位移檢定方法的和收尾工作的三維視頻講解。
(3)虛擬仿真實操。虛擬仿真實操部分為了使學生進行實際操作練習,以及學習效果進行測試,系統(tǒng)要提供操作步驟提示,并根據(jù)學生操作對錯決定是否進入下一步操作。需要實現(xiàn)標準表和被檢表表盤的近距離展示,以減小讀數(shù)誤差,增加檢定的準確性。此外,學生應能夠?qū)⒆x數(shù)填入檢定記錄表格中,生成檢定記錄文檔,并實現(xiàn)Word轉(zhuǎn)pdf格式的功能。
1.2技術(shù)路線
系統(tǒng)開發(fā)分為前期準備工作和虛擬場景開發(fā),如圖2所示。
在前期的準備工作中,首先運用3Dmax軟件建立臺式氣壓泵、臺式水壓泵、標準表、被檢表,實驗室和實驗臺的三維模型,模型在達到一定精細度的基礎(chǔ)上面片數(shù)應盡量少,特別是像臺式水壓泵這樣結(jié)構(gòu)復雜的模型,減少面片數(shù)的方法包括刪除看不到的面和減少面的分段數(shù),以減輕硬件負擔,從而減少應用程序啟動時場景加載的時間M。同時米用Photoshop圖片處理軟件制作模型的材質(zhì)貼圖、Unity3D中的材質(zhì)紋理貼圖、特效貼圖和UI貼圖等,制作所需大小和分辨率的圖片,保存為.png格式文件,并存放在Unity3D的資產(chǎn)文件夾中。并利用AdobeAfterEffects圖形視頻處理軟件制作模型動畫視頻,包括往快接頭上安裝標準表和被檢表的視頻、輕敲被檢表的視頻、氣壓泵和水壓泵的操作步驟講解視頻等。最后,為視頻加上配音和片頭導出為.mov格式文件,放入Unity3D的資產(chǎn)文件夾中,在Unity3D系統(tǒng)開發(fā)過程中使用。
虛擬場景開發(fā)包括主程序框架設計、模型交互特性和動畫設計、角色控制、按鈕觸發(fā)事件設計、視頻播放和相機切換控制以及數(shù)據(jù)庫連接。主程序框架設計將仿真系統(tǒng)分為臺式氣壓泵、臺式水壓泵、標準表、被檢表、實驗室、和主界面六個場景,系統(tǒng)運行時首先打開主界面場景,點擊主界面上的不同按鈕會觸發(fā)相應的事件并加載對應的場景。為了實現(xiàn)結(jié)構(gòu)原理展示/視頻動畫教學和虛擬仿真實操三部分功能,模型交互特性和動畫設計部分為每一個場景創(chuàng)建操作對象,這些包括3Dmax中創(chuàng)建的模型和Unity3D自帶的簡單模型,接下來為對象添加材質(zhì)、碰撞器、剛體、動畫控制器、音頻偵聽器和腳本等組件,這些組件會用到前期制作的圖片和視頻等資源,其中腳本組件是系統(tǒng)開發(fā)中的重要內(nèi)容,系統(tǒng)中采用C#語言編寫腳本,實現(xiàn)視頻播放控制、相機切換、模型交互和動畫播放暫停控制以及連接數(shù)據(jù)庫等功能。建立標準表數(shù)據(jù)庫、被檢表數(shù)據(jù)庫和檢定誤差記錄數(shù)據(jù)庫,使用SQL訪問數(shù)據(jù)庫,實現(xiàn)數(shù)據(jù)的添加、查詢以及更新,并生成檢定記錄表。
2.仿真關(guān)鍵技術(shù)
加壓過程是一個包括加壓手柄的抬起和放下、加壓手柄連接桿跟隨加壓手柄運動、標準表和被檢表示數(shù)增加等一系列動作,是仿真的關(guān)鍵,針對這一問題提出了基于IK算法的加壓過程仿真方法。為了實現(xiàn)壓力表內(nèi)部結(jié)構(gòu)展示,設計了壓力表內(nèi)部結(jié)構(gòu)拆解算法。實現(xiàn)了基于光線投射碰撞檢測方法對實驗室門打開狀態(tài)控制和實操練習進度的控制。
2.1仿真加壓過程
在壓力表檢定過程中,需要有一個穩(wěn)定的壓力提供源來實現(xiàn)加壓和減壓,本仿真的臺式氣壓泵就是一個采用壓桿式設計的氣體壓力源。如圖3所示,臺式氣壓泵由兩個標準的M20X1.5快接頭、截止閥、加壓手柄、微調(diào)手輪、壓力真空轉(zhuǎn)換閥、卸壓閥組成。左側(cè)快接頭安裝精密壓力表標準裝置,右側(cè)快接頭安裝被檢壓力表,通過按壓加壓手柄實現(xiàn)加壓,微調(diào)手輪實現(xiàn)對壓力的微調(diào),壓力真空轉(zhuǎn)換閥實現(xiàn)對真空表檢定和壓力表檢定的轉(zhuǎn)換,卸壓閥用來降壓,截止閥用來連通和截止氣道。
為了仿真加壓手柄的加壓過程,需要用到反向動力學(InverseKinematics,IK)算法,與之相對應的是正向動力學(ForwardKinematics,F(xiàn)K)算法,首先建立其數(shù)學模型,設加壓手柄為handleO,與加壓手柄相連接的連桿為handle1,handleO與handle1的連結(jié)點為intersection:
publicGameObjecthandleO;publicGameObjecthandle1;publicGameObjectintersection;
在正向動力學中handle1的位置變化會帶動intersection和handleO位置的改變,即用父層級帶動子層級的運動;而在反向動力學中,是通過handleO的位置’反求intersection和handle1的位置變化的,即先確定子層級的位置,然后反求推出n級父層級的位置。算法中將handle0與handle1視為兩個圓circle[0]和circle[1]的圓心,handle0和handle1到intersection的距離分別為兩個圓的半徑:
for(inti=0i
{
circles[i]=newCircle()points[i]=newPoint()
}
circles[0].Radius=Vector3.Distance(handle0.transform.position,intersection.transform.position)
circles[1].Radius=Vector3.Distance(handle1.transform.
position,intersection.transform.position)
circles[0].X=handle0.transform.position.x
circles[0].Y=handle0.transform.position.y
circles[1].X=handle1.transform.position.x
circles[1].Y=handle1.transform.position.y
要實現(xiàn)根據(jù)加壓手柄handle0得位置確定連桿handle1的位置,相當于使handle1得位置和兩個圓的半徑不變,handle0的位置每改變一次,會形成一個新的圓circle[0],通過Circlelntersection類中定義的Insect函數(shù)確定兩個圓的相交情況,如果有一個交點,那么這個交點的位置就是intersection移動后的位置,算法中,point[0]是Insect函數(shù)中求出的交點,通過temp變量臨時記錄交點的位置,然后把它賦值給intersection變量。如果有兩個交點,則其中與handle[0]移動方向一致的那個點代表intersection移動后的位置。
Switch(CircleIntersection.Insect(circles,points))
{手柄
設計算法實現(xiàn)了壓力表內(nèi)部結(jié)構(gòu)的拆解。首先在StateHelper類中聲明bool型變量swtichDisassembly代表是否展示壓力表內(nèi)部結(jié)構(gòu)。初始值為false。當按下內(nèi)部結(jié)構(gòu)按鈕時,swtichDisassembly轉(zhuǎn)變?yōu)閠rue。publicstaticboolswtichDisassembly=false
swtichDisassembly轉(zhuǎn)變?yōu)閠rue時,即PressDisassembly類中的拆解函數(shù)Disassembly中的最外層的if語句條件為真,接著執(zhí)行內(nèi)層的語句,當localX的值設置為真時,物體在1s之內(nèi)沿X軸方向移動到CordinateNum的位置,實現(xiàn)拆解。當再次按下內(nèi)部結(jié)構(gòu)按鈕時,swtichDisassembly轉(zhuǎn)變?yōu)閒alse,此時執(zhí)行else語句,各個拆解部分在1s之內(nèi)還原到原來所在的位置。
控制顯示壓力表內(nèi)部結(jié)構(gòu)的算法如下:
if(StateHelper.swtichDisassembly)
{
if(localX)
{
gameObject.transform.DOLocalMoveX(CordinateNum,1.0f)
}
elseif
case2:
Debug.Log(”兩圓相交,有兩個交點”);
temp.x=(float)points[0].X
temp.y=(float)points[0].Y
temp.z=intersection.transform.position.z
intersection.transform.position=temp
break
}
通過以上算法實現(xiàn)了加壓手柄移動帶動連桿移動的目的。仿真效果如圖4所示,圖(a)和(b)分別表示加壓手柄抬起和放下的狀態(tài),中間為藍色控制條,滑動上面的黑色滑塊可以控制加壓手柄的抬起和放下狀態(tài),以及抬起放下的高度大小。
2.2壓力表結(jié)構(gòu)拆解
精密壓力表由彈簧管、刻度盤、指針、襯圖、玻璃罩和表殼組成,當壓力變化時,彈簧管內(nèi)的齒輪轉(zhuǎn)動,帶動指針的轉(zhuǎn)動,指向刻度盤上的某一刻度。
}
else
{
gameObject.transform.DOLocalMove(originalPostion,1.0f)
}
壓力表拆解前后如圖5。
2.3光線投射碰撞檢測方法
在精密壓力表標準裝置虛擬仿真系統(tǒng)中經(jīng)常需要判斷物體之間是否發(fā)生碰撞,例如學員進入實驗室時,一旦檢測到與門發(fā)生了碰撞就將門打開,進入實驗室之后,當學員與實驗臺發(fā)生碰撞且按下F9鍵之后,就進入虛擬仿真實操過程。Unity3D虛擬仿真引擎提供了三種碰撞檢測方法,角色控制器碰撞檢測/光線投射碰撞檢測和觸發(fā)器碰撞檢測。角色控制器碰撞檢測方法是指當角色控制器和其他物體的碰撞器發(fā)生碰撞時自動調(diào)用OnControllerColliderHit函數(shù),使用該方法的缺點是角色必須離門非常近幾乎貼到門上時門才會打開,使用光線投射碰撞檢測方法就可以避免這一問題。
Physics.Raycast(gameObject.transform,position,gameObject.transform.forward,outhit,2f)
其中g(shù)ameObject.transform.position表示投射光線的初始位置為角色所在位置,gameObject.transform.forward表示光線的投射方向為角色面對的方向,outhit是RaycastHit類型的變量儲存了關(guān)于碰撞的信息,2f表示光線的投射長度為2m,f代表float即浮點型數(shù)據(jù)類型。也就是說當角色面向門且距離在兩米以內(nèi)時門就會自動打開,否則門將關(guān)閉。
3.系統(tǒng)測試
虛擬仿真系統(tǒng)開發(fā)完成之后,以.exe格式文件發(fā)布,雙擊該文件進入系統(tǒng),首先根據(jù)屏幕分辨率選擇窗口大小,然后進入主界面,學員可以選擇學習臺式氣壓泵或者臺式水壓泵或者精密壓力表的結(jié)構(gòu)原理、三維視頻和進行實操練習,結(jié)構(gòu)原理講解和三維視頻學習是掌握實操方法的基礎(chǔ),學生只有認真學習了前兩部分之后才能夠順利進行虛擬實操,在實操練習過程中只有當前步驟操作正確才可以進入下一步的操作,例如臺式氣壓泵檢定壓力表的過程中,只有將標準表和被檢表都安裝在對應接頭上并且關(guān)閉截止閥和卸壓閥時才可以進行加壓操作。而在結(jié)構(gòu)原理部分不僅可以展示設備的外部結(jié)構(gòu)而且可以顯示其內(nèi)部結(jié)構(gòu)組成,臺式水壓泵的外部結(jié)構(gòu)和內(nèi)部結(jié)構(gòu)展示見圖6。
4.結(jié)語
基于Unity3D虛擬仿真技術(shù),結(jié)合3DMAX三維建模軟件以及Photoshop和AdobeAfterEffects軟件開發(fā)的精密壓力表標準裝置檢定仿真教學系統(tǒng),實現(xiàn)了精密壓力表標準裝置檢定仿真教學的功能。該系統(tǒng)解決了傳統(tǒng)教學枯燥乏味無法進行實際操作的問題,又節(jié)約了購買教學儀器的費用。測試表明,學習后學生不僅能理解壓力表檢定的原理,而且可以更快掌握采用臺式氣壓泵和臺式水壓泵檢定壓力表的實際操作步驟,并且激發(fā)學生的學習熱情,提高學習效率。 |