计算机系统应用  2019, Vol. 28 Issue (2): 107-112   PDF    
具有协同交流功能的虚拟物理实验室
陈昭喜1, 许爱军2     
1. 广州中医药大学 医学信息工程学院, 广州 510006;
2. 广州铁路职业技术学院 创新创业学院, 广州 510430
摘要:为解决虚拟实验中师生不能有效交流的问题,采用VRML-JS-Java通信机制实现了一种具有交流功能的虚拟物理实验室. 介绍了实验室总体设计和场景层次结构,阐述了三维场景的建模过程和流程,重点对交互功能的服务器端、客户端、用户间的交互与感知,以及VRML虚拟场景与Java接口等关键技术进行实现. 经过发布与测试,表明虚拟物理实验室具有良好的层次性、可重用性和互操作性,在大学实验教学改革中具有较高的实用价值.
关键词: VRML    虚拟现实    虚拟物理实验室    协同交互    
Cooperate and Communicate Virtual Laboratory of Physics
CHEN Zhao-Xi1, XU Ai-Jun2     
1. School of Medical Information Engineering, Guangzhou University of Chinese Medicine, Guangzhou 510006, China;
2. Innovation and entrepreneurship College, Guangzhou Institute of Railway Technology, Guangzhou 510430, China
Foundation item: Science and Technology Program of Guangdong Province (2015A030401005)
Abstract: In order to solve the problem that teachers and students cannot communicate effectively in virtual experiment, this study uses VRML-JS-Java communication mechanism to realize a virtual physics laboratory. Firstly, the paper introduces the overall design and scene hierarchy of the laboratory. Secondly, it expounds the modeling process and process of three-dimensional scene, and focuses on the realization of the interaction and perception among server, client, and user of interactive function, as well as key technologies such as VRML virtual scene and Java interface. Finally, the experiments show that the virtual physics laboratory has good reusability and interoperability in university experimental teaching.
Key words: VRML     virtual reality     virtual physics laboratory     collaborative interaction    

作为信息技术新的增长点, 虚拟现实技术(VR, Virtual Reality)在近年得到蓬勃发展. 为克服纯粹的场景模拟和单用户操作带来的缺陷, 支持多用户协同工作的协同虚拟环境成为当前研究的热点和难点.

关于协同虚拟环境的研究, 目前主要集中在多用户协同工作的方法和技术方面, 如协作模型、任务划分方法, 以及时间、空间一致性等, 并已取得一些重要进展. 如文献[1]提出基于VRML白板(VRML Whiteboard)的方法, 使异地分布的用户同步参与产品设计制作过程; 文献[2]建立一个面向教育者的分布式远程教育和交流交互平台, 实现了协同虚拟环境在地理教学中的应用; 文献[3]采用VRML Automation接口实现了虚拟模型协同设计和浏览的新方法; 文献[4]提出并实现了基于角色访问控制的分布式协同虚拟环境系统模型; 文献[5]构建了一个多用户协同工作的分布式虚拟环境等. 可见, 协同虚拟环境能广泛应用到多个领域, 在网络化、虚拟化、集成化、智能化、标准化方面取得一些研究成果. 但从现有文献看, 将协同虚拟环境应用到物理实验教学的研究还相对较少.

物理实验是提高学生动手实践能力、加深理解物理原理的重要手段. 在实验教学中, 学生往往缺乏对仪器设备的基本认知, 导致实验操作效率低下. 同时, 学生在预习实验时往往缺乏实验环境, 导致预习效果不佳. 为解决实验教学中的这些问题, 本文采用VRML-JS-Java通信机制, 设计实现了具有协同交流功能的虚拟物理实验室, 在实验教学中取得良好应用效果, 为大学实验教学改革提供了借鉴和案例.

1 虚拟物理实验室总体设计 1.1 需求分析与场景层次设计

虚拟物理实验室作为真实物理实验的有效补充, 用户进入虚拟实验室后应有身临其境之感. 为此, 虚拟物理实验室要满足以下需求:

(1)能真实展示物理实验室的整体环境和实验场景, 如: 门、窗、书柜、试验台、实验设备等;

(2)能逼真展示若干个虚拟实验, 如游标尺测量等;

(3)在实验过程中能与其他用户交流, 协同完成部分实验内容等;

(4)在漫游过程中能与环境进行简单交互, 如点击门窗能开关、点击窗帘能升降等功能.

为满足以上需求, 将虚拟物理实验室分为实验室环境设计和三维人体设计两大部分. 其中, 实验室环境设计包括装潢设计(如: 门窗、黑板、天花)和设施设备设计(如: 课桌椅、试验台、书柜), 三维人体设计包含教师和学生人体设计等. 本文选取物理实验室大门作为参照物, 依照由外至内、由下至上、从左至右的原则, 形成虚拟场景层次结构如图1所示.

1.2 开发工具与交互功能设计

文献[6,7]详细阐述了VRML虚拟实验系统的设计流程, 大体思路是: 首先在三维建模软件中进行物体模型设计; 其次用可视化编辑软件将单个模型进行合成; 再次在VRML文本编辑工具中添加交互节点; 最后对模型文件进行压缩和优化, 并进行发布, 具体流程如图2所示.

图 1 虚拟物理实验室的场景层次

图 2 虚拟物理实验室的开发流程

本文采用的三维建模工具是3D Studio Max、可视化编辑工具是CosmoWorld、VRML文本编辑工具是Vrmlpad、三维人体模型设计工具是Poser、预览浏览器是Cortona VRML.

交互设计是虚拟实验系统最为核心的功能, 本文采用的交互设计原理如图3所示.

图 3 虚拟物理实验室的协同交流原理

2 虚拟物理实验室的三维场景构建

构建三维场景的目的是模拟真实物理实验室, 营造出一种更逼真的环境氛围, 大体可以分为实验室框架设计、装潢设计、设施设备设计、视点灯光设计等.

2.1 实验室框架设计

虚拟实验室的整体空间是一个几何立方体空间, 本文采用多个Box节点, 分别为实验室四周的墙体、天花板进行建模, 然后“拼接”出一个长为38.5、宽3、高16.6(均为VRML单位)的封闭几何体作为实验室的整体框架.

2.2 实验室装潢设计

实验室装潢设计主要利用VRML的几何节点(如: Box、Cone等)来设计装潢几何体的形状及大小, 利用外观节点(Appearance)中的材质节点(Material)定义装潢几何外观的材料属性. 除窗户的背景图和黑板是通过文理包装节点实现外, 其他物件大多采用Box节点实现, 或是对它们分别建模后, 通过Inline节点进行连接, 再设置translation、rotation和scale值, 将坐标、旋转角度和缩放比例分别调整.

2.3 实验室设施设备设计

设计实验室设施设备之前, 要先进行取样, 以获取真实模型的大小和尺寸, 再对每个设施设备分别建模设计. 下面以实验椅子为例介绍模型构建过程.

从几何结构看, 实验椅子可以分解为塑料椅面、金属支架、金属底座和滑轮. 椅面采用扩展几何体的“切角圆柱体”, 金属支架使用基本几何体的“管状体”, 金属底座使用基本几何体的长方体, 滑轮使用一个切角圆柱体和扩展几何体的“纺锤”进行组合. 金属支架的高度略大于椅子面的半径, 金属底座中长方体的长度略小于金属支架的半径. 创建完上述物体后, 根据三视图将各个物体进行移动, 然后根据实际更改物体的尺寸, 得到如图4所示效果图.

图 4 实验椅的建模过程

然后, 在前视图中将金属支架沿y轴向下旋转, 调整滑轮位置, 将支架和滑轮连接成组, 克隆选项选择为“实例”. 最终效果图如图5所示.

2.4 视点和灯光设计

所谓视点是指用户的3D替身登录虚拟物理实验室后能在各个位置观察实验室中的设施设备, 并根据个人意愿参与到实验中去. 在虚拟实验室的场景中, 用Viewpoint节点对场景进行视点的设置. 系统中设置3个视点, 分别是实验室后方视点、前方视点以及外部视点.

图 5 建模后的椅子

灯光的作用是使虚拟物理实验室具备足够的光线 [8]. 本文的虚拟实验室设置了6束平行光, 分别是xyz轴的正方向和负方向各3束. 系统设置了一个LightSwitch的Script节点. 节点中设计了一个布尔类型的switch_changed出事件, 当switch_changed为true时, 打开光源, 相应的域值发生变化; 当switch_changed为false时, 改变相应的域值关闭光源. 节点中与光源开关相关的域值分别为SwitchOn和SwitchOff.

3 虚拟物理实验室的交互设计与实现 3.1 服务器端

虚拟物理实验室的协同讨论功能类似于聊天室, 实现流程图如图6所示.

由于用户间需要交流讨论, 服务器需要负责监听客户端的连接和实验系统的连接, 采用Socket和线程来实现与客户端的连接, 并存储在线用户情况和客户端连接服务器的请求情况.

服务器端主要由接受程序和分发程序组成. 接收程序的主要功能是将监听到的用户交互信息、位置更新信息等存储到服务器端; 分发程序的主要功能是将收到的信息分发给其他用户, 以便实时感知其他用户的状态信息[9]. 除此之外, 服务器端还包含用户登录界面和主要系统操作界面. 登录界面提供用户注册和登录窗口, 操作界面显示用户的个人信息、对系统的操作按钮、与其他用户间的讨论内容, 以及虚拟讨论场景的显示等.

图 6 服务器端的程序流程图

3.2 客户端

客户端主要提供用户的登录和操作功能. 本系统中, 用户主要分为教师和学生两种类型. 用户登录时可以选择用户类型. 用户在客户端的操作界面中输入用户名、服务器主机的IP地址和服务程序的端口号, 点击“连接”按钮与服务器端进行连接, 即可进入到虚拟物理实验室中; 通过“断开”按钮, 与服务器端断开连接. 客户端也有一个用户列表来显示当前系统上的在线用户列表. 其他用户的位置可以在本用户的Java控制台上显示, 本用户的行为也可以发送到其他用户的Java控制台上显示, 从而实现场景的一致性.

3.3 用户间的交互与感知

在协同多用户系统中, 用户间要彼此感知状态与行为的变化, 通常利用VRML的Proxim-itySensor节点跟踪用视点的移动获得位置和方向值. 通过向其他用户发送这个值的变化信息, 其他用户就能感知该用户的移动方向和变化状态. 而当用户登录或者退出时, 场景中的替身也会同步地增加或消失.

本文的虚拟实验系统采用开放式的登录方式, 设置了用户信息数据库和用户信息文本文件. 用户只要访问了包含有聊天讨论Applet程序的HTML网页, 与聊天程序的服务器进行连接后, 即可进入实验室参与讨论. 用Socket和线程控制来实现多个用户之间的协同交流.

在门、窗交互方面, 系统定义了Touch触摸传感器、Time时间传感器. 当单击实验室入口的门板时, 信息被触摸传感器Touch获取, 通过事件路由ROUTE/TO将事件touchTime传递给事件startTime. 将门板的坐标位置信息进行改变, 完成开门动作; 门开动作完成后, 又通过事件路由ROUTE/TO将门的坐标信息恢复到关闭状态, 完成门的自动关闭.

3.4 VRML虚拟场景与Java的接口

本文采用Java程序对虚拟场景进行控制. JS是嵌套于网页中的脚本语言, 既可以访问VRML虚拟场景又可以访问Applet小程序, 因此基于网页脚本交互的基本思想, 通过JS语言编写函数作为桥梁, 采用VRML-JS-Java的通信机制实现VRML和Applet之间的通信. 以JS为桥梁实现VRML与Java Applet之间参数传递的步骤及代码如下.

第一步, 用VRML文本编辑器在场景文件中添加Script节点和触发器, 对需要访问的节点用DEF定义名称, 在文件后端添加路由. 在Script节点入事件处理函数中调用网页脚本的代码为:

Browser.loadURL(‘javascrip:fun(+参数+)’, ’’);

其中, Browser为浏览器的对象实例, loadURL为浏览器的接口函数, fun为脚本函数名.

第二步, 分析各功能模块及调用关系, 设计Java Applet子类, 编译成目标文件, 两项主要工作是:

一是引用jsobject包. 由于项目实施中使用JDK1.6版本, 高于1.4版本, jsobject包在plugin.jar中. 需要将其加入到classpath中, 以便能够顺利地在开发时编译.

二是调用JavaScript函数. 在Applet的init()方法中, 可通过“win=JSObject.getWindow(this);”语句获取JavaScript窗口句柄, 引用当前文档窗口. 有了win参数, 才可以调用JS的相应函数. 在相应的方法中, 通过“win.eval(“javascript:方法名(“+参数+”)”);”语句, 将获得的参数传递到JS相应的函数中, 再由JS函数将得到的参数付给VRML虚拟场景中的相应结点, 这样便实现了对虚拟场景的控制.

第三步, 在网页源文件中添加VRML场景文件、Java Applet以及脚本函数. 加入网页脚本函数一般有两种类型, 一种是加入的函数使VRML可以通过JS调用Applet小程序; 另一种是定义VRML虚拟场景的引擎, 获得对虚拟场景的引用.

4 虚拟物理实验室的效果测试 4.1 虚拟物理实验室的发布

虚拟物理实验室设置了黑板、教师工作台、学生课桌椅、两个书柜、一台空调、一台饮水机以及门窗等模型. 将这些模型组合完成后, 可以采用微软IIS服务器进行发布, 发布时将Web服务器的MIME类型设置为model/VRML, 整体效果图如图7所示.

图 7 虚拟物理实验室内部效果

4.2 游标卡尺实验的实现效果

在虚拟物理实验中设置了若干个实验, 用户单击试验台上的相应实验, 就调出实验系统, 图8是游标卡尺实验效果图. 在实验界面的左上角, 设置了退出实验、查看读数、退出读数三个按钮, 在正上方设置了输入读数的文本框.

图 8 游标卡尺实验效果

4.3 实验交流的实现效果

虚拟讨论系统需要将VRML虚拟场景和Java Applet程序一起嵌套到HTML网页文件中. 用户通过访问服务器主机上的HTML网页文件, 进入到虚拟讨论系统中. 服务器端的程序要始终运行, 用户方可连接服务器, 实现与其他用户的信息交流. HTML网页的访问情况如图9示.

4.4 其他交互的实现效果

为逼真模拟出虚拟物理实验室, 我们在实验系统中添加了一些鼠标交互动作, 如用鼠标单击窗帘, 窗帘可拉开, 再次单击则窗帘关闭, 实现效果如图10所示; 用鼠标点击实验大门, 大门可以打开, 再次打击则大门关闭, 实现效果如图11所示.

图 9 实验交流场景效果图

图 10 窗帘交互效果

图 11 开门交互效果

5 结论与展望

本文实现了一种具有协同交流功能的虚拟物理实验室, 并具有以下特点:

(1)具有操作简单、使用方便、逼真度高等特点, 用户只需要下载VRML插件就可以访问, 实现对虚拟物理实验室的在线浏览;

(2)具有交流便利、协同工作的特点, 用户登录系统后通过选择角色, 可以实现师生之间的沟通交流, 协同完成实验内容;

(3)具有良好的层次性、可重用性和互操作性, 支持跨平台运行, 易于扩展和维护.

本文以JS为桥梁实现VRML与Java Applet之间传递参数, 从而实现了具有交流功能的虚拟物理实验室, 解决了虚拟实验过程中学生交流不畅的问题. 在实验内容上, 目前仅完成游标卡尺的测量, 未来将增加其他物理实验内容, 并进一步提升系统的伸缩性、兼容性和开放性, 这也是今后研究工作的重点.

参考文献
[1]
李文航, 龚建华, 周洁萍. 协同虚拟地理教学环境的设计与实现. 武汉大学学报·信息科学版, 2008, 33(3): 289-292.
[2]
周自强, 沈连婠, 赵玮, 等. 面向用户的产品虚拟模型协同讨论环境的实现. 工程图学学报, 2005, 26(3): 5-11. DOI:10.3969/j.issn.1003-0158.2005.03.002
[3]
赵志凯, 刘厚泉, 李忠福. 基于角色的分布式协同虚拟环境建模. 微计算机信息, 2008, 24(15): 236-237, 279. DOI:10.3969/j.issn.1008-0570.2008.15.098
[4]
许爱军, 张文金, 易丹. 基于VRML的虚拟现实技术及应用. 计算机与数字工程, 2009, 37(4): 186-189. DOI:10.3969/j.issn.1672-9722.2009.04.056
[5]
许爱军, 张文金, 黄正午. 支持协同工作的VRML网络虚拟现实系统. 计算机仿真, 2009, 26(11): 287-290. DOI:10.3969/j.issn.1006-9348.2009.11.071
[6]
李玉霞. 基于VRML的多用户虚拟教室的研究[硕士学位论文]. 哈尔滨: 哈尔滨工程大学, 2009.
[7]
王玉田. 基于VRML与Java交互的研究. 电脑知识与技术, 2009, 5(28): 7910-7912. DOI:10.3969/j.issn.1009-3044.2009.28.031
[8]
许爱军, 李锋. VRML虚拟图书馆的构建与优化浏览. 计算机系统应用, 2016, 25(4): 252-257.
[9]
许爱军. VRML协同虚拟现实系统的研究与应用. 计算机技术与发展, 2016, 26(6): 115-118, 122.