陳廷豪,吳 婷,潘成鋼,吳 建,包 涵,李嘉杰
(嘉興學(xué)院 機(jī)電工程學(xué)院,浙江 嘉興314001)
3D打印技術(shù),又稱為“增材制造”,是以數(shù)字模型為基礎(chǔ),通過(guò)逐層累加材料制造零件的一種技術(shù)。3D打印技術(shù)的內(nèi)容涵蓋了產(chǎn)品生命周期前端的“快速原型”和全生命周期的“快速制造”相關(guān)的所有打印工藝、技術(shù)、設(shè)備類別和應(yīng)用。它的顯著優(yōu)點(diǎn)是無(wú)需傳統(tǒng)刀具和模具,能夠成型任意復(fù)雜的零件,可以有效簡(jiǎn)化生產(chǎn)工序,縮短制造周期[1-2]。因此,3D打印技術(shù)具有高的加工柔性與快的市場(chǎng)響應(yīng)速度,能夠廣泛應(yīng)用于醫(yī)學(xué),機(jī)械工程,工業(yè)設(shè)計(jì)等領(lǐng)域[3]。
在3D打印的過(guò)程中,首先要對(duì)模型進(jìn)行分層切片處理,獲取模型各層切片的輪廓數(shù)據(jù)。這些切片輪廓是由一系列微小線段所組成,模型的精度越高,切片輪廓包含的微小線段和非特征冗余點(diǎn)就越多。為適應(yīng)3D打印的實(shí)際需要,必須對(duì)切片輪廓數(shù)據(jù)進(jìn)行精簡(jiǎn)處理。因?yàn)槊芗瘮?shù)據(jù)點(diǎn)不僅會(huì)降低計(jì)算機(jī)運(yùn)行速率,占用較大的內(nèi)存,還會(huì)降低打印時(shí)噴頭運(yùn)作的流暢度,影響成型的效率和質(zhì)量。
現(xiàn)國(guó)內(nèi)外學(xué)者對(duì)數(shù)據(jù)精簡(jiǎn)研究已有一定的成果。Teh等[4]提出使用離散曲率進(jìn)行數(shù)據(jù)精簡(jiǎn)的方法,通過(guò)把某點(diǎn)的近似曲率作為判據(jù),與設(shè)定的閾值進(jìn)行比較,刪除離散曲率較小的點(diǎn),這一方法在曲率變化較小處容易因?yàn)閯h除某些特征點(diǎn)導(dǎo)致后續(xù)的累積過(guò)程出現(xiàn)錯(cuò)誤。楊峰等[5]提出使用累積曲率的方式進(jìn)行數(shù)據(jù)精簡(jiǎn),當(dāng)判斷某個(gè)數(shù)據(jù)點(diǎn)是否為冗余點(diǎn)需要被去除時(shí),將其曲率累加到累積曲率中,用累積曲率和曲率閾值作比較,直到累積曲率值滿足被去除的條件時(shí),累積曲率清零,這種方法能夠避免累積誤差導(dǎo)致的簡(jiǎn)化錯(cuò)誤,但累計(jì)曲率閾值的設(shè)定較為困難。Huang等[6]人利用二值圖像對(duì)數(shù)據(jù)點(diǎn)進(jìn)行采樣,然后采用基于Lloyd聚類的精簡(jiǎn)算法,將數(shù)據(jù)點(diǎn)進(jìn)行聚類分割后,通過(guò)計(jì)算擬合誤差來(lái)獲得合理的聚類數(shù)據(jù),但由于該算法需要反復(fù)迭代,運(yùn)行效率較低。吳鳳和等[7]提出曲率弦高法,利用曲率比的方式改進(jìn)單一的弦高參數(shù),使得弦高閾值在判斷過(guò)程中進(jìn)行變化,從而得到比弦高法更好的精簡(jiǎn)效果。方源敏等[8]提出了改進(jìn)角度偏差法,該方法通過(guò)計(jì)算各點(diǎn)的偏角值,然后根據(jù)平均偏角值使用插值的方式進(jìn)行精簡(jiǎn)。洪軍等[9]提出角度弦高聯(lián)合準(zhǔn)則,以內(nèi)角與弦高兩個(gè)參數(shù)為判據(jù)進(jìn)行數(shù)據(jù)精簡(jiǎn)。李新等[10]改進(jìn)了角度弦高聯(lián)合準(zhǔn)則,對(duì)連續(xù)判斷區(qū)域中各個(gè)點(diǎn)的弦高與內(nèi)角進(jìn)行計(jì)算,取其中最大的角度與弦高進(jìn)行閾值判斷,以防止累計(jì)誤差的產(chǎn)生。
本文通過(guò)分析切片輪廓上冗余點(diǎn)的分布情況,采用基于偏角弦高的數(shù)據(jù)精簡(jiǎn)方法對(duì)切片數(shù)據(jù)進(jìn)行特征保留。該方法以已保留的路徑點(diǎn)作為參照,首先對(duì)待測(cè)點(diǎn)進(jìn)行弦高的粗判斷,然后再通過(guò)計(jì)算偏角的大小來(lái)確定需要保留的特征點(diǎn),從而高效地精簡(jiǎn)切片數(shù)據(jù)點(diǎn)。
傳統(tǒng)弦高角度法:對(duì)于切片輪廓路徑上有序排列的數(shù)據(jù)點(diǎn),相鄰兩個(gè)數(shù)據(jù)點(diǎn)構(gòu)成一個(gè)路徑矢量,待測(cè)點(diǎn)相對(duì)于上一個(gè)路徑矢量的偏角反映了相鄰數(shù)據(jù)點(diǎn)的方向變化程度,弦高反映相鄰數(shù)據(jù)點(diǎn)的偏離距離。如圖1所示,當(dāng)數(shù)據(jù)點(diǎn)Pi相對(duì)于上一個(gè)路徑矢量A■→B的偏角或弦高較小時(shí),Pi可以當(dāng)作冗余點(diǎn)去除。但單一使用偏角進(jìn)行判斷容易忽略輪廓上線段較長(zhǎng)的特征點(diǎn),而單一使用弦高容易忽略細(xì)節(jié)特征點(diǎn)。因此,本文提出偏角弦高的數(shù)據(jù)精簡(jiǎn)方法,具體方法如下:
圖1 本文方法精簡(jiǎn)原理圖
以切片輪廓上待測(cè)點(diǎn)Pi的前兩個(gè)路徑數(shù)據(jù)點(diǎn)A、B為基準(zhǔn)點(diǎn),AB為路徑基線,計(jì)算Pi到基線AB的偏角αi和弦高h(yuǎn)i,若αi和hi均小于閾值,則標(biāo)記Pi為冗余點(diǎn),此時(shí)基線不變,繼續(xù)判斷后續(xù)點(diǎn)Pi+1到基線AB的偏角αi+1和弦高h(yuǎn)i+1,若αi+1和hi+1有一個(gè)大于閾值,則標(biāo)記Pi+1為保留點(diǎn),并將Pi+1作為新基準(zhǔn)點(diǎn)B,Pi作為新基準(zhǔn)點(diǎn)A,然后判斷后續(xù)點(diǎn)Pi+2到新基線AB的偏角αi+2和弦高h(yuǎn)i+2,重復(fù)上述步驟直到切片輪廓上的所有數(shù)據(jù)點(diǎn)均處理完畢??梢钥闯?,這種方法是以前面已保留的路徑點(diǎn)作為參照,因此沒(méi)有累計(jì)誤差,每個(gè)待測(cè)點(diǎn)的偏角和弦高只需計(jì)算一次。
由于本文算法需要使用偏角與弦高兩種數(shù)據(jù),若每次判斷都對(duì)這兩種數(shù)據(jù)進(jìn)行運(yùn)算,會(huì)較多地占用計(jì)算機(jī)的內(nèi)存,故引入篩選法進(jìn)行算法改良,減少算法的運(yùn)算量。
篩選法是使用粗判斷和精判斷來(lái)實(shí)現(xiàn)特征數(shù)據(jù)分離的方法。如圖2所示,先計(jì)算待測(cè)點(diǎn)Pi的弦高h(yuǎn)i,并對(duì)hi進(jìn)行粗判斷,若hi>閾值Δh,則該點(diǎn)為保留點(diǎn),不用再計(jì)算偏角;若弦高h(yuǎn)i≤閾值Δh,則再進(jìn)入精判斷,計(jì)算偏角αi,若偏角αi≤閾值Δα,則該點(diǎn)為冗余點(diǎn),反之,則作為特征點(diǎn)保留。整個(gè)篩選流程如圖2所示。
圖2 篩選流程示意圖
對(duì)于切片輪廓上連續(xù)的數(shù)據(jù)點(diǎn)集{P1,P1,…,Pn},整個(gè)精簡(jiǎn)流程如圖3所示。具體執(zhí)行步驟如下:
圖3 本文算法流程圖
步驟1:首先輸入切片輪廓數(shù)據(jù),并設(shè)定弦高閾值Δh以及偏角閾值Δα。
步驟2:選取切片輪廓數(shù)據(jù)中的第一個(gè)數(shù)據(jù)點(diǎn)P1為基準(zhǔn)點(diǎn)A,第二個(gè)數(shù)據(jù)點(diǎn)P2為基準(zhǔn)點(diǎn)B,AB連成基線。
步驟3:將數(shù)據(jù)點(diǎn)Pi(i=3,4,…,n)作為判斷點(diǎn),若i≥n,則說(shuō)明輪廓線上的點(diǎn)已處理完畢,轉(zhuǎn)步驟7;否則,計(jì)算Pi到基線AB的弦高
步驟4:判斷hi和閾值Δh的大小,若hi≤Δh,進(jìn)入精判斷,計(jì)算數(shù)據(jù)點(diǎn)Pi與基線AB的偏角然后轉(zhuǎn)步驟5;反之,標(biāo)記Pi為保留點(diǎn),轉(zhuǎn)步驟6。
步驟5:判斷偏角αi和閾值Δα的大小,若αi≤Δα,則標(biāo)記Pi為刪除點(diǎn),并令i=i+1,轉(zhuǎn)步驟3;反之,標(biāo)記Pi為保留點(diǎn),轉(zhuǎn)步驟6。
步驟6:令Pi為新基準(zhǔn)點(diǎn)B,Pi-1為新基準(zhǔn)點(diǎn)A,AB連成新基線,并令i=i+1,轉(zhuǎn)步驟3。
步驟7:將所有保留的數(shù)據(jù)點(diǎn)作為精簡(jiǎn)后的數(shù)據(jù)輸出。
為驗(yàn)證本文算法的高效性,以齒輪STL模型切片輪廓為例(如圖4),將本文方法與文獻(xiàn)[10]傳統(tǒng)的角度弦高聯(lián)合法進(jìn)行精簡(jiǎn)測(cè)試對(duì)比。算法在Windows 10環(huán)境下利用Matlab進(jìn)行開(kāi)發(fā),實(shí)驗(yàn)在2.4GHz的CPU、8GB內(nèi)存的PC機(jī)上運(yùn)行。
圖4 齒輪模型切片輪廓
原始齒輪切片輪廓每層數(shù)據(jù)點(diǎn)共有3163個(gè)點(diǎn),在相同角度閾值Δα和弦高閾值Δh的參數(shù)條件下,本文方法和文獻(xiàn)[10]法的精簡(jiǎn)效果如圖5所示。從圖5結(jié)果可以看出,這兩種方法都能夠在齒根的高曲率輪廓處保留較多的特征點(diǎn),但是文獻(xiàn)[10]法在低曲率的齒輪漸開(kāi)線輪廓處保留的數(shù)據(jù)點(diǎn)較少,尤其是靠近齒頂處的曲線輪廓與原始漸開(kāi)線形狀誤差較大。本文方法不僅能夠在高曲率變化處保留較多的數(shù)據(jù)點(diǎn),而且在低曲率片段中也能保留較多細(xì)節(jié)的特征點(diǎn)??梢?jiàn)本文方法能夠利用較少的離散點(diǎn)較好地表示復(fù)雜原有輪廓信息,總體結(jié)果疏密有秩,精簡(jiǎn)效果較好。
圖5 不同方法數(shù)據(jù)精簡(jiǎn)效果對(duì)比
將本文方法與文獻(xiàn)[10]法的精簡(jiǎn)結(jié)果從精簡(jiǎn)率、精簡(jiǎn)誤差、耗時(shí)三個(gè)方面的指標(biāo)進(jìn)行評(píng)價(jià),其結(jié)果如表1所示。表1的技術(shù)指標(biāo)表明了文獻(xiàn)[10]法由于精簡(jiǎn)率較高為93.5%,從而導(dǎo)致精簡(jiǎn)誤差較大,其精簡(jiǎn)平均誤差達(dá)到了0.0378mm,而本文方法雖然精簡(jiǎn)率有所下降為90.7%,但精簡(jiǎn)誤差降低為0.0237mm。另外,本文方法在算法耗時(shí)方面比文獻(xiàn)[10]法具有更大的優(yōu)勢(shì),算法執(zhí)行時(shí)間提高超過(guò)了一個(gè)數(shù)量級(jí),這是由于文獻(xiàn)[10]法的基線要參考后面的待測(cè)點(diǎn),因此需要反復(fù)計(jì)算待測(cè)點(diǎn)和冗余點(diǎn)到基線的弦高與角度,從而導(dǎo)致每個(gè)待測(cè)點(diǎn)的偏角和弦高需要多次計(jì)算,而本文算法是以前面已走過(guò)的路徑點(diǎn)作為參照,因此沒(méi)有累計(jì)誤差,每個(gè)待測(cè)點(diǎn)的偏角和弦高只需計(jì)算一次,所用時(shí)間較少。
表1 數(shù)據(jù)精簡(jiǎn)指標(biāo)對(duì)比
本文采用偏角弦高的數(shù)據(jù)精簡(jiǎn)方法,有效地實(shí)現(xiàn)了3D打印切片輪廓的數(shù)據(jù)精簡(jiǎn)。該方法以偏角與弦高為依據(jù),防止單靠某一參數(shù)導(dǎo)致重要特征信息的丟失,并以粗篩選和精篩選作為測(cè)量點(diǎn)是否需要精簡(jiǎn)的判斷流程,避免了不必要的計(jì)算。實(shí)例測(cè)試結(jié)果表明,該方法不僅能夠在高曲率變化處保留較多的數(shù)據(jù)點(diǎn),而且在低曲率片段中也能篩選出較高特征的數(shù)據(jù)點(diǎn),實(shí)現(xiàn)輪廓數(shù)據(jù)按曲率合理分布,算法執(zhí)行效率高,精簡(jiǎn)效果較好。