王 蕾,郭向坤,李 姝
1(中国科学院大学,北京 100049)
2(中国科学院 沈阳计算技术研究所,沈阳 110168)
3(沈阳理工大学,沈阳 110159)
混合现实[1]是在虚拟现实基础上发展而来的新技术,它在同一时刻将计算机系统生成的虚拟场景、物体或系统提示等信息叠加到真实场景中展现给用户,在同一个空间场景中虚实共存,从而产生一个全新的感官世界[2].基于混合现实的虚拟拆装系统是混合现实技术在工业领域的全新应用,为机械部件拆装带来了新思路和新方法.
近年来,虚拟拆装系统得到了大量的研究.然而,这些研究大多集中在系统交互、系统开发等方面[3-5],很少有针对拆装逻辑的研究.现有的关于拆装逻辑的研究[6,7]也存在逻辑设计只是针对某一个或某一类特定的机械模型,并不能适应于所有模型,导致系统存在通用性差、适用范围小等问题.针对这些问题,本文提出一种基于图遍历算法的数据结构来表达各个模型的逻辑关系,并基于此算法设计并实现了一套基于混合现实的虚拟拆装原型系统.实验结果表明:该系统实现了对模型部件按工艺流程进行虚拟拆解和装配,提高了虚拟拆装系统的通用性,说明该系统具有很好的实用价值.
该系统基于混合现实技术,以Unity3D 引擎为开发工具,借助HoloLens MR 头显进行交互的通用虚拟拆装系统,系统的整体框架可以分为3个部分:数据工具、系统拆装逻辑、自然交互系统.虚拟拆装系统整体架构图如图1所示.
图1 虚拟拆装系统整体架构图
数据工具负责采集处理系统所需的各种数据并进行存储,供系统其他部分使用.这些数据主要包括:(1)模型数据:用于供交互系统展示的机械模型.在Solid Works 建模软件中构建设备部件的机械模型,然后导入到3D Max 中进行减面、纹理重置、渲染等优化,使得模型更加兼容Unity 引擎的开发.(2)逻辑数据:用于供拆装核心动作逻辑判定拆装是否符合真实拆装逻辑,其中主要包括模型的位置信息及模型之间的逻辑关系.(3)依赖表:用于供拆装核心运作逻辑判定各部分依赖是否得到满足,实现对拆装顺序的限制.
系统拆装逻辑的设计是实现系统通用性的核心,针对现有的虚拟拆装系统所存在的问题,本文设计出一种基于图遍历算法[8]的数据结构来表达各个模型的逻辑关系,解决了拆装顺序的可定义和通用性等问题,并能够对模型部件按工艺流程进行虚拟拆解和装配.虚拟拆装系统拆装核心运作逻辑主要包括以下两个方面:连接逻辑和顺序逻辑.系统拆装逻辑的设计与实现将在第3节详细介绍.
结合语音交互技术、手势交互技术以及交互方法的组织方法,获取和识别语音、手势等信息建立多模式人机交互接口,构建出一套满足直接与虚拟信息进行实时互动交互的人机自然交互接口.结合拆装流程对装配人员意图智能化理解,保证装配操作人员在拆装过程中,不仅能够对模型部件按工艺流程进行虚拟拆解和装配,还能准确无误地获取装配交互信息,实现信息实时共享.最终设计出一种全息融合显示模式,并完成支持语音和手势自然交互系统的设计和实现,提高用户的交互效率和交互体验.
机械模型的合理正确拆装是虚拟拆装系统的关键,系统开发过程中必须借助一系列严密的逻辑思想,才能够控制整个拆装流程按照部件实际的拆装时序进行虚拟拆解和装配[9].虚拟拆装系统要实现对机械模型通用的拆装仿真,其拆装核心运作逻辑就要详细设计以下两个部分:连接逻辑和顺序逻辑.
在虚拟拆装过程中,系统需要“感知”哪些机械部件是连着的,即系统要像人一样知道部件的连接逻辑.以及当操作某一部分时会对部件的其他部分造成哪些影响,即需要让系统“感知”现实中部件连接的特点.因此,虚拟拆装系统连接逻辑的设计需要考虑以下两个方面:(1)任意两个可连接的部件,可以连接,也可以拆解.(2)连接在一起的几个部件,当拖动其中一个部件时,与之相连的部件均会发生联动,它们的相对位置始终保持不变.
3.1.1 连接逻辑设计
机械部件的拆装过程与分形或递归的思想相似,对一个部件或几个部件组成的整体而言,二者的操作和管理几乎相同.因此为简化系统设计,需要对其做一个封装,若干个(包括一个)连接好的部件作为一个节点进行处理.但同时,多部件组成的复合节点在拆装过程中是动态的、多变的,需要进行动态维护,并且保存若干个最大的复合节点在程序实现和使用上没有明显的必要.另外,作为整个系统的基础,单部件节点保存着整个机械模型的关系数据,是始终存在的;作为单部件节点的引用和封装,复合节点不包含实质信息的逻辑存在,设计为在需要时生成的临时对象.
通过对部件的连接方式总结和分析,本文设计一种类似化学键[10]概念的连接逻辑.每个节点上有若干个半键(HalfBond)可以与其他节点上的半键配对形成一个连接,这样两个节点之间就有了逻辑关系.根据机械部件的连接特点,为实现连接逻辑的通用性,半键的设计需要考虑以下几点:(1)与化学键不同的是半键有类型,只有同类型的半键才能配对连接.同时,同类型半键有不对称性,即区分公母口.(2)部件上的每个半键均有自己的位置信息,能够判断与其他半键之间的位置关系.(3)复合节点的半键,来自其所包含的部件,部件之间已配对的半键不再暴露出来作为复合节点的半键.
3.1.2 连接逻辑算法实现
连接逻辑算法设计的关键是要“感知”部件之间的连接关系.本文定义一种特殊的图结构G=
图2 部件连接状态
连接逻辑算法的关键是在图G=
从算法流程图中可以看出,本文提出的算法使用图的深度优先搜索(DFS)遍历对由部件之间连接关系构成的图G=
(1)创建两个集合,用来在遍历的同时分别存储节点和半键;同时定义一个变量,用来记录新节点的个数,执行(2).
(2)判断当前节点是否为复杂节点,若是则将复杂节点中的所有节点加入到节点集合中执行(3),否则执行(6).
(3)将所有单一节点存储到节点集合中,执行(4).
(4)判断是否存在未遍历的节点.若存在则执行(5),否则执行(8).
(5)从节点集合中取出下一个节点,若该键连接节点,则新节点数加一,并递归执行(4);否则半键加入键集合执行(4).
(6)判断集合中是否包含了当前节点,若包含则说明已遍历过该节点,即图中存在环路执行(8),否则执行(3).
(7)返回新节点数,执行(4).
(8)若新节点数大于零说明存在更大的包含节点,即找到了极大连通子图.否则返回当前节点,说明没有比自身更大的连通图.至此,算法实现找到了最大的包含节点,即获取到了部件之间的连接关系.
图3 连接逻辑算法流程图
机械设备装配中各部件间的拆装顺序具有一定的顺序逻辑,因此,在虚拟拆装系统设计时需要考虑到拆装顺序可能造成的影响,即在拆装过程中,系统需要“辨别”拆装顺序是否按照工艺流程进行,若是则做出正确的拆装响应,否则需要做出错误提示.让系统“辨别”拆装顺序正确与否的关键是系统顺序逻辑设计.
3.2.1 顺序逻辑设计
为简化设计,本文定义一种特殊的数据结构——依赖表来实现对拆装顺序的限制.其核心思想是:当一个节点包含某几个部件时,它必须包含另外几个部件,否则该节点存在依赖异常,即拆装顺序不正确.在实现中,前者使用一个复合节点做筛选,后者使用另一个复合节点做判定.在程序启动时按照依赖表把每条依赖写入对应部件节点中,每个部件节点可能存在多条依赖.当判断某节点内是否存在依赖异常时,通过筛选节点确定哪几条依赖生效,然后对生效的依赖所对应的判定节点进行判定.若判定全部通过,则依赖全部满足,否则存在依赖异常.本文中,依赖表定义为二维数组,每行两个元素,分别为筛选节点和判定节点(这里的节点包含复杂节点).
在安装过程中,当两个半键配对连接后,两个部件及其连接的所有部件形成一个复合节点.如果连接这两个部件前需要先连其他部件,那么这个复合节点中必然存在依赖异常,否则不存在依赖异常.因此,判断该键是否可以配对连接,即判断连接后该节点是否存在依赖异常.类似的,在拆解过程中,当拆开两个半键时,所属的两个部件会有各自的复合节点.如果拆开这两个部件前需要先拆其他部件,那么这两个复合节点中必然存在依赖异常.因此,判断该键是否可以断开,即判断拆开后的两个复合节点是否存在依赖异常.
3.2.2 顺序逻辑算法实现
依赖表中已经存入了部件节点之间的依赖关系.系统要正确实现拆装顺序,需要设计算法来解读依赖表,系统会根据依赖的满足与否判定拆装是否正确,并以此体现拆装顺序.
解读依赖表首先考虑用包含关系进行判断,即判断筛选节点中是否包含判定节点.但是包含关系不能解决所有情况,例如存在相同部件,检测出包含但不能证明是该节点所需的部件,因此不仅需要考虑类型包含还需要考虑实例包含和结构包含.在所有的包含类型中,类型包含是基础,通过参考节点的数据来决定进阶判定,若参考节点无实例无键数据,则为纯类型包含;若其中若干节点有实例物体,则另加实例判定;若其中若干物体有键数据,则另加结构判定.算法流程设计如下:(1)检测筛选节点的类型包含.(2)将检测到的类型加入到实例集合中.(3)使用图的广度优先搜索检测判定节点的具体实例.(4)若存在实例包含则对实例的键的位置进行结构包含检测.当3种包含都满足则说明拆装过程不存在依赖异常,部件与部件之间的键连接或断开操作顺序正确.否则,依赖异常,拆装操作中断.
虚拟拆装系统借助HoloLens MR 头显采用混合现实的方式进行交互,基于混合现实的人机交互为用户和应用环境提供了无缝的界面[11].本文采用机械模型——6 关节机械臂以及特种阀门进行系统通用性测试,并验证系统拆装逻辑的准确性.机械臂主要由6个节点组成,具体结构如图4.
图4 机械臂
(1)移动:将节点3到节点6 共4个部件安装在一起形成一个整体,移动其中一个部件节点5 导致连带移动,即部件整体形成的复杂节点也会向相同的方向移动.移动操作效果图如图5.
图5 移动测试
(2)旋转:将节点4到节点6 共3个部件安装在一起形成一个整体,将其中一个节点逆时针旋转90°,部件整体形成的复杂节点也会跟随旋转相同的角度.旋转操作效果图如图6.
图6 旋转测试
(3)固定:将节点3到节点6 共4个部件安装在一起形成一个整体,固定其中一个节点,部件整体形成的复杂节点也被固定,无法进行移动或者旋转等操作.固定操作效果图如图7.
图7 固定测试
测试结果表明,在拆装过程中连接逻辑能够精确判断部件之间的连接关系,系统能够根据具体的操作做出正确的响应.满足了连接逻辑的设计要求,验证了连接逻辑的准确性.
节点3到节点6 共4个部件安装在一起形成一个整体,将形成的复杂节点设置为T.按照工艺流程及测试系统需要,我们在依赖表中设置依赖关系为:复杂节点T与节点2装配之前需要先将节点2与节点1装配,拆解顺序与此相反.因此,若严格按照安装顺序进行装配,顺序逻辑不存在依赖异常,系统将准确的进行装配操作;若违反安装顺序,例如在节点2 未与节点1装配之前将复杂节点T与节点2进行装配,系统将提示装配异常.拆解操作与装配顺序相反,这里不加赘述.顺序逻辑测试如图8.
图8 顺序逻辑测试
测试结果表明,在拆装过程中顺序逻辑能够正确处理部件之间的拆装顺序,系统能够按照工艺流程准确的进行拆解和装配,若违反顺序,系统将不会做出拆装响应.满足了顺序逻辑的设计要求,验证了顺序逻辑的准确性.
为了使测试结果更具普适性,本文对特种阀门进行了同样的测试.图9展示了特种阀门在该虚拟拆装系统中的拆装测试,测试结果表明:系统的拆装逻辑能够按照工艺流程正确的处理部件之间的拆解和装配,即验证了系统拆装逻辑的准确性以及系统的通用性.
图9 阀门拆装测试
为了解决现有的虚拟拆装系统存在通用性差等问题,本文提出了一种基于图遍历算法的拆装逻辑,并在此基础上设计实现了一套基于混合现实的虚拟拆装系统.最后,通过自然交互的方式,使用了不同模型对该系统进行了测试.测试结果表明:该系统不仅能够生动形象的展示模型拆装的过程,也能正确处理部件之间的拆装顺序,并且能够按照工艺流程对拆装过程进行限制,对于不同的模型具有通用性.因此,本系统初步解决了现有虚拟拆装系统通用性差、适用范围小等问题,具有很高的实用价值.
本文实现的系统在用户体验方面还需进一步完善,同时本文提出的算法也有改进的余地.下一步将提高界面友好度并改进算法复杂度,以实现系统更加真实高效的运行.