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