吳 建,吳 婷,陳廷豪,包 涵
(嘉興學院 信息科學與工程學院,浙江 嘉興 314001)
隨著3D 打印技術的不斷發(fā)展和應用,零件的成型質量和成型效率越來越受到關注。研究表明,除受3D 打印設備精度影響外,零件成型質量和成型效率在很大程度上受到成型方向和分層厚度的影響[1]。然而,目前分層厚度的選擇主要根據(jù)物體大小和精度要求,依靠主觀經驗選擇,因此如何設置合理的分層厚度顯得至關重要。
現(xiàn)有的分層算法根據(jù)分層厚度是否可變主要分為等層厚分層算法和自適應分層算法[2]。等層厚分層的層厚固定,且算法簡單,但層厚過大容易丟失零件細節(jié)特征,而層厚過小又會延長打印時間;自適應分層算法根據(jù)模型表面特征自動調節(jié)分層厚度,因此能夠兼顧打印精度與效率。文獻[3]利用相鄰切片的面積變化率來自動確定分層厚度,但由于基準面積是不斷變換的,因此計算的分層厚度不夠準確。文獻[4]利用三維模型體素中x-y 分辨率和STL 模型中三角面片法向量與制造方向間夾角變化關系,實現(xiàn)STL 模型的自適應分層,但x-y 分辨率設定較為困難。
本文利用三角片法向量和打印機的可打印范圍,確定每一層的最佳分層厚度,并在MATLAB 平臺下,利用MATLAB 的內嵌函數(shù)快速實現(xiàn)對STL 模型的自適應分層。
STL 文件是一種用許多空間小三角面片逼近三維實體表面的數(shù)據(jù)模型,一個完整的STL 文件記載了組成模型的所有頂點坐標數(shù)據(jù)和組成三角片的拓撲信息。因此,良好的數(shù)據(jù)存儲結構關系到算法執(zhí)行的效率。本文在MATLAB 平臺下,通過軟件內嵌的stlread 函數(shù)實現(xiàn)STL文件的快速讀取。利用該函數(shù)讀取文件后可以得到一個三角網(wǎng)格類對象,它有兩個屬性成員Points 和Connectivity,都是一個n×3 的矩陣。其中,Points 屬性成員存儲著STL 模型的頂點坐標,稱為點表,它的每一行代表一個頂點的x、y、z 坐標。Connectivity 屬性成員存儲著三角片的頂點索引矩陣,稱為面表,它的每一行代表組成一個三角片的三個頂點索引號。由點表和面表構成了一個三角網(wǎng)格模型,這種讀取與存儲方式不僅利于點、面之間拓撲關系的重建,還極大地簡化了數(shù)據(jù)的處理。
模型讀取后,為獲取每一層的最佳分層厚度,需要利用三角片的法向量信息。通過MATLAB 自帶的faceNormal 函數(shù)可以得到模型表面每個三角片的單位法向量。faceNormal 函數(shù)會生成一個n×3 的矩陣,它的每一行代表一個三角片單位法向量在空間中的x、y、z 坐標。
對STL 模型進行分層就是建立多個與分層方向垂直的切平面,分別求出切平面與模型表面三角片的交點,然后根據(jù)三角面片的拓撲關系進行拓撲重連,從而獲得截面輪廓線[5]。而自適應分層就是使層厚與模型表面關聯(lián)起來,使模型表面的幾何特征盡可能地被識別出來,降低臺階效應的影響,達到所需要的打印精度。
由于STL 模型表面是由許多三角片來逼近的,因此當模型表面與成型方向存在一定角度時,就會產生“階梯效應”。如圖1 所示,階梯誤差與打印層厚和三角面片的傾角有關。層厚越大,傾角越小,“階梯效應”越明顯。
圖1 模型三角片法向量與Z 軸夾角示意圖
設打印成型方向為Z 軸正方向,其單位矢量記為Z=(0,0,1),模型上任意一個三角片的法向量為Np=(xp,yp,zp),該三角片法向量與Z 軸的銳角夾角:
其中,·為向量的點積,θ∈[0°,90°]。由于三角片法向量均為單位向量,因此可將上式轉換為:
當θ=0°時,三角片與Z 軸垂直,此時階梯效應趨于最大,分層厚度可取3D 打印機的最小打印層厚hmin。隨著θ 值的不斷增大,階梯效應也相應變小,當θ=90°時,模型三角片與Z 軸平行,此時不存在階梯效應,分層厚度可取打印機的最大打印層厚hmax。因此,可以利用夾角θ和打印機的可打印范圍來確定每一層的最佳分層厚度,以減小臺階效應,提高模型質量。
根據(jù)上述分析可知,三角片法向量與成型方向的夾角θ 越小,臺階效應越大,只有將層厚減小,才能減少臺階誤差。由于模型上所有三角片的法向量都不盡相同,為使當前切片中模型的每個部分都達到精度要求,應在與該層切平面相交的三角面片中,找到法向量夾角θ 的最小值θmin,即三角片法向量Z 坐標絕對值的最大值|zp|max來求得當前層的最佳厚度:
本文對STL 模型進行自適應分層的具體步驟如下:
步驟1:輸入打印機的最小打印層厚hmin和最大打印層厚hmax。
步驟2:利用stlread 函數(shù)讀取STL 模型文件,建立點表和面表矩陣來存貯模型的頂點坐標和三角片頂點索引信息,并利用faceNormal 函數(shù)獲取每個三角片的單位法向量。
步驟3:建立初始層的切平面高度hi,i=0。
步驟4:篩選出與當前層切平面hi相交的三角片集合,并計算相交輪廓。
步驟5:計算相交三角片集合中三角片法向量z 坐標絕對值的最大值,并利用公式(3)計算下一層的層厚Δh。
步驟6:更新下一層的切平面高度hi+1=hi+Δh,并令i=i+1。
步驟7:判定切平面高度hi與模型最高點zmax的大小,若hi≤zmax,則轉步驟4,否則切片結束,輸出所有層的切片輪廓。
為驗證算法的準確性與可靠性,以MATLAB2020b為開發(fā)平臺,實現(xiàn)上述自適應層厚的切片算法。以如圖2所示的STL 模型為例,將本文算法與等層厚分層算法進行實驗對比。算法在Windows 10 環(huán)境下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 分層切片實例
為進一步顯示自適應分層的優(yōu)勢,將自適應分層和四組不同層厚的等層厚分層進行實驗對比。自適應分層層厚范圍為0.1mm~0.4mm,四組等層厚分別為0.1mm、0.2mm、0.3mm、0.4mm,表1 顯示了在各種分層方式下的切片層數(shù)對比結果。
如表1 所示,在等層厚分層情況下,隨著層厚的減少,層數(shù)相應增大,打印時間也會增加。在自適應分層情況下,由于層厚可以根據(jù)模型特征的復雜程度調節(jié)層厚的大小,因此,相比于等層厚分層,自適應分層能夠使用較小的層數(shù)保留模型特征,從而兼顧打印精度與效率。
表1 不同分層方式的切片層數(shù)對比
本文基于MATLAB 平臺,以3D 打印階梯效應為依據(jù),開發(fā)了利用STL 模型三角片法向量的自適應分層算法。通過對STL 模型進行分層測試,結果表明本文算法可以根據(jù)三角片法向量與打印成型方向的夾角自動調節(jié)模型的分層厚度,在保證精度的前提下,能夠使用較小的層數(shù)保留模型細節(jié)特征。該方法不僅程序簡單,計算速度快,而且能夠有效減少階梯效應,對于改善復雜曲面零件的打印精度和效率具有重要意義。