【摘要】文章針對現有的網絡虛擬實驗系統構建技術的不足,運用VRML、Java和Matlab三種技術混合開發了適用于構建復雜模型的大學物理網絡虛擬實驗系統,并對系統的關鍵實現技術進行了闡述。該網絡虛擬實驗系統發揮了多種技術的優勢,在呈現方式、傳輸速度和算法編程上存在很多優勢。
【關鍵詞】網絡虛擬實驗;體系結構;VRML;Java;Matlab/Simulink
【中圖分類號】G40-057 【文獻標識碼】B 【論文編號】1009—8097 (2008) 10—0125—04
引言
實驗教學不僅能幫助學生形成正確的概念,加深對規律的理解,而且與課堂理論教學相比,實驗課程為培養和提高學生動手實踐能力、研究能力、創新意識等綜合科學素質的培養提供了較好的路徑。因此,實驗課程在學科教學中具有不可替代的作用。但是隨著高等教育的普及,對實驗資源的需求與目前存在的實驗條件不足之間的矛盾日益突出;傳統實驗教學模式存在不容忽視的弊端,制約了學校實驗教學質量的提高;遠程教育中的實驗教學一直是傳統遠程教育的難點。隨著計算機技術、多媒體技術和網絡技術的發展,網絡虛擬實驗室的構建成為可能。通過網絡環境實施虛擬實驗,能拓寬信息渠道與流量,擴大實踐活動的范圍,提高教學效率。網絡虛擬實驗系統不僅可以作為課堂實驗教學的補充,而且為遠程教育中實驗教學的開展注入了新的活力。
目前網絡虛擬實驗系統構建技術的相關研究很多[1-6],大多數研究側重于使用單一技術實現網絡虛擬實驗系統;側重于研究VRML技術與Java技術相結合實現網絡虛擬實驗系統,突出三維立體感和交互性強的特點[5-7];研究運用Java與Matlab技術相結合實現網絡虛擬實驗系統,突出通訊和運算功能。[8-9]本文結合大學物理課程中涉及的實驗模型比較復雜等特點,提出了基于VRML、Java與Matlab三種技術實現網絡虛擬實驗系統,既突出系統較強的三維立體感與交互性,又突出較強的運算能力和傳輸能力。通過采用虛擬現實等技術在Web中創建虛擬的三維實驗環境,實驗者可以在客戶端通過鼠標的點擊與拖曳或通過鍵盤的操作對虛擬場景中的三維實驗對象進行操縱和數據處理。學生可以像在真實的環境中一樣完成各種預定的實驗項目,觀察實驗過程,獲得實驗結果。
一 系統體系結構
系統采用B/S體系結構,通過瀏覽器遠程訪問服務器端的實驗程序。為了使服務器與客戶機之間的工作負擔平衡,我們將實驗三維圖形和實驗結果圖部署在客戶端,在客戶端實現三維圖形的可視化體系。
系統在邏輯上分為三層:表現層、通訊層和仿真控制層,體系結構圖如圖1所示。表現層由Java Applet程序和VRML構建的3D場景以及Html網頁腳本組成。利用Java套接字,通過部署在客戶端的Java Applet和服務器端Java應用程序實現通訊層。仿真控制層是利用Matlab/Simulink進行實驗建模和仿真運算。實驗專用服務器WLVLAB由Java語言編寫,由通訊層服務器端程序與仿真控制層之間的交互程序和傳輸層服務器端程序構成。其具體原理是,表現層通過Java Applet程序接受用戶設置的實驗參數,通過Java Socket進行網絡通信,將實驗參數傳送到實驗專用服務器WLVLAB上。專用服務器WLVLAB通過部署在服務器端的仿真控制層Matlab的COM接口,將實驗參數傳送到仿真控制層進行仿真運算,運算結束后再將實驗結果傳送回客戶端。表現層上的Java Applet程序根據實驗結果值動態地去控制 VRML場景中三維實驗模型,顯示實驗結果圖。本系統支持多線程機制,能同時允許多個使用者訪問本系統。

二 系統關鍵技術的實現
1 三維實驗場景文件
虛擬實驗場景采用VRML技術實現。VRML是虛擬現實建模語言,是一種三維場景的描述性語言,其基本原理是用文本信息描述三維場景,在Internet上傳輸,在本地機上由VRML的瀏覽器解釋生成三維場景[10]。VRML源文件是一種ASCII碼的描述語言,一般使用記事本就可以編寫,但是直接使用VRML語言編寫三維場景比較煩瑣,通常采用專門編輯器構建,如V-Realm Builder2.0,VrmlPad,Cosmo World等。對于復雜的三維場景可以采用3DS Max建模,它提供了VRML插件輔助工具,可直接輸出場景,包括幾何造型、材質、動畫等。
2 客戶端Java Applet程序實現
Java Applet能跨平臺地運行于網絡中的各種不同類型的計算機上。客戶端的計算機,只要安裝了支持Java的瀏覽器,一旦和網絡中的服務器建立了連接,就可以從服務器端下載嵌入了Applet的網頁文件,并在本地機的瀏覽器上運行含有Applet的網頁。通過文本編輯器編寫的Java Applet源程序必須經過編譯,生成擴展名為.class字節碼程序才能嵌入網頁文件中運行。表現層Java Applet程序主要實現以下幾部分功能:
(1) 界面布局:包括實驗參數、控制按鈕的設置與布局。
(2) 與VRML場景進行交互:由于系統需要在瀏覽者與VRML場景之間進行頻繁的信息交換,所以選用VRML2.0提供的外部編程接口EAI對VRML場景進行擴展,實現與Java Applet的交互[11]。EAI在Java Applet與VRML場景進行通訊時,首先需要獲取Brower類的實例,通過調用封裝在vrml.external包中的Browser類的靜態方法getBrowser()來實現,在Java Applet中建立Browser對象后即標識了一個VRML場景。Browser類包含獲取當前瀏覽器環境信息的各種方法,其中通過調用getNode()方法直接獲得VRML場景中使用DEF關鍵字定義的節點對象,調用getEventOut()、getEventIn()方法獲得訪問節點的入事件、出事件。
(3) 實驗結果圖生成:當點擊實驗相圖按鈕時,打開實驗曲線圖窗口,根據服務器端傳來的實驗數據顯示實驗相圖。
3 實驗仿真程序/模型的實現
仿真控制層是整個網絡虛擬實驗系統的控制中心,主要負責實驗模型的仿真。該層由Matlab環境和運行其中的仿真程序構成。選用Matlab作為仿真控制層開發工具,因為Matlab語言具有十分強大的科學計算功能,簡單易用。Matlab實用于各種操作系統,具有豐富的接口[12],可以方便地繼承到其他編程語言中。通過Matlab的COM和DDE接口可以方便地建立與Java的連接。 Simulink是Matlab最重要的組件之一,它提供一個動態系統建模、仿真和綜合分析的集成環境。在這個環境中,無須書寫大量的程序,只需要通過簡單直觀的鼠標操作,就可以構造出復雜的仿真模型。
4 專用服務器的實現
專用服務器WLVLAB通過Microsoft Visual J++開發環境實現,目的是為了簡單地實現Java與Matlab之間的接口,便于實現其與仿真軟件的交互。
在網絡虛擬實驗系統中,客戶端進行實驗的請求經常是隨機的,服務器端可能會需要同時處理多個用戶端的請求信息。為了解決服務器與多客戶機之間網絡通信的問題,可以利用Java 中多線程技術和Socket 通信相結合來實現,即對每個被接受請求的客戶機都產生一個子線程來處理。即一旦有客戶請求到達,服務器同時產生一個子線程來處理該客戶機的請求。
Java語言提供的網絡操作的類大多存放在Java.net包中。在Java.net程序包中提供了Socket和ServerSocket兩個類來進行套接字編程,Socket提供了客戶機的套接字接口,ServerSocket提供了服務器套接字接口。對于客戶端,通過給類Socket提供服務器的IP地址,或者主機名,服務器的端口號,就可以和服務器端建立連接。該Socket對應的輸入流連接到服務器的輸出流,輸出流連接到服務器的輸入流,通信結束后,調用該Socket對象的close()方法進行關閉連接。對于服務器端,通過生成一個ServerSocket對象用于監聽,服務器的ServerSocket.accept()收到一個來自Clinet端的請求,并返回一個用于與該Client通信的Socket對象。應用程序調用該對象方法getInputStream(),getOutputStream()可以獲得向該連接讀寫數據的輸入/輸出流,再調用輸入/輸出流提供的讀寫函數read(),writeline()等實現與對方的通信。與該客戶通信完畢后,調用Socket.close()關閉Socket,這時,服務器仍處于監聽狀態,繼續接受客戶請求。調用ServerSocket.close()結束監聽服務,終止服務器運行。
Java語言與Matlab語言之間的通信由ActiveX自動協議來執行,通過使用mlapp.tlb的Matlab類型定義文件,可以簡單地生成一組用來完成ActiveX與Matlab通信的Java類和接口函數。用戶只須創建實例對象,通過使用這些類提供的方法,任何Matlab命令都可以以變元的方式在它的工作空間進行計算,計算結果以字符串的方式返回。由于Matlab可以從命令行運行Simulink模型,利用上述方法也能輕松實現Simulink與Java的交互。
當多用戶同時訪問服務器中的同一個實驗時,就會在Matlab基本工作空間中生成多個同名變量,這些同名變量會相互覆蓋,最終會導致實驗界面返回的實驗結果不正確。為了解決這個問題,我們采用用戶文件和用戶變量的方式,即為每個用戶根據訪問的先后順序指定一個用戶號,將這個用戶號附加在仿真文件和仿真變量的末尾。這樣,原先的仿真文件和變量復制成用戶文件和用戶變量,在Matlab基本工作空間中不再產生沖突。當仿真結束后,再將這些用戶文件和變量進行刪除。如啟動jl.mdl模型代碼為:
matlab.Execute(\"set_param('jl\"+String.valueOf(Class1.yh)+\"','simulationcommand','start');\");
要將模型文件拷貝至同一個目錄下,以原文件名+用戶號為新的文件名,可以使用以下代碼實現:
matlab.Execute(\"copyfile('E:/javavsmatlab/mwenjian/jl.mdl',
'E:/javavsmatlab/mwenjian/jl\"+String.valueOf(Class1.yh)+\".mdl')\");
三 實例
為了提供一個基于網絡的良好而又具備可交互性的實驗環境,我們利用VRML、Java和Matlab三種技術混合開發了的理論力學中“鉸鏈連接的雙擺實驗”網絡虛擬實驗系統。圖2為鉸鏈連接的雙擺實驗原理頁面。當點擊“實驗操作”鏈接后,瀏覽器中顯示逼真的三維仿真交互界面,使用鼠標和鍵盤可以方便的進行仿真控制。在文本輸入框中分別設置實驗參數:上擺初始角度為190,初始角速度為20,下擺初始角度為-160,初始角速度為-30,仿真時間為30秒,點擊“運行”按鈕后,鉸鏈連接的雙擺實驗模型開始運動。實驗界面如圖3所示。

當鉸鏈連接的雙擺實驗模型運動結束以后,點擊“上擺角度與角速度關系相圖”按鈕,得到實驗中上擺角度與角速度關系相圖,如圖4所示。點擊“下擺角度與角速度關系相圖”按鈕,得到下擺角度與角速度關系相圖,如圖5所示。點擊“上下擺的時間序列圖”按鈕,得到上下擺的時間序列圖,如圖6所示。根據這些實驗結果可知,當參數設置是上擺初始角度為190,初始角速度為20,下擺初始角度為-160,初始角速度為-30,仿真時間為30秒時,系統是混沌態。


四 結論
作者運用VRML、Java和Matlab技術構建了“鉸鏈連接的雙擺實驗”和“勻質陀螺在重力場中的應用”兩個網絡虛擬實驗系統,經過實際使用和網絡測試,此方案適用于復雜物理模型的仿真,充分發揮了多種技術的優勢,在呈現方式、傳輸速度和算法編程上存在很多優勢。
1 實驗發行成本低、運行簡單。本系統采用B/S結構,這種結構滿足了網絡實驗教學的需要。客戶端只需一個集成Java虛擬機的瀏覽器即可運行實驗,同時由于網絡虛擬實驗內容存放在服務器端,易于實驗功能擴展和管理。
2 在呈現方式上采用3D技術,豐富了媒體的表現形式,增強了學生實驗的臨境感。
3傳輸速度存在優勢。服務器端與客戶端之間以TCP/IP作為網絡通信協議,數據傳輸保持雙向和持續的通信。服務器端和客戶端的計算負擔平衡,都比較輕,當多用戶同時訪問服務器時,不會導致服務器過載的局面,符合虛擬實驗仿真數據網絡傳輸的要求。
4 由于實驗模型的計算使用了專用計算軟件,在實驗數據計算和算法編程方面也表現出極強的優勢。
同時,良好的實驗交互方式促進了學生與虛擬實驗模型的互動。學生可以通過鼠標拖拽實驗對象,或者通過鍵盤設置實驗參數操作虛擬實驗模型,能在客戶端看到三維實驗模型的運動過程,通過相圖、時序圖等形式觀察實驗結果。實驗過程和實驗結果的直觀化、形象化,能夠促進學生對實驗的深入探究,提高其問題解決能力。
參考文獻
[1] 劉志鏡,李凌霞.基于Java的網絡虛擬電路實驗室的研究[J].計算機應用,2003,(8):103-105.
[2] 粟丹,李仁發,彭勇,等.遠程虛擬實驗的構建[J].計算機應用研究,2003,(2):117-119.
[3] 李莉玲,方康玲,周波.LabVIEW在遠程虛擬實驗平臺中的應用[J]. 武漢科技大學學報(自然科學版),2004,27(4): 403 -405.
[4] 沈曦,常勝利,李修建,等.基于ActiveX的網絡虛擬實驗系統的設計[J].計算機工程與應用,2002,(24):244-246.
[5] 金俠杰,邢科禮,林財興.基于VRML-JAVA 的網絡交互式虛擬裝配環境構建[J].計算機仿真,2004,(10):126-129.
[6] 朱正強,吳介一,孔競飛,等.基于VRML-Java的虛擬現實技術在可視化裝配中的應用[J].東南大學學報(自然科學版),2002,32(1):24-28.
[7] 吳波,周之平,張颯兵,等.基于VRML-JAVA的虛擬現實及其協同環境的開發[J].計算機工程與應用,2004,(7):136-138.
[8] 潛立標.網絡虛擬實驗室的研究與開發[J].浙江工商學院學報,2005,(4):52-54.
[9] 鄭笑建.控制系統網絡虛擬實驗室的研究與開發[D].浙江:浙江工業大學,2004.
[10] 黃鐵軍,柳鍵編譯.VRML國際標準與應用指南[M].北京:電子工業出版社,1999:5-9.
[11] 汪興謙.VRML與JAVA編程實例講解[M].北京:中國水利水電出版社,2002:7-12.
[12] The MathWorks inc.MATLAB External Interfaces[EB/OL].