闞研 何嶺松 謝道旺 徐玉飛



摘要:三維虛擬現實漫游仿真和虛擬儀器實驗過程仿真是目前兩種主要仿真手段,前者能夠很好地模擬真實實驗場景,后者則能更好地仿真實驗細節。為了解決傳統虛擬實驗交互性弱、開發周期長等問題,提出了一種Unity3D下的構件化虛擬儀器功能實現方法。首先在Unity3D平臺上開發多種標準化、可復用的虛擬儀器;然后將虛擬儀器引入虛擬現實場景中,并通過基于事件中心的觀察者模式實現虛擬儀器的通信和數據流動;最后,依據構建的虛擬儀器開展典型機械工程測量實驗。結果表明,與傳統虛擬實驗相比,該方法具有更好的真實性、交互性,同時構件化的思想縮短了開發周期。
關鍵詞:Unity3D;虛擬現實;虛擬儀器;虛擬實驗
DOI: 10. 11907/rjdk.191172
開放科學(資源服務)標識碼(OSID):
中圖分類號:TP319
文獻標識碼:A
文章編號:1672-7800(2020)001-0180-05
0 引言
隨著計算機網絡的發展,虛擬實驗仿真作為一種新的實驗教學方式,備受關注。所謂虛擬實驗,是指運用計算機仿真技術、多媒體技術及網絡技術,在計算機或移動設備上搭建虛擬實驗環境,供學生參與實驗過程[1]。1988年,麻省理工大學開發了Web Lab遠程虛擬實驗室[2];2014年,北京郵電大學基于ActiveX組件開發了通信原理、機械設計制造等多個學科虛擬實驗室[3];華中科技大學杜建豪等[4]基于HTML5開發了無插件機械類虛擬實驗平臺。但這些虛擬實驗往往專注于實驗過程仿真,缺乏與周圍環境的交互,沉浸感不足。
虛擬現實技術( Virtual Reality,VR)利用計算機和多媒體技術產生逼真的視覺、聽覺、觸覺等三維感覺環境,模擬真實的周邊環境。通過將虛擬現實技術和傳統虛擬實驗結合,可以進一步提升虛擬實驗的沉浸感和交互性[5]。廣東工業大學張碩等[6]基于Kinect構建沉浸性好的四通道融合虛擬現實實驗環境,但缺乏專業虛擬儀器的引入;陳敏捷等[7]將虛擬現實技術引入液壓實驗教學;國外學者Jayaram等[8]結合虛擬現實開發了虛擬裝配實驗,但這些都是將虛擬實驗作為一個整體,靈活性差,難以更新和維護。
虛擬儀器( Virtual Instrument)是指通過應用程序將功能化模塊和計算機結合起來,使原來需要各種硬件完成的測量系統盡可能軟件化。計算機強大的圖形環境和虛擬儀器功能模塊可以幫助用戶完成儀器控制、數據分析、存儲和顯示[9]。國內外很多學者基于虛擬儀器開發了涉及信號處理、電力分析、工業控制等多個領域的虛擬實驗,但忽視了對真實實驗環境的模擬[10-12]。
本文將虛擬現實和虛擬儀器結合起來,借鑒制造業“快速組裝”的概念,在虛擬現實場景的基礎上開發構件化的虛擬儀器,將虛擬實驗拆分成多個獨立的模塊化構件,將構件像生產線上的“零件”一樣組裝起來,從而形成完整的實驗[13]。
Unity3D是由一家丹麥公司開發的多集成平臺2D/3D游戲引擎。除可以用于開發電子游戲外,它還可以輕松地實現模型可視化,實時三維動畫和交互。Unity3D作為一個游戲開發平臺,具有層級化的綜合開發環境、可視化的編輯頁面[14]。同時,Unity3D支持多種格式的2D/3D資源導入。更重要的是,Unitv3D對代碼的動態交叉編譯使其具有跨平臺開發能力,用Unity3D開發的項目或游戲,可以運行在Windows環境以及移動端、網頁端[15]。
本文基于Unity3D這一綜合開發平臺,提出一種構件化的虛擬儀器模型,首先在Unity3D平臺上開發多種標準化、可復用的虛擬儀器,然后將虛擬儀器引入虛擬現實場景中,實現了具有很強交互性、沉浸感、可擴展性的網絡虛擬實驗。
1 Unity下的虛擬儀器
1.1 構件化虛擬儀器模型
虛擬儀器是虛擬實驗中的重要組成部分,與傳統虛擬儀器不同,構件化的虛擬儀器將虛擬儀器標準化、模塊化,每一個虛擬儀器提供特定的功能,封裝一定的數據和方法,并為用戶提供特定的調用接口[16]。虛擬儀器好比工業生產線上可復用的組裝零件,以實驗功能為組裝藍圖,將所需要的虛擬儀器組裝起來。這種思想可以有效縮短開發周期,降低開發難度[17]。
如圖1所示,對于一個虛擬儀器而言,具有獨立的構件屬性、功能、端口,屬性主要包括顯示信息和行為信息,功能則是指虛擬儀器在實驗過程中的作用,端口主要負責不同儀器間的數據流動。在Unity3D中,只需用C#編寫特定的腳本組件,將這些腳本作為組件添加到虛擬器上,從而使虛擬儀器具有特定的屬性和功能,最后將其封裝成可復用的Prefab(預制體)。其中,Prefab是存儲在Unity3D工程視圖( Project View)中的一種特殊資源,可以理解為一個對象及其組件的容器,目的是使對象及資源能夠被重復使用[18]。相同的對象可通過一個預設體創建。
虛擬儀器構件分為前臺界面顯示與后臺邏輯控制兩部分,構件之間則通過C#定義的模塊化接口對接。如圖2所示,構件化的虛擬儀器設計流程如下:①編寫虛擬儀器模板類,定義虛擬儀器間數據和事件的通用接口;②對于不同的虛擬儀器構件,定義構件屬性并編寫特定的功能函數;③在Unity3D導人虛擬儀器模型,將腳本函數綁定至相應的模型上,并進一步封裝成可復用的Prefab;④完善內部變量和接口對接,完成目標虛擬儀器開發。
1.2 二維虛擬儀器構件顯示與交互
本文基于Unity3D的UCUI開發了常用的二維構件。UCUI是Unity官方推出的一套UI(用戶界面)系統,UI的根目錄為Canvas(畫布)。Unity本身提供按鈕、滑動條、文本框等構件,但這些構件本身過于簡單,且缺乏與其它構件的交互。在此基礎上,本文擴展適用于各類虛擬實驗的二維構件。在Canvas中為構件導入2D貼圖作為構件的前端顯示視圖,后端編寫C#腳本為二維的虛擬儀器構件綁定監聽事件( Event)以及對應的回調函數(Callback)。當用戶通過鍵盤或鼠標輸入時,會觸發畫布監聽事件,再執行事先綁定好的回調函數。圖3展示了二維虛擬儀器構件和用戶交互的原理。
本文在Unity3D提供的基本控件基礎上,實現了二維波形控件、旋鈕、滑動條等虛擬實驗中常用的專業控件,擴展了二維構件種類。
1.3 三維虛擬儀器構件顯示與交互
三維虛擬儀器構件的三維模型使用3Ds Max、Solid-works等軟件根據實際儀器設備的比例尺寸,繪制三維模型,再將模型導入Unity3D中。模型導入后,給模型編寫并添加腳本組件,實現特定的屬性和功能。與二維虛擬儀器不同,Unitv3D無法直接實現對三維模型的捕捉。為了使用鼠標捕捉三維模型,必須以照相機( Camera)視點為原點,檢測從屏幕發出的射線與物體是否發生碰撞,發生碰撞的三維模型即認定為捕捉到的模型[19]。Unity3D中發生碰撞的前提條件是模型具有碰撞器( Collider)組件,因此還需要給三維模型綁定碰撞器( Collider),從而實現鼠標對三維模型的捕獲。
捕獲三維模型后,為了進一步操作三維虛擬儀器,同樣需要綁定監聽事件和相應的回調函數。本文設計了專門的三維模型控制函數,開發者通過attach( event,call-back)函數綁定事件,detach( event,callback)解綁事件。執行不同的回調函數,可以方便有效地實現對三維模型的平移、旋轉拖曳等操作。
1.4 不同虛擬儀器構件分類
本文根據上述虛擬儀器模型設計好常用虛擬儀器構件,并根據虛擬儀器功能特點將其分為操作類、顯示類、分析類和硬件類4類虛擬儀器。虛擬儀器功能與類別介紹如表1所示。圖4展示了典型的虛擬儀器構件,圖4(a)、圖4(b)是二維虛擬儀器構件,圖4(c)屬于三維虛擬儀器構件。
2 Unity下不同虛擬儀器通信
2.1 虛擬儀器中數據流傳遞
虛擬儀器按照數據流模式運行整個測量系統,每個虛擬儀器視為測量系統中獨立的節點。節點兩端有發送端口和輸出端口,通過發送和接收數據實現虛擬儀器間的數據流動。系統中的節點只有在接收到所有必要輸入端的數據后才會更新自身狀態。節點執行后產生輸出端數據,并將該數據傳遞給數據流路徑中的下一個節點。根據在實驗系統中任務的不同,不同的虛擬儀器在測量系統中發揮不同的作用,有的是連接兩個虛擬儀器的中間件,有的則作為整個測量系統的顯示終端。
如圖5所示,為了保證虛擬儀器中數據流的有效處理和傳遞,采用了節點一管道模型。連接虛擬儀器的輸入/輸出端口,形成流動的數據管道。每個構件可以有效讀取從管道中傳來的數據,也可以對數據作進一步處理,再將數據通過輸出接口發送至管道中。總體而言,虛擬儀器構件的數據處理遵循以下原則:①每個構件都有輸入輸出,構件完成對輸人數據的處理產生輸出;②構件之間相對獨立,沒有連接的構件間不直接共享任何信息。
對于虛擬儀器構件內部數據,仿真實驗不同,其數據類型也不一樣。虛擬儀器構件內部的數據類型主要分為單值類數據、數組類數據。其中,單值類數據主要用于設置虛擬儀器的簡單屬性,數組類數據主要用于存儲波形信號數據。開發者通過綁定函數attachData( sourcevl,target-VI,outputType,inputType)將虛擬儀器的數據輸入/輸出端口連接起來,其中參數分別為源虛擬儀器ID、目標虛擬儀器ID、輸出端口數據類型、輸入端口數據類型。
2.2 虛擬儀器間事件通信機制
設計好虛擬儀器數據模型后,還需要驅動數據傳遞。為了達到這一目的,有必要建立一套事件通信機制:當一個虛擬儀器的狀態改變時,所有依賴于它的對象都能夠得到通知并且動態更新。
在解決一對多的事件通信時,經常采用觀察者模式[20],但這種模式下觀察者和被觀察者之間是緊密耦合的,當系統有多個消息時,會給系統帶來很大負擔。因此在觀察者模式基礎上引入NotificationCenter(事件中心)管理不同消息類型。NotificationCenter基本設計思路是基于消息分發模式,即使用一個字典( Dictionary)記錄各種需要轉發的事件,以及這些事件的觀察者,然后在適宜時進行消息轉發。NotificationCenter還提供觀察者訂閱(Subscribe)和取消訂閱(Remove)的方法。如圖6所示,虛擬儀器a是發布者,虛擬儀器1、2、3是訂閱者。虛擬儀器a監測到自身狀態變化,對事件中心發布事件,訂閱者(虛擬儀器對象)則從事件中心收到消息通知,從而獲取數據流并更新自身狀態。
至此,建立的數據流傳遞模型與事件模型,實現了在Unity中不同虛擬儀器間的消息發送與數據傳輸。
3 虛擬現實與虛擬儀器聯合應用案例
3.1 基于Unity3D的虛擬現實場景構造
本文通過3Ds Max建立虛擬實驗室建筑及內部陳設模型,保存為.fbx格式,并將其導入Unity中。導入完成后再將三維場景拖動到Scene視圖中,同時添加光源(Direction-al Light)、天空盒(Sky Box)、相機(Camera)等組件。其中光源是為了強化場景亮度,天空盒是為了模擬真實天空景象,相機是用于觀察場景的眼睛。
用戶可以在虛擬實驗室中以第一人稱視角的方式觀察實驗室的儀器、陳設等。角色控制用到了Unity3D中的First Person Controller(第一人稱控制)組件,通過設置距離地面的合適高度,模擬正常人的視線。用戶通過鍵盤、鼠標控制人物行走、旋轉視角、縮放等,獲得身臨其境的體驗。
為了模擬真實的實驗環境,對場景中的模型提供了碰撞檢測。用戶在第一人稱視角下行走,遇到實驗設備、墻壁等障礙物時不會穿過,主要利用了Unity3D中的Rigid-Body(剛體)組件,為三維場景中的模型定義碰撞半徑,可以有效地實現碰撞檢測。虛擬實驗室整體場景如圖7所示。
3.2 應用實例
本文通過在Unity3D中擴展虛擬儀器,結合虛擬現實仿真,搭建了有很高沉浸感、可擴展性的虛擬實驗。以轉子實驗臺測量實驗和雙容水液位PID控制實驗為例驗證系統的可行性。
轉子實驗臺測量實驗是《機械工程測試技術》中的經典案例。圖8、圖9展示了轉子實驗臺測量實驗的原理和實驗界面。整個虛擬實驗主要由開關構件、轉子實驗臺構件、波形顯示構件組成。用戶點擊開關開始運行,并將開始信號傳遞給轉子實驗臺構件。轉子實驗臺的飛輪開始轉動,同時模擬生成轉速信號和軸心軌跡信號數據,并將數據發送給波形顯示構件,處理后的結果實時顯示在前端面板上。之后,用戶還可以改變轉子速度,觀察振動信號及軸心軌跡信號變化。
用戶在虛擬場景中,既可以第一人稱視角自由移動并觀察實驗儀器,也可通過鼠標和虛擬儀器進行交互,以觀察轉子實驗臺運動情況,記錄振動信號的波形以及轉子的軸心軌跡。
圖10、圖11展示了雙容水箱液位PID控制實驗。整個虛擬實驗由參數輸入控件、開關控件、PID控件、波形控件、雙容水箱控件組成。用戶在設置合適的P、I、D參數和目標水位,啟動雙容水箱后,可以觀察雙容水箱的變化,還可以打開波形面板,觀察水箱的水位變化曲線。當控制效果不佳時,用戶可以更改合適的P、I、D參數,分析P、I、D3種參數調節作用對實驗結果的影響。
4 結語
本文針對傳統虛擬實驗的不足,提出了一種Unity3D下構件化虛擬儀器功能實現方法。圍繞虛擬儀器模型、虛擬儀器通訊方法以及構件庫開發進行研究,實現了虛擬現實環境中不同虛擬實驗的快速搭建,不僅提高了虛擬實驗的沉浸感和交互性,還有效縮短了開發周期。
未來可以進一步結合VR硬件設備,讓實驗者佩戴VR眼鏡和肢體傳感器,真正進入虛擬實驗室中操作虛擬儀器,進一步提升虛擬實驗的真實性。
參考文獻:
[1] 陳鴻宇,姚路.高校實驗室綜合管理信息平臺的構建[J].實驗室研究與探索,2011,30(3):166-168.
[2] 單美賢.虛擬實驗教學的初步探索[c].北京:全球華人計算機教育應用大會,2002.
[3] 牛學真.開放式虛擬實驗教學平臺集成技術研究[D].北京:北京郵電大學,2014.
[4] 杜建豪.基于HTML5的機械類課程虛擬仿真實驗技術研究[D].武漢:華中科技大學,2018.
[5] 趙沁平.虛擬現實綜述[J].中國科學:信息科學,2009,39(1):2.
[6] 張碩,楊賢,何漢武.多通道融合的虛擬實驗環境設計[J].實驗室研究與探索,2018,37( 12):112-115.
[7] 陳敏捷,羊榮金,沈孟鋒.虛擬現實技術在液壓傳動實驗教學中的應用研究[J].實驗技術與管理,2018,35(4):136-139.
[8]
JAYARAM S, CONNACHER H I,LYONS K W. Virtual assembly us-ing virtual reality techniques[J]. Computer Aided Design, 1997, 29 (8):575-584.
[9] 胡生清,幸國全.虛擬儀器及其應用[J].中國儀器儀表,1999,19(6):9-10.
[10] 梁永元.基于LabVIEW的集成電路測試軟件系統設計與實現[D].成都:電子科技大學,2018.
[11] 李建國.基于虛擬儀器的工業控制器溫度測試系統[D].西安:長安大學,2018.
[12]
GATAULLIN A M. OVCHINNIKOV A V.A virtual instrument foranalysis of the parameters of somatosensoI-\r event-linked potentials[J]. Biomedical Engineering, 2017, 51(4): 300-302.
[13]賴紅,何嶺松.動態可重構虛擬儀器技術[J].儀表技術與傳感器,2012( 2):25-27.
[14]
INDRAPRASTHA A,SHINOZAKI M.The investigation on using Uni-ty3D game engine in urban design study[J]. ITB Journal of Informa-tion&Communication Technology, 2009,3(1):1-18.
[15]耿強.基于Unity3D的多平臺虛擬仿真關鍵技術研究[D].天津:天津工業大學,2016.
[16]崔樹新,張登攀.基于構件技術的可重構虛擬儀器軟件的設計[J].河南理工大學學報:自然科學版,2010,29(4):508-512.
[17] 鄭鑫,肖明清,程嗣怡.可重構測試儀器設計[J].計算機工程,2007,33(5):264-265.
[18] 何偉.Unity虛擬現實開發圣典[M].北京:中國鐵道出版社,2016.
[19] 楊浪.Unity中的碰撞檢測方法研究[J].軟件導刊,2014(7):24-25。
[20] 陳波,寧洪.設計模式分析與應用[J].計算機工程與應用,2003,39(2):146-148.
(責任編輯:孫娟)
作者簡介:闞研(1994-),男,華中科技大學機械科學與工程學院碩士研究生,研究方向為計算機虛擬實驗;何嶺松(1962-),男,博士,華中科技大學機械科學與工程學院教授、博士生導師,研究方向為計算機虛擬儀器、信號處理和虛擬樣機。本文通訊作者:何嶺松。