浙江大学学报(工学版), 2024, 58(4): 748-760 doi: 10.3785/j.issn.1008-973X.2024.04.010

机械工程、能源工程

层次多叉树映射布尔体廓后验误差的自适应层切

郭洪帅,, 张树有, 伊国栋,, 刘晓健, 谭建荣

1. 浙江大学 流体动力基础件与机电系统全国重点实验室,浙江 杭州 310027

2. 浙江大学 宁波科创中心,浙江 宁波,315100

Adaptive slice method based on posterior error of hierarchical N-ary tree mapping Boolean volume contours

GUO Hongshuai,, ZHANG Shuyou, YI Guodong,, LIU Xiaojian, TAN Jianrong

1. State Key Laboratory of Fluid Power and Mechatronic Systems, Zhejiang University, Hangzhou 310027, China

2. Ningbo Innovation Center, Zhejiang University, Ningbo 315100, China

通讯作者: 伊国栋,男,教授. orcid.org/0000-0002-7711-7982. E-mail:ygd@zju.edu.cn

收稿日期: 2023-09-1  

基金资助: 浙江省重点研发计划项目(2021C01149);浙江省自然科学基金资助项目(LZ22E050008);宁波市自然科学基金资助项目(2021J150).

Received: 2023-09-1  

Fund supported: 浙江省重点研发计划项目(2021C01149);浙江省自然科学基金资助项目(LZ22E050008);宁波市自然科学基金资助项目(2021J150).

作者简介 About authors

郭洪帅(1989—),男,博士生,从事数字化设计研究.orcid.org/0000-0002-4037-4002.E-mail:hsg@zju.edu.cn , E-mail:hsg@zju.edu.cn

摘要

在给定构建方向下,层切厚度影响熔融沉积成型零件表面的阶梯效应,层切轮廓及其层次关系是路径规划的研究基础. 为此,提出基于布尔体廓运算的自适应层切方法,在零件模型不同高度层切面上构建局部轮廓拓扑并计算内核域,根据内核点连线与轮廓环的交点,将轮廓环数据映射到一维坐标轴,基于拓扑映射判定轮廓环层次关系. 建立层次关系多叉树,以树高映射体廓特征变化的布尔运算,根据层变阈值设计自适应层厚,通过体廓后验误差估计任意层厚的体积误差,验证自适应层切的有效性. 实例打印及不同自适应层切方法对比结果表明,采用体廓后验误差计算的层切体积误差精度比牙尖高度法的更高;通过控制体廓特征部位的层厚来减小体积误差,有助于提高模型特征部位的表面成型精度.

关键词: 熔融沉积成型 ; 自适应层切 ; 拓扑映射 ; 体积误差 ; 层次多叉树 ; 体廓后验误差

Abstract

Under the given build orientation, slice thickness affects the step effect on the surface of the fused deposition modeling part, and slice contour with its hierarchical relationship is the research basis for path planning. An adaptive slice method based on the operation of Boolean volume contours was proposed. Local contour topology was constructed on different height slice-plane of a part model and the kernel region was calculated. Contour loops were mapped to one-dimensional axis according to the intersections of connection lines between kernel points with the contour loops. The hierarchy relationship of contour loops was determined by topological mapping. N-ary tree was built by the hierarchical relationship. The Boolean operation of volume contour with feature change was mapped by the height of the N-ary tree. Adaptive slice thickness was designed according to the slice variation threshold. Volume error under any slice thickness was estimated by the posterior error of volume contour. The effectiveness of adaptive slice was verified by the volume error. According to printing examples and the comparison of different adaptive slice methods, the calculation accuracy of slice volume error obtained by contour posterior error is higher than that obtained by the method of cusp height. Volume error is reduced by controlling slice thickness on the part of volume contour features, and surface forming accuracy on the region of model features is improved with the volume error reduced.

Keywords: fused deposition modeling ; adaptive slice ; topological mapping ; volume error ; hierarchical N-ary tree ; posterior error of volume contour

PDF (10572KB) 元数据 多维度评价 相关文章 导出 EndNote| Ris| Bibtex  收藏本文

本文引用格式

郭洪帅, 张树有, 伊国栋, 刘晓健, 谭建荣. 层次多叉树映射布尔体廓后验误差的自适应层切. 浙江大学学报(工学版)[J], 2024, 58(4): 748-760 doi:10.3785/j.issn.1008-973X.2024.04.010

GUO Hongshuai, ZHANG Shuyou, YI Guodong, LIU Xiaojian, TAN Jianrong. Adaptive slice method based on posterior error of hierarchical N-ary tree mapping Boolean volume contours. Journal of Zhejiang University(Engineering Science)[J], 2024, 58(4): 748-760 doi:10.3785/j.issn.1008-973X.2024.04.010

在给定构建方向的情况下,不同的层厚设计对熔融沉积成型零件模型的打印精度和性能有重要影响[1]. 层切设计方法将零件模型分割成连续的2D轮廓序列,通过轮廓层次关系判断规划打印路径轨迹. 合理的层厚设计将大大减小由于逐层累计材料造成的阶梯效应[2],提高模型的表面打印精度. 此外,层切设计及轮廓层次关系是路径规划研究的基础,是整个增材制造过程中必不可少的处理环节.

层切算法根据层厚是否变化主要分为两类:均匀层厚和自适应层厚. 均匀层厚算法简单、使用广泛,自适应层厚算法制造的零件精度更高和构建时间更短[3-4]. 阶梯误差与模型构建方向和层厚直接相关,在构建方向确定的情况下,自适应层厚算法可以最大化减小模型在特征变化部位的层切厚度,减小阶梯误差对表面打印精度的影响,提高零件局部特征域的打印精度,尤其是对于复杂零件的制造,自适应层厚算法相比均匀层厚算法更具优势[5]. 自适应层厚算法通过分析模型的特征变化确定层厚变化部位[6]. 现有方法主要通过最小厚度切割或检查尖锐特征点获取模型几何形状变化区域,通过特定切面上的几何形状来评估局部变化偏差,当偏差小于设定的阈值时执行层厚设计策略. 自适应层厚算法需要大量的切面与模型的求交运算,计算代价非常高,当相邻切片之间存在复杂几何形状时,评估误差较大[7].

针对不同层厚对零件模型表面体积误差的影响,本研究提出层次多叉树映射布尔体廓后验误差的自适应层切方法. 对零件模型重建拓扑后提取任意层轮廓环并计算内核域,通过拓扑映射判断轮廓环层次关系,根据轮廓环层次关系多叉树映射体廓布尔运算,设定层变阈值计算自适应层厚,通过体廓后验误差验证所提算法的有效性.

1. 轮廓环层次关系计算

1.1. 任意层闭合轮廓环集合提取

轮廓是3D模型投影到2D上最内和最外边线的集合[8],零件模型(如孔类、分支类零件)的层切面内不止一个轮廓,内、外轮廓提供轨迹边界及材料填充区域的准确描述. 在层切算法中,轮廓环Loop是模型在指定层切面处闭合轮廓的有向多边形表示,通过多边形轮廓环表征模型各层切面内的轮廓,可以减少轮廓顶点数目,提高计算效率. 在层切面内划定零件模型打印区域,是层切设计的必要中间处理过程. 轨迹规划和喷头补偿过程均须计算轮廓偏移,而偏移算法通常需要计算轮廓多边形而非结构化的线段列表[9].

在原始网格模型中,任意面间的邻接关系未知,建立零件模型的Rg-Tree[10]来提取指定层高的邻接面集:给定任意层高z,所有与XOY平行的切平面Pz存在交点的面片定义为当前层的层切面,根据Rg-Tree中模型的拓扑关系依次匹配层切面中所有面邻接关系,进而确定当前层轮廓. 根据层厚计算轮廓层高zi,解析任意面fi的顶点及其法向,基于顶点在Z方向的最小值zmin、最大值zmax及层厚u确定fi所属的层数ni,将fi存入列表. 一般情况下,zminzmax并不恰好等于层高zi,即fi可能落在多个层切面内,fi所属的分层一般为[nmin]~[nmax],其中nmin= zmin/unmax = zmax/u,[n]表示不小于n的最小整数.

对于2D闭合可定向的二维流形M,不存在退化面并且没有自交或伪接触,特别地,任意面间的交集要么是空,要么是两者的一条边或者一个顶点,因此PzM相交的面必是首尾相接的封闭面集. 对于任意层封闭面集,基于Rg-Tree,从任意面fi依次匹配其邻接面直至返回至fi,得到封闭面集Fi. 设第i层数据共有m组轮廓面集即F={F1,···, Fm},对F中面添加标记,将fi存储到Fi,基于Rg-Tree查询fi的未标记邻接面片fadj(同一层邻接面不可能多于3个),将fadj存入Fi完成一个轮廓的邻接匹配;若闭合轮廓匹配完成后F中还有未标记的面片,则匹配第2个闭合轮廓直至所有未标记面片标记为空.

根据投影及相似关系,计算PzF的交点,并按照各面的邻接顺序排列所有交点,将F={F1,···, Fm}转换为轮廓面集C={C1,···, Cm}. 设PzZ向的坐标为zi,将fi投影至XOY平面,利用相似关系计算交点在XY方向的坐标值集合Ii ={(x1, y1, zi), (x2, y2, zi),···, (xs, ys, zi)}. 进一步确定交点的先后顺序,任意层高zi下,C中交点按照拓扑邻接关系连接为首尾相连的多边形. 考虑任意Ci的集合Fi = {f1, f2 ,···, fn},若Pz穿过F,则sn(若穿过fi顶点,则s < n);如图1(a)所示,轮廓在没有穿过面片顶点的情况下,n = s. 无论逆时针或者顺时针连接交点建立多边形,通过第2个面片的交点顺序唯一确定,否则多边形轮廓因交点缺失而无法有效闭合. 一般情况下,层厚的数量级很小,zi不会穿过面片顶点,本研究默认FiPz存在2个交点(相邻面片仅有1个交点重合). 如图1(b)所示,以任意面片集合Fi为例,假设f1的交点为(v1, v2),f2的交点为待定. 如果插入v1v2(其中f1的2个点插入顺序任意),第2个面片的插入点可能会存在(a1a2)或者(a2a1),(b1b2)或者(b2b1)2种情况,插入顺序正确是偶然情况,比如插入点b,但是有可能插入错误的a,无论是哪种情况只能是其中之一.

图 1

图 1   轮廓交点有序连接

Fig.1   Ordered connection of contour intersections


图2所示为插入点分析图,插入点顺序判断规则如下. 1) |$ \mathit{{v}}_1a_1 $|≡0或者|$ \mathit{{v}}_1a_2 $|≡0,为情况I: 若|${{{v}}_1}{a_1}$|≡0,第3个点插入a2,否则插入a1,交点顺序为如图2(a)的逆时针. 2) |${{{v}}_2}{b_1}$|≡0或者|${{{v}}_2}{b_2}$|≡0,为情况II: 若|${{{v}}_2}{b_1}$|≡0,第3个点插入b2,否则插入b,交点顺序为如图2(b)的顺时针. 3) 按照拓扑邻接顺序,从第3个面片的2个交点(vi+1, vi+2)开始,若|${{{v}}_{{i}}}{v_{i+1}}$|≡0,则插入vi+2,,否则插入vi+1.

图 2

图 2   插入点分析

Fig.2   Analysis of insertion points


1.2. 基于拓扑映射的轮廓环层次关系计算

层次关系判断方法主要有射线法和坐标极值法[11]. 射线法通过作平行于坐标轴的射线判断包含关系,需要大量的辅助射线并控制射线的间距;坐标极值法效率高,但会出现凹点轮廓环误判. 本研究提出基于拓扑映射确定轮廓环层次关系判别算法. 通过内核域计算,对内核点连线同轮廓的交点作拓扑映射,根据映射轴点的极值排序确定轮廓环层次关系,实现对应轮廓层次关系的有效判断. 相比于射线法,所提方法只进行1次拓扑映射即可判断层次关系,不仅减少了线段与轮廓环求交次数,还降低了算法的计算量.

给定任意多边形P,若P内存在点o,使得对于P内的任意点p的线段op完全位于P内,则点o的轨迹为P的内核域[12]. 如图3所示,阴影部分即为P的内核域K,将K中的任意点k作为判断轮廓环层次关系的辅助点,以k为起始点的射线与P有且仅有一个交点. KP的边线裁切而成,K必定为凸多边形. 依次扫描多边形P的顶点构造凸多边形序列{K1,K2, ···, Kn-1},其中Kn-1=K(P)为所求内核域[12]. 根据P在坐标轴上的最大值和最小值初始化矩形内核域K,计算P所有顶点的凹凸性,以当前点及其后继点所构成直线l判断当前点的前驱点Ppre在该直线的左边或右边. 通过lP分为2个部分,选择1个部分作为临时内核处理并下个点:若当前点为凸点,则选择的核与Ppre方向相同;若当前点为凹点,则选择的核与Ppre方向相反,更新临时核至所有点计算完毕并输出内核域K(P)顶点集合. 对于凹点过多的轮廓环,以其中凹点计算辅助内核点.

图 3

图 3   轮廓环的内核域计算

Fig.3   Kernel region calculation of contour loop


对于存在厚度的实体模型,任意2个轮廓环存在2种层次关系:包含或相离. 如图4(a)所示,L1L2L3均为有序交点连接的复杂多边形轮廓环,其中L1包含L2L3L2L3相离. 以L1L2为例,分析任意2个轮廓环层次关系. 分别计算L1L2,内核点I1I2及线段$\overline {{I_1}{I_2}} $L1L2交点集合Cnc为交点个数);依次判断C内所有点与L1的关系. 若交点均在L1外,则两环相离;若交点个数为0或者存在的交点均在L1内,则两环为包含关系. 根据交点个数nc进行如下情况分析. 1) 若${n_c} \leqslant 1$,则L2L1内部,即${L_2} \subseteq {L_1}$,如图4(b)所示;若L2L1外部,必有nc >1,如图4(c)所示,反之不一定成立. 2) 当nc >1时,对交点$c \in C$,采用拓扑映射法[13]将所有交点横坐标映射至X轴,对C内所有点按X分方向从小到大排序,以X方向上最小和最大的2个点cmincmax作为判断辅助点,依据点在多边形内外的判断方法[14],若cmincmax均在L1内,则${L_2} \subseteq {L_1}$,如图5(a)所示;否则,L1L2相离,如图5(b)所示.

图 4

图 4   轮廓环层次关系(${n_c} \leqslant 1 $

Fig.4   Hierarchical relationship of contour loops (${n_c} \leqslant 1$)


图 5

图 5   轮廓环层次关系(nc>1)

Fig.5   Hierarchical relationship of contour loops (nc>1)


1.3. 多实体的轮廓环层次关系计算

对所有的轮廓环分别计算最小外接矩形R,以面积最大矩形包围的轮廓环LR作为基环. 无论是单实体还是多实体模型,基环一定是外轮廓环. 单实体基环只有一个,多实体基环个数则由实体个数决定,但LR必定是其中任意实体的基环. 如图5(a)所示为单实体实例,所有的轮廓环只在一个最大的轮廓环L1内部(均在基环内部). 假定单实体内包含n个轮廓环L1~LnL1~Ln的层次关系按算法 1计算.

算法 1  基于拓扑映射的轮廓环层次关系判断

输入:轮廓环L1~Ln

输出:L1~Ln层次关系集合H

L1作为基环并将L1标记为H-1;

计算L2~Ln的最小外接矩形R1~Rn及其面积;

计算L2~Ln的任意内核点I2~In

For $i \in [2,n - 1]$ do

  For $j \in [i+1,n - 1]$ do

   判断LiLj的层次关系;

   If Li包含Lj

    标记LiH-i

   If Lj包含Li

    标记LiLj均为H-i

    $j \leftarrow j+1$

   End For

    $i \leftarrow i+1$

End For

Return 层次关系集合H

每个实体分别对应1个基环,根据基环数目可以判断实体个数. 对于单实体,当i=1时,实际上是对L1L2~Ln环作层次关系判断;若存在与L1相离的环,则当前层切面是多实体轮廓环. 如图6所示为多实体层切面的轮廓环L={L1, L2, L3,···, Ln},假定L1为基环,从L中剔除L1及其内部轮廓环后,依次判断L中所有轮廓环同L1的位置关系:凡是与L1相离的LR为第2个实体的基环,从L中剔除LR(假设为L2)及其内部轮廓环,L中与L1~L2均相离的LR为第3个实体的基环,依次类推. 若存在mm > 1)个基环,则将多实体分解为m个单实体,按照单实体判断方式(算法 1)对m个基环内所有轮廓环层次关系进行判定.

图 6

图 6   多实体轮廓环层次关系

Fig.6   Hierarchical relationships of multi-entity contour loops


轮廓环向判断常用的方法主要有向面积法、格林公式法、网格法等[15],基于轮廓环层次关系,采用有向面积法优先确定基环环向,再依次判断基环内部轮廓环向. 将当前层所有轮廓环顶点及轮廓环起始点索引在程序中载入,初始化层次关系矩阵ML,分别记录任意2个轮廓环的层次关系,轮廓环层次关系及环向判断的流程如图7所示.

图 7

图 7   轮廓环层次关系及环向判断流程

Fig.7   Judgment process of hierarchical relationship and direction for contour loops


2. 层次关系多叉树构建

为了表达各层切面内所有轮廓环的层次关系,基于轮廓环层次关系矩阵构建多叉(N-ary)树管理轮廓环层次关系,实现轮廓环层次化存储、查询与数据转换. 多叉树中每个结点是独立存储的数据结构,记录1个轮廓环(包括有序顶点集合、环向、索引key值、布尔符号、面积等信息)及对其父、子结点的引用. 其中第1层只有1个结点(即根结点Root),从第2层开始,每个子结点包含1个或者多个子结点,根据对轮廓环层次关系及环向的研究需要,层次多叉树的成员属性及其结点数据结构的定义如图8所示.

图 8

图 8   层次多叉树的数据结构

Fig.8   Data structure of N-ary tree


对于层次关系矩阵ML,元素L12=0表示L1L2相离,L12=1表示L1包含L2L12 = −1表示L2包含L1. 根结点所在层为0,以每一层切面轮廓数据为基本单位,Loop的环号为结点的索引值,层高h用于确定布尔运算符. 根据ML依次插入各个Loop,若h为奇数,则Loop布尔符号为正;若为偶数,则布尔符号为负. N-ary树构建完毕后所有Loop的包含关系与之映射关系也唯一确定. 任意Loop的插入规则:对于待插入环Li,优先处理存在包含关系的Loop,若Li与已插入的Loop不存在包含关系,则Li必为根结点的子结点;若存在包含关系(包括多层嵌套包含关系),则在N-ary树中必然属于同一个分支. 进一步,已插入结点的Loop,对存在包含关系的Loop结点进行判断,多层嵌套包含(单层也适用)关系下,Li必然存在于不存在子结点的结点Lc下,通过该条件可以判定插入位置Lc. 确定插入位置后仍然需要判断Li与插入结点处的Lc是包含还是被包含关系,利用多叉树的子函数add和insert_node插入Li,即如果是包含关系,Li作为子结点用add函数,如果是被包含关系,Li作为Lc父结点用insert_node函数插入,须注意Loop下标的对应关系及其插入位置.

层次关系树构建算法的核心是新结点的插入位置判断. 根据层次关系建立对应层高父子结点的映射关系,N-ary树的构建如算法 2所示. 算法中,函数T.add_node()表示以当前结点cur_node作为父结点插入子结点node_i,函数T.insert_node()表示以当前结点cur_node作为子结点插入父结点node_i. N-ary树中,同一层次Loop方向相同,存在层次关系的2个Loop的方向必定相反,如果基环的环向给定,则其他轮廓环向随之确定.

算法 2  基于轮廓环层次关系构建多叉树

输入:轮廓C={C1,C2,···,Cm},层次关系矩阵ML=Matrix

输出:N-ary 树T

C建立按面积大小排列的Node列表N

初始化N-ary 树TT$ \leftarrow N[0]$

For i $ \in $(1, m) do

  node_i = N[i],k = node_i.key−1

  相离列表list = [],层次关系列表list_non = []

  For node in T do

   j = node.key−1

   If j<k

    loc = Matrix[j][k]

   Else

    loc = −Matrix[k][j]

   If loc == 0

    list$ \leftarrow $node

   Else

    list_non$ \leftarrow $node

  End For

  If len(list_0) == len(list_non_0)

   T.add_node(node_i.key, 0, node_i)

  Else

   For node in list_non do

    If node.children == None

     cur_node = node, j = cur_node−1

   If j<k

    loc = Matrix[j][k]

   Else

    loc = Matrix[k][j]

   If loc == 1

    T.add_node(node_i.key,cur_node.key,node_i)

   If loc == −1

    T.insert_node(node_i.key,cur_node.key,node_i)

   End For

End For

Return T

3. 布尔体廓后验误差估计的自适应层切

3.1. 布尔体廓关联自适应层厚

将轮廓环层次关系映射为树高,作为层厚变化系数实现自适应层切. 对模型M进行均匀层切预处理,沿构建方向d以层厚u均匀层切,假设在dM的最大高度为hmax,最小高度为hmin,则打印层数LN=(hmaxhmin)/u,令mihi下轮廓环集合Li={$ \mathrm{L}\mathrm{oop}_1^i,\mathrm{L}\mathrm{oop}_2^i,\cdots,\mathrm{L}\mathrm{oop}_m^i $}的数目. 定义体廓$ \mathit{{V}}_L^i $Liu下的布尔体积,计算式为

$ {{V}}_L^i = {( - 1)^j}\sum\limits_{k = 1}^m {{{{A}}}\,({{{\mathrm{Loop}}}_k^i})} \cdot u. $

式中:${( - 1)^j}$为布尔运算符号,jLi所在N-ary树中的树高,hN为树的最大高度,$ {{{A}}}\;({{\mathrm{Loop}}}_k^i) $Li内多边形轮廓$ {{\mathrm{Loop}}}_k^i $的面积,假设$ {{\mathrm{Loop}}}_k^i $={(x1, y1), (x2, y2) ,···, (xr, yr)},

$ \left. {\begin{array}{*{20}{l}} {{{{A}}}({L_i}) = \sum\limits_{k = 1}^m {{{{A}}}({{\mathrm{Loop}}}_k^i)} } ,\\ {{{{A}}}({{\mathrm{Loop}}}_k^i) = \dfrac{1}{2}\left| {\sum\limits_{s = 1}^r {({x_s}{y_{s+1}} - {x_{s+1}}{y_s})} } \right|.} \end{array}} \right\} $

式中:$ {x_{n+1}} = {x_1};{y_{n+1}} = {y_1};s = 1,2,\cdots,r $.定义相邻两层的体廓变化量为

$ \Delta {V_i}^{i+1} = \left| {{V_L}^{i+1} - {V_L}^i} \right| . $

确定模型M在层高hi处的细节特征变化情况,若体廓变化量超过一定的阈值,则该部位可能为需要减小层厚u的位置. 即便A(Li)与A(Li+1)相近,但$ {{\mathrm{Loop}}}_k^i $$ {{\mathrm{Loop}}}_k^{i+1} $的形状可能存在差异. 假设LiLi+1包含轮廓数相同,定义相邻两层环长变化量为

$ \Delta {{\mathrm{Len}}}\;{(L)_i}^{i+1} = \left| {\sum\limits_{k = 1}^m {{{\mathrm{Len}}}\;({{\mathrm{Loop}}}_k^{i+1})} - \sum\limits_{k = 1}^m {{{\mathrm{Len}}}\;({{\mathrm{Loop}}}_k^i)} } \right|. $

作为判断打印层细节特征的参考量,Len(Loop)表示轮廓环长. 环数mi作为每层判断实体子特征数,定义环数变化量为

$ \Delta {m_i}^{i+1} = \left| {{m_{i+1}} - {m_i}} \right|. $

对于截面存在多孔特征的复连通区域的模型,通过参数$ \Delta {V_i}^{i+1} $$ \Delta\mathrm{Len}\;(L)_i^{i+1} $$\Delta {m_i}^{i+1}$判断当前打印层同相邻层的体廓特征变化情况,对3个参数取对数做归一化处理,模型第i层体廓特征层变系数的计算式为

$ \mathit{\Phi}_i^{i+1}=w_V{\mathrm{ln}}\;\Delta V_i^{i+1}+w_L{\mathrm{ln}}\;\Delta\mathrm{Len}(L)_i^{i+1}+w_m{\mathrm{ln}}\;\Delta m_i^{i+1}. $

式中:${w_V}$,${w_L}$,${w_m}$为权重因子(${w_L} < {w_V} < {w_m} < 0.5$),用于确定体廓特征的参考比重. 在自适应层切的参数设计中,层厚u默认为t0,其中0.01< t <1.00. 从第2层开始,依次计算相邻两层的切片数据并计算$ \mathit{\Phi}_i^{i+1} $,若$ \mathit{\Phi}_i^{i+1} < \rho t $$\rho $为层变阈值),则无需改变切片厚度;否则应减小层厚. 层厚tii >1)的计算式为

$ t_i=\left\{ \begin{array}{*{20}{c}}\rho t_0,\begin{array}{*{20}{c}}\ \ \ \ \end{array}\rho\leqslant1; \\ t_0/\rho,\begin{array}{*{20}{c}}\ \end{array}\ \rho > 1.\end{array}\right. $

3.2. 体廓后验误差估计

基于牙尖高度(cusp height)的体积误差计算方法[16],无法计算存在轮廓环层次关系的任意层体积误差. 为了精确计算自适应层切的逐层体积误差,提出体廓后验误差估计方法. 后验误差是模型层切后,在轮廓环层次关系已知的情况下求得模型的层切体积误差,而牙尖高度法根据层厚直接计算(不需要层切数据)层切体积误差.

基于N-ary树对轮廓环层次关系的映射关系,计算当前层的切片的体廓作为实际体积Vr,如图9所示. 根据微积分基本定理,只要$u \to 0$,当前层体积即为所有微分打印层的体积之和,表达式为

图 9

图 9   布尔体廓计算体积误差

Fig.9   Volume error calculation by Boolean volume contour


$ V=\int_{\textit{z}_1}^{\textit{z}_n}f(\textit{z})\mathrm{d}\textit{z}={\mathrm{lim}}_{n\to\infty}\sum\limits_{i=1}^nA(L_i)\cdot u. $

进一步减小层厚(u<0.01 mm),将微分后的体廓之和近似为该层的理论体积Vc,定义当前层的体积误差Ve

$ {V}\mathrm{_e}=V\mathrm{_r}-V_{\mathrm{c}}. $

式中:Vr由式(1)计算得到. 假设当前层厚为u,若减小层厚为w,则将理论体积Vc近似表示为

$ {V_\mathrm{c}} = \sum\nolimits_i^{[u/w]} {\left| {{v_{\mathrm{c}i}}} \right|} . $

式中:切片体积vci由式(1)计算得到,[u/w]表示不大于[u/w]的最大整数. 若对整个模型按照w层切,按照式(10)计算任意多连通域的复杂模型体积. 通过定义体廓误差计算模型特征变化部位的局部体积误差,验证所提方法的有效性. 与牙尖高度法相比,采用体廓后验误差计算方法,可以更加精确地计算每一层体积误差,有助于验证在体廓特征部位的层切结果,使特征部位的层厚更合理且体积误差更小.

图10所示为基于体廓后验误差的自适应层切设计流程. 通过预层切及Rg-Tree的拓扑关系,确定各层切面内所有轮廓环的层次关系,根据N-ary树进行层次关系的映射转换,通过布尔运算计算当前层轮廓环数据的自适应层变系数,得到模型的自适应层切高度,通过控制层厚阈值,基于布尔体廓计算各层的后验体积误差,验证所提自适应层切方法的有效性.

图 10

图 10   自适应层切流程图

Fig.10   Flowchart of adaptive slice


4. 实例验证

采用如图11所示的飞行器传感器支架模型测试轮廓环层次关系计算、层次关系多叉树构建、自适应层切及体廓后验误差计算等方法. 该模型包含多孔、多分支子特征,对轮廓环层次关系的测试具有很强的针对性,曲面特征适用于自适应层切方法的验证. 测试环境为Ubuntu 20.04,实现语言为Python 3.8.10,层切模型可视化及渲染采用VTK 9.2.2实现.

图 11

图 11   测试模型及网格结构

Fig.11   Test model with mesh structure


4.1. 任意层切面内轮廓环层次关系及环向计算

对网络模型构建Rg-Tree,选择层切面轮廓最为复杂的构建方向测试模型各个层切面内轮廓环的层次关系. 取构建方向d为(−1, 0, 0),层厚u=8.901 mm,进行轮廓环层次关系测试. 由Rg-Tree提取网格任意层的拓扑邻接面片,如图12(a)所示. 其中第7层切片共277个邻接面片,4个轮廓的面片依次为100-55-59-63,切片高度x7 = 9.394 mm;第10层切片共438个邻接面片,8个轮廓的面片依次为42-39-68-73-69-66-41-40,切片高度为x10=36.098 mm.

图 12

图 12   任意轮廓面片集合提取

Fig.12   Extraction of arbitrary contour facet set


分别计算模型在层高x7x10下的层切面同各个面片的交点如图13所示. 根据Rg-Tree实现模型任意层Loop拓扑重建. 在VTK的渲染下,将第7层和第10层轮廓同层切面的交点依次连接形成有序闭合Loop并绘制轮廓环如图14(a)所示. 标记第7层和第10层的多边形轮廓面片索引号如图14(b)所示. 根据轮廓层切数据分别计算各层轮廓面积AL、周长LL和环数NL(数值归一化处理)如图15所示,其中第6层仅有1个轮廓,但是该层轮廓多边形的面积最大.

图 13

图 13   轮廓交点计算

Fig.13   Intersection calculation of contours


图 14

图 14   轮廓拓扑重建及面片索引号

Fig.14   Topology reconstruction of contour with facet index


图 15

图 15   层切可视化及各层轮廓环数据

Fig.15   Slice visualization and contour loop data of each layer


4.2. 层次多叉树映射体廓布尔运算

对第7层和第10层的所有轮廓环计算层次关系并计算环向,如图16所示. 第7层共4个轮廓环,L1~L4均为基环且互为相离关系,如图16(a)所示. 第10层共8个轮廓环,L3L4L5L6为基环;且L3包含L1L4包含L7L5包含L8L6包含L2,如图16(b)所示. 第10层8个Loop输出层次关系如表1所示. 表中,0表示两个轮廓环是相离关系,1表示包含关系,−1表示被包含关系,+表示正向(逆时针),−表示反向(顺时针),=表示自身轮廓环. 由轮廓环层次关系,构建第10层轮廓N-ary树,将8个轮廓根据面积大小顺序依次插入树中,映射层次关系为树的高度,通过广度优先遍历所有结点,以PC、D、AL分别表示父结点、子结点、环向、面积、周长,输出各结点如表2所示. 10层N-ary 树结构如图17所示,各层的Loop结点序号表示按面积倒序插入.

图 16

图 16   轮廓环层次关系判断

Fig.16   Hierarchical relationship judgment of contour loops


表 1   第10层轮廓环层次关系

Tab.1  Hierarchical relationship of 10th contour loops

轮廓索引12345678
1−=0−100000
2−0=000−100
3+10=00000
4−000=00−10
5−0000=001
6+01000=00
7+000100=0
8+0000−100=

新窗口打开| 下载CSV


表 2   第10层轮廓构建层次多叉树结点信息

Tab.2  N-ary tree node information of 10th slice contour

KeyhPCDA/mm2L/mm
0004-6-3-5None00
4107+154.19362.303
724None31.52552.195
6102129.89164.999
226None+15.40744.937
3101+75.72167.691
123None+18.52515.512
510859.89777.513
825None23.69842.004

新窗口打开| 下载CSV


图 17

图 17   轮廓环层次关系的层次多叉树

Fig.17   Hierarchical N-ary tree based on hierarchical relationship of contour loops


4.3. 体廓后验误差的自适应层切及打印

通过层次多叉树,以层变系数$ \mathit{\Phi} $映射模型的层厚变化,计算自适应层高. 为了提高对特征部位的计算精度,取10组权重系数($ w{_V} $$ w{_L} $$ w_{{m}} $)进行测试,权重参数列表为([0.5, 0.2, 0.3], [0.5, 0.3, 0.2], [0.4, 0.3, 0.3], [0.3, 0.4, 0.3], [0.2, 0.2, 0.6], [0.3, 0.3, 0.4], [0.3, 0.5, 0.2], [0.2, 0.5, 0.3], [0.3, 0.2, 0.5], [0.2, 0.3, 0.5]). 设置切片基数为30,阈值取0.1,通过切片、任意层拓扑Loop判断、N-ary树映射层厚分别计算相邻层的层变系数,如图18所示. 尽管权重取值不同,但每组权值层变系数曲线反映的变化趋势大致相同,只是变化幅度有所区别,根据层变系数曲线精确计算体廓特征区域如17层(层高为0 mm).

图 18

图 18   层变系数变化趋势

Fig.18   Trend of slice change coefficient


图19所示,选取权值$ w{_V} $=0.3、$ w{_L} $=0.2、$ w_{{m}} $=0.5,采用阈值$\rho$分别为0.3、0.2、0.1测试自适应层切,以均匀层厚层切30层作为对比. 自适应层切在满足阈值的情况下,随着阈值系数的减小,模型整体打印层数增加,层数分别为17、21、33,在模型左侧、中间过渡部位(层高为0 mm)以及右侧分支特征部位的层数逐渐增大,层厚显著减小. 相比于均匀层切,根据模型特征变化的自适应层厚设计更加合理.

图 19

图 19   不同阈值的自适应层切与均匀层切对比

Fig.19   Comparison between adaptive slice and uniform slice by different thresholds


根据所提出的体廓误差计算方法及式(9),分别计算不同阈值下各层体积误差,结果对比如图20所示. 图中,h为层高. 当$\rho $=0.3时,打印层数为17,层高依次为[43.986, 38.051, 32.117, 26.183, 20.248, 14.314, 8.380, 2.445, 3.489, 4.973, 6.456, 12.391, 18.325, 24.259, 30.194, 36.128, 42.063],体积误差为26.582 mm3. 当$\rho $=0.2时,打印层数为21,层高依次为[43.986, 42.502, 41.019, 38.051, 36.568, 35.084, 29.150, 23.216, 17.281, 11.347, 5.412, 0.522, 3.489, 4.973, 6.456, 12.391, 18.325, 24.259, 30.194, 36.128, 42.063],体积误差为17.294 mm3. 当$\rho $=0.1时,打印层数为33,层高依次为[43.986, 42.502, 41.019, 38.051, 36.568, 35.084, 33.601, 32.117, 26.183, 20.248, 14.314, 8.380, 2.445, 0.962, 0.522, 3.489, 4.973, 6.456, 9.423, 10.907, 12.391, 13.874, 15.358, 21.292, 22.776, 24.259, 27.227, 28.710, 30.194, 33.161, 34.645, 36.128, 42.063],体积误差为13.322 mm3. 当采用均匀层厚层切17、21、33层时,层厚分别为5.236、4.239、2.698 mm,体积误差分别为30.873、20.593、15.612 mm3. 可以看出,在层数相同的情况下,采自适应层切整体体积误差比均匀层切更小,分别减少了13.899%、16.019%、14.668%,并且在层变系数最大处的区域的体积误差显著减小. 取阈值为0.2的自适应层切21层作为权值参数的最终选择(0.3, 0.3, 0.2, 0.5),可以看出,与均匀层切30层相比,21层自适应层切在整体体积误差不增加的情况下(Ve=17.752、17.294 mm3),有效减少了分层数目.

图 20

图 20   不同阈值的体廓后验误差对比

Fig.20   Comparison of posterior error based on volume contour by different thresholds


在局部特征位置区域体积误差对比中,当阈值$\rho $ = 0.3时,层高0 mm附近处体积误差显著减小;当$\rho $ = 0.2时,层高−40、0 mm附近处体积误差显著减小;当$\rho $ = 0.1时,层高−40、0、25 mm附近处体积误差显著减小. 对于所提出的布尔体廓后验误差计算方法,对模型采用不同的层厚:10.000、8.902、7.300、5.236、4.239、2.967、2.689、1.780、0.890、0.100、0.010层切并计算体积误差,同时基于牙尖高度采用不同的层厚:10.000、8.000、5.000、4.000、2.000、1.000、0.800、0.500、0.100、0.050、0.010、0.001层切并计算体积误差,结果如图21所示. 可以看出,基于牙尖高度受层厚影响非常大,所提方法对层厚不敏感,基于体廓微分在采用数量级1 mm计算的体积误差与基于牙尖高度采用0.01 mm计算的体积误差相当,随着层厚的增加,体积误差变化波动非常小.

图 21

图 21   不同方法体积误差收敛验证对比

Fig.21   Volume error convergence verification comparison of different methods


当采用更小的层厚(u=0.0178 mm),各层体积误差如图22所示,模型的体积误差为6.348 mm3. 当u<0.001 mm时,可以准确计算模型的体积;取u=0.001 mm,采用所提出方法计算模型各层切片的体积之和(模型体积)为47 831.829 mm3. 作为对比,采用SolidWorks和开源Trimesh方法计算模型体积,分别为47 865.134、47 986.257 mm3. 采用的层厚越小,计算精度越高,所提方法在0.001 mm即可达到SolidWorks、Trimesh的计算精度. 因此,采用式(9)通过体廓估算每层体积误差是有效的.

图 22

图 22   基于布尔体廓计算5000层体积误差

Fig.22   Volume error of 5000 layers calculated based on Boolean volume contour


采用3组自适应层厚策略,对比相对体积误差法[17]、B样条插值法[18]中的自适应层切算法和所提算法的打印实例,打印结果如图23所示. 图中,模型a、b、c为相对体积误差法[17]的打印实例,模型d、e、f为B样条插值法[18]的打印实例,模型g、h、j为所提算法的打印实例. 分别对图23中各模型的3个区域进行局部细节放大,初始层厚均设置为0.2 mm,对比结果如图24所示. 在不同层厚范围下,采用相对体积误差法、B样条插值法以及所提算法对图24中的模型进行层切,对比不同算法运行的层切时间ts,结果如表3所示. 在层厚范围变化更大的情况下(0.50u~2.00u),所提算法在判断轮廓环层次关系方面更具优势,算法程序运行最少;随着层厚进一步减小(0.25u~0.80u),当构建轮廓环层次关系多叉树时,由于插入大量数据结点导致效率降低,虽然运行时间有所提高,但跟其他2种算法相差不大.

图 23

图 23   不同层切方法的实例打印结果

Fig.23   Printing example of different slice methods


图 24

图 24   不同自适应层厚局部放大细节对比结果

Fig.24   Comparison results of local amplification details with different adaptive slice thicknesses


表 3   不同层切方法的运行时间对比

Tab.3  Running time comparison of different slice algorithms

层切方法ts/s
t = 0.50u~2.00ut = 0.50u~1.00ut = 0.25u~0.80u
相对体积误差18.34125.29430.142
B样条插值20.21927.83131.752
本研究13.48224.29532.328

新窗口打开| 下载CSV


根据体廓误差计算方法,在层厚为0.2 mm的情况下,基于不同自适应层厚系数采用均匀层切、相对体积误差法、B样条插值法以及所提算法对模型层切,分别对比图24中3个采样区域(I、II、III)的体积误差、平均误差、模型的整体体积误差Vew以及总体层数,结果如表4所示. 可以看出,所提算法在体积误差不增加的情况下,总体层数显著减少;通过自适应减小特征部位层厚,体积误差进一步减小(图24(c));如果层厚系数设置过大导致层数过少,会增大局部区域体积误差以及整体体积误差(图24(a)). 通过SopTop金相电镜MX-6R对图24(c)中f-I、f-II、f-III、i-I、i-II、i-III测量表面微观形貌特征如图25所示. 可以看出,所提算法在实现有效自适应层切的情况下,I、II特征部位处的成型精度更高.

表 4   不同方法的自适应层切结果实例对比

Tab.4  Adaptive layering results comparison of different methods

t/mm层切方法Ve/mm3$ {{{\overline V}_{\rm{e}}}} $/mm3Vew/mm3LN
IIIIIIII
u = 0.2均匀层切1.2240.9931.1421.12010.841445
0.50u~
2.00u
相对体积误差2.2131.5041.6161.77811.223382
B样条插值2.0581.6721.7911.84011.349395
本研究1.9531.3961.7131.68711.310376
0.50u~
1.00u
相对体积误差1.7391.1041.4331.42511.104398
B样条插值1.6741.0151.3391.34311.237409
本研究1.4211.0471.2571.24210.972391
0.25u~
0.80u
相对体积误差1.0970.8390.9790.9729.641503
B样条插值1.1060.8150.9160.9469.329512
本研究1.0370.8720.9840.9649.785483

新窗口打开| 下载CSV


图 25

图 25   金相电镜实验测量微观形貌特征

Fig.25   Experiments measure of microscopic morphological features by metallographic electron microscopy


5. 结 语

针对构建方向确定后的层切算法进行研究,提出层次多叉树映射布尔体廓后验误差的自适应层切方法,在整体模型体积误差不增大的情况下减小了体廓特征部位的体积误差,提高了表面成型精度. 1) 基于Rg-Tree局部拓扑轮廓重建方法,获取任意层切片中的闭合轮廓环,采用拓扑映射方法将轮廓环映射至一维坐标轴,根据极值排序对轮廓环层次关系进行有效判断. 2) 构建层次关系多叉树,将树高映射体廓的布尔运算,根据相邻层的层变系数与层厚阈值的关系计算自适应层高,减小了体廓特征部位的体积误差,提高了表面成型精度. 3) 提出体廓后验误差估计方法,相比于基于牙尖高度体积误差计算方法,所提方法对层厚不敏感,计算的体积误差精度更高. 复杂模型的轮廓环层次关系判断会增加多叉树的构建时间,下一步将采用GPU加速方法,实现轮廓环关系判断的并行运算,提高算法运行效率.

参考文献

LAO W, LI M, TJAHJOWIDODO T

Variable-geometry nozzle for surface quality enhancement in 3D concrete printing

[J]. Additive Manufacturing, 2021, 37: 101638

DOI:10.1016/j.addma.2020.101638      [本文引用: 1]

ABDULHAMEED O, AL-AHMARI A, AMEEN W, et al

Additive manufacturing: challenges, trends, and applications

[J]. Advances in Mechanical Engineering, 2019, 11 (2): 1- 27

[本文引用: 1]

DOLENC A, MÄKELÄ I

Slicing procedures for layered manufacturing techniques

[J]. Computer-Aided Design, 1994, 26 (2): 119- 126

DOI:10.1016/0010-4485(94)90032-9      [本文引用: 1]

KULKARNI P, DUTTA D

An accurate slicing procedure for layered manufacturing

[J]. Computer-Aided Design, 1996, 28 (9): 683- 697

DOI:10.1016/0010-4485(95)00083-6      [本文引用: 1]

MAO H, KWOK T H, CHEN Y, et al

Adaptive slicing based on efficient profile analysis

[J]. Computer-Aided Design, 2019, 107: 89- 101

DOI:10.1016/j.cad.2018.09.006      [本文引用: 1]

ZHAO Z, LUC Z

Adaptive direct slicing of the solid model for rapid prototyping

[J]. International Journal of Production Research, 2000, 38 (1): 69- 83

DOI:10.1080/002075400189581      [本文引用: 1]

CHANG C C

Direct slicing and G-code contour for rapid prototyping machine of UV resin spray using PowerSOLUTION macro commands

[J]. The International Journal of Advanced Manufacturing Technology, 2004, 23: 358- 365

DOI:10.1007/s00170-003-1575-4      [本文引用: 1]

ZHAO D, GUO W

Shape and performance controlled advanced design for additive manufacturing: a review of slicing and path planning

[J]. Journal of Manufacturing Science and Engineering, 2020, 142 (1): 010801

DOI:10.1115/1.4045055      [本文引用: 1]

MINETTO R, VOLPATO N, STOLFI J, et al

An optimal algorithm for 3D triangle mesh slicing

[J]. Computer-Aided Design, 2017, 92: 1- 10

DOI:10.1016/j.cad.2017.07.001      [本文引用: 1]

GUO H, XU J, ZHANG S, et al

Multi-orientation optimization of complex parts based on model segmentation in additive manufacturing

[J]. Journal of Mechanical Science and Technology, 2023, 37: 317- 331

DOI:10.1007/s12206-022-1231-2      [本文引用: 1]

ADNAN F A, ROMLAY F R M

Contour generation algorithm for projection mask stereolithography 3D printing process

[J]. IOP Conference Series: Materials Science and Engineering, 2019, 469: 012006

DOI:10.1088/1757-899X/469/1/012006      [本文引用: 1]

LEE D T, PREPARATA F P

An optimal algorithm for finding the kernel of a polygon

[J]. Journal of the ACM, 1979, 26 (3): 415- 421

DOI:10.1145/322139.322142      [本文引用: 2]

张树有, 谭建荣, 彭群生

基于拓扑映射的视图轮廓信息自动获取算法

[J]. 中国图象图形学报, 2001, 6 (10): 1016- 1020

[本文引用: 1]

ZHANG Shuyou, TAN Jianrong, PENG Qunsheng

The algorithm of automatic acquisition of view outline information based on topological mapping

[J]. Journal of Image and Graphics, 2001, 6 (10): 1016- 1020

[本文引用: 1]

WEN H, GAO J, WU R, et al. Research on direct topological structure reconstruction for STL model [C]// 2020 21st International Conference on Electronic Packaging Technology (ICEPT) . Guangzhou: IEEE, 2020: 1-6.

[本文引用: 1]

CHUANG C M, YAU H T

A new approach to z-level contour machining of triangulated surface models using fillet endmills

[J]. Computer-Aided Design, 2005, 37 (10): 1039- 1051

DOI:10.1016/j.cad.2004.10.005      [本文引用: 1]

GUO H, XU J, ZHANG S, et al

Build orientation optimization based on weighted analysis of local surface region curvature

[J]. Applied Sciences, 2021, 11 (1): 304

[本文引用: 1]

CHEN Q, XU J, ZHANG S

Volumetric adaptive slicing of manifold mesh for rapid prototyping based on relative volume error

[J]. Rapid Prototyping Journal, 2021, 28 (3): 606- 626

[本文引用: 2]

WASSERFALL F, HENDRICH N, ZHANG J. Adaptive slicing for the FDM process revisited [C]// 2017 13th IEEE Conference on Automation Science and Engineering (CASE) . Xi’an: IEEE, 2017: 49-54.

[本文引用: 2]

/