康子瑞 孫海茗 劉政* 劉洧杰 朱孟茹
電路實驗是電氣與自動化類學生電路理論課程學習的重要實踐環(huán)節(jié)。傳統(tǒng)條件下,學生在電路實驗之前只能通過教材電路圖進行抽象理解,難以對實驗儀器和電子元件有直觀的認識[1]。在實際電路接線中經(jīng)常會因為操作生疏導致接線錯誤而產(chǎn)生用電危險[2]。
隨著信息化時代的到來,我國積極倡導高校進行數(shù)字化、信息化實驗教育教學課程體系改革,在《教育部等六部門關(guān)于推進教育新型基礎(chǔ)設(shè)施建設(shè)構(gòu)建高質(zhì)量教育支撐體系的指導意見》和《中國教育現(xiàn)代化2035》等相關(guān)文件精神指導下,虛擬仿真實驗教學應運而生[3-5]。近年來各高校以基于二維的電路仿真實驗作為學生預習實驗的方式,降低了學生在正式實驗時誤操作的可能性,提高了實驗的教學效率與安全性[6],同時可以避免因?qū)嶒瀮x器損壞而無法完成實驗的問題[7]。但現(xiàn)有的二維電路虛擬仿真軟件與真實實驗環(huán)境相差較大,造成了學生預習效率低、沉浸感差、實驗交互性差等問題。
當前,將Unity3D 技術(shù)與各學科教學相融合這一課題,逐漸在教育界受到廣泛關(guān)注。陳愛群等[8]基于Unity3D 引擎開發(fā)了高校機械類課程中減速器的虛擬實驗教學平臺。費杰等[9]基于 Unity3D 設(shè)計了一套直接數(shù)字化X 射線攝影系統(tǒng)(Digital Ra-diography,DR)可交互仿真教學工作站,對醫(yī)學實驗教學具有重大意義。李公科[10]結(jié)合Unity3D 與VR(Virtual Reality,虛擬現(xiàn)實)技術(shù),開發(fā)了服飾陳列三維虛擬仿真實訓系統(tǒng),有效提高了陳列技能人才培養(yǎng)的質(zhì)量。程世沖等[11]采用Unity3D 與3DMax 結(jié)合,開發(fā)了針灸教學演示系統(tǒng),實現(xiàn)了針灸教學從現(xiàn)實邁入虛擬空間的進步。邵子明等[12]基于Unity3D進行了船舶分段仿真制造系統(tǒng)的開發(fā),為船舶分段制造工藝作出了重要貢獻。魏玉蒙[13]基于Unity3D 和3D Max 的交互式語音應答(Inter-active Voice Response,IVR)系統(tǒng)設(shè)計了立體幾何的可視化空間線索,為沉浸式虛擬現(xiàn)實系統(tǒng)應用于學科教學提供了新的思路。朱田莉[14]基于Unity3D 開發(fā)了關(guān)于《認識五大基本地形》的教育游戲,讓教育性與游戲性相結(jié)合,有效激發(fā)了學生的學習興趣。甘志梅等[15]采用Unity3D 和3D Max 開發(fā)了汽車起動機虛擬拆裝實訓系統(tǒng),提高了實訓的教學質(zhì)量。這些系統(tǒng)將Unity3D 虛擬引擎技術(shù)結(jié)合各類學科進行研發(fā),對提高教學質(zhì)量有一定的助力作用,但仍缺乏應用于電路理論實驗方向的虛擬實驗平臺。
為此,本文運用虛擬仿真技術(shù),將Unity3D引擎、Blender 建模和BlazePalm 手勢識別模塊相結(jié)合,設(shè)計了一套虛擬仿真電路實驗系統(tǒng),能夠?qū)崿F(xiàn)學生在各實驗的虛擬場景下進行交互,在仿真場景中完成電路實驗的預習工作。
基于Unity3D 建模技術(shù)的虛擬電路實驗室需要對各種電路元件進行建模,同時虛擬電路實驗室對電路元件的物理特性進行模擬,包括電流、電壓等。Unity3D 可以為學生提供一個用戶友好的交互界面,使學生能夠方便地使用。此外可以對電路的運行狀態(tài)進行實時可視化,使學生能夠直觀地了解電路的運行情況?;赨nity3D 的虛擬電路實驗室系統(tǒng)設(shè)計了電路理論實驗課中的幾個典型實驗,如圖1 所示。
圖1 虛擬仿真電路實驗系統(tǒng)實驗匯總
基于Unity3D 的虛擬電路實驗室主要由實驗室場景制作、程序框架設(shè)計、程序編寫、測試發(fā)布四個階段構(gòu)成,具體流程如圖2 所示。
圖2 虛擬電路實驗室實現(xiàn)流程圖
為便于學生在理論課程后掌握真實電路實驗場景的接線方法以及安全操作規(guī)范,通過對學生電路實驗需求和使用場景的分析,并根據(jù)電路實驗的相關(guān)原理,設(shè)計建立相應的模型。虛擬仿真實驗系統(tǒng)利用模型模擬實際電路的工作原理和特性,針對集成電路試驗箱進行建模。仿真萬用表、示波器、電源發(fā)生器、功率計、負載、電橋等設(shè)備,具備足夠的靈活性和可拓展性,以滿足電路實驗的需求,以便進行實驗操作和觀察。為了接近真實場景,系統(tǒng)同時應用了人機交互技術(shù),通過攝像頭捕捉學生手勢動作達到點對點接線的效果。
為確保模擬場景貼近真實環(huán)境,通過傾斜攝影對實驗室大型實驗設(shè)備進行模擬建模,并在Blender 中對不夠精確的部分進行修改和補充,導入到建好的Unity3D場景中,還原電路實驗室場景。
1.2.1 模型制作
應盡量選取室內(nèi)光線充足的場景對試驗臺進行拍攝,將大型試驗臺劃分區(qū)域布置相機機位,以Nikon Z7 配合DJI RSC 2 Pro Combo 為例,取用環(huán)繞方式進行拍照,在距離試驗臺合適距離,相機調(diào)整到30—45 度,間隔時間為2—5 秒,間隔時間越短,細節(jié)照片數(shù)量越多,影像重疊度越高,建模物理細節(jié)精度越高[16]。
在Context Capture Master 中新建項目導入所得照片并對其空中三角測量進行計算,提交默認計算結(jié)果。完成計算后在Spatial Framework 中編輯模型區(qū)域邊界重建模型得到Production 導出為3mx 格式,待運算后得到建模結(jié)果。將3mx結(jié)果導入Blender 進行調(diào)整,進行材質(zhì)調(diào)整、紋理映射等操作。在Blender 中選擇“3D Mesh(.3ds,.obj,.f-bx,etc.) ” 選 項, 導 入3mx文件并顯示3D 模型。檢查模型的材質(zhì),同時還可以使用紋理映射將圖像應用于模型表面。在Blender 中,使用紋理編輯器進行調(diào)整,使用渲染設(shè)置來更改光照、陰影和其他效果,以進一步改善模型的外觀。完成對模型的調(diào)整后,將模型導出為所需的格式。模型修改前后的對比如圖3 所示。
圖3 模型修改前后對比圖
1.2.2 場景搭建
首先,在搭建場景前,收集學校電路實驗室的平面圖、照片實驗室的結(jié)構(gòu)、布局和設(shè)備等,以便更好地模擬實驗室。其次在Unity3D 中創(chuàng)建所需場景,根據(jù)實驗室的大小來設(shè)置場景的大小和比例。添加地形和天空盒,使場景更加真實。使用Unity3D 的建模工具,建立實驗室的墻壁和地板。根據(jù)實驗室的布局,添加上文建立模型的設(shè)備進入實驗室中,并添加光照和陰影以及適當?shù)牟馁|(zhì)和紋理讓實驗室更加真實。
在Unity3D 中使用碰撞檢測實現(xiàn)電線與其他電路元件的連接和斷開,以及通過基于BlazePalm姿態(tài)估計實現(xiàn)人機交互,使用Line Renderer 組件顯示電線,并創(chuàng)建數(shù)據(jù)可視化界面展示電路元件參數(shù)和測量值。其開發(fā)主要邏輯如圖4 所示。
圖4 實驗臺場景搭建
為實現(xiàn)電線與其他電路元件模型的連接,本文使用碰撞檢測技術(shù)來檢測電線與其他物體的碰撞。通過在Visual Studio 建立的C#腳本中定義一個變量來存儲當前連接的物體,并在腳本中使用OnCollisionEnter 函數(shù)來檢測電線是否與其他物體發(fā)生碰撞。如果電線與其他物體發(fā)生碰撞,則將當前連接的物體設(shè)置為該物體,并將電線的一個端點連接到該物體上。當需要斷開連接時調(diào)用OnCollisionExit 函數(shù)來檢測電線是否與連接的物體斷開了碰撞。如果電線與連接的物體斷開了碰撞,則將當前連接的物體設(shè)置為空,并將電線的端點從該物體上移除。主邏輯框架如圖5 所示。
圖5 主邏輯框架
通過基于BlazePalm 的手勢姿態(tài)識別獲取手部骨骼點位置信息,并通過傳輸控制協(xié)議(Transmission Control Protocol,TCP)連接Unity3D,在C#腳本中根據(jù)接收到的食指指尖和中指指尖的橫坐標x 數(shù)值進行差值判斷,若差值小于0.05,觸發(fā)C#腳本中IPointerDownHandler 鼠標按下事件;若差值大于0.1,則觸發(fā)IPointerUpHandler 鼠標釋放事件。主要邏輯為使用BlazePalm 模型追蹤用戶的手部運動,并獲取手部骨骼點的坐標。通過TCP 協(xié)議連接Unity3D,創(chuàng)建并綁定TCP/IP 套接到本地IP 和端口,連接后處理視頻流中的幀,并檢測手部,將幀傳遞給BlazePalm 模型進行檢測。獲取所需的手掌點坐標,將點坐標發(fā)送到Unity3D,在Unity3D 中讀取從服務器發(fā)送的點坐標,將點坐標用于鼠標的實時控制。在腳本中定義一個變量來存儲鼠標的當前位置,在Update 函數(shù)中獲取鼠標的位置,然后,可以使用Raycast函數(shù)來將鼠標的位置轉(zhuǎn)換為世界坐標系中的位置,并將電線的父對象的位置設(shè)置為該位置。
在服務器端,監(jiān)聽Unity3D 發(fā)送的TCP 連接請求,并根據(jù)收到的消息內(nèi)容執(zhí)行相應的操作。根據(jù)手指的運動情況,當收到connect 消息時,執(zhí)行持續(xù)發(fā)送手掌指定點坐標操作;當收到disconnect 消息時,執(zhí)行關(guān)閉攝像頭操作。
Unity3D 有著直觀易懂的特點,有利于實現(xiàn)本文所述的虛擬實驗的教學功能。在Unity3D中通過創(chuàng)建物體作為電線的父對象,為其添加Rigidbody 組件和Line Renderer 組件 ,并將父對象的Rigidbody 組件的Is Kinematic 屬性設(shè)置為False。在電線的每個頂點上添加一個Rigidbody組件,其次在父對象上添加一個Spring Joint 組件,將其連接到電線的每個頂點上的 R-igidbody 組件。調(diào)整Spring Joint 的屬性使電線具有柔性和彈性。將Line Renderer 組件的Position 屬性設(shè)置為電線的每個頂點的位置在場景中顯示出電線。
為接線判斷電線連接是否正確。 需要在各導線接口的模型上放置透明材質(zhì)的image 并添加C# 腳本,腳本中分別使用四個用戶界面(User Interface,UI)交互事件,IPointerDownHandler、IPointerUpHandler、IDragHandler 和IEndDragHandler。IPointer-DownHand-ler 和IPointerUpHandler 對 應鼠標按下和鼠標釋放事件,IDragHandler 對應鼠標拖拽事件,IEndDragHandler 對應拖拽結(jié)束事件。當用戶鼠標在接口處按下后,將會創(chuàng)造一條從圖像中心到鼠標位置的紅色導線,并且會根據(jù)鼠標拖拽的位置不斷更新導線的長度和末端位置。當用戶松開鼠標時,若鼠標處在下一個接口處,則導線連接成功,若沒有處在其他任何接口處,則會銷毀該條導線。RectTransform 組件是Unity3D中用于控制UI 元素位置、大小、旋轉(zhuǎn)等屬性的組件。在Visual Studio 建立的C#腳本中,使用了RectTransform 組件來控制連線的位置、大小和旋轉(zhuǎn)。通過設(shè)置 RectTransform 的pivot 屬性和localRotation 屬性,可以實現(xiàn)連線的旋轉(zhuǎn)和位置控制,確保導線能連接到任意接口。Image 組件是Unity3D 中用于渲染圖像的組件。在腳本中使用了Image 組件來渲染連線,通過設(shè)置Image 的color 屬性,可以實現(xiàn)連線顏色的控制。當按下UI 的“ 確定 ”按鈕后,將會判斷所有的連線的正誤。正確連接的導線會被渲染為綠色,錯誤連接的導線則會被渲染為紅色。此時,用戶可以按下“ 重做 ”的按鈕,銷毀所有已經(jīng)連接好的導線,重新開始連接。接線過程如圖6 所示。
圖6 接線過程圖
本文以三相電路實驗為例,研究三相電路在電源對稱的情況下,負載作為星形和三角形連接時線電壓相電壓以及線電流與相電流具有的關(guān)系。
其中由電路原理可以得到三相四線制電源的線電壓UL與相電壓UP的關(guān)系為:Ul=Up且UL較相應的UP,在相位上超前30°。
(1)負載星形聯(lián)接時。在有中線(Y0)的情況下,不論負載對稱與否,其線電流等于相電流,線電壓大小上為相電壓的倍,即Ul=Up且線電壓依次超前相應的相電壓。
(2)負載作三角形連接時。不論負載對稱與否,其相電壓均等于線電壓即Ul=UP。負載對稱時,其相電流也對稱,相電流與線電流之間的關(guān)系為Il=Ip且線電流滯后于相應的相電流30°,三相負載不對稱時,相、線電流的大小不再是倍的關(guān)系,即I0=Ip,但其相電壓(線電壓)仍是對稱的[17]。
在Unity3D 中通過創(chuàng)建實驗數(shù)據(jù)可視化界面使以上數(shù)據(jù)體現(xiàn)在虛擬實驗界面中。首先使用Unity3D 自帶的UI 組件,創(chuàng)建一個空Canvas 添加一個Panel,并添加GridLayoutGroup 組件,調(diào)整GridLayoutGr-oup 的Spacing 和CellSize 屬 性。創(chuàng)建一個表頭行,并使用Text 組件創(chuàng)建表頭的每個單元格,將它們放置在GridLayoutGroup 的第一行中。其次創(chuàng)建數(shù)據(jù)行,使用腳本動態(tài)創(chuàng)建每個單元格,并將它們放置在GridLayoutGroup中的每行中。在Start 函數(shù)中創(chuàng)建表頭,然后使用Instantiate 函數(shù)動態(tài)創(chuàng)建每個數(shù)據(jù)行,并在每個數(shù)據(jù)行中設(shè)置單元格的文本。最后,將數(shù)據(jù)行添加到GridLayoutGroup 的子物體中。在Unity3D 中添加電路元件并定義其參數(shù),在電路運行時更新這些參數(shù)和測量值,將它們顯示在UI 上。
在軟件環(huán)境為C#8.0、unity2021.3.20f1c1、python3.7,硬件環(huán)境為CPU:AMD Ryzen 7 5800H with Radeon Graphics、GPU:NVIDA GeForce RTX 3060 Laptop GPU 和720P HD 攝像頭下運行,收集仿真數(shù)據(jù)。
為驗證虛擬仿真電路實驗系統(tǒng)的實用性和穩(wěn)定性,研究團隊選取電路課程中較為典型的三相電路實驗進行檢驗。本實驗需要探究三相電路在電源對稱的情況下,負載作為星形和三角形連接時線電壓與相電壓以及線電流與相電流的關(guān)系。本研究的團隊成員在虛擬仿真實驗室中進行了實驗,借助計算機視覺庫MediaPipe 實現(xiàn)了對實驗參與者手勢的識別和手部關(guān)鍵點的動作信息提取,以獲取實驗過程的詳盡數(shù)據(jù)。虛擬實驗操作如圖7 所示。使用Unity3D 的UI 系統(tǒng)工具實現(xiàn),將實驗結(jié)果以表格數(shù)據(jù)的形式顯示在虛擬仿真實驗室中。
圖7 虛擬實驗操作場景
實驗完成后,研究團隊成員對實驗效果進行了總結(jié):虛擬實驗系統(tǒng)能夠順利地完成電路實驗,且實驗過程流暢,能夠與實際操作有較好的一致性,虛擬實驗系統(tǒng)能夠順利實現(xiàn)虛擬實驗仿真,系統(tǒng)具有較好的實用性和穩(wěn)定性。
基于上述實驗,可以得到虛擬實驗的實驗數(shù)據(jù),如A、B、C 三相開燈盞數(shù)、相電流、相電壓、每兩相間線電壓以及中線電流等數(shù)據(jù),并將虛擬實驗結(jié)果與實際實驗值進行對比。根據(jù)實驗結(jié)果,可以發(fā)現(xiàn)模擬實驗所得數(shù)據(jù)與現(xiàn)實實驗所得數(shù)據(jù)在誤差允許范圍內(nèi)基本一致,這意味著模擬實驗系統(tǒng)可以準確地反映現(xiàn)實實驗系統(tǒng)的真實情況。此外,模擬實驗數(shù)據(jù)與理論實驗數(shù)據(jù)相符,進一步證明了模擬實驗系統(tǒng)的準確性。因此可以得出結(jié)論,本實驗系統(tǒng)的模擬實驗部分具有良好的準確性,為后續(xù)實驗研究提供了堅實的基礎(chǔ)。虛擬實驗得出的結(jié)果與實際實驗中的測量值進行對比如表1 所示。
表1 虛擬實驗結(jié)果與實際值對比
本文基于Unity3D 完成了對電路實驗系統(tǒng)的虛擬仿真模型搭建,主要采用基于BlazePalm 的位姿估計實現(xiàn)對使用者手部的精準識別,以模擬真實的電路接線。同時,系統(tǒng)還通過碰撞檢測、人機交互使電路實驗接線更加真實和直觀;通過數(shù)據(jù)可視化使電路元件參數(shù)和實驗測量結(jié)果清晰地呈現(xiàn)在界面上,強化了實驗數(shù)據(jù)關(guān)聯(lián)性。結(jié)果表明:通過使用虛擬仿真電路實驗室,能夠增強學生對電路原理和設(shè)計的認識,提高電路實驗接線效率和實踐能力。在后續(xù)的工作中,將考慮提高實驗設(shè)備建模精度,并增添識別手勢自動接線等相關(guān)功能,進一步提升系統(tǒng)使用效率。