虚拟装配系统开发中参数化模型表达与交互意图识别研究

2021-07-03 05:30:58胡兆勇何梓秋何汉武吴悦明
关键词:数据文件手柄工具

胡兆勇, 何梓秋, 何汉武, 吴悦明

(广东工业大学机电工程学院, 广州 510006)

近年来,虚拟现实技术在教学培训方面应用日益广泛. 其中,虚拟装配训练能够有效解决传统装配训练中场地、人力和设备短缺问题,同时也能充分规避传统装配训练中潜在的安全隐患、昂贵设备损坏等风险[1-2];除此之外,虚拟环境中可以加入视觉反馈等真实场景所不具备的因素[3],辅助装配训练过程,提高培训效果.

目前,国内外对虚拟装配训练系统的研究取得不少的成果,如:研发了以数据手套进行交互的医疗器械装配训练系统,实现了从基于任务到基于动作的多级训练场景[4];研发了基于Unity3D的VR民航虚拟训练软件,可选择拆装工具,利用鼠标拖拽进行拆卸与装配训练[5];研发了以HTC VIVE交互的模具虚拟装配培训系统,利用Petri网构建装配序列,使用预分割策略对OBB树算法进行改进,使得碰撞检测更加贴合零件[6];研发了一种液压支架装配系统,通过为每个部件建立装配顺序数据表,实现了基于概率的装配顺序自学习[7].

文献[6-7]设计了装配序列表达,但大多采取定制化开发方式,且交互操作真实感不足. 在实际虚拟装配开发时,有一大类涉及到具有多个同类型的装配科目任务,每个任务可能需要演示、练习和考核等多种培训模式的需求. 随着终端显示设备的不同,虚拟装配系统需要适应PC机、VR头盔和zSpace等不同平台. 为满足这种多同类型任务、多培训模式的开发需求,需要构建一定程度上通用的系统,实现可通过装配序列构建基础数据驱动的高效开发.

因此,本文将常见拆装操作描述为几种规范的几何运动,进一步形成了拆装动作序列的参数化表达模型;采用主流的可扩展标记语言(XML),设计了该参数化模型的数据表达方法;结合Unity3D引擎,研究了XML参数化表达模型的解析原理,从而实现了拆装操作与用户交互意图的响应机理识别;针对演示、练习、考核3种培训模式,研究了逻辑实现的解析方法.

1 基于XML的装配序列参数化建模方法

1.1 装配操作的数据表达

利用参数描述操作过程的形式有多种,如:采用ASO建模方法,将装配行为划分为对象交互特征和虚拟人的基本动作,建立了虚拟人的行为模型[8];利用UML类图构建了设备拆装的动作过程模型[9];分析飞机拆装过程参数,对虚拟人行为进行参数化建模,从而建立一种循环迭代的拆装过程模型[10].

在开发某航天地检设备的虚拟拆装训练系统时,面临众多仪器模块拆装科目、3种培训模式和zSpace/HTC的多终端开发任务需求. 结合文献[9-10]和该拆装开发任务的实际需求,本文将不同装配操作动作的共性特征通过若干个参数进行统一、规范地描述,每个操作步骤分解为3类参数化要素:

(1)任务要素:描述该操作步骤在装配任务中的信息,包括该步骤的索引号、操作完成标志位.

(2)静态要素:描述操作运动发生前的准备要素,包括所操作的零部件、所用工具.

(3)动作要素:描述装配操作的各个动作要素参数,包括操作动作要素类型和所需参数等. 常见的装配操作动作要素类型包括隐藏、显示、触碰、旋转和移动.

隐藏、显示操作用于模型的消隐需求,触碰操作用于表示点击开关(按钮)的瞬间操作. 这3类操作类型不需要动作要素参数. 旋转和移动可细分为自转、公转、平移和自由移动4种操作动作要素类型(表1). 各动作要素所需参数中,自转轴、平移方向和公转轴均可使用三维向量进行描述,称为操作方向;旋转量和平移量可使用一个数值来描述,称为终止阈值;对自由移动的目的地参数则通过交互逻辑确定.

表1 常见装配操作的动作要素Table 1 The action element of general assembly operations

1.2 基于XML的装配序列参数化描述方法

虚拟装配动作序列可概括为单一步骤串联式线性序列和多步骤并联式并行序列两大类型逻辑关系. 本文通过每步与其先行步来表达这2种逻辑关系. 设第i步的先行步集合为{j,k,…},完成该集合中的所有步骤后,第i步方可执行,则第i步可描述为:

i|{j,k,…} (i,j,k=0,1,…,n,i≠j≠k),

其中,当i=0时不存在先行步集合.

基于先行步集合的思路,本文设计了一种表达装配序列逻辑关系的路由图模型(图1).

图1 装配序列逻辑关系路由图模型

用户可自行定义每个操作步骤的先行步集合,按照自己的需求来设定装配序列的分支与汇合. 如图1中的1、3、4为分支步,7、8为汇合步.

本文选用XML语言[11-12]来描述装配序列的参数化表达模型. XML是一种自描述的可扩展标记语言,可以定义任意类型标记节点,用于存储元数据,通过多层子节点存储多层数据关联信息[13].

基于XML语言的规范,本文使用1个标记节点表示1个操作步骤. 根据1.1的参数化描述,综合考虑父子装配体间运动关系和提示信息参数,在每步标记节点下设计11个子标记节点,用于参数化描述操作步骤. XML数据文件结构如图2所示.

图2 XML数据文件结构图

1.3 XML数据文件的生成与解析

为了便于用户编写装配序列数据,本文设计了用于输入装配序列的路由图状逻辑关系的Excel数据文件,自动解析并生成装配序列的XML数据文件,并通过C#的OleDbConnection和OleDbDataAdapter类描述装配序列XML文件的参数化模型.

本文选用了虚拟训练系统开发的主流引擎Unity3D. 在程序中使用C#脚本创建一个解析器类ActionStep,将XML中的数据读入到虚拟装配系统中. XML数据节点名称与C#脚本数据对照表如表2所示. 表中的“子装配体联动”数据用于确定某一步骤对应的零部件是否与模型结构树中其余同级零部件共同运动.

表2 XML数据节点与C#脚本数据类型对照表

2 仿真训练系统的设计与关键环节实现

2.1 系统总体架构设计

仿真训练系统的架构可用多种模式. 本文设计了Winform程序与VR仿真训练环境的双向通讯模式. 用户在Winform程序选择运行模式后,系统将启动相应模式的VR仿真训练环境,利用带参数启动传入用户信息;在VR仿真训练环境操作完成后,系统将用户的使用记录写入数据库,供用户在Winform查看. 通讯流程划分为4层架构,如图3所示.

图3 系统通讯流程架构图

2.2 虚拟场景交互的具体实现

2.2.1 装配序列的解析和表达方法 装配动作序列的解析与表达是虚拟装配训练系统开发的核心. 根据本文的参数化描述方法,定义3个数据集合(表3).

表3 数据集描述Table 3 The definition of data set

上述3个数据集合的数据流解析流程(图4)具体为:首先,读取XML格式的数据文件,获取所有操作步骤得到的信息并将其存入集合S;其次,从第i=0步开始,遍历集合S下的操作步骤,判断先行步是否已全部完成;然后,筛选出当前可操作步骤并进行初始化,为可操作步骤对应的零部件添加碰撞器和高亮组件,使这些可操作步骤可以进行人机交互操作,并在步骤完成后注销初始化的内容;最后,递增步序直到完成所有操作步骤,从而将用户按照规范设计的装配序列进行数据呈现.

图4 系统数据呈现流程

2.2.2 基于碰撞检测的人机交互操作 系统使用Unity3D的碰撞器组件以及碰撞检测回调函数作为虚拟场景交互的基础. 虚拟场景初始化后,系统将在虚拟手柄、工具上添加BoxCollider碰撞器(图5A,图5B),并添加刚体组件. 在初始化一个可操作步骤时,将为该步骤所对应的虚拟零件添加MeshCollider碰撞器(图5C).

虚拟手柄通过碰撞检测可拾取工具,使用SetParent()方法把工具设置为虚拟手柄的子物体,使工具跟随手柄移动;亦可直接对零件进行交互操作. 工具被拾取后,若检测到工具碰撞器与零件碰撞器相碰,则可对零件进行交互操作. 根据XML数据文件中存储的装配信息,系统调用相应的操作方法感知用户的交互意图,零件将根据用户的交互作出位姿和状态变化,从而完成装配操作.

图5 各部件碰撞器示意图

2.2.3 装配操作-交互意图响应的识别机理 系统中设置了一个累加器,用于实时存储当前步操作的零件逐帧累加起来的运动变化量,当累加器的值等于终止阈值时,该步骤操作完成. 每步的操作动作要素类型决定了调用何种操作方法,各个操作方法的核心即为实时计算累加器的值以及解算零件的最新位姿. 以下是各操作方法的具体实现:

(1)自转操作:零件的自转轴用vRot=(aRot,bRot,cRot)来表示. 如图6所示,设对零件进行自转操作时工具或手柄绕vRot每帧旋转的角度为θ,则零件自转的角度亦为θ.

图6 自转操作计算示意图

一帧的旋转运动用四元数表示如下:

(1)

将其与零件当前的姿态四元数Q相乘,可得到零件旋转后的姿态Qnew:

Qnew=Q′·Q.

(2)

为了确保交互真实感,规定手柄或工具自身坐标系的Z轴与零件不超过15度时方可进行自转操作.

(2)平移操作:如图7所示,在一帧内,手柄移动前后的2个位置点构成vFrm=(aFrm,bFrm,cFrm).vFrm在指定平移方向上投影为vdis,|vdis|为有效移动距离值. 若vdis与指定平移方向的夹角大于90度,则有效移动距离为负数. 设零件平移前的位置为p0,零件平移后的位置p1为:

p1=p0+vdis.

(3)

图7 平移操作计算示意图

(3)公转操作:如图8所示,零件的公转轴可为任意方向的vRev=(aRev,bRev,cRev). 建立平面P,P与vRev垂直相交于O(xO,yO,zO),则P的方程为:

aRev(x-xO)+bRev(y-yO)+cRev(z-zO)=0.

(4)

图8 公转操作计算示意图

手柄带动零件运动时,手柄当前帧所在位置为n1,而零件上一帧所在位置为n0,n1、n0点构成手柄一帧内的运动方向vHand.n1、n0点在平面P的投影分别为m1、m0,可见n1m1和n0m0与vRev平行,根据平行关系可得:

(5)

同时m0和m1为平面P上一点,满足式(4). 结合式(4)、(5),可以得到t的值以及m1、m0的坐标,从而得到vHand在P平面上的投影vP. |Om0|为公转轨迹的半径r,vP向公转轨迹的过m0的切线方向上投影,从而得到vEff. 最后计算Om0与Om2的夹角θ,即可得到这一帧零件所转过的角度. 根据公转轨迹圆的半径和旋转角,可以得到零件的最新位置,将θ代入式(1)、(2)可以得到零件的最新姿态. 当累加器的值超过终止阈值时,公转动作完成.

(4)自由移动操作:当零件被手柄拾取时,使用Unity3D的transform.SetParent()函数,使虚拟零件成为手柄的子物体,虚拟零件跟随手柄运动. 当虚拟零件足够接近目的地时,它将脱离与手柄的父子关系,Vector3.Lerp()和Quaternion.Lerp()函数进行位姿插值计算,使零件自动向目的地移动,并设置累加器的值等于1.

(5)隐藏操作:触发后更改零件材质图形着色器,替换后的着色器在渲染管线的片元着色器阶段剔除所有处于虚拟场景地面以上的像素,使之不渲染,并设置累加器的值等于1.

(6)显示操作:与隐藏操作相反,触发后把零件材质的图形着色器替换为常规的着色器,并设置累加器的值等于1.

2.2.4 UI交互与场景漫游功能 UI分为手柄按键UI及场景空间UI. 手柄按键UI使用SteamVR插件,将各功能映射到HTC手柄的按键上,点击手柄按键即可触发. 根据常用功能需求,设计了“挂载”“瞬移”“跳步”“退出”4个功能(图9A). 其中,“瞬移”解决了大场景漫游问题. 通过使用SteamVR的Nav Mesh和Teleporter插件,将虚拟场景的地面分割为若干个单元格,并在手柄按键UI定义一个“瞬移”功能,向虚拟地面射出抛物线,指向某个单元格,触发该功能后,用户位置将被转移到该单元格,如图9B所示.

图9 UI交互与场景漫游示意图

2.3 练习与考核模式的逻辑实现

对于虚拟装配系统常用的练习模式和考核模式来说,两者在装配序列的人机交互逻辑实现原理是一致的. 相同点是用户通过VR交互设备自主操作虚拟模型完成装配,不同点是前者有提示信息而后者无提示信息及考核要求.

人机交互逻辑模型(图10)主要含以下部分:

(1)知识模型. 为了描述虚拟场景中的交互信息,本文选择场景上下文和用户上下文来描述知识模型. 其中,场景上下文是指当前可操作步骤所包含的场景信息,一部分由XML数据文件规定,包括零部件、操作类型、操作方向、终止阈值、累加器、子装配体联动、正确工具、错误工具和目的地等;另一部分由用户的交互输入决定,包括零件状态和工具状态,由各自的有限状态机[14]管理. 用户上下文是指用户在交互过程中的动作语义,包括当前手柄发生碰撞的物体、手柄的位姿、手柄旋转和手柄移动等. 由于用户的交互实时刷新,使得场景上下文实时发生改变,因此,知识模型是动态的,不同时刻的知识模型可以匹配不同的规则,以完成不同的交互.

(2)规则库. 规则库以产生式规则“IF…THEN…”的形式描述虚拟拆装中各项的交互规则,分为动作规则库和感知规则库. 动作规则库的作用是将当前的用户上下文和场景上下文结合,产生交互意图. 感知规则库的作用是感知用户交互意图产生决策,进而使用户完成交互.

(3)规则推理机. 规则推理机是运行在平台中的逻辑代码块,包括解释器和匹配器. 系统通过匹配器将当前的知识模型与动作规则库进行匹配,进而由规则库中的某一规则确定用户的动作语义所隐含的交互意图. 解释器根据感知规则库的决策进行计算,根据2.2.3所阐述的各操作类型得到零件的最新位姿,完成装配操作.

图10 人机交互逻辑模型

2.4 演示模式的逻辑实现

演示模式下用户无需与零件进行交互,装配将通过系统控制自动执行. 根据用户需求,本文把虚拟模型设置为摄像机的子物体,确保演示时虚拟模型一直在视野正前方.

本文提出了基于装配序列的虚拟装配自动演示算法,使开发过程无需额外制作动画便实现了虚拟装配的演示模式. 系统初始化一个操作步骤后,进入自动演示流程,该流程分为以下4个阶段:

(1)姿态调整阶段:使模型发生旋转,以使得用户获得最好的观看视角. 若该步骤操作类型为平移或自转,则操作方向定义为vAuto;否则,遍历当前零件局部坐标系的6个正负轴方向,与相机+Z轴夹角最小的坐标轴方向定义为vAuto.设vAuto与相机坐标系+Z轴的夹角为α,与相机坐标系-Z轴的夹角为β.若α≥β,则旋转后vAuto对齐+Z轴;否则,旋转后vAuto对齐-Z轴.

为计算姿态调整的旋转轴,定义向量vZ平行于Z轴且与+Z轴同向.利用叉积可得到旋转轴L:

L=vAuto×vZ.

(6)

利用式(1)、(2)构建四元数并求得模型旋转后的姿态,使用Quaternion.Slerp()函数对设备进行位姿插值计算,使用户能看清整个设备模型的姿态调整过程.

(2)位置调整阶段:调整整个设备模型与相机的距离,使整个设备模型移动到视野中央,即相机坐标系下的坐标(0,0,z). 首先,读取待操作零件模型在相机局部坐标系下的坐标PC(xC,yC,zC).其次,根据下式计算整个设备模型沿着相机坐标系-X、-Y和-Z轴的移动距离:

(7)

其中,Vp为待操作零件包围盒的体积,ε为常数.

使用函数Vector3.Lerp()使整个设备模型沿着相机坐标系3个坐标轴移动,使用户能看清整个设备模型的位置调整过程.

(3)工具就位阶段:使工具以正确的位姿出现在零件处,其作用是告知用户如何利用工具进行拆装操作. 工具模型在建模过程中设置了局部坐标系,坐标系的原点设定为工具与操作零件的接触点,并设置局部坐标系+Z轴为工具的主方向. 如:扳手工具的主方向(图11A)为扳手的旋转轴方向. 通过逐帧插值更新四元数,令工具的主方向与相机坐标系的+Z轴对齐,同时逐帧插值使工具运动到目标位置. 设待操作零件的位置为(0,0,z0),零件包围盒沿Z轴方向的长度为L1,工具的包围盒沿Z轴方向的长度为L2,则工具的目标位置为(0,0,z1),其中z1为:

(8)

工具就位后效果如图11B所示.

图11 工具模型示意图

(4)自动演示阶段:自动演示将2.2.2节中的各操作类型计算过程封装为自动执行的方法,根据当前操作步骤的操作类型,调用相应的演示方法. 方法函数调用时,将工具绑定为待操作零件的子物体,使工具与零件同步更新位姿. 系统通过逐帧调用自动演示方法,逐帧使零件运动并计算累加器的值,从而完成自动装配.

3 实例验证

3.1 系统开发实例

鉴于某型号航天地检设备的涉密性,本文以二级减速器虚拟安装与拆卸的仿真开发为例. 将减速器模型导入Unity3D引擎中,编辑模型结构树(图12),再根据本文的参数化表达模型制作规范的装配序列XML数据文件(图13). 需确保XML数据文件中模型命名与模型结构树中的模型名称相同,否则虚拟拆装时的交互操作无法匹配到正确的虚拟模型.

图12 减速器模型预处理

图13 减速器装配序列的XML数据示意

登陆PC端程序选择模式和科目后,系统将加载与已选择科目名称相同的模型与XML数据文件,进入VR环境,如图14A所示. 练习模式的操作步骤的提示信息UI如图14B所示,演示模式的界面如图14C所示. 退出VR环境后,在成绩查询界面中可查询到考核成绩,如图14D所示.

3.2 跨平台通用性验证

为验证XML数据文件跨平台的通用性,选用桌面式VR设备zSpace平台进行虚拟装配训练系统开发. zSpace以六自由度操控笔作为交互输入设备,利用zCore SDK和射线检测搭建该平台的人机交互操作功能. 通过DOM技术读取并解析与HTC VIVE客户端相同的XML数据文件,即可生成zSpace的虚拟装配环境. 以减速箱安装为例,如图15所示,使用zSpace可顺利完成桌面式虚拟装配训练.

图14 减速器案例

图15 zSpace客户端开发案例

同理,若把系统移植到更多的引擎与平台,亦无需修改XML数据文件,仅需在VR客户端程序中实现对应的解析器类,以储存XML数据文件解析后的数据;同时,使用适配于该引擎及设备的SDK,结合本文的方法实现交互操作功能. 通过载入同一份模型文件和XML数据文件,即可获得多平台的虚拟装配环境.

4 结语

为了提高重复性开发工作的效率和解决通用性问题,本文定义了11个参数表达的虚拟装配操作步骤参数化模型,利用XML描述了装配序列的路由图状的线性和并行逻辑关系,研究了拆装操作逻辑与人机交互操作意图的识别机理,实现了7种装配交互操作的逻辑解析. 减速器的开发实例证明参数化模型及对应的交互操作意图识别的虚拟装配系统可有效缩短开发时间、降低开发难度,且有利于跨平台的数据移植.

猜你喜欢
数据文件手柄工具
基于PLC控制的手柄座钻孔攻丝一体机的研发
波比的工具
波比的工具
一种多功能无线手柄的设计
电子制作(2018年11期)2018-08-04 03:25:44
数据文件恢复专题问答
数据文件安全管控技术的研究与实现
SQL数据文件恢复工具
“巧用”工具
读者(2017年18期)2017-08-29 21:22:03
为什么厨具的手柄不是金属的?
银行家