王开宇, 李安琪, 马 驰, 陈 景, 姜艳红, 于楠楠
(大连理工大学 电信学部, 辽宁 大连 116024)
基于仿真技术的数字电路3D虚拟实验室的设计
王开宇, 李安琪, 马 驰, 陈 景, 姜艳红, 于楠楠
(大连理工大学 电信学部, 辽宁 大连 116024)
基于虚拟仪器、虚拟实验和虚拟现实技术现状,给出数字电路3D虚拟实验室的架构设计、技术路线和解决方案,利用建模工具3ds Max和现场沉浸感强的游戏引擎Unity3D创建了数字电路3D可交互虚拟实验平台,搭建平台的静态模型框架、动态交互控制模块以及实验操作反馈运行机制。该实验室具有良好的三维交互性、可操作性、功能完善和场景逼真生动的特点,激发学生创造性和想象力,在教学领域具有潜在的应用价值和开发价值。
仿真技术; 虚拟实验; 3ds Max; Unity3D
虚拟现实(Virtual Reality)是在计算机仿真技术、计算机图形学、人机接口技术、多媒体技术以及传感技术的基础上综合发展起来的交叉学科[1],而具有沉浸感的虚拟仿真实验,则是依托虚拟现实技术而产生发展起来的创新型实验模式。
与国外虚拟现实技术相比[2],国内虚拟仿真技术虽起步较晚,但是随着国家对虚拟仿真技术的重视和加大经费的投入,虚拟仿真技术得到了快速发展,我们开发出了自己的虚拟仿真应用系统并在工业电子、机械等生产研发部门体现着强大的优越性[3]。尤其是在军事模拟、数字化显示、医学[4]、商业宣传[5]、工业研发、教学培训机构[6]等与人们生活息息相关的产业,逼真的虚拟现象和我们的日常生活已经密不可分。
本文采用建模工具3ds Max建立数字电路实验环境的三维元素,搭建数字电路实验所用的桌椅、实验箱、芯片、信号灯、发光二极管及导线等,同时,将这些模型导入Unity3D进行用户交互功能编辑,针对数字电路中组合电路和逻辑电路特点,利用VS脚本编辑器对虚拟器件模型进行独立开发[7]。虚拟实验的功能设计主要包括电源开关的总体控制、操作单击各个虚拟仪器碰撞体响应控制、与或非芯片逻辑功能模拟、电路连线次序控制、文本输出和提示控制、实验界面跳转控制、实验重新开始复位控制及实验操作者视角控制等各个部分[8]。
1.1 数字电路虚拟实验室开发流程
设计一套完备的虚拟实验室需要做到以下 4 个方面:形象的外形外观、精细的内部结构、真实的电路原理、逼真的仿真现象[9]。其具体开发流程如图1所示。
图1 数字电路三维虚拟实验室开发流程
从初建模型到程序控制,中间的每一步骤包含着精心设计,最为关键的环节在静态建模和组装交互制作2个板块。静态建模就是建立实验室静态模型,组装交互制作是基于Unity3D在静态的模型上添加自定义组件和动态组件,赋予真实的属性(这个过程需要挂载C#脚本),使之能够像真实物体那样存在,进行元素交互、视觉交互和人机交互。
系统设计选取了10个经典的代表性综合实验,分别是:交通灯工作状态控制电路、水泵启停控制电路、模11加法计数器、灯光控制逻辑电路、序列信号发生器、光控路灯开关控制电路、叮咚门铃电路、水龙头控制电路、双向移位寄存器、节日彩灯控制电路。数字电路三维虚拟实验室整体框架设计如图2所示。
图2 数字电路3D虚拟实验室整体框架
1.2 数字电路虚拟实验室模型的构建
基于3ds Max创作效果较好的3种建模技术:几何建模、图像建模,还有将两者结合起来的混合建模技术[10]。我们所搭建的数字电路虚拟实验室静态模型包括:(1)实验环境部分:实验桌椅、墙壁、书架、地板、红绿灯;(2)实验操作部分:数电实验箱、功能芯片、数码管、电路原理显示屏、电源开关、导线、发光二极管、水箱水泵、继电器等。
将实验室从教学楼搬到了计算机上,为了提高质感和视觉效果,实验中对所需仪器逐一建模生成,并通过渲染器进行烘焙渲染、贴图,增强真实感[11]。在实验室场景中不可避免地使用属性相同的模型,如图3所示,虚拟实验环境中的桌椅及书架,需要用到建模技术中的“合并原则”和模型拷贝技术,同时也可多次用到3ds Max中贴图烘焙、关联复制、群组等功能,有效降低建模复杂程度。
数电实验箱是整个实验操作的中心,该部分的模型包括电阻、引脚端口、二极管、功能芯片、电容、面板层、螺丝钉、电源开关、实验箱把手等,较为复杂的模型就要利用高级建模工具3ds Max将简单模型取交集、并集、插集,同时通过旋转、缩放、拉伸功能调整模型的基本轮廓,再通过复制、组合、打造,合成更为复杂的模型。也可以利用3ds Max自带的Mesh渲染器、Patch面片以及Nurbs等建模工具构建理想的模型。模型外形塑造是一个较为费时、费力的过程。
图4中可看到实验箱上的端口数量十分多,为了减少场景在计算机上占用的资源,所有的端口模型公用一个渲染器,这样也便于调整模型的显示效果。在模型设计过程中,可通过鼠标输入调整视角从三维角度观察塑造模型,最大程度上将建模过程简单化。
数字电路实验用到的功能芯片有很多,包括74LS04反相器、74LS08二输入四与门芯片、74LS32 两输入四与门芯片、555定时器等多种。为了增强实验的沉浸性,其模型的构建要从芯片内部结构入手,找出实验操作涉及的关键部件及其连接关系,为其添加必要的仿真属性。
实验环境、实验箱及功能芯片等基础的实验仪器模型建立好后,就要开始建立电路连接所用的导线,实验中的电路连接方式为:单击芯片中某2个端口,引出一条立体的带有弯曲度导线跨接在2个端口中心。在3ds Max中能较轻松建立高度不同、旋转方向不同的导线,每个导线由几个锚点确定,某个锚点确定导线长度,某个锚点确定导线方向,某个锚点定位导线位置,对这几个锚点恰当调整就能得到理想的导线模型,如图5所示。图5中有的导线材质和颜色选择完毕,有的导线处于加工初期,可以看到导线拐角处采用弧度平滑过渡的形式,确保建模精细,看起来不生硬。
图4 数字电路实验箱
图5 电路导线模型
在已经开发的2个实验中,实验一效果显示部分为红绿灯逻辑控制,实现起来相对简单;实验二效果输出部分为2个水泵启停控制实验,该部分无论内部结构还是外部形体都是相对复杂的结构,在2个水泵之间还有1个透明材质的水箱如图6所示。上面有3个水位传感器,用于监测不同水位信号给后台,从而实现不同水位逻辑控制水泵启停。
图6 水箱模型
依托数字电路虚拟实验室的整体框架,将虚拟实验开发过程分组分块,开发出完备功能[12],具体如图7所示,这样利于一步步调试纠错。
图7 功能设计
2.1 逻辑抽象及功能开发
本系统共10个综合性实验,基本上是关于组合逻辑电路的设计:根据实际的逻辑问题,设计出所要求的逻辑功能电路。以已经开发完毕的实验二水泵启停控制电路为例:将编写好的控制脚本拖动到开关对象上,在电源接通的状态,当检测到电路连线成功后,将连线脚本DrawLine中的连线成功标志isDraw置为true,变量isDraw实验输出现象出现的先决判断条件。在水体控制脚本中,若连线成功标志变量isDraw为true,则将布尔变量x1设为true。此过程需多个脚本共同控制完成,通过变量相互控制、相互联系,每个脚本中的变量之间存在着逻辑关系,水位A、B、C处的传感器一旦碰撞触发,输入变量由低到高设为X1、X2、X3,水面低于检测元件A、B、C时,传感器件给出高电平1;水面高于传感器件时,传感器件给出低电平0。而输出变量设为ML、MS,按照数字电路原理,其控制关系满足公式(1)和公式(2):
(1)
(2)
2.2 场景视角控制的实现
系统采用第一人称控制视角漫游整个实验,即通过鼠标左击进入子实验。鼠标右击拖动实现以整个实验模型为中心的旋转和摇移,按下鼠标中键拖动实现对以整个模型为中心的小范围平移,滚动鼠标滚轮实现当前正画面的放大与缩小。当然,无论是平移、缩放还是摇移都要在以实验箱为中心前提下有一个模型运动的上下限,这也是便于实验控制的前提。实现该功能的代码如下,其中Input.GetMouseButton(1)中的1表示右键,实现角度控制。若是0表示左键,2表示中键。
if(Input.GetMouseButton(1)){ //检测到鼠标右击 x+=Input.GetAxis(″Mouse X″) * xSpeed * 0.02f; //设定新位置横坐标 y-=Input.GetAxis(″Mouse Y″) * ySpeed * 0.02f; //设定新位置纵坐标 y=ClampAngle(y, yMinLimit, yMaxLimit); //设定Y方向 var rotation = Quaternion.Euler(y, x, 0); //旋转角度设定 var position = rotation * new Vector3(0.0f, 0.0f, -normalDistance) + CameraTarget; //设定指定物体旋转后新的位置 transform.rotation = rotation; //记录当前物体的旋转角 transform.position = position} //记录当前物体的位置
2.3 碰撞响应的实现
Unity3D中总共有3种碰撞检测方法[13],最为有效的检测方法是触发器碰撞,只要将带有该方法的脚本挂载到待碰撞的模型上即可。又如实验二中传感器检测水位上升过程中,水体碰撞器和传感器碰撞器碰撞触发,触发器碰撞后的响应控制是水体速度发生变化和两个水泵的启停。以下是碰撞体触发的3种代码表现形式。
(1) void OnMouseDown(){} //鼠标按下
(2) if(Input.GetMouseButtonDown(0)){}//鼠标左击
(3) void OnTriggerEnter(Collider collisionlnfo){}//发生触碰
2.4 界面跳转的实现
为了使数字电路虚拟实验系统结构更为清晰,将整个系统分为1个主界面和10个子实验逐个独立开发,这样模块独立,有利于理清设计思路,降低开发难度。当每个独立模块开发完毕,就要考虑各个子场景的相互连接,此时要为各个子场景添加跳转按钮及跳转语句实现界面跳转,场景跳转的情况分为3种:重新跳转到本界面(重启);系统关闭按钮;跳转到其他界面(链接)。这3种跳转命令,将整个实验系统归为一个统一有机整体,使实验操作者收放自如。
(1) 如下面的语句为第一种类型跳转命令:实现实验场景的复位。假如用户处于主界面场景“start”,当用户单击按钮sbr11“restart”时,实验环境重新跳转到start场景,可以重新开始子实验。这是一种最为简单的界面跳转命令。
if(GUI.Button (sbr11, ″restart″)) //如果检测按下按钮″restart″ {Application.LoadLevel(″start″);} //跳转到start场景
(2) 主界面和子实验场景右下角有退出按钮。子实验上的按钮功能为退出当前实验,返回到主界面,子实验按钮设置属于第三种界面跳转。这里介绍第二种类型跳转命令,主界面按钮的功能:退出整个虚拟实验系统。具体实现方法如下:
if(GUI.Button (sbr12, ″exit″)) //如果检测按下按钮″exit″ {Application.Quit();} //程序关闭,退出界面
(3) 有些实验情况并非一个跳转动作这么简单,如果实验已经进行或近完成,此时点击跳转按钮,而由于已经进行的实验操作使一些实验状态变量已经改变,则跳转的同时必须实现场景的复位即实验变量的复位,因为每跳转到一个新的场景,意味着重新打开界面,重新启动,这时就必须仔细考虑场景复位元素有哪些,往往将碰撞检测标志变量归为原始状态就可以达到归位的效果。
如下面的语句是重启本场景,可看到除了重新跳转到shiyan1场景外,还将DrawLine脚本下的isDraw和shift状态变量重置为false,其中布尔变量isDraw和shift分别代表电路连线成功标志和开关状态标志。可想而知,当重启场景,电路连线成功标志和开关状态标志必定是关闭状态。这属于第三种类型的界面跳转:带有状态复位的界面跳转。界面跳转命令用于虚拟实验系统使得实验进行更为灵活、有序,每个独立的子实验操作不受其他实验影响,同时这些独立的子实验又构成了一个整体。
if (GUI.Button (sbr, ″Restart″)) { //如果检测按下按钮″restart″ DrawLine.isDraw=false; //状态变量重置 DrawLine.shift=false; //状态变量重置 Application.LoadLevel (″shiyan1″);} //再进行场景跳转到″shiyan1″
2.5 数字电路实验功能的具体实现
完整的实验逻辑开发包括以下功能的具体实现:主界面和子界面之间的跳转、子场景中开关的控制、电路连线控制、输出现象控制。每个具体实验的输出取决于不同的输入状态,正确的开关及连线等状态是实验成功的关键。一个完整实验的开发不仅实现了实验环境及器材的高度仿真,在此基础上,改变了传统的教学模式,提高了学生的学习质量。
针对数字电路实验特点,结合实验者对电学虚拟仿真软件要求,深入探索了数字电路逻辑思想和逻辑代数知识,开发了一个用户体验良好的数字电路3D虚拟实验室。首先对整个系统的开发流程和功能模块实施明确的整体规划,搜集了大量素材,整合了多种方法手段,利用建模工具3ds Max创建了仿真度极高的数字电路实验教学虚拟仪器基本模型。将模型导入Unity引擎,在脚本编辑器Microsoft Visual Studio编写面向对象的控制脚本,实现对虚拟场景中的仪器实时精确控制。后期再度进行场景渲染与制作,完成了数字电路3D虚拟实验室的构建,实现组合逻辑电路再抽象与还原仿真,完成了虚拟教学环境中数字电路实验仿真。
References)
[1] 杨炎涛,张婷,宋琦,等.基于Virtools的虚拟实验系统构建[J].实验技术与管理,2008,25(9):92-95.
[2] 王健美,张旭,王勇,等.美国虚拟现实技术发展现状、政策及对我国的启示[J].科技管理研究,2010(14):37-38.
[3] 肖晓萍,向中凡.基于虚拟仪器技术的远程实验室的研究[J].仪器仪表标准化与计量,2004(3):15-16.
[4] 王振德,王艳春.虚拟现实技术及其在虚拟校园中的应用研究[J].安徽农业科学,2013,41(7):23-32.
[5] 王希凝,黄海燕.基于虚拟现实技术的博物馆展示设计[J].大众文艺,2010(7):76-77.
[6] 翟瑞卿.电子商务教学虚拟实验室设计与开发[D].山东:山东大学,2011.
[7] 朱柱.基于Unity3D的虚拟实验系统设计与应用研究[D].武汉:华中师范大学,2012.
[8] 刘新艳.虚拟电工电子实验室的设计与实现[D].成都:电子科技大学,2014.
[9] 邹萍.虚拟实验室中的场景建模研究[D].上海:华东师范大学,2010.
[10] 杜保强,尹飞凰.电子电路虚拟实验的建构[J].现代电子技术,2004(4):16-18.
[11] 刘严坤.运用虚拟技术改革电子线路实验教学[J].电化教育研究,2002(7):33-36.
[12] 施正寅.电工电子虚拟实验室关键技术研究与实现[D].杭州:浙江大学,2012.
[13] 王星捷,李春花.基于Unity3D平台的三维虚拟城市研究与应用[J].计算机技术与发展,2013(4):241-244.
Design of 3D virtual laboratory with digital circuit based on simulation technology
Wang Kaiyu, Li Anqi, Ma Chi, Chen Jing, Jiang Yanhong, Yu Nannan
(Faculty Department of Electronic Information and Electrical Engineering Dalian University of Technology, Dalian 116024, China)
Based on virtual instruments, virtual experiments and the virtual reality technology, this paper shows the list architectural design, technical route and the specific solution of 3D virtual experiment. Using 3ds Max modeling tools and the unity3D game engine can create a 3D interactive virtual digital circuit experiment environment, for example, static model, dynamic interactive control module, and the experiment operation feedback mechanism. The laboratory has maneuverability, functionality, lifelike and vivid scene, which can stimulate students’ creativity and imagination, enjoying potential application value and development value in the field of teaching.
simulation technology; virtual experiment; 3ds Max; Unity3D
10.16791/j.cnki.sjg.2017.02.003
2016-10-14
中央高校基本科研业务费专项基金资助(DUT16QY32);辽宁省自然科学基金项目资助(201601523)
王开宇(1973—),男,辽宁大连,硕士,副教授,主要研究方向为混合电路设计以及集成电路芯片的安全性.
E-mail:wkaiyu@dlut.edu.cn.
TP391.9;G482
A
1002-4956(2017)2-0011-05