桂林電子科技大學(xué) 馮小蕓 周勝源
3D打印切片過(guò)程與控制軟件研究
桂林電子科技大學(xué) 馮小蕓 周勝源
3D打印的核心技術(shù)是對(duì)3D模型進(jìn)行切片處理,本文將以Cura軟件為例,介紹切片引擎CuraEngine的架構(gòu),分析由Cura軟件處理STL文件的過(guò)程,分析設(shè)置Cura 打印軟件中各項(xiàng)參數(shù),對(duì)模型切片及打印控制的影響。
3D打?。籆ura軟件
3D打印,即快速成型技術(shù)的一種,它是一種以數(shù)字模型文件為基礎(chǔ),運(yùn)用粉末狀金屬或塑料等可以粘合材料,通過(guò)逐層打印的方式來(lái)構(gòu)造物體的技術(shù)。3D打印機(jī)原理中把復(fù)雜的三維制造轉(zhuǎn)化為一系列二維制造的疊加,因而可以在不用模具和工具的條件下生成幾乎任意復(fù)雜的零部件,極大地提高了生產(chǎn)效率和制造柔性。按照目前流行技術(shù)的做法,3D打印把復(fù)雜的三維制造轉(zhuǎn)化成二維制造的過(guò)程是將Solidworks或CAD等其他三維設(shè)計(jì)軟件的三維模型存儲(chǔ)為STL格式,并由計(jì)算機(jī)讀取STL文件,通過(guò)文件數(shù)據(jù),加上一定切片算法對(duì)模型進(jìn)行切片運(yùn)算,得到模型每一層的完整輪廓,再根據(jù)得到的輪廓信息,對(duì)輪廓進(jìn)行內(nèi)部填充及路徑規(guī)劃,得到打印機(jī)可以識(shí)別的如gcode字符串,通過(guò)3D打印機(jī)驅(qū)動(dòng)模塊執(zhí)行打印命令,從而實(shí)現(xiàn)3D打印。
由3D打印的打印過(guò)程可發(fā)現(xiàn),對(duì)STL文件的切片方式直接影響到打印真實(shí)物體的速度和精度,完整正確的切片輪廓和路徑規(guī)劃是后續(xù)計(jì)算的前提。針對(duì)3D打印的切片算法有很多種,各種算法都存在一定的優(yōu)勢(shì)與缺陷,目前,市面上流行的切片引擎有KISSlicer、Slic3r、Cura等等,可以適用于不用的3D打印機(jī)型及打印工藝。并且其中的Cura及其切片引擎CuraEngine軟件都是開(kāi)源的,本文將以Cura軟件為例,介紹切片引擎CuraEngine的架構(gòu),分析由Cura軟件處理STL文件的過(guò)程,分析設(shè)置Cura 打印軟件中各項(xiàng)參數(shù),對(duì)模型切片及打印控制的影響。
目前,能應(yīng)用于3D打印的三維模型文件格式有很多種,STL是適用最廣的一種。STL文件結(jié)構(gòu)簡(jiǎn)單,容易獲取,大多數(shù)的三維圖形設(shè)計(jì)軟件都可以直接將三維實(shí)物直接存儲(chǔ)成STL文件。
STL文件存儲(chǔ)數(shù)據(jù)有兩種格式:二進(jìn)制碼與ASCII碼。這兩種方式雖然存儲(chǔ)格式不同,但存儲(chǔ)的信息都是構(gòu)成三維模型的三角形三個(gè)頂點(diǎn)與法向量,一定數(shù)量的三角形面片構(gòu)成了一個(gè)完整的STL文件,該文件則可表示三維實(shí)體。
3D模型必須經(jīng)由兩個(gè)軟件的處理來(lái)完成打印程序:切片與傳送。切片軟件會(huì)將模型細(xì)分成可以打印的薄度,然后計(jì)算其打印路徑。3D 打印機(jī)客戶端軟件再把這系列動(dòng)作傳送到硬件,并提供控制其他功能的控制介面。
Cura是一款優(yōu)秀的上位機(jī)控制軟件,它的特點(diǎn)是切片速度快,使用方便,用戶體驗(yàn)良好。Cura是由python語(yǔ)言實(shí)現(xiàn),使用wxpython圖形界面框架的3D打印切片界面軟件, Cura本身不會(huì)進(jìn)行實(shí)際的切片操作,實(shí)際的切片工作由它的切片引擎CuraEngine來(lái)具體負(fù)責(zé)。用戶在Cura上對(duì)STL文件執(zhí)行的操作,會(huì)在CuraEngine中轉(zhuǎn)換成對(duì)應(yīng)的指令,并把最終的執(zhí)行結(jié)果輸出成gcode字符串返回給Cura, Cura再把gcode的結(jié)果通過(guò)可視化處理成路徑展示給用戶,以便操作。
從總體上來(lái)看,CuraEngine的切片過(guò)程可以分為五個(gè)步驟:讀取模型文件、分層切片、劃分打印區(qū)域、生成輪廓和填充路徑、生成gcode。
五個(gè)步驟的具體內(nèi)容如下:
大部分的三維模型軟件存儲(chǔ)文件的格式是STL格式,是在計(jì)算機(jī)圖形應(yīng)用系統(tǒng)中,STL文件用于表示三角形網(wǎng)格的一種文件格式。在STL文件中的三角面片的信息單元 facet 是一個(gè)帶矢量方向的三角面片,STL三維模型就是由一系列這樣的三角面片構(gòu)成。CuraEngine內(nèi)部也是用三角形組合來(lái)表示模型的,不過(guò)同樣一個(gè)三角形組合,卻有無(wú)窮多種數(shù)據(jù)結(jié)構(gòu)來(lái)進(jìn)行存儲(chǔ)。CuraEngine切片的第一步,就是從外部讀入模型數(shù)據(jù),轉(zhuǎn)換成以CuraEngine內(nèi)部的數(shù)據(jù)結(jié)構(gòu)所表示的三角形組合,并對(duì)三角形進(jìn)行關(guān)聯(lián),判斷三角形的相鄰關(guān)系,根據(jù)相鄰關(guān)系提高下一個(gè)分層步驟的處理速度。
根據(jù)三維模型在XYZ坐標(biāo)中的數(shù)據(jù),確定模型的高度,即Z軸的數(shù)據(jù)。根據(jù)一定的高度間隔,用一個(gè)XY平面去和模型相交做切片,高度間隔即為層高,層高的數(shù)值可以在Cura用戶界面進(jìn)行設(shè)置。Z軸全部切片完成后,就可以得到模型在每一個(gè)層上的輪廓線。分層的最終目的就是把一個(gè)3D模型轉(zhuǎn)化為一系列的2D平面的疊加,后續(xù)的工作就可以直接在2D平面的基礎(chǔ)上進(jìn)行操作。Cura的切片算法是先按照指定的層高把三維物體切成一層層,每一層是個(gè)XY的平面,平面與三角形網(wǎng)格相交,得到線段,由線段連接成多邊形,接著用輪廓線來(lái)代表每層的數(shù)據(jù),然后再以輪廓線為基礎(chǔ)去進(jìn)行下一步的打印機(jī)具體打印過(guò)程。先對(duì)三角形按照一定的規(guī)則進(jìn)行排序,在進(jìn)行切片梳理,可以減少運(yùn)動(dòng)量,提高切片的效率。
在Cura中,可以通過(guò)一些基本的打印設(shè)置,對(duì)分層的參數(shù)進(jìn)行一些必要的修改。
設(shè)置Cura 軟件的“基本”選項(xiàng)卡里面的參數(shù),具體參數(shù)如圖1所示。
其中層高(Layer height):每一層有多高,一般來(lái)說(shuō)是0.2mm,如果想得到更高的打印精度,可以相應(yīng)的設(shè)置較小的層高。但是層高設(shè)置的過(guò)?。ū热?.05mm)對(duì)于質(zhì)量沒(méi)任何幫助,而且它將花費(fèi)更長(zhǎng)的時(shí)間打??;外圍層厚(Wall thickness):最重要的參數(shù)之一,確保你打印的物體的性能好,尤其是中空的物體。外圍層厚最好設(shè)置為噴頭大小的倍數(shù),若是大于2.0mm 沒(méi)有任何意義。有時(shí)候需要不斷的調(diào)整這個(gè)值的大小來(lái)打印更好的效果;頂端/ 低端層厚(Bottom/Top thickness):為了一致性,一般頂端和低端會(huì)和普通層高一樣厚。
打印速度(Print Speed):打印速度越高,送料速度越快,越容易產(chǎn)生毛刺。因此要合適設(shè)置打印速度;打印溫度(Printing Temperature):打印時(shí)的溫度,一般如果是PLA 的耗材,設(shè)置為220℃;如果是ABS的耗材,設(shè)置為240℃;增加底座(Add raft):如果沒(méi)有熱床,它會(huì)在物體下面打印一層,用來(lái)確保材料牢牢的在板子上面;線材直徑(Diameter):打印所使用耗材的直徑,精確測(cè)量后填入;打包密度(Packing Density):不同的耗材可以選用不同的打包密度。
圖1 Cura 軟件的基本設(shè)置
經(jīng)過(guò)分層后,原本的三維模型被切片成一疊二維平面圖形。接下來(lái)要做的就是對(duì)每一層圖形進(jìn)行組件劃分。劃分組件即用不同的形式標(biāo)記出外墻輪廓、內(nèi)墻、填充、上下表面、支撐等等部分。CuraEngine對(duì)不同的部件加于區(qū)分,便于Cura根據(jù)各個(gè)部件的打印精度要求不同,對(duì)不同的部件設(shè)定不同的打印參數(shù)。在Cura中,各個(gè)部件被用不同的顏色標(biāo)出,打印的順序就是每打印完一個(gè)組件,接著系統(tǒng)會(huì)挑選一個(gè)離上一個(gè)組件最近的組件作為下一個(gè)進(jìn)行打印,直至一層的組件全部打印完成。接著將Z軸上升,進(jìn)入下一層2D圖形,重復(fù)上述步驟,直至所有的圖層打印完畢。
內(nèi)外墻標(biāo)記完之后就是填充和上下表面的標(biāo)記了。在Cura的基本參數(shù)設(shè)定中,有個(gè)填充率的設(shè)定,0%填充率就是無(wú)填充,100%就是打成一個(gè)密實(shí)的平面,上下表面就是填充率為100%的填充。中間的填充率自然介于兩者之間,填充率越高則實(shí)物內(nèi)部越密實(shí),反之則越疏松。上下表面層數(shù)的設(shè)置,它代表了模型的上下與空氣接觸的表面有幾層,它就在這里會(huì)被用到。CuraEngine會(huì)把當(dāng)前層上下n層(上下表面層數(shù))取出來(lái)與當(dāng)前層進(jìn)行比較,凡是當(dāng)前層有而上下n層沒(méi)有的部分就會(huì)被劃歸到表皮。
在組件劃分過(guò)程中,支撐部分算法是非常重要的一個(gè)環(huán)節(jié)。Cura 會(huì)自動(dòng)計(jì)算打印模型需要支撐的地方,計(jì)算原理是根據(jù)模型表面的斜度(與豎直方向的夾角) 大于某一角度時(shí)(通常是60°,和材料有關(guān)),就需要加支撐。設(shè)置中有支撐的設(shè)置選項(xiàng),支撐類型(SupportType):選擇在哪些地方打印模型的支撐,可以選擇只在需要的地方打印支撐,也可以選擇在任何情況下都打印支撐。Cura界面的專家設(shè)置里面有支撐角度的設(shè)置,如果一個(gè)點(diǎn)處于模型懸空部分以下,并且懸空點(diǎn)傾斜度大于支撐角度,那這個(gè)點(diǎn)就是需要支撐的。所一個(gè)平臺(tái)上所有的需要支撐的點(diǎn)連接起來(lái)圍成的2D圖形就是支撐區(qū)域。CuraEngine所使用的支撐算法還存在一定的缺陷,在打印時(shí)模型部分與支撐部分時(shí),二者的層厚完全相同,導(dǎo)致在剝離支撐時(shí)支撐與模型接觸緊密,剝離時(shí)不但不方便,在有需要支撐的部分會(huì)容易出現(xiàn)模型被支撐過(guò)度變形等問(wèn)題,影響打印效果。CuraEngine的支撐算法仍需要進(jìn)一步的修改與完善。
完成組件劃分后,在組件中規(guī)劃噴頭的運(yùn)動(dòng)路徑。路徑可以分為兩個(gè)大類:輪廓和填充。這一部分的功能是確定模型中,需要被填充的部分,前一步中生成的外墻和內(nèi)墻都屬于輪廓,相對(duì)于填充,輪廓的路徑較為簡(jiǎn)單。在Cura中填充的形式有兩種:條紋和網(wǎng)格。雖然網(wǎng)格的填充模式結(jié)構(gòu)更為合理,但網(wǎng)格填充會(huì)在相交處存在交點(diǎn),交點(diǎn)處會(huì)被重復(fù)打印,填充率越高交點(diǎn)越密,對(duì)打印質(zhì)量的影響會(huì)越大。在Cura的設(shè)置中,填充模式除了可以選擇條紋和網(wǎng)格外還有一個(gè)自動(dòng)模式。在自動(dòng)模式下,當(dāng)填充率小于20%就用條紋填充,否則使用網(wǎng)格填充。
對(duì)于填充路徑,一般情況下為直線路徑,直線路徑只需選取直線兩個(gè)頂點(diǎn)分別作為起點(diǎn)和終點(diǎn)。對(duì)于輪廓,它是一個(gè)封閉圖形,可以以任意一個(gè)點(diǎn)為起點(diǎn),沿任意方向走一圈再回到起點(diǎn)。各個(gè)組件的獨(dú)立路徑生成好之后,還要確定每個(gè)部件的先后順序。路徑的順序以先近后遠(yuǎn)為基本原則:每打印完一條路徑,在當(dāng)前層里剩下還沒(méi)打印的路徑中挑選一條起點(diǎn)離當(dāng)前位置最近的一條路徑,以當(dāng)前位置為起點(diǎn),繼續(xù)打印。路徑的起點(diǎn)可以是路徑中的任意一個(gè)點(diǎn),程序會(huì)自行判斷。
合理的打印路徑能減少打印的時(shí)間,改善打印模型的質(zhì)量。Cura作為開(kāi)源軟件,給研究者在切片打印區(qū)域路徑優(yōu)化上提供了很好的資源和平臺(tái),切片路徑算法的優(yōu)化也是3D打印技術(shù)的核心內(nèi)容及重要的研究方向。
生成gcode代碼,就是將規(guī)劃好的打印信息翻譯成打印機(jī)可以識(shí)別的代碼。包括打印機(jī)在打印之前的一些準(zhǔn)備工作,如對(duì)噴頭、風(fēng)扇與加熱設(shè)備等部分的控制等。從下到上逐層打印,在gcode代碼中G0指令表示空走的路徑,G1指令表示邊走邊擠絲,Cura中可以設(shè)置材料的直徑、線寬,可以算出完成路徑需要擠出多少材料,也可以設(shè)置G0和G1的打印速度。若需回抽,用G1生成一條E軸倒退的代碼。在下一條G1執(zhí)行之前,再用G1生成一條相應(yīng)的E軸前進(jìn)的代碼。所有層都打印完成后讓打印機(jī)做一些收尾工作:關(guān)閉加熱、XY歸零、電機(jī)釋放等。CuraEngine可以根據(jù)模型切片的數(shù)據(jù)、打印原材料的長(zhǎng)度,計(jì)算打印所需要的時(shí)間,并把預(yù)計(jì)打印時(shí)間,打印進(jìn)度等數(shù)據(jù)反饋給用戶,給使用者提供參考。
本文以Cura軟件為例,對(duì)3D打印切片處理部分所涉及的關(guān)鍵技術(shù)進(jìn)行了淺顯地分析,分析仍存在一定的問(wèn)題與不足,可以從以下方面進(jìn)行深入的分析:
(1)除了FDM打印機(jī),Cura軟件可以適用于3DP、SLX系列等的不同類型的打印機(jī),對(duì)于不同類型的打印方式,要對(duì)打印區(qū)域進(jìn)行更加細(xì)致的路徑優(yōu)化,以提高3D打印的速度和精度。
(2)CuraEngine的支撐的設(shè)置速度較快,但支撐算法較為粗糙。CuraEngine是將打印空間劃分為小的網(wǎng)格,通過(guò)網(wǎng)格記錄3D模型的三角形與直線的交點(diǎn)以及三角形的傾斜度。網(wǎng)格化之后,精度勢(shì)必會(huì)降低,通過(guò)傾斜角來(lái)判斷是否需要支撐的算法也不夠科學(xué),會(huì)對(duì)打印實(shí)體的質(zhì)量產(chǎn)生不好的影響。如何找出更科學(xué)的支撐算法,既能節(jié)省打印時(shí)間,又不浪費(fèi)材料,并且又能容易去除支撐,是非常值得研究的。