张中波
ZHANG Zhong-bo
(中国民航飞行学院 航空工程学院,广汉 618307)
虚拟维修仿真是利用虚拟现实技术仿真产品实际维修过程中的拆装、更换零部件等活动,它是一种人机交互的过程仿真。虚拟人的维修动作仿真是维修过程仿真的基础,如何方便、高效率地模拟维修动作,成为虚拟维修的一项关键性技术。
在维修工程中,产品维修常被分为四个层次:维修、维修事件、维修作业和基本维修作业[1]。基本维修作业是指一项维修活动可以分解成的工作单元,它是维修分解的最低层次。
目前大多数虚拟现实软件都提供了虚拟人动作仿真功能,但是这些软件提供的都是低层的人体运动控制,即通过对人体关节或运动链的控制来完成人体动作仿真。相比较而言,上述的基本维修作业描述则太过于概括,划分比较粗糙,并不适合直接刻画维修仿真过程,无法达到虚拟维修仿真软件所支持的动作细化程度。本文针对这个问题,自顶向下建立各层次虚拟维修动作流程,将维修动作细分至虚拟维修软件可以支持的程度(动素级),然后将动素过程流映射至Petri网,建立虚拟维修动作流程Petri网模型,最后封装虚拟现实软件的基本动作函数为动素单元,利用Tcl/Tk和Python语言驱动Petri模型实现对动素单元的重复调度使用,快速逼真地实现虚拟维修动作流程仿真。
爱荷华大学CAD中心的Ranko Vujoservic[2]提出了维修作业的分解层次结构模型,将维修作业分为四层,从上到下依次是:维修作业层、拆装顺序层、拆装步骤层和宏运动层。其中,宏运动是由一列有序微运动组成的复杂的人的运动,如姿势改变或行走。微运动则是指身体部位的基本运动,如手指弯曲、转动头等。作为一种适合描述离散并发现象的系统模型,用Petri网控制虚拟人的运动是虚拟人运动控制的研究方向之一。宾夕法尼亚大学的Badler等[3]人提出用有限自动机实现对多关节的并发控制,其所领导的人体建模与仿真中心则将这一思想应用于高层任务决策和人体运动仿真。为了能够便于在虚拟样机的过程模型中对拆卸过程进行描述,乔治亚工学院的SRL实验室将基本的动作称为“操作”,并将操作具体分为:抓取、移物、徒手操作和利用工具操作[4]。
军械工程学院的李星新等[5]提出了一种包含维修、维修事件、维修作业、维修作业单元、维修动素的分解层次结构,提出了维修动素的概念,定义了两类共十个维修动素。海军大连舰艇学院的常高祥等[6]提出了一种基于维修任务分解的虚拟人动作模型设计方法,将虚拟维修任务分解为三个过程,建立了三个相应的维修动作层次化模型。上述的研究主要是从不同的层面上对维修动作进行分层设计,其层次化建模思想值得学习。但对于分解后的动素如何组装,相同动素的重复调度使用,如何高效逼真地实现一个维修动作流程考虑较少。
国防科技大学的卢晓军等[7]和海军工程大学王政等[8]分别提出了基于Petri网的虚拟人行走动作模型和虚拟手部动素模型,他们完成了一个独立维修动作的Petri网模型,但未从任务级层面考虑一个维修动作流程的建模。
描述一项维修作业,一般将其视为一个维修动作流程,然后将维修动作流程分解成若干的基本维修动作并描述,只要描述出每个基本维修动作就可以完成整个维修过程的仿真,对维修动作流程进行层次化分解是维修仿真的前提。
目前人机功效分析中对维修动作的分解,主要采用的是美国工程师吉尔布雷斯所创立的动素分析理论,他认为人所进行的作业是由某些基本动作要素(简称动素或基本动素)按不同方式、不同顺序组合而成的[9]。吉尔布雷斯提出了17个动素,包括:伸手、移物、握取、装配和拆卸等,后来美机械工程师学会增加了“发现”这个动素,这样组成人的动作的最基本单元就是18个动素。
产品的维修是由多个相对独立维修事件组成,因此本文自维修事件层向下对维修动作流程进行层次化分解,按照动作的复杂性和任务相关语义的抽象程度,可以将动作流程分为维修作业层、基本维修作业层和动素层。进行层次化分解的思想是:为了仿真虚拟人的运动,首先将人机工程分析中的18个基本动素进行扩展,增加行走和攀爬两类人体移动动素;然后将维修事件分解为维修作业流程,再将维修作业流程细分为基本维修作业流程,最后基本维修作业流程分解为动素的组合。这些动素可以由虚拟现实软件提供的基本动作函数封装完成,如伸手动素可以由肩关节运动函数、肘关节运动函数、腕关节运动函数和躯干协调运动函数封装完成。图1所示的是某型叉车更换油滤动作流程层次分解图。
图1 某型叉车更换油滤动作流程层次分解图
Petri网能够以图形方式形象、深刻地描述离散事件动态系统的过程,精确地描述事件顺序、并发和冲突关系。为了把 Petri 网应用到虚拟维修领域,必须把库所和变迁赋予特有的涵义。在这里,库所代表维修动作进行时设备和虚拟人等的状态,变迁则表示维修动作的进行,各个维修动作或维修状态之间的关系由库所与变迁之间的有向弧表达。
从上面的层次分解图可以看出,伸手、握取、移物、放手等动素的使用频率最高。因此,可以封装虚拟现实软件提供的基本动作函数形成动素单元,重复调度使用。如图2所示,将拆卸油滤基本作业的动素流程设计为一个Petri网,通过一个仿真循环实现对伸手、握取、移物等动素单元的多次调度。在进行拆卸螺钉时,需要左右手配合进行,图2所示的是右手的动作流程,左手与右手类似。
图2 拆卸油滤的动素流程Petri网模型
模型中各个库所和变迁的含义如表1所示。
表1 库所和变迁的含义说明
从图2中可以看出,此Petri网模型清晰地反映出维修动作的流程、各维修动作间的关系,以及维修动作状态的转换情况。
验证仿真实验是基于虚拟现实软件Jack 4.0,在Intel(R) Core(TM) i32.53GHz CPU,ATI HD 545V显卡,Windows XP操作系统的环境下,以Tcl/Tk和Python语言设计实现完成。
图3 更换油滤的虚拟动作流程仿真视频截图
Tcl/Tk和Python语言驱动Petri模型实现分为两个阶段完成。首先封装Jack的基本动作函数形成动素单元,然后利用Tcl/Tk和Python设计上面建立的动作流程Pertri网模型,在Pertri网模型中反复调用前面的动素单元。图3所示的是虚拟人更换某型叉车油滤动作流程仿真的视频截图。
本文针对维修工程中基本维修作业描述过于概括,划分比较粗糙,在虚拟维修仿真软件中无法实现的问题,提出将维修事件的维修动作流程自顶向下进行层次化分解,并建立了各层次动作流程,维修动作细分至动素级,封装虚拟现实软件提供的基本动作函数形成动素单元。同时为实现虚拟人的移动仿真,扩展了人机功效的动素,增加了行走和攀爬行走和攀爬两类人体移动动素。
由于Petri网能够以图形方式形象、深刻地描述离散事件动态系统的过程,精确地描述事件顺序、并发和冲突关系,将动素动作流程映射为Petri网模型。通过对更换某型叉车油滤的动作流程仿真说明,利用Tcl/Tk和Python设计动作流程Pertri网模型,在Pertri网模型中反复调用已封装好的动素单元,可快速逼真地实现虚拟维修动作流程仿真,也验证了该模型的有效性和可行性。
[1]可靠性维修性保障性术语集编写组. 可靠性维修性保障性术语集[M],北京:国防工业出版社,2002.
[2]Ranko Vujosevic.Maintainability analysis in concurrent engineering of mechanical system[J].Research and Applications,1995,3(1):20-23.
[3]N.I.Badler,C.B.Phillips,B.L.Webber.Simulating Humans:Computer Graphics,Animation and Control[M].Oxford University Press,1993.
[4]Bauer M D,Siddique Z,Rosen D W.Virtual prototyping in simultaneous product/process design for disassembly.Dong J ed.Contemporary Methodologies,Tools and Technologies.London:Chapman Hall,1997.
[5]李星新,郝建平,柳辉.虚拟维修仿真中维修动素的设计与实现[J].中国机械工程,2005,16(2):156-160.
[6]常高祥,徐晓刚,张雷.虚拟维修中虚拟人的动作模型设计[J].工程图学学报,2011,No.1:99-103.
[7]卢晓军,李焱贺,贺汉根.基于Petri网的虚拟人行走动作建模及其仿真实现[J].系统仿真学报,2005,17(11):2679-2682.
[8]王政,朱晓军,闵少松.基于Petri网的虚拟维修手部动素建模[J].船海工程,2007,36 (2):77-80.