APP下载

基于MATLAB 的STL 模型自适应分层方法研究*

2021-10-08陈廷豪

科技创新与应用 2021年27期
关键词:夹角阶梯切片

吴 建,吴 婷,陈廷豪,包 涵

(嘉兴学院 信息科学与工程学院,浙江 嘉兴 314001)

随着3D 打印技术的不断发展和应用,零件的成型质量和成型效率越来越受到关注。研究表明,除受3D 打印设备精度影响外,零件成型质量和成型效率在很大程度上受到成型方向和分层厚度的影响[1]。然而,目前分层厚度的选择主要根据物体大小和精度要求,依靠主观经验选择,因此如何设置合理的分层厚度显得至关重要。

现有的分层算法根据分层厚度是否可变主要分为等层厚分层算法和自适应分层算法[2]。等层厚分层的层厚固定,且算法简单,但层厚过大容易丢失零件细节特征,而层厚过小又会延长打印时间;自适应分层算法根据模型表面特征自动调节分层厚度,因此能够兼顾打印精度与效率。文献[3]利用相邻切片的面积变化率来自动确定分层厚度,但由于基准面积是不断变换的,因此计算的分层厚度不够准确。文献[4]利用三维模型体素中x-y 分辨率和STL 模型中三角面片法向量与制造方向间夹角变化关系,实现STL 模型的自适应分层,但x-y 分辨率设定较为困难。

本文利用三角片法向量和打印机的可打印范围,确定每一层的最佳分层厚度,并在MATLAB 平台下,利用MATLAB 的内嵌函数快速实现对STL 模型的自适应分层。

1 研究方法

1.1 文件的读取和法向量的计算

STL 文件是一种用许多空间小三角面片逼近三维实体表面的数据模型,一个完整的STL 文件记载了组成模型的所有顶点坐标数据和组成三角片的拓扑信息。因此,良好的数据存储结构关系到算法执行的效率。本文在MATLAB 平台下,通过软件内嵌的stlread 函数实现STL文件的快速读取。利用该函数读取文件后可以得到一个三角网格类对象,它有两个属性成员Points 和Connectivity,都是一个n×3 的矩阵。其中,Points 属性成员存储着STL 模型的顶点坐标,称为点表,它的每一行代表一个顶点的x、y、z 坐标。Connectivity 属性成员存储着三角片的顶点索引矩阵,称为面表,它的每一行代表组成一个三角片的三个顶点索引号。由点表和面表构成了一个三角网格模型,这种读取与存储方式不仅利于点、面之间拓扑关系的重建,还极大地简化了数据的处理。

模型读取后,为获取每一层的最佳分层厚度,需要利用三角片的法向量信息。通过MATLAB 自带的faceNormal 函数可以得到模型表面每个三角片的单位法向量。faceNormal 函数会生成一个n×3 的矩阵,它的每一行代表一个三角片单位法向量在空间中的x、y、z 坐标。

1.2 自适应层厚的确定

对STL 模型进行分层就是建立多个与分层方向垂直的切平面,分别求出切平面与模型表面三角片的交点,然后根据三角面片的拓扑关系进行拓扑重连,从而获得截面轮廓线[5]。而自适应分层就是使层厚与模型表面关联起来,使模型表面的几何特征尽可能地被识别出来,降低台阶效应的影响,达到所需要的打印精度。

由于STL 模型表面是由许多三角片来逼近的,因此当模型表面与成型方向存在一定角度时,就会产生“阶梯效应”。如图1 所示,阶梯误差与打印层厚和三角面片的倾角有关。层厚越大,倾角越小,“阶梯效应”越明显。

图1 模型三角片法向量与Z 轴夹角示意图

设打印成型方向为Z 轴正方向,其单位矢量记为Z=(0,0,1),模型上任意一个三角片的法向量为Np=(xp,yp,zp),该三角片法向量与Z 轴的锐角夹角:

其中,·为向量的点积,θ∈[0°,90°]。由于三角片法向量均为单位向量,因此可将上式转换为:

当θ=0°时,三角片与Z 轴垂直,此时阶梯效应趋于最大,分层厚度可取3D 打印机的最小打印层厚hmin。随着θ 值的不断增大,阶梯效应也相应变小,当θ=90°时,模型三角片与Z 轴平行,此时不存在阶梯效应,分层厚度可取打印机的最大打印层厚hmax。因此,可以利用夹角θ和打印机的可打印范围来确定每一层的最佳分层厚度,以减小台阶效应,提高模型质量。

根据上述分析可知,三角片法向量与成型方向的夹角θ 越小,台阶效应越大,只有将层厚减小,才能减少台阶误差。由于模型上所有三角片的法向量都不尽相同,为使当前切片中模型的每个部分都达到精度要求,应在与该层切平面相交的三角面片中,找到法向量夹角θ 的最小值θmin,即三角片法向量Z 坐标绝对值的最大值|zp|max来求得当前层的最佳厚度:

1.3 自适应切片算法流程

本文对STL 模型进行自适应分层的具体步骤如下:

步骤1:输入打印机的最小打印层厚hmin和最大打印层厚hmax。

步骤2:利用stlread 函数读取STL 模型文件,建立点表和面表矩阵来存贮模型的顶点坐标和三角片顶点索引信息,并利用faceNormal 函数获取每个三角片的单位法向量。

步骤3:建立初始层的切平面高度hi,i=0。

步骤4:筛选出与当前层切平面hi相交的三角片集合,并计算相交轮廓。

步骤5:计算相交三角片集合中三角片法向量z 坐标绝对值的最大值,并利用公式(3)计算下一层的层厚Δh。

步骤6:更新下一层的切平面高度hi+1=hi+Δh,并令i=i+1。

步骤7:判定切平面高度hi与模型最高点zmax的大小,若hi≤zmax,则转步骤4,否则切片结束,输出所有层的切片轮廓。

2 实例验证

为验证算法的准确性与可靠性,以MATLAB2020b为开发平台,实现上述自适应层厚的切片算法。以如图2所示的STL 模型为例,将本文算法与等层厚分层算法进行实验对比。算法在Windows 10 环境下2.4GHz 的CPU、8GB 内存的PC 机上运行。

图2(a)所示的STL 模型共有7486 个三角面片,尺寸约为20.78mm×20.78mm×17.38mm。分层实验中,最小打印层厚设定为0.1mm,最大打印层厚设定为0.4mm,其切片仿真结果如图2(b)所示。为了进行对比,图2(c)显示了在层厚为0.2mm 的等层厚切片结果。从测试结果可以看出,自适应切片的分层厚度随着模型表面法向量与分层方向之间夹角的变化而自适应变化,当夹角变大时,分层厚度自动增大,当夹角变小时,分层厚度自动减小,达到自适应分层的要求。而等层厚分层方法的各个层厚都是相等的,无法跟随模型表面的弯曲程度而变化,在模型较为弯曲的地方会造成较大的打印阶梯误差。

图2 分层切片实例

为进一步显示自适应分层的优势,将自适应分层和四组不同层厚的等层厚分层进行实验对比。自适应分层层厚范围为0.1mm~0.4mm,四组等层厚分别为0.1mm、0.2mm、0.3mm、0.4mm,表1 显示了在各种分层方式下的切片层数对比结果。

如表1 所示,在等层厚分层情况下,随着层厚的减少,层数相应增大,打印时间也会增加。在自适应分层情况下,由于层厚可以根据模型特征的复杂程度调节层厚的大小,因此,相比于等层厚分层,自适应分层能够使用较小的层数保留模型特征,从而兼顾打印精度与效率。

表1 不同分层方式的切片层数对比

3 结论

本文基于MATLAB 平台,以3D 打印阶梯效应为依据,开发了利用STL 模型三角片法向量的自适应分层算法。通过对STL 模型进行分层测试,结果表明本文算法可以根据三角片法向量与打印成型方向的夹角自动调节模型的分层厚度,在保证精度的前提下,能够使用较小的层数保留模型细节特征。该方法不仅程序简单,计算速度快,而且能够有效减少阶梯效应,对于改善复杂曲面零件的打印精度和效率具有重要意义。

猜你喜欢

夹角阶梯切片
阶梯
求解异面直线夹角问题的两个路径
新局势下5G网络切片技术的强化思考
5G网络切片技术增强研究
网络切片标准分析与发展现状
向量夹角的风波
浅析5G网络切片安全
如何求向量的夹角
平面向量夹角问题的易错剖析
良师·阶梯·加油站