基于虚拟现实技术的胆机组装实训系统设计与实现
2020-07-09李永亮
李永亮
摘 要:针对电子信息工程技术专业《音响技术与应用》课程的“胆机组装实训”环节中学生容易因线路错接、漏接而烧坏电路板的情况,作者基于虚拟现实技术实现了“胆机组装跨平台虚拟仿真实训系统”。利用Unity引擎、采用分层架构、面向对象设计思想,实现了场景漫游、组装操作、操作情况统计及显示等关键功能。该系统具有良好的跨平台性,可运行在安卓设备、PC机和HTC VIVE头盔等不同设备上,能够将虚拟实训贯穿于课前、课中和课后环节,使学生在接线实操之前得到充分的训练,大大降低了错接、漏接的风险,保障了实训教学的安全性和高效率。
关键词:虚拟现实;实训系统;跨平台;胆机组装
中图分类号:TP391.9;G434 文献标志码:B 文章编号:1673-8454(2020)12-0088-05
一、引言
“胆机组装实训”是高职电子信息工程技术专业课程《音响技术与应用》的一个重要实操环节,在这个环节中,学生需要将前期制作的电路板安装到机箱中并进行接线操作,由于需要连接的线路繁多,学生容易出现错接、漏接的情况,加上机箱中存在高压线路,烧坏电路板的可能性较高,而一旦烧坏电路板就会影响后续教学环节的正常实施。解决这一问题的办法是给学生更多的练习次数和练习时间,以提高他们的操作熟练度和正确率,从而降低风险。然而由于实训场所和器材的限制,很难给所有学生提供到实训场所进行更多练习的机会,而引入虚拟仿真系统是个极佳的选择[1-4]。
笔者针对上述问题,利用Unity引擎开发了“胆机组装跨平台虚拟仿真实训系统”,该系统不受场地、器材、时间等因素的限制,具有安全、经济的特点,能够给学生提供直观、形象、有临场感和沉浸感的实训体验。基于Unity引擎的跨平台性[5][6],本系统可在HTC VIVE头盔、PC机器、安卓Pad、安卓手机等不同硬件平台上使用,能够分别服务于课前预习、课堂演示、小组学习等教学场景,让学生在组装实操之前得到充分的准备,大大減少实操过程中的风险。
二、胆机组装跨平台虚拟仿真实训系统的设计
1.系统功能
“胆机组装跨平台虚拟仿真实训系统”主要供学生在胆机电路板接线实操之前了解接线过程和方法、熟悉接线工艺,并进行充分的虚拟接线训练,从而提高学生接线实操的熟练度并降低错接、漏接的风险。此外,为了能够检验学生的实际掌握情况,还提供了自主考核模式,通过误操作、退回操作、花费时间等指标,客观反映学生的操作熟练度。系统的功能模块如图 1所示。
其中,“实训简介”模块通过文字描述介绍实训目的,并提供新手上路环节,让学生熟悉本系统在PC机、触屏、VR头盔等不同平台中的常用操作方式,比如漫游、安装、单头接线、双头接线等动作的操作方式;而示范模块则采用文字描述加动画的方式,向学生展示实训操作的过程和注意事项;训练模块以提示引导的方式,一步步带领学生训练接线过程;考核模块则不提供任何引导,由学生自由操作,并记录其误操作、退回操作、花费时间等信息,从而客观反映学生对接线过程和方法的掌握情况。
2.系统的软件分层架构
本系统的软件分层架构如图 2所示。为了适配不同的软硬件运行环境,设计交互层用于向业务层提供与设备无关的交互逻辑和界面渲染逻辑;在业务层中,根据不同业务流程设计五个业务逻辑;在展示层,根据业务需求,将模型、材质、贴图、动画等资源构建成五个场景,并设计场景切换逻辑和界面内容更新逻辑。
三、系统关键技术的实现
1.跨平台性的实现
Unity引擎良好的跨平台性,本可以运行在台式电脑(Windows、Linux)、安卓Pad、安卓手机以及HTC VIVE头盔上,但由于不同设备的人机交互方式和显示器分辨率有很大差异[7],需要在系统的交互层将不同的操作方式进行封装,并使用合适的界面设置方式。
(1)人机交互跨平台性的实现
在人机交互方式上,PC机版采用键盘和鼠标进行交互,触屏版采用触屏进行交互,而HTC VIVE头盔版则采用配套的手柄进行交互。将各版本获取的用户交互操作信号按照不同的交互操作意图在交互层的各模块中进行封装,从而保证了业务逻辑和人机交互接口的解耦。
PC版获取用户交互操作信号的方法如下[8]:
键盘按键:“Input.GetAxis(String)”函数和“Input.GetKey(KeyCode)”函数;
鼠标按键:“Input.GetMouseButtonDown(int)”函数和“Input.GetMouseButtonUp(int)”函数;
鼠标位移量:“Input.GetAxis()”函数。
触屏版获取用户交互操作信号的方法如下:
触点个数:“Input.touchCount”;
触点对象:“Input.touches”数组;
触点位置:触点对象的“position”属性;
触点状态变化趋势:触点对象的“phase”属性。
HTC VIVE头盔版获取用户交互操作信号的方法如下[9]:
手柄Pad操作:“ViveInput.GetPadPressAxis(HandRole)”;
其他按钮操作:“ViveInput.GetPress(HandRole,ControllerButton)”。
(2)界面显示跨平台性的实现
在界面设置上,利用Unity的“多分辨率界面”技术[10],使交互界面可以自动适配不同分辨率的显示设备,无论是手机屏幕还是触屏电视,都可以正常显示交互控件并响应用户的操作。而在HTC VIVE头盔版本中,则将交互界面渲染在虚拟场景中,让用户以“虚拟屏幕”的方式进行界面操作。具体的设置项及其取值如表 1所示。
2.虚拟场景漫游功能的实现
本系统的操作对象是胆机的机箱和电路板,允许用户在安装和接线操作过程中在虚拟场景中自由漫游,以便用户在各个角度和合适的距离观察机箱和电路板的细节并进行操作。漫游的类型包括平移、旋转和复原,其实现逻辑如表 2所示,其中PC机版和触屏版的观察者为虚拟场景中的主摄像机,HTC VIVE头盔版的观察者为虚拟场景中的“HTCViveCameraRig”对象。
在所有版本中,用户都可以通过界面上的“复原”按钮使视角回到默认位置;而不同版本的平移、旋转操作方法则各不相同:在PC机版中,用户利用键盘上的W、A、S、D四个键进行左右前后平移操作,利用Q、E两个键进行上下平移操作,在鼠标右键被按下时利用鼠标位移实现旋转操作。在触屏版中,用户通过长按屏幕的四个边缘实现左右上下平移操作,利用双触点实现前后平移操作,利用单触点实现旋转操作。在HTC VIVE头盔版中,用户利用左侧手柄的Pad键实现左右上下平移,Trigger键实现前平移操作,Grip键实现后平移操作,利用右侧手柄的Pad键实现旋转操作。
3.对象操作交互逻辑的实现
在本系统中,对象操作有电路板安装、机箱到电路板接线、双绞电源线焊接、板间线路连接四种,其中“电路板安装”和“机箱到电路板接线”采用从界面拖拽图标到虚拟场景中指定位置的操作方式,“双绞电源线焊接”和“板间线路连接”则采用连续点击相关连接点的操作方式。
(1)“从界面拖拽图标到指定位置”操作方式的实现
以“电路板安装”为例,用户的具体操作过程为:待安装的电路板以图标的形式显示在界面上,用户利用鼠标、触点或者HTC VIVE手柄的引导线将电路板图标拖拽到对应的机箱位置上释放,从而完成安装操作;在被拖拽过程中,图标所经过的待安装位置会高亮显示,从而提醒用户是否将图标释放在该位置。
本系统采用四种对象共同实现上述操作方式:“EventManager”对象用于管理用户操作过程中相关事件的订阅和触发,以保证其他三种对象能够协同工作,“DragableImage”对象用于管理图标的显示状态,“RayCastOrigin”对象用于判别图标对象被拖拽过程中所对准的虚拟对象,“DragableImageTarget”对象用于管理待安装位置对象的高亮显示状态。
“EventManager”对象用单例模式实现,并作为组件挂载在场景管理器对象上,其管理的事件为“UnityEvent”类的对象,各事件的触发者和订阅者信息如表 3所示,事件触发的条件在触发者的状态转换图中进行说明。
“DragableImage”对象以Unity组件的形式挂载在每一个可拖拽图标对象上,当处于“等待”状态时图标图像在界面上正常显示,当处于“拖拽中”和“对准中”状态时图标图像变为半透明并“克隆”出一个图像实时显示在鼠标位置,当处于“已设置”状态时图标图像上增加一个红色的勾并不能再被拖拽,其状态转换图如图 3所示。
“RayCastOrigin”对象用单例模式实现并作为组件挂载在场景管理器对象上,其默认状态为“等待”,在接收到“开始探测”事件后,创建出一个“Ray”类型的射线对象并进入“探测中”状态,在“Update()”函数中利用射线对象实时探测图标所对准的位置从而在三个子状态中切换,具体的状态转换图如图 4所示。
“DragableImageTarget”对象以Unity组件的形式挂载在每一个待安装位置对象上,这一类对象为半透明的方块,当其“DragableImageTarget”组件处于“等待”和“已设置”状态时隐藏,而处于“被正确对准中”和“被错误对准中”状态时则显示。“DragableImageTarget”对象的状态转换图如图 5所示。
(2)“连续点击相关连接点”操作方式的实现
在用户进行模拟“双绞电源线焊接”和“板间线路连接”时需要“连续点击相关连接点”的操作方式。其中,“双绞电源线焊接”是放大板上的操作,为了避免干扰,需要将接入的三组电源线以正负双绞线的方式焊接在电路板对应的焊盘上;而“板间线路连接”则是将不同电路板的某两个点用导线连接。用户的具体模拟操作方式为:利用鼠标、触点或者HTC VIVE手柄的引导线连续依次点击同组电源线的多个焊盘,或者连续依次点击需要用导线连接的两个点,从而触发双绞线或者导线的连接动画。通过这样的虚拟操作,使用户熟悉正确的焊接或者连接位置。
本系统采用“MouseTarget”“Node”“Connector”三种对象来实现上述功能。“MouseTarget”和“Node”以组件的形式加载在焊盘对象或者连接点对象上,其中“Node”组件只加载在确实需要连接的對象上。“Connector”则以组件的形式加载在双绞线或者导线对象上,并将具有“Node”类型的数组用于存储双绞线对应的焊盘对象或者导线对应的连接点对象。“MouseTarget”用于控制操作焦点移入移出焊盘对象时的高亮显示状态,“Node”用于记录焊盘的设置状态并根据状态呈现不同外观形态,“Connector”用于判定一组双绞线的连接操作是否完成并控制双绞线连接动画的播放。以一组双绞线的成功连接过程为例,各相关对象的活动图如图 6所示。
4.操作统计和显示功能的实现
在训练模块和考核模块中,本系统对用户的操作情况进行统计,主要统计操作耗时、错误操作次数、放弃操作(退回)次数三种指标,并将统计结果实时显示在界面上,通过这些指标可以客观反映用户进行虚拟接线操作的熟练程度。
上述功能主要通过“EODetector”“SceneManager”“UIManager”三个对象实现,这三个对象均为单例并以Unity组件的形式加载在场景管理器对象上,其中,“EODetector”组件对象用于探测用户的错误操作以及放弃操作,“SceneManager”组件对象则具有计时和统计功能,“UIManager”组件对象用于管理统计数据在交互界面上的更新显示并响应用户的界面操作。
(1)操作统计功能的实现
统计并显示错误操作次数的过程为:“EODetector”对象通过订阅“EventManager”对象所管理的“用户释放”事件,以及Unity提供的对象的“OnClick”事件,结合相关对象的状态来判定是否发生错误操作,并由“SceneManager”对象进行错误操作次数累计,再由“UIManager”对象进行显示数据的更新。
统计并显示放弃操作次数的过程则为:“UIManager”对象探测到用户点击“放弃本次操作”按钮后由“SceneManager”对象进行放弃操作次数累计并对场景进行“后退”处理,再回到“UIManager”对象进行显示数据的更新。
上述两个过程的活动图如图 7所示。
(2)计时功能的实现
操作耗时由“SceneManager”对象利用Unity的协程来实现,每个协程等待时间为1秒钟,第一个协程在练习或者考试开始时启动,在每个协程结束前更新耗时计数并启动下一个协程,同时由“UIManager”对象进行显示数据的更新。
四、系统实现效果及应用效果
1.系统实现效果
本系统运行之默认显示的是主界面,用户可以通过菜单选择进入“实训简介”“示范模块”“练习模块”“考试模块”等功能模块。其中在“实训简介”模块中以文字方式对实训内容进行介绍,还可以进入“操作指引”场景熟悉系统中的常用操作;“示范模块”以动画的方式展现虚拟接线的正确过程;“练习模块”中为用户提供操作提示,并由用户亲自操作;“考试模块”中则没有任何提示,完全由用户自行操作。图 8为考试模块中不同场景的效果展示。
2.应用效果
本系统已经在我校电子信息工程技术专业《音响技术与应用》课程中得到实际应用,根据任课教师和学生的反馈,取得了如下效果:①提高了实训的安全性和效率。通过虚拟训练,学生在接线实操之前已經熟悉了线路的正确接法,过去时常发生的错接、漏接现象极少发生,电路板烧坏的情况更是不再发生。②改善了教学效果。由于本系统可以在多种设备和操作系统上运行,任课教师可以更加灵活地设计相关教学内容的教学方案,让学生在课前、课中、课后都能够有虚拟训练的机会,并反馈训练的结果,使任课教师的教学更有针对性。③提高了学生的学习兴趣。本系统的应用使教学内容更加具备趣味性,能充分吸引学生,并激发他们相互竞争,获得更好的虚拟训练成绩。
本文阐述了“胆机组装跨平台虚拟仿真实训系统”的设计和实现方法及其使用效果,其中重点阐述了跨平台性、场景漫游、对象操作、操作统计及显示等关键功能的实现方法。通过该系统的应用,提高了“胆机组装实训”教学环节的安全性和效率,改善了教学效果,提高了学生的学习兴趣。本文所总结的关键技术具有较高的普适性,可以推广到其他仿真实训系统的研发工作中。
参考文献:
[1]张勇亮,张均东,张志政.三维船舶轮机虚拟实验室的设计和实现[J].计算机应用与软件,2019,36(1):171-175.
[2]范志锋,徐敬青.基于虚拟现实技术的末制导炮弹检测训练系统[J].计算机应用与软件,2019,36(2):139-143.
[3]姚亮,邵晓冬,姜旭.基于Unity3D的烹饪专业虚拟仿真实训系统研究[J].计算机仿真,2019,36(9):371-375.
[4]杨晨彬,高瞻.基于WebVR的医学体数据可视化[J].计算机应用与软件,2019,36(5):101-107.
[5]吕圣卿,陈一民,黄晨,等.一种基于网络的并行渲染和跨平台同步展示系统[J].计算机应用与软件,2017,34(10):113-117.
[6]杨壹斌,李敏,解鸿文.基于Unity3D的桌面式虚拟维修训练系统[J].计算机应用,2016,36(S2):125-128.
[7]谷学静,张凯峰,郭宇承,等.基于Unity3D的ASD儿童认知教育系统设计与实现[J].系统仿真学报,2019,31(5):893-900.
[8]尹大伟,张熙若,李欢欢,等.基于Unity3D的虚拟校园漫游系统及其关键技术研究[J].软件工程,2019,22(9):17-19.
[9]张阳,杨长强,郑慧平.基于Unity3D与VR头盔的虚拟现实体感游戏开发[J].软件导刊,2017,16(8):119-122.
[10]陶瑞,任鸿翔.基于HTC VIVE的船舶固定水灭火模拟训练系统[J].中国航海,2018,41(3):76-80+90.
(编辑:鲁利瑞)