APP下载

Unity3D下构件化虚拟仪器功能实现方法

2020-07-14阚研何岭松谢道旺徐玉飞

软件导刊 2020年1期
关键词:虚拟实验虚拟仪器虚拟现实

阚研 何岭松 谢道旺 徐玉飞

摘要:三维虚拟现实漫游仿真和虚拟仪器实验过程仿真是目前两种主要仿真手段,前者能够很好地模拟真实实验场景,后者则能更好地仿真实验细节。为了解决传统虚拟实验交互性弱、开发周期长等问题,提出了一种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-),男,博士,华中科技大学机械科学与工程学院教授、博士生导师,研究方向为计算机虚拟仪器、信号处理和虚拟样机。本文通讯作者:何岭松。

猜你喜欢

虚拟实验虚拟仪器虚拟现实
PCB 刻制机功能开发及在虚拟仪器实验室建设中的应用
REALITY BITES
虚拟仪器及其在电工电子实验中的应用
虚拟现实技术在初中物理实验教学中的应用
虚拟仪器技术在农业装备测控中的应用
虚拟现实技术向科幻小说借灵感
基于虚拟仪器的DMFC实时监控系统
浅谈虚拟现实