刘 凯,赵新灿,谭同德
(郑州大学 信息工程学院,河南 郑州450001)
虚拟装配作为虚拟现实技术在产品设计领域中的一个典型应用,已引起国内外学者的广泛研究[1]。大部分建立虚拟装配系统的方案为:①在CAD中建模,用CAD二次开发工具转化为某种格式的三角面片模型,然后导入虚拟装配系统。例如美国华盛顿州立大学开发的VADE虚拟装配环境[2],浙江大学开发的虚拟环境;北京理工大学开发的虚拟装配环境等。这种三角面片模型丢失了拓扑和几何等工程设计信息,即使采用手段弥补,也是一种信息单向传递的方案,如果虚拟装配中发现设计问题的话,虚拟装配结果很难及时反馈到CAD设计活动中,使虚拟装配系统成为信息孤岛,减少了其实用性。②直接在虚拟装配系统中建模,再进行虚拟装配,无须与其他CAD系统进行数据传输,例如浙江大学开发的VDVAS系统,香港城市大学W.Y.Ma等建立的虚拟现实环境。这种方案使得CATIA,UG和Pro/E等传统CAD模型难以应用[3]。③采用CAD通用标准STEP,将CAD模型直接导入虚拟装配系统进行装配。这种方法保留了模型的各种工程设计信息,不仅使装配方便灵活,还可以向CAD及时反馈信息,使得CAD与虚拟装配系统双向数据传递。但此方法研究较少,只是做了一些探索性的研究,如山东大学设计的虚拟装配系统[4],最终采用OpenGL仿真实现不太现实,其松散的API使得编程实现非常困难。针对上述问题,本文基于STEP标准,结合OSG开源虚拟现实引擎,在Visual Studio VC++集成开发环境下,设计并实现了一个自主知识产权、可扩展的虚拟装配系统。
虚拟装配系统框架可用图1描述,主要包括装配三要素智能匹配模块、辅助装配信息库、装配序列规划模块、OSG仿真模块。
(1)装配三要素智能匹配模块:一个完整的虚拟装配系统中应包括:待装配零件、工具、虚拟人姿态动作,称之为装配中的三要素。即装配场景中虚拟人选取某装配工具,采取某种姿态动作,装配待装零件。由于待装配零件来自于CAD软件存储的STEP文件格式,因此可提取其信息,根据提取出的零件名称、拓扑、几何尺寸等信息,智能匹配工具与姿态动作,如根据螺帽形状、尺寸等信息,匹配扳手型号,人操作扳手的姿态动作。本模块需要建立工具库、虚拟人姿态动作库、以及零件STEP的信息提取。
(2)辅助装配信息库:为得到装配序列,仅有零件STEP信息是不够的,还需要辅助装配信息的支持,包括:STEP装配体中装配关系的识别、电子手册、装配知识库、远程专家指导。其中STEP装配体中装配关系的识别是通过STEP装配体文件中暗含着零部件的空间几何关系,识别出零部件之间的装配关系[4];电子手册中包含零部件信息和装配步骤信息;装配知识库中包括零件的装配规则和装配操作可行性规则;远程专家指导既专家的经验知识。
(3)装配序列规划模块:将装配三要素和辅助装配信息库作为输入,采用装配序列规划算法生成装配序列。
(4)OSG仿真模块:将装配三要素读入OSG虚拟装配环境,根据前面生成的装配序列生成OSG教学动画,操作人员观看学习后进行交互装配练习,达到学习目的。最后系统给出评价和指导,如工效评价和可装配性评价等,根据这些评价结果可以优化装配序列,如发现零件的设计问题,反馈给CAD系统或直接修改STEP文件,实现VR与CAD双向通信;另外,由于OSG出色的虚拟现实渲染能力,也可为工业模型装配增强虚拟现实效果,如搭建装配工作场景,为工业模型添加重力、透明、纹理、爆炸等虚拟现实效果,使装配系统更加真实、实用。
可见,要实现该系统有诸多工作要做,本文对其中的关键技术问题进行研究,并用OSG仿真出一个原型系统。
本部分主要分析零件STEP文件结构并从中提取出几何与拓扑信息。
STEP(standard for the exchange of product modal data)全称是产品模型数据交换标准,它描述了产品从设计到生产制造整个产品生命周期内包括几何形状、拓扑结构、装配/分解顺序、材质/公差等方面的信息和数据交换的定义,主要用于在各CAD/CAM系统之间进行产品数据的交换和共享[5]。STEP提供了4种方式实现产品数据的交换和共享,分别是:文件交换方式、应用程序接口方式、数据库交换方式、基于知识库的交换方式,其中使用最广泛的是文件交换方式,目前各主流的CAD/CAM系统,如SolidWorks、CATIA、UG、Pro/E等都可读取或保存为STEP格式的中性文件。
STEP标准采用一种可读写的中性文件交换数据,中性文件由头段和数据段组成,头段信息主要是文件相关的管理信息,包括文件名、建立日期、作者、版本等信息。数据段主要包括产品模型的拓扑结构和几何形状信息,采用扩展边界表示法(boundary representation,简称B-Rep)来组织这些信息。扩展边界表示是使用点、边、环、面、壳依次组成实体边界并定义实体形状和尺寸的一种几何造型方法。在STEP中性文件中,拓扑结构最上层为边界表示法(ADVANCED_BREP_SHAPE_REPRESENTATION),它通常是若干个实体(Solid)的并集,实体又是若干个壳(Shell)的并集,壳的边界又由若干个面(Face)的并集来表示,而每个面又由它的几何曲面(Surface)和曲面上的边界(Bound)来表示,一个边界对应一个环(loop),环的边界是若干条边(Edge)的并集,而边又由几何曲线(Curve)和曲线上的顶点(Vertex)来表示,顶点又由笛卡尔坐标点(Point)来描述[6]。文件数据段部分数据示例如图2所示。
由这段数据可明显看出其拓扑结构,#155(ADVANCED_BREP)包含#31(SOLID),#31包含#27(SHELL),#27由(#32,#28,#9,#57,#51,#59)6个FACE组成,#32(FACE)包含#69(FACE_OUT-ER_BOUND)和#139(PLANE),以此类推,是一个深度遍历的过程。其中#后的数字为实例编号,也是在文件中所处的行号,MANIFOLD_SOLID_BREP为实例关键字,()内为其组成属性信息。
根据每行数据结构,设计结构体,提取其信息,保存在结构体数组中,用于深度遍历向OSG映射。
设计结构体如下:
struct EntityNode
{
int ID;//实例编号
CString Name;//实例关键字
std::vector<CString> _attrs;//组成属性
};
信息提取方法:设计信息提取类CExtractFileInfo处理每一行中的字符串,其以每行中的 ‘#’,‘=’,‘(’,‘,’,‘'’,‘)’,‘;’作为分隔符,读取每分割段内的字符串,将 ‘#’,‘=’之间的数字作为实例ID号,将 ‘=’与之后第一个 ‘(’之间的字符串作为实例关键词,将 ‘(’与 ‘)’之间的数据作为实例的属性。程序顺序读取直至读到文件尾结束,将这些数据保存到结构体数组中。
根据前面提取到的结构体数组,深度遍历,将STEP关键字逐个映射到OSG,并形成OSG场景树,最终由OSG渲染绘制出STEP零件。
OSG作为一款优秀的开源虚拟现实引擎,使用C++语言并采用面向对象的思想编写,除封装了OpenGL几乎所有的API函数,还具有自身一些独特的技术特性,如空间数据组织、场景改动最少化、细节层次节点技术(LOD)等,使得OSG有着强大的场景图组织和高速渲染能力。与其他商业图形引擎相比,其功能更强、性能更好[7]。OSG采用自顶向下、分层的树状结构,进行存储、组织和管理需要渲染的场景。一棵场景树包括一个根节点(Root)、多级内部的枝节节点(Group),已经多个末端的叶子节点(Geode)。根节点和枝节节点负责构建树的层次,而叶子节点则保存一个或多个可绘制对象(Drawable),就好像树枝的末端生长着叶子,叶子里面又包含着果实一样。
为完成STEP关键字向OSG的映射,并建立OSG场景树,建立映射规则如下:
(1)STEP文件中的实体关键字ADVANCED_BREP_SHAPE_REPRESENTATION映射为OSG的矩阵变换节点osg::MatrixTransform(其继承于osg::Group),由于该关键字处于拓扑结构最上层,代表着整个STEP零件,在后面的装配过程中需变换零件整体的位置。
(2)STEP文件中表示拓扑关系的实体关键字映射为OSG的组节点osg::Group。
(3)STEP中性文件中表示几何形状的实体关键字映射为OSG的几何图形绘制类osg::Drawable,作为果实加入叶子节点osg::Geode。
根据上述映射规则,STEP关键字与OSG的映射关系以及OSG场景树的组织结构如图2所示。
图3中白色节点代表STEP拓扑关键字,映射为OSG组节点,黑色节点代表几何关键字,映射为Drawable节点,加在叶子节点Geode下,共同组织在场景根节点Root下,形成场景树,最后OSG渲染绘制场景。
STEP文件中的几何形状众多,包括各种规则的和不规则的曲线曲面,如平面、圆锥、球、B样条曲面等等。针对这样繁多的几何形状,必须采用统一的表示方法,否则极难程序实现。
本文中采用NUBRS来表示STEP中所有的几何图形,NUBRS的全称是非均匀有理B样条曲线(曲面),是在曲线曲面描述理论中,发展得比较优秀、实用面最广的曲面曲线理论,由于NURBS方法优秀的特性,成为STEP标准中描述工业产品几何形状的唯一数学方法[8]。NURBS曲线、曲面的公式分别如式(1)和式(2)所示。
式(1)中,Pi是曲线的控制顶点序列,ωi是与Pi对应的权因子,Ni,k(t)是k阶B样条基函数;式(2)中,Pij是矩阵域上特征网络控制顶点列,ωij是与Pij对应的权因子,Ni,p(u)和Nj,q(v)是p阶和q阶的B样条基函数。
由公式可见,只要给出控制点序列和权值,就可以表达出对应的NURBS曲线、曲面。
采用NUBRS理论,各种几何图形的NURBS表示方法如下:
(1)直线段:线段的两个端点即为控制点,权值相等均为1。
(2)圆弧:圆弧统一用9个控制点来定义,首尾控制点分别是圆弧的起点和终点,剩余的7个点坐标(x,y)分别根据下列公式计算[9]
式中:α——圆弧角度,A——圆弧起始角,n——控制点数目,R——圆弧半径。权因子也分两种情况:奇数控制点的权因子为cos(β),偶数控制点的权因子为1。
(3)平面:采用长方形表示法,长方形的4个顶点即为控制点,U方向两个控制点,V方向也两个控制点,权值都为1。
(4)圆柱面的NURBS表示:圆柱面可以看作是一条直线绕中心轴旋转一周得到的表面。因此U方向为一整圆弧,有9个控制点,V方向是一条直线,有2个控制点。可参照上面直线与圆弧的表示,用一个二维数组cp[9][2]存储控制点。
(5)圆台面:表示方法与圆柱面类似,圆台面可以看做是一个上圆与底圆半径不相等的圆柱,而圆锥面可以看做是其中一个圆的半径为零。
(6)球面:把球面看作将一个半圆绕其中心轴旋转一周得到得表面,U方向为一整圆,9个控制点,V方向为一半圆,5个控制点,用二维数组cp[9][5]存储。
(7)圆环面:一个整原绕其中心轴旋转一周得到得表面,U、V方向都为一整圆,用二维数组cp[9][9]存储。
(8)不规则的曲线曲面:直接从step文件中读出控制点和权值数据存入控制点数组。
将得到控制点数组传入osg::Drawable类,再根据step文件的OUTER_BOUND(外环)和BOUND(内环)信息进行裁剪,最终由OSG绘制。
由图2中OSG场景树可见,STEP零件拓扑结构的最上层 ADVANCED_BREP_SHAPE_REPRESENTATION映射为osg::MatrixTransform(矩阵变换节点),因此根据用户指定的配合关系,计算出变换矩阵,对零件施加位置变换,即完成装配。
实现装配的过程如下:
(1)拾取装配对象:利用OSG拾取类与几何面线求交,如果选中,得到其基准点与法向量数据,并将其设为OSG高亮节点。
(2)指定装配基准件和零件:在装配过程中每一个后续零件总需要装配在一个指定的装配基准件上[10]。在本系统中,由图2中OSG树形结构所示,可由所选面线沿着树的路径向上即可找到osg::MatrixTransform节点即找到所选零件,将其设置为基准件或零件,装配时,基准件位置不动,零件变动位置。
(3)指定配合关系并计算变换矩阵:根据指定的配合关系(如面-面重合、垂直、同轴心等),由面、线的基准点和法向量等信息计算出零件的旋转和平移矩阵,变换零件位置,完成装配。
为展示效果,本系统从CAD软件设计的光学头盔零件中选取了6个零件,另存为STEP中性文件,读入本系统,经过若干次配合之后,装配成头盔中的光路部分。效果图如图4所示。
图4 系统仿真实现效果
在图4中,第一幅图表示装配前的效果,第二幅图为装配后的效果。装配后效果图中部分零件设置了透明效果,因此可以看到其内部的零件,绿色高亮的部分是装配过程中选取特征面进行配合留下的痕迹。
本文将STEP标准与OSG虚拟现实引擎相结合,设计了一个虚拟装配系统,对其中的关键技术问题进行研究,并仿真实现了一个原型系统。下一步需要继续完善该系统,另外,装配方式也较为繁琐,需要进一步识别装配特征,简化装配操作,装配后的各项指标的评价也有待进一步研究,如干涉检查、可装配行与工效评价等,完善这些工作会使装配系统更有实用价值和意义。作者相信由于本文解决了系统的关键技术问题,其进一步完善一定可以顺利完成。
[1]ZHANG Jun,ZHAI Zhengjun.Research and application of virtual assembly technology[J].Aeronautical Manufacturing Technology,2009(1):70-73(in Chinese).[张隽,翟正军.虚拟装配技术的研究与应用现状[J].航空制造技术,2009(1):70-73].
[2]WANG Niandong,LIU Yi,Research on an integrated architecture of virtual assembly system[J].Acta Aeronautics et Astronautica Sinica,2009,30(11):2234-2242(in Chinese).[王念东,刘毅.集成化虚拟装配系统体系结构研究[J].航空学报,2009,30(11):2234-2242.]
[3] WANG Wei.Research and development on a STEP-based CAD/CAM platform[D].Shenyang:Shenyang Institute of Aeronautical Engineering,2008:21-28(in Chinese).[王伟.一种基于STEP标准的CAD/CAM平台的研究与开发[D].沈阳:沈阳航空工业学院,2008:21-28.]
[4]LIU Hongtao.The research on assembly sequence planning and its simulation based on STEP[D].Jinan:Shandong University,2006:27-36(in Chinese).[刘洪涛.基于STEP的装配序列规划及其仿真研究[D].济南:山东大学,2006:27-36].
[5]LI Peilin.Research of CAD/CAE integration based on STEP standard[D].Harbin:Harbin Engineering University,2009:30-54(in Chinese).[李佩霖.基于STEP的 CAD/CAE系统集成技术的研究[D].哈尔滨:哈尔滨工程大学,2009:30-54.]
[6]DAI Bai-sheng.Research on STEP-based manufacturing feature recognition and 3Dreconstruction technology[D].Harbin:Northeast Agricultual University,2010:17-27(in Chinese).[戴百生.基于STEP的制造特征识别与三维重建技术研究[D].哈尔滨:东北农业大学,2010:17-27.]
[7]ZHANG Yanli,TAN Tongde,ZHAO Xincan,et al.Construction and design of virtual chemistry experiment platform based on OSG[J].Computer Engineering and Design,2010,31(12),2909-2913(in Chinese).[张艳丽,谭同德,赵新灿,等.基于OSG的虚拟化学实验平台的构建设计[J].计算机工程与设计,2010,31(12):2909-2913.]
[8]REN Lei.The extraction and reconstruction of STEP-based geometrical information[D].Changchun:Jilin University,2008:12-40(in Chinese).[任蕾.基于STEP标准的几何信息的提取和模型重建[D].长春:吉林大学,2008:12-40.]
[9]REN Mingxuan.Study of STEP-based system of the file character recognition[D].Tianjin:Tianjin University,2009:39-44(in Chinese).[任明轩.基于STEP文件特征识别系统的研究[D].天津:天津大学,2009:39-44.]
[10]ZHANG Yin.Research on the key technologies of intelligent virtual assembly sequence planning system[D].Nanjing:Nanjing University of Aeronautics and Astronautics,2006:115-119(in Chinese).[张银.基于知识的虚拟装配序列规划系统及其关键技术研究[D].南京:南京航空航天大学,2006:115-119.]