孙青欣,王庆文,李 静
(北京航空航天大学,北京 100191)
在目前的数控加工系统中,针对于大量同类零件的数控加工,参数化编程已经成为一种既能提高编程效率,又能保证加工质量的加工方式。机床上的典型零件往往具有相似的结构或者几何特征,如果我们能够将它们的加工方法以参数化子程序的形式保存下来,在参数化编程的主程序中进行参数化接口的赋值和子程序的调用,可以大大提高编程效率。
然而,要想实现同类零件的模板式参数化加工,首先需要将同类零件的相似结构以特征的形式识别出来,建立加工特征库,为特征的参数化编程提供模型支持和数据支持[4~6]。
对于特征识别技术,目前主要的解决办法有两种,一种是基于特征邻接矩阵匹配的特征识别[1],将特征的面边关系属性邻接图转化为特征矩阵,然后针对矩阵进行匹配和识别;另一种办法也是对特征的属性邻接图进行操作,但是识别方法是基于子图同构的图遍历搜索[2,5]。然而,前者只能识别简单的特征,对于复杂零件特征的识别则无能为力,而后者虽然可以识别复杂零件的特征,但是算法的复杂度较高,针对于特征组成面较多的零件,识别起来十分繁琐。
目前参数化编程的所需要的加工参数的传递和赋值还是人为进行的,是非自动化的,这无疑阻碍了参数化编程效率的提高。为满足参数化编程的这一需求,在特征识别过程中,不仅需要对特征的拓扑结构进行识别,还需要将特征的底层参数一并提取出来,为参数化编程的自动参数传递做准备[7]。
针对以上问题,本文提出一种基于参数化编程的特征识别方法,采用基于子图同构的特征识别思路对特征进行识别,并且为了解决算法复杂度的问题,引入加工工艺参数进行算法剪枝运算。面向典型机床零件构建特征模型,利用三维数模的STEP标准文件,实现数控编程参数的自动获取。
针对机床关键零件具有系列化的特点,本文研究基于特征的高效数控编程技术,通过分析箱体、立柱、床身、横梁、工作台五大类零件的结构,总结出需要加工的所有特征结构。在对特征进行识别时,需要得到特征的各个组成面之间的拓扑关系。因此,在特征模型中需要有一个表达这种拓扑关系的图结构。
在特征识别完成之后需要对特征进行一个模板式的数控编程,常规的做法就是靠人工手动编程,所需要的参数信息需要人为录入,大大影响了编程的效率。为了实现编程参数的自动获取,在特征建模时除了需要考虑特征识别时需要的拓扑结构,还需要将特征的加工面的几何信息和精度信息传递给参数化编程模块。
图1 机床零件典型特征
图1所示为机床的一个台座特征,在特征识别时,我们需要知道构成这个特征的六个面F1~F6的拓扑关系图,以及在进行拓扑关系识别时需要的面和边的各种属性信息。另外,我们还需要提取出对这个特征进行参数化编程加工时需要的加工面F1的尺寸信息。
通过上文中对于特征建模需求的分析,我们确定建立特征表达模型的两个原则:一是要包含特征识别所需的面边拓扑关系,二是要涵盖特征参数化编程所需要的几何参数和加工参数。为满足这两个原则,建立特征的表达模型如图2所示。从特征的结构上,将特征分为图、面、边和顶点四层表达结构;从特征的属性上,将特征分为拓扑、几何和加工属性三类属性表达。
图2 特征表达模型
图中的特征的图(Graph)表达是基于三维建模方法而实现的。B-Rep边界模型表示法详细记录了构成模型的所有几何元素的几何信息及其拓扑关系信息。因此,三维CAD模型的面属性化邻接图采用CAD模型的B-Rep信息提取表示。图3就是图1所示零件的属性邻接图。
图3 特征属性邻接图
定义属性邻接图G=(V,E),V为图中顶点(面)的集合,零件中的每个面fi都有唯一的顶点Vi与之相对应。面fi的属性就是顶点Vi的属性,包括面的几何类型、面的形状、尺寸、加工标识等。E为面的邻接关系,即图中边的集合,对于零件中的任意两个相邻的面fi与fj,都有唯一的一条边e与之相对应。CAD 模型边ei的属性,包括边凸性、边的两连接面的类型等。
为了得到表达模型中各数据的具体数值,我们需要对于STEP文件中的信息进行整理和提取[3]。为了保证参数提取的准确性,我们首先就要在STEP文件和特征表达模型之间建立一种映射关系。
由于STEP文件和特征模型的数据结构不同,不能进行简单的数据映射,本文建立了一种基于两种数据结构的映射模型,通过四个方面的数据传递,保证特征提取时参数传递的准确性和有效性,如图4所示。
STEP-NC文件的数据结构以树状存储。一个三维的几何空间(CLOSED_SHELL)是由一个或者多个面(ADVANCED_FACE)组成的集合。面是由一个或者多个封闭面边界(FACE_BOUND)构成,面边界是由多条有向边(ORIENTED_EDGE)组成的边环(EDGE_LOOP)和面的颜色属性(FACE_COLOR)表达的。每条边的几何表达(EDGE_CURVE)包括边的起点(START_POINT)、终点(END_POINT)和向量信息(*LINE)。几何外形的顶点(VERTEX_POINT)是由笛卡儿坐标点(CARTESIAN_POINT)表示的,存储的是坐标值。
图4 STEP文件与特征模型的映射
特征库中存储的特征的相关信息主要为两个功能服务,特征的识别和特征的参数化加工。这两个过程中需要的几何信息和加工信息绝大部分需要从STEP文件中提取并且按照一定的格式传递,通过建立一个信息的映射模型,将不同数据类型,不同格式的数据准确地传递。
2.2.1 属性映射
在STEP文件中,面和边的类型属性隐藏在语句之中,我们需要通过对于表示面和边的语句进行词法分析,得出隐含的类型属性。
1)面的属性映射:在特征库中存储的特征的面的类型属性FT包括平面和曲面;在STEP文件中,每个面的属性信息存储在数据结构FACE_BOUND和FACE_OUTER_BOUND中,即内面和外面。一般情况下,当本语句中通过词法分析提取的关键词是plane时,则表示面的类型为平面;当提取的关键词是cylinder时,则面的类型为圆柱曲面;当提取的关键词是其他时,则面的类型为其它曲面。
2)边的属性映射:在特征库中存储的特征的边的类型LT只有两种情况:直线边或者曲线边,而在STEP文件中,则没有对于边类型的直接记录,但是我们依然可以通过上面分析的面的类型信息来推理出边的类型属性。我们知道,边是直线还是曲线跟面的类型直接相关:当相交的两个面都是平面时,那么相交的边为直线边;当相交的两个面为一个曲面加一个平面时,若平面是曲面的切面,则公共边为直线边,否则为曲线边。在STEP文件的数据结构FACE_BOUND中我们得到面的类型之后,通过上述判断方法可以得到边的类型属性(直线边或曲线边)。
2.2.2 形状映射
机床典型零件在特征库中存储的特征的面的形状FS主要有矩形、圆形、梯形及其它;形状主要是由面的组成边的条数来确定。在STEP文件中,组成特征每个面的边的信息存储在结构EDGE_LOOP中,它的子节点个数即为组成这个面的边的条数。如果子节点个数为1,则映射到特征库里的特征的面就是圆面;如果子节点个数为4,则映射到特征库里的特征的面一定为四边形。
在STEP文件中,边的存储结构EDGE_LOOP的子节点LINE中存储的是每条边的具体信息,其中包含边的向量信息VECTOR。四边形的具体形状可以用每两条边之间的夹角来确定。
2.2.3 标识映射
2)边的凹凸性标识映射LF:特征识别的基础是属性邻接图,而属性邻接图中邻接的边的空间拓扑关系是通过边的凹凸性来判定的。将边的凹凸性确定之后,就可进行特征组成面的提取及特征子图匹配。如果两个相邻面之间的向外法向量夹角大于180度,则这两个面相交所形成的边为凸边;如果两个相邻面的向外法向量之间形成的夹角小于180度,则这两个面形成的边为凹边。
2.2.4 尺寸映射
在特征识别和特征的参数化编程过程中,面和边的尺寸都很重要。在映射平台上,尺寸映射实际上也分为两个部分,面的尺寸和边的尺寸映射。但是面的尺寸是由边的尺寸确定的。如果我们知道了每条边的尺寸那么我们就可以知道这个面加工时所需要的几何尺寸。但是在STEP文件中,所有的尺寸信息都存在最为底层的顶点信息中:公共边的尺寸可以通过STEP中的LINE结构来确定,在LINE中都会有一个Start-point和End-point的记录,通过这两个点的坐标可以计算出边的长度。
如果是圆面,STEP文件中的LINE结构中存储的点信息只有一个,即为圆的圆心;存储的信息还包括圆的半径R,通过R可以计算出圆的面积,即为这个面的尺寸。
如果是圆柱面,那么STEP文件中的LINE结构中存储的点也有两个,即Start-point和End-point,但是此时表示的是圆柱上表面的圆心坐标和下表面的圆心坐标;存储的信息还包括圆柱的半径R,通过这三个信息可以得出圆柱面的尺寸。
根据前文特征的定义和特征的信息模型,特征的识别主要是对于构成特征的面和边的属性以及面和面之间的拓扑关系进行识别。为了达到这一目的,我们构建基于面的属性邻接图,将各元素的属性和拓扑关系一并表达出来,那么我们在判断一个结构是否在特征库中存在对应的特征时,就可以直接把这个结构的属性邻接图和特征库中所有特征的属性邻接图进行一一比较,得出识别的结果。
按照“中国特色、世界水准”的高等职业教育的奋斗目标,高职院校在今后的内涵式发展中势必进一步加强国际交流和合作。辅导员要积极组织中、外学生文化交流,引导学生敢于并善于把中国文化最优秀的一面展示给国外留学生,树立学生的文化自信。同时,要引导学生积极思考,按照“各美其美、美人之美、美美与共、天下大同”的原则,发现他文化之长,并结合实际情况,经过科学的扬弃后使之为我所用。
在特征拓扑结构匹配的时候我们利用的是子图同构算法进行属性邻接图的同构判断,在基本算法的基础上,做一些改进,使该算法更适合本实例。
假设由待匹配的零件结构转换得到的子图为Gα,由完整的CAD模型转换得到的大图为Gβ。图G α的顶点集合为V α,顶点个数为m,邻接矩阵为Mα;图Gβ的顶点集合为Vβ,顶点个数为n,邻接矩阵为Mβ;其中m≤n。设置一个映射矩阵M,其维数为m×n。M中任意一个元素mij(0≤i≤m-1;0≤j≤n-1) 的取值可以是0或1,若图Gα的第i个顶点与图Gβ中的第j个顶点相对应,则mij=1;否则mij=0。判断图Gα是否与图Gβ的一个子图同构,就是看能否找到一个映射矩阵M0,使得M0满足:1)每一行有且只有一个1;2)每一列至多只有一个1。满足这两个条件的映射矩阵M0就代表了图Gα与图Gβ之间的一个子图同构映射。
由于特征子图的匹配不是普通子图的同构匹配,它的子图的顶点表示的是特征需要加工的面,包含很多特殊的属性:它们不仅有形状尺寸的不同,更有加工属性的差别,所以子图同构时顶点的匹配实际上是面与面之间属性的匹配。为了降低搜索空间的复杂度,我们必须利用特征子图的加工属性知识使映射矩阵M的元素尽可能多地为0,这就需要先对图的顶点进行预处理。用于对顶点进行预处理的面的属性主要有面的类型,形状等几何信息以及面的加工标识,加工精度等加工信息。
3.2.1 基于形状属性的预处理
利用上面的子图同构处理方法进行特征识别发现准确率较低,究其原因,在子图同构中,参与匹配的顶点属性较少,将部分不相似的顶点在比较的时候认为是匹配的;因此,我们尝试对参与匹配的顶点基于形状进行分类,首先考虑CAD模型面的类型,不同类型的面之间不可能对应匹配,如一个平面不可能和一个圆柱面匹配,一个圆柱面也不可能和一个自由曲面匹配。
所以,若图Gα中的第i个顶点对应的CAD模型的面与图Gβ中的第j个顶点对应的CAD模型的面的类型不同,则这两个顶点不可能匹配,我们可以直接将映射矩阵M的第i行第j列的元素mij置为0。
另外,即使对于形状相同的两个面,尺寸大小的差别也有可能影响特征顶点的匹配,在加工层面,同一形状的面的尺寸不同,工艺中的加工方法就不尽相同。考虑到特征识别之后要进行参数化编程加工,所以引入尺寸属性对顶点匹配进行限制。
3.2.2 基于加工属性的预处理
图5 特征识别实例
对于特征匹配来说,匹配的结果如果满足,那么下一步就是如何进行特征的加工。如果能将特征加工所需要的加工信息作为匹配的因素之一,可以大大提高匹配的效率,减少不必要的算法浪费。
上文中所说的基于形状的顶点分类,即使满足形状属性的两个面,如果一个是加工面一个是非加工面,那么也不是我们所说的同样的特征。而且,即使两个面都是加工面,那么不同精度等级的加工面也不能说明是一个特征,因此,加工信息对于特征的识别是至关重要的。
首先我们要给所有的顶点(面)进行编码,F=1000FJ+100FT+10FS+FA,其中,F为面的编码结果,FT为面的类型,FS为面的形状,FA为面的大小,FJ为加工信息(当加工面标识FF=1时,FJ=1~9,分别表示其加工时的精度等级)。
选取机床立柱(图5a)作为识别对象,目标特征为电机座特征(图5b所示)。
图6 零件的STEP特征表达
对于所选立柱文件,通过对于STEP文件的分析,包含3249个面,现在选取包含特征的12个面(5887~5898),分析其STEP文件结构如图6所示。
通过STEP文件得到整个零件的所有面和边的属性邻接图,省略其他,只保留与特征有关的面边拓扑关系如图7所示,通过子图同构算法,我们得出结论,电机座特征的特征库中存储的特征拓扑结构子图与零件的属性邻接图同构,可以判断该结构的识别结果即为电机座特征。
图7 零件的属性邻接图(部分)
选取特征的一个加工面(ID=5891)及其组成其轮廓的边,特征模型的几个重要表达结果如下:
1)FT=平面。根据STEP结构中的FACE_BOUND里面的plain标识映射得到。
2)FS=矩形。根据EDGE_LOOP中的四条边(6535~6538)得到每条边的法向量,根据向量夹角计算公式,得出每两条边之间的夹角为90°,映射到特征模型中为矩形面。
3)FF=加工。根据FACE_COLOR中的RED标识可以得到,此面为加工面。
4)FA=80×100(mm):根据EDGE_LOOP中的四条边(6535~6538)找到每条边的起点和终点(例如6536边的起点坐标和终点坐标分别在笛卡尔坐标系8961点和8959点中,根据距离公式得出矩形的大小为80×100(mm)。
5)LF=凸边.通过计算该面与相邻的四个面(5888、5889、5890、5898)的法向量,得到四个相邻边的凹凸关系都为凸边关系。
本文提出了一种基于参数化编程的特征识别方法,通过对于三维模型的STEP文件进行分析,建立特征的数据模型,将数据从STEP文件里提取出,用于特征的识别和特征的参数化编程。在特征识别过程中,本文借用子图同构算法的思想,对于特征结构的属性邻接图进行匹配,并对算法进行了适用于本实例的改造,让子图同构算法的顶点有了更多工艺过程的属性,利用剪枝的方法,大大提高了匹配效率。另外,通过前面的STEP信息的底层传递,保证参数化编程所需要的加工参数能够自动的获取,实现参数化编程的自动化。最后本文利用一个实例验证了特征识别和参数化编程所需参数的提取,取得了较好的结果。
[1] 熊雅清,盛步云.三维CAPP系统中特征识别技术研究与应用[D].武汉理工大学.2009.
[2] 王飞,张树生,白晓亮,陈书琼.基于子图同构的三维CAD模型局部匹配[J].计算机辅助设计与图形学学报.2008,8.
[3] 付鹏,苑伟政.基于STEP的特征识别技术及其实现[J].中国机械工程.2010(11).
[4] 吴江,廖文和.基于特征识别的CAD/CAPP集成技术研究[D].南京航空航天大学.2005.
[5] 郑坛光.三维CAD模型检索技术研究[D].华中科技大学.2009.
[6] Taesik Hong, Kunwoo Lee, Sungchan Kim. Similarity comparison of mechanical parts to reuse existing designs[J].Computer-Aided Design 2006; 38(9):973-984.
[7] Biasotti S, Marini S,Spagnuolo M,et al.Subpartcorrespondence by structural descriptors of 3D shapes[J].Computer-Aided Design,2006,38(9):1002-1019.