董立巖, 王越群, 李永麗
(1. 吉林大學(xué) 計算機(jī)科學(xué)與技術(shù)學(xué)院, 長春 130012; 2. 東北師范大學(xué) 信息科學(xué)與技術(shù)學(xué)院, 長春 130117)
隨著科學(xué)技術(shù)的發(fā)展, 教育實(shí)驗(yàn)的水平不斷提高。為解決現(xiàn)實(shí)實(shí)驗(yàn)中的成本過高、 時間空間受限和安全隱患等問題, 虛擬實(shí)驗(yàn)室[1](Virtual Laboratory)被廣泛應(yīng)用。國內(nèi)外很多科學(xué)研究者對虛擬設(shè)備和虛擬實(shí)驗(yàn)室進(jìn)行了研究, 如Hodges等[2]提出了虛擬仿真化學(xué)實(shí)驗(yàn)室; Burke等[3]提出了虛擬發(fā)動機(jī)實(shí)驗(yàn)室; Hristov等[4]對虛擬實(shí)驗(yàn)室的發(fā)展?fàn)顩r及優(yōu)缺點(diǎn)進(jìn)行了詳細(xì)說明。虛擬實(shí)驗(yàn)室是基于虛擬現(xiàn)實(shí)技術(shù)構(gòu)建的模擬現(xiàn)實(shí)中各種教學(xué)實(shí)驗(yàn)室的系統(tǒng)。1989年, 美國的Wolf教授最早提出了虛擬實(shí)驗(yàn)室的概念, 用以描述一個計算機(jī)網(wǎng)絡(luò)化的虛擬實(shí)驗(yàn)室環(huán)境。Wolf教授形象地把虛擬實(shí)驗(yàn)室稱為沒有圍墻的研究中心, 形象地表明了虛擬實(shí)驗(yàn)的特性: 不受時間和空間的局限[5]。
電力拖動又稱電機(jī)傳動, 是用電動機(jī)作為原動力拖動生產(chǎn)機(jī)械的一種工作結(jié)構(gòu), 由電源、 電動機(jī)、 控制設(shè)備、 傳動機(jī)構(gòu)以及工作機(jī)構(gòu)5個子系統(tǒng)組成。在電力拖動實(shí)驗(yàn)教學(xué)中, 由于使用高電壓會對實(shí)驗(yàn)人員造成一定的危險性, 而且工業(yè)電動機(jī)和一些控制設(shè)備體積大、 噪音大以及價格昂貴, 不利于進(jìn)行真實(shí)實(shí)驗(yàn)[6]。筆者針對上述問題, 研究了基于Unity3D的電機(jī)拖動實(shí)驗(yàn)虛擬仿真系統(tǒng), 不僅可解決上述問題, 還可減少實(shí)驗(yàn)器材的磨損, 節(jié)約能源, 給實(shí)驗(yàn)人員提供更大的實(shí)驗(yàn)樂趣。
Unity3D技術(shù)是實(shí)現(xiàn)虛擬仿真實(shí)驗(yàn)室的主要技術(shù)[7], 筆者設(shè)計的基于Unity3D的電機(jī)拖動虛擬仿真系統(tǒng)具有逼真的電機(jī)拖動實(shí)驗(yàn)環(huán)境[8], 良好的人機(jī)交互實(shí)驗(yàn)平臺; 具備導(dǎo)入已有的實(shí)驗(yàn)數(shù)據(jù)進(jìn)行選擇部署測試電動機(jī)反應(yīng)的功能; 能準(zhǔn)確模擬各種電器設(shè)備在不同的連接部署情況下電動機(jī)的反應(yīng), 并生成實(shí)驗(yàn)數(shù)據(jù)。
圖1 系統(tǒng)主要結(jié)構(gòu)圖 Fig.1 Structure diagram of the system
基于Unity3D的電機(jī)拖動仿真系統(tǒng)是基于虛擬現(xiàn)實(shí)技術(shù)構(gòu)建的模擬現(xiàn)實(shí)中電機(jī)拖動實(shí)驗(yàn)教學(xué)的系統(tǒng)。系統(tǒng)各模塊之間的關(guān)系如圖1所示。系統(tǒng)定義了3個基本類: 電器、 導(dǎo)線和IO(Input Output)。由于IO接口也屬于電器的一部分, 所以IO類繼承電器類的部分屬性。這3個類分別寫在3個腳本文件中, 方便調(diào)用。在實(shí)現(xiàn)類LianJiePanel中, 按照功能把函數(shù)分為繪制函數(shù)、 導(dǎo)入模塊、 系統(tǒng)函數(shù)和輔助函數(shù)4類, 通過調(diào)用3個小類和輔助包, 實(shí)現(xiàn)了系統(tǒng)的各種功能需求。
連接好的電路圖(見圖2)可抽象成圖結(jié)構(gòu)(見圖3), 其中每個IO接口為一個節(jié)點(diǎn), 每條導(dǎo)線為一條邊。賦值時就相當(dāng)于對圖3中的所有節(jié)點(diǎn)進(jìn)行廣度優(yōu)先遍歷, 直到分析完一個電器的所有IO接口后再分析下一個電器[9]。
圖2 電路圖 圖3 抽象電路圖的圖結(jié)構(gòu) Fig.2 Circuit diagram Fig.3 Circuit diagram abstracted into graphs
針對圖1系統(tǒng)中各模塊間的相互關(guān)系, 筆者將詳細(xì)分析其實(shí)現(xiàn)功能和實(shí)現(xiàn)過程。
繪制函數(shù)主要用于進(jìn)行界面的設(shè)計與實(shí)現(xiàn)。實(shí)驗(yàn)仿真系統(tǒng)主要有歡迎界面和機(jī)床電氣連接界面。在進(jìn)入歡迎界面后, 可選擇機(jī)床電氣連接進(jìn)入主頁面, 或直接退出訓(xùn)練。點(diǎn)擊歡迎界面的機(jī)床電氣連接, 界面會對該系統(tǒng)的各個功能進(jìn)行簡單介紹。進(jìn)入主頁面內(nèi), 頂層菜單可實(shí)現(xiàn)各種電器部署及聯(lián)調(diào)功能, 也可刪除電器和導(dǎo)線, 通過側(cè)邊菜單欄可添加各種電力拖動和各種導(dǎo)線。
除了界面繪制函數(shù)以外, 還有繪制電器、 連線以及IO接口等繪制函數(shù)。Unity3D技術(shù)內(nèi)置渲染引擎, 引擎使用擴(kuò)展名為FBX(三維創(chuàng)作與交換格式)的模型, 通過模型和內(nèi)置引擎的渲染, 電器設(shè)備和導(dǎo)線連接顯得更加真實(shí)立體[10], 操作更簡單。
在自鎖實(shí)驗(yàn)平臺中, 需導(dǎo)入已有的實(shí)驗(yàn)數(shù)據(jù)文件并對其解析, 以進(jìn)行下一步的實(shí)驗(yàn)操作。該系統(tǒng)針對涉及的3種基本類對象, 分別定義了導(dǎo)入文件中數(shù)據(jù)的屬性含義, 根據(jù)第1個字段屬性值確定導(dǎo)入的基本類對象, 并初始化相關(guān)屬性。
讀取文件時, 若第1個字段屬性值為DQ, 則表示該條數(shù)據(jù)為電器信息。電器的屬性主要包括ID(Identity), 是否顯示, 初始化位置x, 初始化位置y, 索引(第幾個電器), 并用逗號隔開。其中主屬性是dq_index, 即電器的名稱和它的索引值, 用來確定實(shí)驗(yàn)中唯一的電器設(shè)備。對于熱繼電器, 除了這些基本的屬性外, 還需要設(shè)置它的熱區(qū), 以實(shí)現(xiàn)通過點(diǎn)擊熱區(qū)的時間長短改變熱繼電器狀態(tài)的特性, 而熱區(qū)需要電器的相對位置, 并可隨著電器位置的移動而改變。讀取文件時, 若第1個字段屬性值為IO, 則表示該條數(shù)據(jù)為IO接口信息。IO接口是電器上的一部分, 所以除了繼承電器的部分屬性還有些新的屬性, 包括電壓值大小, 電壓類型, 所屬的電器, 轉(zhuǎn)接點(diǎn)數(shù)目等屬性信息。讀取文件時, 若第1個字段屬性值為XL, 則表示該條數(shù)據(jù)為導(dǎo)線信息。導(dǎo)線的屬性包括ID, 顏色和線條類型等, 其中用#加上起始IO的ID和終止IO的ID作為主屬性ID, 用其唯一標(biāo)識一條導(dǎo)線。
該虛擬仿真系統(tǒng)的系統(tǒng)函數(shù)主要有ONGUI(), FixedUpdate()和Start()。
1) Start函數(shù)在系統(tǒng)第1次執(zhí)行時調(diào)用, 主要功能包括調(diào)用各個初始化子函數(shù), 設(shè)置一些全局變量的默認(rèn)值, 并導(dǎo)入背景圖片、 要顯示的按鈕名稱以及幫助提示等資源信息。
2) 在系統(tǒng)調(diào)用完Start函數(shù)后, 系統(tǒng)會調(diào)用ONGUI函數(shù), 這個函數(shù)的主要功能是繪制GUI組件, 根據(jù)不同的電器模型調(diào)用不同的繪制函數(shù), 并根據(jù)FixedUpdate函數(shù)不斷更新的變量值實(shí)時更新繪制函數(shù)。
3) FixedUpdate函數(shù)用來實(shí)時監(jiān)聽鼠標(biāo)和鍵盤的當(dāng)前狀態(tài), 并根據(jù)不同的狀態(tài)改變電器模型。比如鼠標(biāo)處在按鈕位置上, 就會顯示該按鈕的介紹信息。而電器模型的改變將導(dǎo)致整個實(shí)驗(yàn)的連接狀態(tài)、 部署狀態(tài)發(fā)生改變, 從而完成實(shí)驗(yàn)。
輔助函數(shù)主要輔助繪制函數(shù)以及系統(tǒng)函數(shù)的實(shí)現(xiàn), 主要有兩類輔助函數(shù)。一類輔助函數(shù)是Find系列, 主要根據(jù)電器的索引值或ID查找實(shí)驗(yàn)中的電器或IO接口。其主要思想是遍歷所有對象, 找到符合條件的對象, 并將其返回。另一類輔助函數(shù)是賦值函數(shù), 主要用于對電壓賦值。根據(jù)IO接口及相應(yīng)的ID信息將入口的電壓值和電壓類型等信息都賦值給出口。
系統(tǒng)運(yùn)行平臺分為開放平臺和自鎖平臺。在開放平臺中, 各種電器和導(dǎo)線可以任意連接部署。在自鎖實(shí)驗(yàn)平臺中, 對已有的實(shí)驗(yàn)數(shù)據(jù)進(jìn)行讀取, 然后選擇需要的電器和導(dǎo)線再部署連接。
通過在開放平臺創(chuàng)建一個電機(jī)拖動實(shí)驗(yàn)的實(shí)例(見圖4), 選擇電器導(dǎo)線連接部署, 對電器進(jìn)行聯(lián)調(diào)后, 可觀察到通電后電動機(jī)的轉(zhuǎn)動情況。
圖4 開放平臺的電器連接Fig.4 Electrical connection of open platform
圖5為自鎖實(shí)驗(yàn)的原理圖, 自鎖實(shí)驗(yàn)讀取已有實(shí)驗(yàn)中電器導(dǎo)線的部署數(shù)據(jù), 選擇想要的電器進(jìn)行部署(見圖6), 然后可選擇按照開放平臺手動連接導(dǎo)線或按照實(shí)驗(yàn)數(shù)據(jù)自動連接導(dǎo)線, 最后進(jìn)行電器聯(lián)調(diào), 通過電流就可觀測電動機(jī)的運(yùn)轉(zhuǎn)情況。
圖5 自鎖實(shí)驗(yàn)的原理圖 圖6 自鎖實(shí)驗(yàn)的選擇 Fig.5 Schematic of self-locking test Fig.6 Selection of self-locking test
通過實(shí)驗(yàn)可觀察到系統(tǒng)的運(yùn)行效果, 驗(yàn)證了實(shí)驗(yàn)的可行性與多樣性。實(shí)驗(yàn)效果表明, 系統(tǒng)能良好模擬實(shí)驗(yàn)中各種操作, 真實(shí)性強(qiáng), 運(yùn)行效率快。
筆者針對電機(jī)拖動實(shí)驗(yàn)設(shè)計研發(fā)虛擬仿真系統(tǒng), 解決了傳統(tǒng)實(shí)驗(yàn)中可能遇到的操作危險、 設(shè)備資源不足、 時間不好協(xié)調(diào)等問題, 同時提高了學(xué)生們實(shí)驗(yàn)的積極性, 使每名同學(xué)都能動手完成整個實(shí)驗(yàn), 并自主創(chuàng)新實(shí)驗(yàn), 不用擔(dān)心器材損壞。該系統(tǒng)功能完善, 操作簡單易學(xué), 人機(jī)交互性能好, 利用了Unity3D技術(shù), 渲染的電器線路使電路圖更加形象直觀。