葛 巖, 張曉君, 龐欽存, 孫 艷
(1. 北華大學 計算機科學技術(shù)學院, 吉林 吉林 132000; 2. 吉林大學 管理學院, 吉林 長春 130025; 3. 吉林大學 教育技術(shù)中心, 吉林 長春 130012)
汽車構(gòu)造課程是車輛及機械類專業(yè)的基礎(chǔ)課,而實驗教學是該課程教學體系中的重要環(huán)節(jié)。利用虛擬現(xiàn)實軟件開發(fā)虛擬實驗,將虛擬現(xiàn)實技術(shù)與實驗教學相結(jié)合,開展汽車構(gòu)造實驗課程的建設(shè),能夠解決真實實驗受場地、成本等因素制約的問題[1-2],構(gòu)建更加完善的實踐教學體系[3]。
汽車構(gòu)造課程分為理論教學與實驗教學兩部分。理論教學課程系統(tǒng)地講解發(fā)動機與汽車底盤構(gòu)造和工作原理;實驗教學主要是通過拆裝實驗加深對汽車結(jié)構(gòu)的認識,對發(fā)動機各部分原理進行分析、驗證[4],涉及內(nèi)容廣,且實踐性較強。目前,汽車構(gòu)造實驗教學存在如下問題:
(1) 實驗設(shè)備數(shù)量有限,實驗設(shè)備損耗大。噴油泵是柴油機的重要組成部分,被視為柴油發(fā)動機的“心臟”。在實驗教學環(huán)節(jié),由于實驗室噴油泵設(shè)備數(shù)量有限,一般是以小組為單位進行噴油泵拆裝實驗,難以保證每個學生的實驗總學時。此外,在實驗過程中,學生的錯誤操作易導致實驗設(shè)備的損壞。
(2) 教學中實驗演示比重過大。汽車構(gòu)造課程的教材附帶各部件的結(jié)構(gòu)圖和工作原理圖[5],教師結(jié)合掛圖進行多媒體展示居多[6],設(shè)計性和綜合性實驗偏少[7-8],學生在實驗教學過程中的參與度不夠。
(3) 教學學時數(shù)被縮減,實驗課程組織千篇一律,實驗教學開放程度不高。汽車結(jié)構(gòu)復雜且產(chǎn)品更新?lián)Q代速度快,而實驗教學學時數(shù)不但沒有增加,反而有所減少。汽車構(gòu)造實驗教學基本由3個環(huán)節(jié)構(gòu)成:教師理論講解、拆裝演示及學生分組實驗,但因汽車零部件數(shù)量多,在規(guī)定的時間內(nèi),學生難以掌握正確的拆裝順序與要點[9-10]。
區(qū)別于傳統(tǒng)的實驗教學模式,虛擬裝配實驗采用“教、學、練”[11]相結(jié)合方式。以噴油泵模型為載體,通過鼠標和鍵盤進行人機交互,真實地展現(xiàn)裝配操作時的真實場景。虛擬裝配實驗整體架構(gòu)分為元數(shù)據(jù)層、數(shù)據(jù)層、邏輯層和應用層(見圖1)。
圖1 整體架構(gòu)圖
虛擬裝配實驗的元數(shù)據(jù)層定義了虛擬實驗元數(shù)據(jù)體系的層次結(jié)構(gòu)、內(nèi)容類別與一致性關(guān)系(見圖2)。
圖2 虛擬裝配實驗元數(shù)據(jù)
數(shù)據(jù)層包括場景數(shù)據(jù)和業(yè)務(wù)數(shù)據(jù)。
邏輯層主要規(guī)范業(yè)務(wù)邏輯,包括模型控制、相機控制、動作觸發(fā)等代碼編寫。
應用層針對用戶提供具體應用服務(wù),包括原理介紹、動畫展示、拆卸與組裝、習題測試。
虛擬裝配實驗開發(fā)流程包括前期準備工作和交互模塊開發(fā)(見圖3)兩部分。
(1) 在前期準備工作階段,由開發(fā)人員與專業(yè)教師共同分析教學目標、課程內(nèi)容、學習者特征,按照噴油泵標準結(jié)構(gòu)圖,運用Catia軟件建立分泵、泵體、驅(qū)動軸與輸油泵三維模型,使用3ds Max建立實驗室和實驗臺等場景模型。利用Photoshop制作三維模型的材質(zhì)貼圖與UI貼圖等。利用After Effects軟件制作凸輪軸轉(zhuǎn)動過程、驅(qū)動柱塞過程、出油閥運動與泵油過程的動畫視頻。
(2) 交互模塊的開發(fā)包括主程序框架設(shè)計、界面控制、交互設(shè)計以及反饋設(shè)計。主程序框架設(shè)計包括原理介紹、動畫展示、組裝拆卸、習題測試等模塊。虛擬裝配實驗運行時,首先打開主界面,點擊不同按鈕會觸發(fā)場景切換事件并加載相應的場景。在交互設(shè)計方面,采用C#語言編寫拆卸與組裝代碼;在反饋設(shè)計方面,設(shè)置實驗步驟導航和音效提醒。
圖3 虛擬實驗制作流程圖
(1) 學習者分析。學習者分析是教學設(shè)計的核心工作[12]。要設(shè)計符合學習者需求的虛擬裝配實驗,應該了解學習者的認知能力、學習動機與學習風格等[13]。按照專業(yè)培養(yǎng)方案及教學計劃的安排,該門課程在大學二年級開設(shè)。這時候,學生已經(jīng)學習了“大學計算機基礎(chǔ)”課程,具有一定的網(wǎng)絡(luò)檢索能力,并且已了解汽油機燃油系統(tǒng)與柴油機燃油系統(tǒng)的區(qū)別,以及汽車發(fā)動機的工作原理、總體構(gòu)造、配氣機構(gòu)、汽油機燃油系統(tǒng)等相關(guān)知識,但不熟悉實驗設(shè)備,故應建立精確度較高的三維模型,使之與真實物體相接近[14]。
(2) 學習內(nèi)容分析。該虛擬裝配實驗以史文庫主編、人民交通出版社出版的《汽車構(gòu)造》教材為基礎(chǔ),包括噴油泵的類型、噴油泵的結(jié)構(gòu)與噴油泵的工作原理。噴油泵分為柱塞式噴油泵、噴油泵-噴油器和轉(zhuǎn)子分配式噴油泵3種,本實驗以柱塞式噴油泵的結(jié)構(gòu)與工作原理為主線,確定虛擬裝配實驗的基本結(jié)構(gòu)。
(3) 教學目標分析。根據(jù)布魯姆教學目標分類理論,將教學目標分為識記、理解、應用、分析和綜合5個層次。本課程教學目標為:①識記噴油泵的基本結(jié)構(gòu);②理解噴油泵的工作原理;③學會分析供油時間如何調(diào)整;④通過對實際操作的訓練,使學生掌握發(fā)動機的拆裝、調(diào)整和保養(yǎng)技能。該虛擬裝配實驗“噴油泵的工作原理與裝配”分解為“泵油機構(gòu)的結(jié)構(gòu)與組成”“供油量調(diào)節(jié)機構(gòu)組成”“驅(qū)動機構(gòu)組成”“噴油泵的組裝與拆卸”等4個模塊,每個模塊均能完成一個實驗教學目標。
虛擬裝配模型由裝配工具和虛擬裝配對象組成。裝配工具建模用3ds Max來實現(xiàn),設(shè)置模型軸向與3ds Max世界坐標軸向一致。虛擬裝配對象模型包含裝配層次結(jié)構(gòu)和零件幾何模型。
(1) 虛擬裝配模型的層次結(jié)構(gòu):該實驗使用層次樹描述模型的裝配層次關(guān)系(見圖4),根節(jié)點表示用戶目標裝配體,最底層節(jié)點表示零件,中間層表示子裝配組合體。噴油泵裝配體由分泵、泵體、驅(qū)動軸與輸油泵組成,而它們又由多個組合體所組成,每個組合體由多個零件組成[15]。虛擬裝配模型的層次結(jié)構(gòu)決定了模型命名和腳本開發(fā)中的變量定義。
(2) 零件幾何模型:為了保證實驗對象組件與真實的儀器設(shè)備形態(tài)上相似,使用3D掃描儀對噴油泵模型進行掃描,根據(jù)實物自身屬性來設(shè)置材質(zhì)與貼圖,使用Catia建模,將各部分模型分別導出為Unity3D支持的.fbx格式。
圖4 虛擬裝配層次結(jié)構(gòu)圖
3.3.1 場景切換
虛擬裝配實驗UI界面的風格體現(xiàn)學科特點和科技色彩,包括Logo、色彩、字體與布局等。界面布局采用分區(qū)結(jié)構(gòu),使用Unity3D內(nèi)置的NGUI插件創(chuàng)建1個主界面和12個二級界面(見圖5),并且體現(xiàn)知識和藝術(shù)的統(tǒng)一[16]。
圖5 UI界面整體結(jié)構(gòu)圖
當UI界面開發(fā)完畢后,需為各個子場景添加跳轉(zhuǎn)按鈕及相應語句實現(xiàn)場景切換。場景切換分為2種:跳轉(zhuǎn)到其他界面和系統(tǒng)關(guān)閉按鈕。
(1) 跳轉(zhuǎn)到其他界面。從Unity5.3版本,使用SceneManager類來實現(xiàn)場景切換,需要在文件開頭使用語句using UnityEngine.SceneManagement引入SceneManager類,通過調(diào)用OnClick()函數(shù)對鼠標點擊動作進行監(jiān)控,用SceneManager.LoadScene()實現(xiàn)加載場景。當點擊名為“PrincipleIntroduction”按鈕時,利用SceneManager.LoadScene(“PrincipleIntroduction”),即可跳轉(zhuǎn)到“原理介紹”場景。
(2) 主界面和二級界面均有退出按鈕,二級界面的退出按鈕設(shè)置屬于第一種界面跳轉(zhuǎn)情況,主界面按鈕功能為退出整個虛擬實驗,使用Application.Quit()函數(shù)即可實現(xiàn)。
3.3.2 視頻展示
噴油泵供油過程用肉眼難以觀察。利用Catia建立噴油泵內(nèi)部模型,配合AE軟件制作噴油泵供油過程動畫,可以讓學生對噴油泵供油過程有感性認識。
在Unity3D中,利用MovieTexture類用來播放視頻文件,在視頻文件導入工程的同時,其文件會自動轉(zhuǎn)換為Ogg Theora(OGV)格式。具體操作如下:新建Canvas畫布,添加Raw Image組件;創(chuàng)建MovieTexture類來控制視頻播放,創(chuàng)建AudioSource類用來控制聲音播放,當MovieTexture類中的isPlaying變量值為false時,視頻和聲音都播放,反之,視頻和聲音均停止播放。其核心代碼如下:
publicMovieTexturemovTexture;//視頻紋理
publicRawImage image; //Canvas畫布中的RawImage組件
PublicAudioSource audio; //聲音組件
image.texture = movTexture;
if(!movTexture.isPlaying){
movTexture.Play();
audio.Play();
}
else{
movTexture.Pause();
audio.Pause();
}
3.3.3 控制攝像機
采用第一人稱控制視角、漫游整個實驗,能全方位、立體地觀測零部件,讓學生對使用的工具、零部件有直觀印象。其中Input.GetMouseButton(1)中的“1”表示鼠標右鍵,當點擊鼠標右鍵時,以噴油泵3D模型為中心進行旋轉(zhuǎn)和搖移。核心代碼如下:
if (Input.GetMouseButton(1))//檢測到鼠標右擊
{
cameraHorizontalAngleToPlayer=cameraHorizontalAngleToPlayer-Input.GetAxis(″MouseX″)* rotateYSpeed;//設(shè)定橫向旋轉(zhuǎn)角度
cameraVerticalAngleBySelf=cameraVerticalAngleBySelf-Input.GetAxis(″MouseY″)*rotateSelfXSpeed;//設(shè)定豎直方向旋轉(zhuǎn)角度
}
其中Input.GetMouseButton(2)中的“2”表示鼠標中鍵,當按下鼠標中鍵時,將攝像機Y軸坐標transform.position.y與Y軸方向上的位移增量相加,即可實現(xiàn)對以整個模型為中心的上下平移,其中Input.GetAxis(“Mouse Y”)的返回值為Y軸方向上的位移量,同時乘以Time.deltaTime,即可得到每秒在Y軸方向上的位移增量。具體實現(xiàn)方法如下:
if (Input.GetMouseButton(2))//檢測到點擊鼠標中鍵
{
transform.position=newVector3(transform.position.x, transform.position.y + Input.GetAxis(″Mouse Y″) * Time.deltaTime, transform.position.z);
}
滾動鼠標滾輪能實現(xiàn)當前畫面的放大與縮小,即當Input.GetAxis(″Mouse ScrollWheel″) > 0,且攝像機鏡頭與噴油泵3D模型之間的距離大于0.02 m,攝像機的鏡頭被拉近,攝像機與噴油泵3D模型之間的距離變小;反之,當Input.GetAxis()函數(shù)返回值為負數(shù)時,攝像機的鏡頭被拉遠,攝像機與噴油泵3D模型之間的距離變大,核心代碼如下:
if (Input.GetAxis(″Mouse ScrollWheel″) > 0)
{
if (cameraDistance> 0.02)
{
cameraDistance -= 0.01f;//拉近攝像機
}
}
else if(Input.GetAxis(″Mouse ScrollWheel″) < 0)
{
cameraDistance += 0.01f;//拉遠攝像機
}
3.4.1 裝配工具選擇
虛擬裝配實驗界面分為場景操作區(qū)、零件選擇區(qū)、工具選擇區(qū)、操作提示區(qū)。在工具選擇區(qū),設(shè)置有扳手、鉤子、螺絲刀、鉗子、內(nèi)六角扳手等工具按鈕,可以選擇工具對噴油泵模型的不同部位進行操作。當選擇某一工具(例如扳手)時,SetActive返回值為true,其他工具則處于不能被選擇狀態(tài),如果選擇其他工具,SetActive的返回值將為false。
3.4.2 拆卸與組裝
虛擬裝配對象模型較為復雜,必須按一定的順序拆卸與組裝每個零件。本實驗拆卸順序分為22步,用變量currentOrder保存當前拆卸步驟的序號。利用enum枚舉類型定義當前操作狀態(tài)state,包括拆卸(Disassemble=0)與組裝(Assembly=1);創(chuàng)建名為ADStatement的空物體,在Start()方法中,使用當前狀態(tài)變量currentState=state.Disassemble語句,使其初始狀態(tài)設(shè)為拆卸狀態(tài)。以步驟1為例(見圖6),如果當前選擇合適的工具和零件,便使零件1(modelParts01)的Y軸坐標增加5個單位,使該零件移動到界面之外,從而完成該零件的拆卸,其余零件的拆卸原理與此相同。
圖6 虛擬拆卸零件界面(步驟1)
if (currnetMousePointer==parts01.tools.ToString() &¤tMouseDirectiorToGameObject==modelParts01.name)
{
modelParts01.transform.position = newVector3(modelParts01.transform.position.x, modelParts01.transform.position.y + 5, modelParts01.transform.position.z);
currentOrder++;
}
當完成全部零件的拆卸,即變量currentOrder大于22時,使用當前狀態(tài)變量currentState = state.Assembly語句將其狀態(tài)設(shè)定為“組裝”,同時將拆卸步驟序號currentOrder重置為1,以便下次拆卸時使用。組裝的過程與拆卸的過程正相反,從最后一個步驟向前進行,當鼠標點擊正確的位置,便將對應的零件安裝到指定位置。
在虛擬裝配實驗中設(shè)置了學習測試模塊,教師可根據(jù)學生作業(yè)完成的情況,及時調(diào)整授課內(nèi)容和教學進度。該模塊題型包括選擇題和判斷題,假如學生選擇的答案與正確答案不相符,便使其標記為紅色,提示學生該題答錯。
將噴油泵虛擬裝配實驗應用于2016級交通運輸專業(yè)汽車構(gòu)造課程教學中,采用“理論+虛擬實驗+實物實驗”的教學模式,讓學生先利用網(wǎng)絡(luò)自主完成虛擬實驗,熟悉實驗流程后再進行實物實驗。采用問卷調(diào)查與訪談形式,就教學形式、虛擬實驗教學資源、課堂組織、學習測驗情況對學生進行了滿意度調(diào)查。大多數(shù)學生認為這種教學形式幫助他們更好地完成了實物實驗,對該教學模式的整體滿意度達到80%以上,其中學生對虛擬實驗的滿意度達到90%,說明學生對該實驗的設(shè)計總體滿意度較高。
虛擬裝配實驗在汽車構(gòu)造課程實驗教學中的應用,彌補了學生課堂實驗參與學時的不足,減少了對實物教具器材的損壞,同時又可以充分利用學生課下的碎片化時間,調(diào)動學生自主學習的積極性與主動性,既豐富了教師的教學方法,又培養(yǎng)了學生的創(chuàng)新意識及實踐能力,促進了汽車構(gòu)造課程實驗教學模式的改革。