,
(南京航空航天大學(xué)機(jī)電學(xué)院,江蘇 南京 210016)
熔融沉積成型(FDM)是快速成型技術(shù)中一項(xiàng)發(fā)展較為成熟的技術(shù)。熔融沉積制造技術(shù)將熱塑性材料,如PLA,ABS等加熱熔融,出絲機(jī)構(gòu)擠出絲狀熔絲,并沿著特定軌跡運(yùn)動(dòng),層層堆疊而成一個(gè)完整的物體模型[1]。該技術(shù)的一個(gè)顯著問(wèn)題在于,由于剛噴出的熔絲呈現(xiàn)熔融態(tài),它的有效堆積取決于下層是否存在實(shí)體。因此,添加支撐結(jié)構(gòu)就顯得尤為重要。生成的支撐結(jié)構(gòu)端部和物體模型的懸空部分相融合,在模型打印結(jié)束后對(duì)支撐結(jié)構(gòu)進(jìn)行人為剝除。
如何合理地添加支撐結(jié)構(gòu),是確保某些模型能夠完整且精確打印出來(lái)的前提條件。關(guān)于熔融沉積成型的支撐算法,已有大量的研究工作開(kāi)展,其重點(diǎn)主要圍繞待支撐部位的選擇和支撐結(jié)構(gòu)的添加2個(gè)方面。Allen[2]使用三角面片與水平面之間的夾角作為判斷添加支撐結(jié)構(gòu)的條件。Vanek等人[3]提出了模型最優(yōu)的放置方式,并建立樹(shù)狀支撐結(jié)構(gòu)。Huang[4]和Snead[5]等人利用布爾運(yùn)算計(jì)算上下切片層之間的差值,以決定上層切面需要添加的支撐的面積大小。Strano[6]等人提出對(duì)支撐結(jié)構(gòu)內(nèi)部進(jìn)行蜂窩狀掏空,陳之佳[7]等人對(duì)布爾運(yùn)算進(jìn)行改進(jìn),提出了一種基于直線掃描的支撐結(jié)構(gòu)生成方法。Wang[8]等將建筑學(xué)中的框架結(jié)構(gòu)引入支撐結(jié)構(gòu)設(shè)計(jì)中。魏瀟然[9]等人根據(jù)熔絲的特點(diǎn)作為待支撐點(diǎn)的選取依據(jù)。陳巖[10]等人提出設(shè)置一個(gè)支撐參數(shù)來(lái)作為判斷模型輪廓點(diǎn)是否需要添加支撐的點(diǎn)的判斷。
在此,提出一種基于模型輪廓信息的支撐結(jié)構(gòu)自動(dòng)生成算法,確保模型中所有懸空部位都添加了支撐結(jié)構(gòu),能夠有效地節(jié)約打印耗材和打印時(shí)間。本算法主要特點(diǎn)在于:以熔融態(tài)熔絲能夠懸空的最大長(zhǎng)度,作為該部分需要添加支撐結(jié)構(gòu)的依據(jù);在生成支撐結(jié)構(gòu)時(shí),根據(jù)模型自身的結(jié)構(gòu)特點(diǎn)來(lái)調(diào)節(jié)支撐結(jié)構(gòu)的長(zhǎng)度。
本文算法的核心思想,是對(duì)實(shí)際熔融沉積過(guò)程進(jìn)行一定程度上的模擬,將打印過(guò)程中的一些重要參數(shù),運(yùn)用到算法對(duì)模型的處理上來(lái),使得搜索到的待支撐區(qū)域更符合實(shí)際情況。
對(duì)于三維打印來(lái)說(shuō),最常用的文件是STL文件,是以三角面片逼近物體真實(shí)輪廓的儲(chǔ)存格式。但即使對(duì)于同一個(gè)模型來(lái)說(shuō),模型上不同位置的三角面片的大小也存在著較大的差異,因此對(duì)模型沿z軸分層切片,求得同一層相鄰的2個(gè)輪廓點(diǎn)之間的距離L不一定相同。將距離L處理成與熔絲的寬度f(wàn)相等,這樣一來(lái),對(duì)每個(gè)輪廓點(diǎn)的處理等效于處理實(shí)際打印過(guò)程中的熔絲末端位置。
首先要準(zhǔn)確地找到待支撐區(qū)域,本算法中體現(xiàn)為找到要待支撐點(diǎn)集。遍歷輪廓點(diǎn)集P{P0,…,Pi,…,Pn}(n為分層數(shù),Pi為某一層的點(diǎn)集,P0為最底層)中的所有點(diǎn),提取出待支撐點(diǎn)存入待支撐點(diǎn)集A中。
對(duì)于輪廓上的任一個(gè)點(diǎn)ta,都需要找到下一層中與自己距離最小的點(diǎn)tk的序號(hào)k和與之對(duì)應(yīng)的最小距離值d:
(1)
d=Dta-tk
(2)
j=1,…,m;Dta-tj為點(diǎn)ta與下一層任一點(diǎn)tj的水平距離。
根據(jù)安全距離,進(jìn)行待支撐點(diǎn)集初步選取的步驟如下:
a.從P1開(kāi)始,對(duì)每層點(diǎn)集中的所有點(diǎn)進(jìn)行遍歷。
b.首先,判斷該點(diǎn)ta是否為每一層起始坐標(biāo)點(diǎn)t0,若是,則轉(zhuǎn)入步驟c,若不是,則轉(zhuǎn)入步驟d執(zhí)行。
c.從下一層點(diǎn)集Pi-1起始點(diǎn)t0開(kāi)始正向搜索,若點(diǎn)ta與點(diǎn)t1的距離值Dta-t1小于與點(diǎn)t0的距離值Dta-t0,依次搜索t2,t3,…,直到搜索到距離值最小的點(diǎn)tk;若點(diǎn)ta與t1點(diǎn)的距離值Dta-t1大于與點(diǎn)t0的距離值Dta-t0,則開(kāi)啟反向搜索模式,從點(diǎn)集的末尾開(kāi)始,繼續(xù)搜索tm,tm-1,…,直到找到距離值最小的點(diǎn)tk;并記錄下最小距離點(diǎn)tk的相關(guān)信息。轉(zhuǎn)入步驟e。
d.根據(jù)點(diǎn)ta前一點(diǎn)ta-1記錄下的最小距離點(diǎn)的信息,從ta的最小距離點(diǎn)開(kāi)始正向或者反向搜索,獲得該點(diǎn)ta的最小距離點(diǎn)tk的相關(guān)信息。
e.將ta與點(diǎn)tk的距離值Dta-tk與熔絲伸出的安全距離Da進(jìn)行比較,若大于安全距離Da,則該點(diǎn)為需要添加支撐的點(diǎn),存入待支撐點(diǎn)集A中。
本算法提出了一種新的搜索方法,根據(jù)待搜索點(diǎn)ta前一點(diǎn)ta-1儲(chǔ)存的最小距離點(diǎn)的信息,從前一點(diǎn)ta-1的最小距離點(diǎn)開(kāi)始正向或者反向搜索。2個(gè)相鄰點(diǎn)的最小距離點(diǎn)相距一般相隔很近,這樣的方式能夠加速搜索的進(jìn)行。
而對(duì)于初步選取的待支撐點(diǎn)集A{a0,a1,…,ak,…,am},由于只考慮了安全距離Da,所以點(diǎn)ak可能投影在下層模型的內(nèi)部或者在外部,只有在外部的點(diǎn)才是需要添加支撐的點(diǎn)。將投影在下層模型內(nèi)部的待支撐點(diǎn),從點(diǎn)集A中剔除,最終留下的點(diǎn)集才是真正需要添加支撐的點(diǎn)集。
模型內(nèi)部和外部的劃分是由輪廓環(huán)之間的相互包含的關(guān)系來(lái)體現(xiàn)的。同一層可能包含多個(gè)輪廓環(huán),輪廓環(huán)之間又可能分別存在包含的關(guān)系。在判斷點(diǎn)ak的投影是否位于下層模型內(nèi)部之前,需要首先判斷哪些輪廓環(huán)包含的范圍屬于模型實(shí)體范圍。因此,需要對(duì)輪廓環(huán)之間的關(guān)系進(jìn)行一些預(yù)處理。
在此,提出了一種求解方法。由模型本身的特點(diǎn)可知,大的輪廓環(huán)一定不會(huì)包含在小的輪廓環(huán)內(nèi),這樣就不需要求解這個(gè)關(guān)系。將所有環(huán)按大小先進(jìn)行升序排序,每個(gè)環(huán)只需對(duì)排序位于之后的環(huán)求解包含關(guān)系,將有包含關(guān)系的環(huán)分別建立數(shù)個(gè)分離的拓?fù)鋽?shù)據(jù)鏈表?;谶@些數(shù)據(jù)鏈表對(duì)點(diǎn)ak進(jìn)行最終的判斷。
根據(jù)待支撐點(diǎn)是否位于模型內(nèi)部的判斷條件,進(jìn)行再次篩選支撐點(diǎn)集的步驟如下:
a. 根據(jù)點(diǎn)集A中的每一個(gè)點(diǎn)ak存儲(chǔ)的信息,獲得該點(diǎn)對(duì)應(yīng)的下一層層號(hào)和該層的點(diǎn)集Pi。
b.判斷ak是否與前一個(gè)ak-1在同一層,若是,轉(zhuǎn)入步驟c;若否,轉(zhuǎn)入步驟d執(zhí)行。
c.根據(jù)前一點(diǎn)ak-1建立的下層輪廓環(huán)拓?fù)鋽?shù)據(jù)鏈表,判斷該點(diǎn)是否位于某個(gè)數(shù)據(jù)鏈表中,并記錄下鏈表中包含該投影點(diǎn)的環(huán)數(shù)量,根據(jù)環(huán)的數(shù)量判斷該點(diǎn)是否位于下層模型內(nèi)部。轉(zhuǎn)入步驟e。
d.先對(duì)下一層的所有輪廓環(huán)按大小進(jìn)行升序排列,對(duì)于每個(gè)環(huán)來(lái)說(shuō),只求解與排序位于之后的輪廓環(huán)的包含關(guān)系,將所有環(huán)分別存入對(duì)應(yīng)的拓?fù)鋽?shù)據(jù)鏈表中,操作過(guò)程如圖1和圖2所示。判斷該點(diǎn)是否位于某個(gè)數(shù)據(jù)鏈表中,并記錄下鏈表中包含該投影點(diǎn)的環(huán)數(shù)量,根據(jù)環(huán)的數(shù)量判斷該點(diǎn)是否位于下層模型內(nèi)部。
e.從點(diǎn)集A中剔除位于模型內(nèi)部的待支撐點(diǎn),獲得新的待支撐點(diǎn)集A。
圖1 同一層輪廓環(huán)之間原始的關(guān)系
圖2 步驟d處理后輪廓環(huán)之間的拓?fù)潢P(guān)系
對(duì)模型輪廓上的所有點(diǎn)(除了底層)都計(jì)算,并儲(chǔ)存下一層與之對(duì)應(yīng)的最小距離點(diǎn)的信息,這些信息的保留將極大地減少搜索時(shí)間。對(duì)于每個(gè)點(diǎn)ak生成的支撐柱來(lái)說(shuō),都存在實(shí)際寬度,也就說(shuō)明了由點(diǎn)ak生成的支撐柱,不僅能夠支撐點(diǎn)ak本身,也能將點(diǎn)ak周?chē)狞c(diǎn)一并支撐。若鄰域中存在待支撐點(diǎn),就不需要對(duì)這些待支撐點(diǎn)再次處理判斷,能夠有效避免支撐柱之間的實(shí)體重合。支撐柱能夠穩(wěn)定存在的條件為:
len≤LEN(θ) whenα=θ
(3)
len和α分別為待生成支撐柱的長(zhǎng)度和與水平面方向的夾角,LEN(θ)為通過(guò)試驗(yàn)求得的能夠穩(wěn)定存在支撐柱的長(zhǎng)度與角度的關(guān)系式。
尋找支撐柱兩端面上中心點(diǎn),即尋找支撐每個(gè)待支撐點(diǎn)的支撐柱上另一端的點(diǎn)的步驟如下:
a.遍歷待支撐點(diǎn)集A中的所有點(diǎn),若該點(diǎn)是第一個(gè)點(diǎn)a1,則轉(zhuǎn)入步驟b;若不是,則轉(zhuǎn)入步驟c。
b.根據(jù)點(diǎn)ak中儲(chǔ)存的下層最小距離點(diǎn)bk1,計(jì)算出2點(diǎn)之間的距離len和角度α,代入支撐柱穩(wěn)定存在條件,若滿足,將bk1存入ak的點(diǎn)結(jié)構(gòu)中;若不滿足條件,則找到bk1的最小距離點(diǎn)bk2,再次進(jìn)行支撐柱穩(wěn)定存在條件判斷,依次類推,直到找到滿足條件的點(diǎn)bkn為止;若搜索到底層時(shí)依然沒(méi)有找到符合條件的點(diǎn)bkn,則將ak在底層的投影點(diǎn)作為bkn。
c.對(duì)于其他點(diǎn)ak來(lái)說(shuō),首先需要向前搜索,若點(diǎn)ak能被前面的點(diǎn)ai生成的支撐柱支撐,則將ak歸入ai為中心的待支撐點(diǎn)集中;若沒(méi)有搜索到,轉(zhuǎn)入步驟b。
遍歷點(diǎn)集A中的所有點(diǎn),提取出所有需要生成添加支撐的點(diǎn)ak以及對(duì)應(yīng)的點(diǎn)bkn,根據(jù)這2點(diǎn)生成固定寬度為w的支撐柱。
支撐算法運(yùn)行之后,得到了良好的支撐效果,如圖3所示。
圖3 生成模型的支撐效果
將相鄰輪廓點(diǎn)之間的距離L處理成與打印過(guò)程中每條熔絲的寬度f(wàn)相等,這樣一來(lái),每個(gè)點(diǎn)的位置更接近于實(shí)際的熔絲位置,為“尋找支撐部位”的算法部分提供了可靠的前提條件。
從噴頭擠出之后,熔絲會(huì)產(chǎn)生一定程度的熱膨脹,因此不能直接使用噴嘴寬度作為實(shí)際的熔絲寬度。一般熔融成型都是選定一組特定的工藝參數(shù)進(jìn)行加工,通過(guò)試驗(yàn)的方式測(cè)量在不同工藝參數(shù)組合下的熔絲寬度。
試驗(yàn)均以聚乳酸(PLA)為原材料,室溫保持25 ℃,擠出速度作為自變量,在不同溫度下來(lái)測(cè)量不同擠出速度下的出絲直徑。對(duì)擠出絲的寬度進(jìn)行測(cè)量,采用多部位多次測(cè)量取平均值的方式。擠出絲寬度的試驗(yàn)數(shù)據(jù),如圖4所示。
圖4 溫度與擠出絲寬度的關(guān)系
由圖 4可以看出,隨著溫度升高,擠出絲直徑相應(yīng)增大,同樣的,擠出速度對(duì)直徑也有一定的影響。在接下來(lái)的試驗(yàn)中,選取加熱溫度為200 ℃,擠出速度為30 mm/s,因此選取擠出絲的寬度為0.5 mm,作為同一層相鄰輪廓點(diǎn)之間的最大距離。
支撐結(jié)構(gòu)的本質(zhì)是對(duì)懸空距離過(guò)長(zhǎng)的熔絲進(jìn)行支撐。由于熔融狀態(tài)下柔軟的熔絲同樣具有一定的剛度,在懸空安全距離Da內(nèi)不會(huì)產(chǎn)生明顯的塌陷,所以不需要對(duì)這些熔絲添加支撐。一般實(shí)際打印過(guò)程中每層的厚度選取范圍為0.1~0.3 mm,本試驗(yàn)選取3個(gè)不同的分層厚度打印同一模型來(lái)進(jìn)行試驗(yàn)。
在某一層堆積完成之后,熔絲在短時(shí)間內(nèi)會(huì)冷卻至固體狀態(tài)。多次試驗(yàn)后發(fā)現(xiàn),熔絲凝固后剛度足以支撐其上方未打印的其他部分,而一般噴頭再次運(yùn)行到該條熔絲所在位置時(shí),熔絲已經(jīng)完全凝固。因此不用考慮熔絲承受的總質(zhì)量會(huì)使熔絲產(chǎn)生形變。所以判斷某個(gè)輪廓點(diǎn)ta是否為待支撐點(diǎn),只與該點(diǎn)超出下一層的輪廓線的距離有關(guān)。搜索并得到與點(diǎn)ta水平距離最小的下一層的輪廓點(diǎn)tk,求得兩點(diǎn)之間的距離Dta-tk。若Dta-tk大于熔絲的安全懸空距離Da,則該點(diǎn)ta為待支撐點(diǎn)。表1顯示了在不同分層厚度和不同懸空距離下測(cè)得的熔絲塌陷情況。
表1 不同伸出長(zhǎng)度下熔絲的塌陷情況表 mm
根據(jù)試驗(yàn)結(jié)果可知,隨著分層厚度的變小,熔絲的有效懸空長(zhǎng)度變小,這是由于噴頭對(duì)熔絲的擠壓造成的。在接下來(lái)的試驗(yàn)中,統(tǒng)一選取0.3 mm的分層厚度,作為切片的層間距來(lái)獲取模型每層的輪廓,使用1.2 mm作為熔絲的最大有效懸空長(zhǎng)度。
保證支撐效果的關(guān)鍵是要使支撐柱能夠穩(wěn)定合理地存在。通過(guò)試驗(yàn)得出,支撐柱可打印的最大長(zhǎng)度以及支撐柱的偏移量與水平夾角的關(guān)系。偏移量指支撐柱頂點(diǎn)的實(shí)際高度和理論高度的差值。支撐柱的寬度均為1.2 mm。從圖5及圖6可以看出,最大可打印的長(zhǎng)度值在60°急劇變化,偏移量在50°也有很大的變化。綜合最大長(zhǎng)度和偏移量的變化趨勢(shì),得到最大長(zhǎng)度與角度的線性關(guān)系式,作為支撐柱穩(wěn)定存在的判斷依據(jù),同時(shí)設(shè)定支撐柱與水平面的夾角不得小于50°。
圖5 偏移量與支撐柱角度的關(guān)系
圖6 支撐柱角度與最大長(zhǎng)度之間的關(guān)系
將3個(gè)不同的模型分別應(yīng)用本算法和其他2個(gè)切片引擎Slic3r,Meshmixer中的支撐算法,分析比較優(yōu)劣。所有模型都是在實(shí)驗(yàn)室自主開(kāi)發(fā)的3D打印機(jī)上完成的,以聚乳酸(PLA)為打印材料,打印速度為30 mm/s,噴頭空行駛速度為60 mm/s,打印層厚為0.3 mm。
Slic3r算法通過(guò)層與層之間的布爾運(yùn)算,計(jì)算出懸空區(qū)域,生成稀疏的柱狀支撐結(jié)構(gòu)。Meshmixer算法檢測(cè)出需要添加支撐的位置,并生成樹(shù)狀支撐。由圖7,圖9和圖11可知,本算法生成的結(jié)構(gòu)為線性結(jié)構(gòu),生成的支撐柱的長(zhǎng)度和角度滿足圖 6的關(guān)系曲線。Slic3r,Meshmixer算法都檢測(cè)到的主要支撐區(qū)域,如圖 7中酒杯的下沿,圖 11中熊貓的手臂和雞的喙,本算法都添加了支撐。就結(jié)構(gòu)疏密而言,相比于Slic3r生成的密致結(jié)構(gòu),本算法生成的支撐顯然更為稀疏,對(duì)于材料的消耗更少。圖8,圖10及圖12展示了各個(gè)模型的打印效果。在此,主要從算法運(yùn)行時(shí)間,實(shí)際打印時(shí)間,材料損耗,支撐質(zhì)量4個(gè)方面來(lái)比較3個(gè)算法的優(yōu)劣,試驗(yàn)結(jié)果如表2所示。
圖7 不同算法生成的酒杯支撐效果
圖8 不同算法生成的酒杯實(shí)際打印效果
圖9 不同算法生成的母雞支撐效果
圖10 不同算法生成的母雞實(shí)際打印效果
圖11 不同算法生成的功夫熊貓支撐效果
圖12 不同算法生成的功夫熊貓實(shí)際打印效果表2 試驗(yàn)數(shù)據(jù)
比較參數(shù)本算法Slic3r算法Meshmixer算法酒杯熊貓母雞酒杯熊貓母雞酒杯熊貓母雞算法時(shí)間/s5.114.311.63.110.06.52.36.33.5打印時(shí)間/h0.862.533.880.982.724.171.183.34.35支撐質(zhì)量/g0.51.43.21.23.87.30.92.74.6
從表2和表3可以看出,本算法在打印時(shí)間和支撐結(jié)構(gòu)的耗材方面明顯優(yōu)于其他2種算法。但是在算法運(yùn)行時(shí)間方面,對(duì)于其他2種軟件算法并無(wú)優(yōu)勢(shì)。
表3 本算法與Slic3r,Meshmixer的節(jié)省比較
支撐效果可以分為2個(gè)部分來(lái)進(jìn)行比較,分別為材料的可剝除性和支撐區(qū)域的選擇。就材料的可剝除性來(lái)看,較小的接觸面積意味著在剝除時(shí)對(duì)模型的破壞更小。Slic3r算法生成的支撐結(jié)構(gòu)接觸面積較大,本算法和Meshmixer算法都對(duì)接觸部分的支撐結(jié)構(gòu)進(jìn)行了削尖處理,剝除后模型能夠獲得更高的表面質(zhì)量。就支撐區(qū)域的選擇而言,由于不同算法對(duì)于添加支撐的判斷條件不盡相同,其他2種算法都是以角度為閾值作為判斷添加支撐的條件,而本算法是以熔絲懸空的最大長(zhǎng)度作為判斷依據(jù),顯然更為合理。從圖7~圖12中可以看出,本算法所判斷的支撐區(qū)域大于等于Slic3r,Meshmixer算法判斷的區(qū)域。
本文提出了熔融沉積成型制造中的一種新的支撐結(jié)構(gòu)生成算法,在分析了模型的實(shí)際打印情況和熔絲特性的基礎(chǔ)上,選取待支撐點(diǎn),生成支撐柱。從實(shí)際的效果看,本算法大大節(jié)省了打印時(shí)間和打印耗材。較為準(zhǔn)確地判斷需要打印的區(qū)域,并且獲得較高的模型表面質(zhì)量。
本算法仍然有一些不足,主要為以下2個(gè)方面:其一,無(wú)法根據(jù)模型的實(shí)際情況自適應(yīng)地變換支撐柱的粗細(xì),以保證更好的打印和剝除效果;其二,相比于成熟的算法,本算法在運(yùn)行時(shí)間上仍然有著一定的差距。
[1] 顏永年, 單忠德. 快速成形與鑄造技術(shù)[M]. 北京:機(jī)械工業(yè)出版社, 2004.
[2] Allen S, Dutta D. Determination and evaluation of support structures in layered manufacturing[J]. Journal of Design & Manufacturing,1995,5: 153-162.
[3] Vanek J, Galicia J A G, Benes B. Clever support: efficient support structure generation for digital fabrication[J].Computer Graphics Forum, 2014,33(5):117-125.
[4] Huang X, Ye C, Mo J, et al.Slice data based support generation algorithm for fused deposition modeling[J].Tsinghua Science & Technology,2009,14(s1):223-228.
[5] Snead D E, Smalley D R, Cohen A L, et al. Boolean layer comparison slice: US 5854748 A[P]. 1998.
[6] Strano G, Hao L, Everson R M, et al. A new approach to the design and optimisation of support structures in additive manufacturing[J]. International Journal of Advanced Manufacturing Technology, 2013, 66(9/10/11/12):1247-1254.
[7] 陳之佳, 王叢軍, 張李超. 基于直線掃描的FDM支撐自動(dòng)生成算法[J]. 華中科技大學(xué)學(xué)報(bào)(自然科學(xué)版), 2004, 32(6):60-62.
[8] Wang W, Wang T Y, Yang Z, et al. Cost-effective printing of 3D objects with skin-frame structures[J]. ACM Transaction on Graphics, 2013, 32(6): 177.
[9] 魏瀟然, 耿國(guó)華, 張雨禾. 熔絲沉積制造中穩(wěn)固低耗支撐結(jié)構(gòu)生成[J]. 自動(dòng)化學(xué)報(bào), 2016, 42(1):98-106.
[10] 陳巖, 王士瑋, 楊周旺,等. FDM三維打印的支撐結(jié)構(gòu)的設(shè)計(jì)算法[J]. 中國(guó)科學(xué):信息科學(xué), 2015, 45(2):259-269.