張帆, 王克鑫, 趙圓圓, 魏培祥, 譚躍剛
(武漢理工大學(xué)機(jī)電工程學(xué)院, 湖北武漢 430070)
傳 統(tǒng) 熔 融 沉 積 ( Fused Deposition Modeling,F(xiàn)DM) 3D 打印采用三自由度疊加成型的方式, 模型只能沿著固定的沉積方向堆積, 模型懸空部分需要打印支撐結(jié)構(gòu), 在生長(zhǎng)方向上存在天然的性能缺陷, 制約了打印效率和性能[1]。 機(jī)械臂具有多自由度的特性, 能夠靈活構(gòu)建空間中任意無(wú)干涉曲線(xiàn)的運(yùn)動(dòng)路徑, 將機(jī)械臂運(yùn)用到3D 打印領(lǐng)域, 可以改善傳統(tǒng)層式打印產(chǎn)生的階梯效應(yīng), 減少打印模型懸空部分的支撐約束, 改進(jìn)沉積方向上的性能不足, 從而提高3D打印的質(zhì)量和效率[2]。
三維模型切片處理是3D 打印的前提。 傳統(tǒng)三軸打印的切片處理方式是垂直于Z軸、 平行于XOY平面進(jìn)行平面分層, 具有生長(zhǎng)方向單一性的缺點(diǎn)。 機(jī)械臂的多自由度特性可以在打印過(guò)程中改變打印方向,支持曲面分層處理[3]。 但是對(duì)于某一部分有多條互不連通的支柱結(jié)構(gòu)或外表面層曲率變化較大(凹凸形態(tài)較明顯) 的模型, 經(jīng)過(guò)曲面分層處理之后會(huì)出現(xiàn)大量多島嶼狀曲面層, 即該曲面層由若干個(gè)互不相連的獨(dú)立區(qū)域組成。 這種曲面的復(fù)雜性具體表現(xiàn)在2 個(gè)方面: (1) 從整體來(lái)看, 曲面層不具備整體相連的輪廓信息, 即無(wú)法用一條封閉輪廓環(huán)表示邊界; (2)從局部來(lái)看, 各區(qū)域相互獨(dú)立(各自具有完整輪廓)并且兩兩之間存在沒(méi)有數(shù)據(jù)填充的空白區(qū)。 對(duì)于曲面分層后的路徑規(guī)劃而言, 填充處理不僅需要識(shí)別待規(guī)劃層的整體輪廓信息生成最大邊界路徑, 以及獲取輪廓內(nèi)部的點(diǎn)面信息生成內(nèi)部填充路徑, 而且需要識(shí)別非打印區(qū)域(無(wú)數(shù)據(jù)空白區(qū)) 的存在以確定從當(dāng)前子區(qū)域到下一個(gè)子區(qū)域的待跳轉(zhuǎn)點(diǎn)[4-5]。 如果不做分區(qū)處理而直接進(jìn)行路徑規(guī)劃則會(huì)出現(xiàn)以下情況: (1)由于整個(gè)曲面層邊界不是以一條封閉輪廓環(huán)存在, 而是由多個(gè)不相連的小輪廓環(huán)組成, 基于輪廓環(huán)一類(lèi)的路徑只會(huì)獲取到其中一個(gè)獨(dú)立區(qū)域的輪廓信息進(jìn)行規(guī)劃, 影響了打印路徑的完整性; (2) 由于空白區(qū)域特征無(wú)法識(shí)別, 獲取不到待跳轉(zhuǎn)點(diǎn), 基于掃描面一類(lèi)的路徑規(guī)劃會(huì)將待跳轉(zhuǎn)的2 個(gè)邊界點(diǎn)通過(guò)直線(xiàn)相連,即: 兩獨(dú)立區(qū)域的跳轉(zhuǎn)部分(從一個(gè)區(qū)域至另一個(gè)區(qū)域的2 個(gè)跳轉(zhuǎn)點(diǎn)) 通過(guò)直線(xiàn)填充連接起來(lái), 影響打印路徑的正確性。
目前, 國(guó)內(nèi)外對(duì)于曲面分區(qū)的研究分為2 種:(1) 將獲取到的曲面擬合為平面, 建立三維曲面和二維平面的聯(lián)系, 然后在平面上進(jìn)行分區(qū)處理, 最后通過(guò)映射關(guān)系重建原曲面。 如張盼盼[6]提出將原曲面直接投影到XOY平面并進(jìn)行拓?fù)浞制?之后將所分的平面子片逆投影回原曲面的方法, 這種方法無(wú)法完全獲取XY值相同但Z值不同的特征點(diǎn), 會(huì)導(dǎo)致在投影過(guò)程中丟失三維點(diǎn)信息; BRUNO 等使用了LCMS算法展平目標(biāo)曲面, 然后進(jìn)行平面分片和逆映射回曲面的處理[7], 這種算法雖然可以很好地將曲面保角映射至平面, 但是在分區(qū)處理后逆映射回曲面的過(guò)程中會(huì)產(chǎn)生新的三維點(diǎn)坐標(biāo), 導(dǎo)致原曲面一定程度上失真。 因此, 將三維曲面進(jìn)行降維處理后再升維的方法對(duì)于曲面分區(qū)具有一定的局限性。 (2) 直接提取曲面信息進(jìn)行特征識(shí)別進(jìn)而作分區(qū)處理。 如ATKAR等[8]采用基于RMS 高斯曲率的Watershed 算法以及拓?fù)鋷缀蔚姆椒ㄟM(jìn)行分區(qū), 但是這種方法會(huì)將目標(biāo)曲面分為大量曲率變化不大、 可近似平面的子區(qū)域, 算法流程過(guò)于復(fù)雜而且分得的區(qū)域數(shù)量冗余;VAN TUONG、 POKORNY'[9]提出基于曲面分片加工的思想, 即首先自適應(yīng)地獲取聚類(lèi)中心點(diǎn), 并借助區(qū)域生長(zhǎng)算法將曲面劃分為點(diǎn)云密度大致相等的子曲面,這種方法對(duì)于只含有一個(gè)單連通區(qū)域的曲面劃分精確, 但是對(duì)于含有若干個(gè)島嶼曲面特征的模型分區(qū)并不適用; THEOLOGOU 等[10]提出了基于模糊聚類(lèi)和最小割的層次化三維網(wǎng)格分割算法, 并根據(jù)劃分的網(wǎng)格組成相應(yīng)子區(qū)域, 但是這種方法需要對(duì)已有點(diǎn)云進(jìn)行K-means聚類(lèi), 通過(guò)事先設(shè)置分區(qū)數(shù)量獲取對(duì)應(yīng)的聚類(lèi)閾值以達(dá)到分區(qū)目的, 算法迭代步數(shù)多且需要提前設(shè)置聚類(lèi)閾值, 對(duì)于3D 打印中出現(xiàn)的曲面層適用性不強(qiáng); KUMAZAWA 等[11]提出基于頂點(diǎn)曲率特性對(duì)復(fù)雜曲面進(jìn)行分區(qū)的算法, 但這種方法太依賴(lài)內(nèi)部三維點(diǎn)的相互關(guān)系, 無(wú)法充分考慮邊界輪廓點(diǎn)的特征信息, 導(dǎo)致分區(qū)后處于邊界的區(qū)域輪廓信息不完整。 李慧賢等[12]提出一種基于掃描矢量的分區(qū)算法, 即在掃描矢量生成的同時(shí)對(duì)子區(qū)域進(jìn)行分割, 但是此方法需要獲取一條封閉的輪廓信息, 難以處理同一層曲面上有2 個(gè)及以上互不連通的單獨(dú)子區(qū)域。
綜上所述, 傳統(tǒng)的2 種分區(qū)思想并不能達(dá)到預(yù)想的分區(qū)效果(即劃分后的獨(dú)立子區(qū)域既保證本身具有獨(dú)立完整的輪廓信息, 又使得內(nèi)部點(diǎn)面信息不失真, 通過(guò)所有子區(qū)域簡(jiǎn)單疊加的方式生成原曲面)。因此, 在分區(qū)前后曲面信息不失真的前提下, 需要盡可能地劃分適合路徑規(guī)劃的子區(qū)域。
面向機(jī)械臂3D 打印連續(xù)路徑規(guī)劃的軟件全流程主要分解為模型導(dǎo)入、 曲面切片分層、 路徑規(guī)劃以及G 代碼生成。 首先導(dǎo)入stl、 obj 等實(shí)體模型文件, 之后經(jīng)過(guò)模型體素化、 體素化分層等切片處理步驟得到每一層的曲面信息, 再經(jīng)過(guò)螺旋偏置、 直線(xiàn)填充等路徑規(guī)劃, 最后經(jīng)過(guò)數(shù)字化處理生成G 代碼。 其總體處理流程如圖1 所示。
圖1 機(jī)械臂3D 打印切片流程Fig.1 Flow of 3D printing slice of manipulator
為了實(shí)現(xiàn)機(jī)械臂無(wú)支撐3D 打印, 曲面切片分層必不可少。 該部分主要包括模型體素化、 體素化分層、 曲面層生成3 個(gè)部分, 經(jīng)過(guò)其處理可以將三維實(shí)體模型分解成若干空間有序的三維曲面。 具體流程如圖2 所示。
圖2 曲面分層流程Fig.2 Surface layering flow: (a) stl model; (b) voxel model; (c) surface layering; (d) surface layer
(1) 模型體素化。 模型的體素化過(guò)程實(shí)質(zhì)是三維柵格化, 即通過(guò)定位模型邊界在三維柵格空間中的位置, 進(jìn)而確定邊界體素信息和內(nèi)部體素信息(體素塊的中心點(diǎn))。 首先將模型的三維坐標(biāo)轉(zhuǎn)化為空間體素坐標(biāo), 獲取基礎(chǔ)信息; 然后沿著Z向通過(guò)逐層切片的方式獲取截面輪廓, 經(jīng)過(guò)截平面的離散化得到一定數(shù)量的三維點(diǎn)數(shù)據(jù); 最后以離散點(diǎn)為中心定義體素塊大小。 體素化后得到的體素模型既包含表面信息以及內(nèi)部信息, 而且能夠表現(xiàn)出模型的三維結(jié)構(gòu)。
(2) 曲面分層。 曲面分層可以采用生長(zhǎng)線(xiàn)的方式進(jìn)行處理[13]。 首先分析模型文件, 找到最佳打印方向作為生長(zhǎng)線(xiàn)方向。 然后根據(jù)模型大小計(jì)算出最小包圍盒, 以此確定生長(zhǎng)線(xiàn)的起始和終止坐標(biāo), 并且將對(duì)應(yīng)的兩點(diǎn)相連即為曲面分層所需的生長(zhǎng)線(xiàn)。 最后將所有獲取的生長(zhǎng)線(xiàn)進(jìn)行體素化處理, 分成若干個(gè)體素塊, 其精度與模型體素塊保持一致, 并且提取出相應(yīng)的體素塊, 獲取起、 止體素塊的坐標(biāo)。 每一層根據(jù)坐標(biāo)信息進(jìn)行劃分, 從而形成由生長(zhǎng)線(xiàn)體素點(diǎn)、 內(nèi)部體素點(diǎn)和邊界體素點(diǎn)組成的點(diǎn)云數(shù)據(jù), 進(jìn)而形成有序曲面。
經(jīng)過(guò)體素分層生成有序列的若干曲面(三維離散點(diǎn)和面片信息組成的obj 格式文件), 研究發(fā)現(xiàn)其中一部分曲面具有特殊性, 這種曲面從整體來(lái)看由多個(gè)獨(dú)立島嶼區(qū)域組成, 不能提取統(tǒng)一封閉的邊界; 從局部來(lái)看每一個(gè)獨(dú)立區(qū)域擁有其輪廓邊界和內(nèi)部信息, 具體表現(xiàn)如圖3 所示。
圖3 多島嶼曲面層Fig.3 Multi-island surface layer: (a) surface layer model;(b) multi-island surface layer
在切片處理的過(guò)程中, 特殊曲面層的出現(xiàn)對(duì)曲面上的路徑規(guī)劃有很大影響。 對(duì)于掃描面的路徑規(guī)劃而言, 如果一個(gè)掃描面同時(shí)穿過(guò)多個(gè)獨(dú)立子區(qū)域, 這些子區(qū)域間的無(wú)數(shù)據(jù)空白部分不能較好地識(shí)別, 會(huì)導(dǎo)致兩跳轉(zhuǎn)點(diǎn)形成直接連線(xiàn)[14-15][如圖4 (a) 所示]; 而對(duì)于輪廓環(huán)的路徑規(guī)劃方法而言, 由于多島嶼曲面層中輪廓信息是由若干個(gè)不連續(xù)的輪廓環(huán)組成, 這種規(guī)劃方式只能識(shí)別到一個(gè)區(qū)域, 另外的若干個(gè)區(qū)域信息就會(huì)丟失, 也導(dǎo)致了路徑規(guī)劃的異常[16][如圖4 (b)所示]。 因此曲面分區(qū)在切片流程中尤為重要。
圖4 分區(qū)前直接路徑規(guī)劃示意Fig.4 Schematic of direct path planning before zoning:(a) based on scanning plane (line); (b)based on contour ring
針對(duì)分區(qū)的必要性和傳統(tǒng)分區(qū)方式的局限性, 文中提出了基于廣度優(yōu)先搜索的曲面島嶼分區(qū)算法。 分區(qū)是在曲面分層之后進(jìn)行的, 分區(qū)算法輸入的是一層具有點(diǎn)和面片信息的obj 文件, 經(jīng)過(guò)算法處理, 輸出若干個(gè)已經(jīng)完成分區(qū)的obj 文件, 并且可以通過(guò)處理后的若干個(gè)文件復(fù)原原始o(jì)bj 文件信息, 從而保證分區(qū)后各個(gè)區(qū)域中信息數(shù)據(jù)的準(zhǔn)確性。 算法主要流程如圖5 所示。
圖5 曲面分區(qū)流程Fig.5 Surface zoning process
步驟一, 判斷是否需要分區(qū)處理。
(1) 遍歷當(dāng)前層中的點(diǎn)({Vi}i=1,…,n)和面片({Fj}j=1,…,m)并記錄, 同時(shí)創(chuàng)建一個(gè)大小為n的訪(fǎng)問(wèn)列表is_Visit, 內(nèi)部元素初始化值為0;
(2) 從Vi中選取第一個(gè)點(diǎn)并在{Fj}中獲取對(duì)應(yīng)點(diǎn)的索引位置, 根據(jù)索引位置遍歷出與選取點(diǎn)相鄰的其余點(diǎn)信息, 再以新獲取的2 個(gè)點(diǎn)為新的當(dāng)前點(diǎn)繼續(xù)重復(fù)遍歷, 將所有遍歷到的點(diǎn)以及取出的第一個(gè)點(diǎn)的索引對(duì)應(yīng)在is_Visit 列表元素設(shè)置為1。
(3) 當(dāng)遍歷結(jié)束后, 如果訪(fǎng)問(wèn)列表中不存在0值, 則說(shuō)明當(dāng)前層已經(jīng)是單連通區(qū)域, 無(wú)須分區(qū); 如果列表中依然存在0 值, 說(shuō)明至少存在2 個(gè)島嶼區(qū)域, 需要進(jìn)行分區(qū)處理。
步驟二, 新區(qū)域三維點(diǎn)信息生成。
(1) 確定可以劃分出的單連通區(qū)域數(shù)量。 經(jīng)過(guò)步驟一確定需要進(jìn)行分區(qū)操作后, 遍歷當(dāng)前情況下的訪(fǎng)問(wèn)列表is_Visit, 隨機(jī)獲取一個(gè)元素值為0 的索引值, 并且在{Vi}中定位到具有相同索引的點(diǎn)P, 遍歷{Fj}獲取到點(diǎn)P所在的面片, 重復(fù)步驟一中操作(2), 但是新遍歷到的點(diǎn)對(duì)應(yīng)在is_Visit 列表元素不再設(shè)置為1, 而是可以提前建立一個(gè)變量L, 初始值為0, 每經(jīng)過(guò)一次is_Visit 列表的訪(fǎng)問(wèn),L相應(yīng)遞增并將此次訪(fǎng)問(wèn)過(guò)的is_Visit 列表中索引對(duì)應(yīng)的元素設(shè)置為L(zhǎng), 其中L的變化如公式(1) 所示。 最終當(dāng)is_Visit 訪(fǎng)問(wèn)列表中不存在0 時(shí), 分區(qū)結(jié)束, 對(duì)應(yīng)的L值就是需要分區(qū)的數(shù)量。
L=L+1 (1)
(2) 確定需要分出的單連通區(qū)域內(nèi)部點(diǎn)信息。根據(jù)操作(1) 中所得到的L值, 提供L個(gè)暫時(shí)數(shù)據(jù)為空的列表({Pi_List}i=1,…,L), 每個(gè)列表用于存儲(chǔ)分區(qū)后的所有點(diǎn)。 遍歷is_Visit 訪(fǎng)問(wèn)列表, 此時(shí)列表元素為{1,2,…}, 將具有相同元素的索引值提?。ㄟ@些索引值就是對(duì)應(yīng)在obj 文件里的點(diǎn)的編號(hào)), 并將其按照遍歷順序依次添加到已經(jīng)設(shè)置好的點(diǎn)列表PList中, 至此L個(gè)列表中存儲(chǔ)的就是每個(gè)分區(qū)所包含的所有點(diǎn)信息。 其中三維點(diǎn)的劃分如公式 (2)所示。
步驟三, 新區(qū)域面片信息生成。
經(jīng)過(guò)步驟二中的區(qū)域劃分, 已經(jīng)將對(duì)應(yīng)區(qū)域的離散點(diǎn)全部填充進(jìn)去, 接下來(lái)就是要進(jìn)行面片信息的填充從而形成完整的曲面信息。 面片是由頂點(diǎn)相連組成, 其中存儲(chǔ)著各個(gè)點(diǎn)的索引, 而每個(gè)點(diǎn)是三維空間中的離散點(diǎn), 這種存儲(chǔ)方式以精簡(jiǎn)的數(shù)據(jù)結(jié)構(gòu)可以推導(dǎo)出法線(xiàn)、 曲率和面積等各種面片信息。 當(dāng)把三維點(diǎn)提取到一個(gè)區(qū)域中時(shí), 對(duì)應(yīng)的面片信息需要跟隨點(diǎn)的變化而更新。
(1) 確定三維點(diǎn)提取前后在原區(qū)域和當(dāng)前區(qū)域中索引對(duì)應(yīng)關(guān)系。 按順序遍歷點(diǎn)列表({Pi_List}i=1,…,L), 列表中的每個(gè)元素值是原區(qū)域中的索引信息, 而元素值對(duì)應(yīng)在列表中的索引下標(biāo)是將點(diǎn)放在新區(qū)域下的索引信息, 這兩個(gè)索引信息相互對(duì)應(yīng), 使用以PKey-PValue鍵值對(duì)的形式存放(PKey表示三維點(diǎn)在原區(qū)域中索引位置;PValue表示三維點(diǎn)在分區(qū)后新區(qū)域中索引位置。 其中PKey是不重復(fù)的,PValue是有重復(fù)的)。
(2) 新區(qū)域面片信息生成。 遍歷原始面片信息,記錄原始點(diǎn)在面片信息中的索引值并與PKey進(jìn)行比對(duì), 當(dāng)查找到相同PKey值則獲取對(duì)應(yīng)的PValue值, 并且把原面片信息中當(dāng)前點(diǎn)索引值替換為PValue值(每通過(guò)一次對(duì)比就移除當(dāng)前PKey-PValue以減少時(shí)間復(fù)雜度)。 當(dāng)遍歷結(jié)束時(shí), 新區(qū)域中所有的面片信息就會(huì)對(duì)應(yīng)更新完成。 其中PKey、PValue和遍歷列表中的索引i三者的變換關(guān)系如公式(3) 所示:
步驟四, 分區(qū)完成。
完成分區(qū)。 將步驟二和步驟三中生成的點(diǎn)云信息和面片信息對(duì)應(yīng)組合生成新的曲面, 這些若干個(gè)曲面就是島嶼分區(qū)算法后產(chǎn)生的新區(qū)域, 其中每個(gè)新曲面和原始曲面含有一樣的數(shù)據(jù)信息。 在移除PKey-PValue值之前復(fù)制同樣的鍵值對(duì)copy_KV 進(jìn)行保存, 經(jīng)過(guò)分區(qū)后的新面片信息可以通過(guò)copy_KV 中對(duì)應(yīng)的信息重新組成原始面片, 從而保證分區(qū)的準(zhǔn)確性。 至此多島嶼狀的曲面層完成了分區(qū), 可以在每個(gè)區(qū)域分別進(jìn)行路徑規(guī)劃。
在面向機(jī)械臂無(wú)支撐3D 打印的過(guò)程中, 某一部分由多條互不連通的支柱結(jié)構(gòu)(圖6 中模型1 和模型2 的下半部分) 或外表面凹凸起伏變化較大(模型1的上半部分) 的模型經(jīng)過(guò)曲面分層處理之后會(huì)出現(xiàn)多島嶼狀曲面(圖7)。
圖6 實(shí)驗(yàn)測(cè)試模型Fig.6 Experimental test model: (a) model 1; (b) model 2
圖7 測(cè)試模型中的曲面層Fig.7 Surface layer in test model: (a) model 1;(b) model 2
選取模型1 中的2 個(gè)曲面層進(jìn)行路徑規(guī)劃實(shí)驗(yàn),2 個(gè)曲面層都無(wú)法提取統(tǒng)一封閉的整體輪廓信息(獨(dú)立子區(qū)域擁有各自輪廓)。 其中對(duì)圖8 所示曲面使用基于掃描線(xiàn)的路徑規(guī)劃方式填充, 對(duì)圖9 所示曲面使用基于輪廓環(huán)的螺旋偏置路徑規(guī)劃方式填充。
圖8 分區(qū)前直線(xiàn)路徑規(guī)劃Fig.8 Straight line path planning before zoning: (a) surface layer; (b) data surface layer; (c) path planning;(d) path planning completed
圖9 分區(qū)前螺旋偏置路徑規(guī)劃Fig.9 Spiral offset path planning before zoning: (a) surface layer; (b) data surface layer; (c) path planning;(d) path planning completed
如圖8 所示: 當(dāng)對(duì)圖8 (a) 中的曲面層使用基于掃描線(xiàn)的路徑規(guī)劃方式填充時(shí), 由于若干不連續(xù)區(qū)域在掃描線(xiàn)方向上重合, 使得規(guī)劃過(guò)程中無(wú)法識(shí)別兩區(qū)域間沒(méi)有數(shù)據(jù)填充的非打印部分, 導(dǎo)致規(guī)劃第一塊區(qū)域時(shí)從重合部分開(kāi)始就直接連線(xiàn)到第二個(gè)區(qū)域, 并從第二個(gè)區(qū)域開(kāi)始繼續(xù)進(jìn)行掃描填充, 具體表現(xiàn)在圖8 (c) (d) 中。
如圖9 所示: 當(dāng)對(duì)圖9 (a) 中4 塊獨(dú)立島嶼狀區(qū)域組成的曲面層進(jìn)行基于輪廓環(huán)的螺旋偏置路徑規(guī)劃時(shí), 由于這種路徑規(guī)劃的方式是首先獲取曲面層中一個(gè)點(diǎn), 然后遍歷與該點(diǎn)相連的所有三維離散點(diǎn), 進(jìn)而獲取到該點(diǎn)所在區(qū)域的邊界, 所以對(duì)于圖9 中無(wú)法提取統(tǒng)一的整體輪廓信息(4 個(gè)獨(dú)立子區(qū)域擁有各自邊界) 的曲面層, 螺旋偏置路徑只能識(shí)別到其中一個(gè)封閉的獨(dú)立子區(qū)域的邊界進(jìn)行規(guī)劃, 具體表現(xiàn)在圖9 (c) (d) 中。
由以上結(jié)果可以驗(yàn)證, 類(lèi)似于圖8 和圖9 特征的曲面不分區(qū)而直接進(jìn)行路徑規(guī)劃會(huì)出現(xiàn)以下問(wèn)題: (1)兩獨(dú)立跳轉(zhuǎn)區(qū)域之間存在連線(xiàn)的不合理性; (2) 所有區(qū)域無(wú)法完全識(shí)別。 因此, 對(duì)多個(gè)獨(dú)立子區(qū)域共同組成的曲面層進(jìn)行路徑規(guī)劃前需先進(jìn)行曲面分區(qū)處理。
如圖10 所示: 傳統(tǒng)的建立空間和平面關(guān)系的分區(qū)方式可以將多島嶼曲面層劃分為獨(dú)立的具有整體輪廓的子區(qū)域, 但是圖10 (a) 中待分區(qū)曲面經(jīng)過(guò)投影或映射至平面分區(qū)然后逆映射回曲面處理會(huì)得到圖10 (c)中結(jié)果, 同時(shí)對(duì)比圖10 (a) (c) 和圖10 (b)(d) 明顯看出: 兩獨(dú)立子區(qū)域相對(duì)于原曲面區(qū)域出現(xiàn)了信息缺失的問(wèn)題; 另外對(duì)比圖10 (a) 和圖10 (d)也可以看出: 分區(qū)后的子區(qū)域無(wú)法完整地重組回原曲面。 這種內(nèi)部信息缺失的問(wèn)題使路徑規(guī)劃過(guò)程中獲取路徑點(diǎn)信息不完整, 最終導(dǎo)致打印錯(cuò)誤。
如圖11—12 所示(圖11 屬于模型1 的兩層曲面, 圖12 屬于模型2 的兩層曲面), 不同顏色部分即為分區(qū)后的獨(dú)立子區(qū)域, 采用基于曲面特征信息分區(qū)的方法將已經(jīng)滿(mǎn)足路徑規(guī)劃條件的區(qū)域(擁有封閉輪廓環(huán)的單連通區(qū)域) 繼續(xù)進(jìn)行劃分(如圖11 (b)和圖12 (a) (b) 所示)。
圖11 基于曲面特征信息的分區(qū)(模型1)Fig.11 Partition based on surface feature information (model 1): (a) the 56th layer; (b) the 6th layer
圖12 基于曲面特征信息的分區(qū)(模型2)Fig.12 Partition based on surface feature information (model 2): (a) the 41th layer; (b) the 37th layer
當(dāng)繼續(xù)劃分的區(qū)域曲率變化較大或凹凸?fàn)钶^多時(shí), 劃分后的子區(qū)域(根據(jù)頂點(diǎn)曲率、 高斯曲率等曲面特征參數(shù)劃分) 中會(huì)出現(xiàn)內(nèi)部有多個(gè)孔的復(fù)連通區(qū)域(如圖11 (a) 的綠色部分: 這種復(fù)連通區(qū)域擁有一個(gè)封閉外輪廓以及若干內(nèi)輪廓, 基于輪廓環(huán)的路徑規(guī)劃無(wú)法識(shí)別多輪廓邊界的輸入, 所以需要進(jìn)一步分區(qū)處理), 此分區(qū)方法使得劃分后的子區(qū)域更加復(fù)雜而且數(shù)量更多, 反而不利于路徑規(guī)劃的完成。
可見(jiàn), 傳統(tǒng)的2 類(lèi)分區(qū)方式存在劃分子區(qū)域不合理、 子區(qū)域部分點(diǎn)面信息丟失等問(wèn)題, 因此用作機(jī)械臂3D 打印中曲面路徑規(guī)劃前的分區(qū)處理方式均不合適。
分區(qū)是為了達(dá)到正確規(guī)劃路徑的目的, 需要考慮劃分后子區(qū)域的完整性以及合理性, 因此采用文中提出的分區(qū)方式對(duì)由若干獨(dú)立子區(qū)域組成的曲面層進(jìn)行處理。 由于模型1 中的曲面層曲率變化更為明顯而且處理起來(lái)相對(duì)復(fù)雜, 因此可以更好地證明分區(qū)算法的通用性, 所以選用模型1 中的兩層曲面進(jìn)行仿真分析, 并使用不同的路徑規(guī)劃方式驗(yàn)證算法的適用性。
如圖13—14 (選用曲率更為明顯的模型1 中的2個(gè)曲面層) 所示: 圖13 是經(jīng)過(guò)文中提出的分區(qū)方式處理后進(jìn)行的路徑規(guī)劃, 對(duì)比圖8 (c) (d) 可以明顯看出: 消除了兩獨(dú)立區(qū)域之間的連線(xiàn)并且填充路徑更加完整; 對(duì)比圖14 和圖9 (d) 可以看出: 經(jīng)過(guò)分區(qū)處理后的獨(dú)立子區(qū)域被全部識(shí)別, 并進(jìn)行了完整的路徑規(guī)劃。
圖13 分區(qū)后直線(xiàn)路徑規(guī)劃Fig.13 Straight path planning after zoning: (a) original surface layer; (b) partition; (c) subregion; (d) path planning; (e) planning completed
圖14 分區(qū)后螺旋偏置路徑規(guī)劃Fig.14 Spiral offset path planning after zoning:: (a) surface layer; (b) partition; (c) regional 1 planning; (d) regional 2 planning; (e) regional 3 planning; (f) regional 4 planning
另外對(duì)比圖13 與圖10 (a) (b) 、 圖11 (a) 以及圖14 與圖11 (b) 可以看出: 多島嶼曲面經(jīng)過(guò)基于廣度優(yōu)先搜索的分區(qū)方法可以有效地將具有單獨(dú)輪廓的獨(dú)立子區(qū)域劃分出來(lái), 并且可以提取各自的輪廓信息以及內(nèi)部信息以處理路徑規(guī)劃。 通過(guò)路徑規(guī)劃結(jié)果也可以明顯看出: 經(jīng)過(guò)文中算法處理后的區(qū)域相對(duì)于傳統(tǒng)方法處理后的區(qū)域在合理性以及完整性上都得到了保證。
由于篇幅限制, 文中只對(duì)模型2 進(jìn)行打印實(shí)驗(yàn)。對(duì)于模型2 而言, 無(wú)論如何放置, 傳統(tǒng)的三軸打印機(jī)在懸空部分都會(huì)產(chǎn)生支撐, 影響打印的效率, 如圖15 所示。
圖15 傳統(tǒng)三軸3D 打印支撐示意Fig.15 Traditional three-axis 3D printing support: (a)the right side of model 2; (b) the opposite side of model 2
當(dāng)使用機(jī)械臂3D 打印時(shí), 通過(guò)曲面的切片方式以及機(jī)械臂的多自由度協(xié)作可以有效地避免支撐的產(chǎn)生, 將3D 打印切片生成的對(duì)應(yīng)G 代碼文件導(dǎo)入仿真軟件中預(yù)覽, 具體如圖16 所示。 在確保分區(qū)及路徑規(guī)劃無(wú)誤后, 將G 代碼文件導(dǎo)入機(jī)械臂3D 打印機(jī)執(zhí)行。 執(zhí)行實(shí)驗(yàn)中使用SR20?1700 型號(hào)的STEP 工業(yè)臂,成型材料使用碳纖維, 選用的線(xiàn)寬和層高均為1 mm,內(nèi)部填充比例為0.8, 絲材半徑為0.875 mm, 打印噴頭溫度為235 ℃, 底床溫度為75 ℃, 具體打印過(guò)程如圖17 所示, 打印完成如圖18 所示。 最終實(shí)驗(yàn)成功執(zhí)行。
圖16 曲面層仿真打印路徑Fig.16 Print path surface layer simulation: (a) the 37th layer of model 2; (b) the 41th layer of model 2
圖17 機(jī)械臂3D 打印過(guò)程Fig.17 3D printing process of manipulator
文中提出了面向機(jī)械臂3D 打印的曲面多島嶼復(fù)雜模型的分區(qū)方法, 實(shí)現(xiàn)了對(duì)多島嶼曲面層模型的完整打印。 相比傳統(tǒng)分區(qū)思想無(wú)法解決點(diǎn)面信息丟失以及分區(qū)后子區(qū)域不適用于路徑規(guī)劃的問(wèn)題, 通過(guò)廣度優(yōu)先搜索思想的分區(qū)方法將若干獨(dú)立子區(qū)域分別提取劃分, 保證分區(qū)的合理性, 并且通過(guò)原始曲面層的點(diǎn)面對(duì)應(yīng)關(guān)系對(duì)提取的面片信息進(jìn)行更新, 保證分區(qū)后子區(qū)域點(diǎn)面信息的完整性。 通過(guò)大量的實(shí)例測(cè)試以及仿真對(duì)比, 驗(yàn)證了文中分區(qū)方法的有效性。 此方法為利用多自由度機(jī)械臂實(shí)現(xiàn)擁有多島嶼曲面層特征的復(fù)雜模型3D 打印提供了基礎(chǔ)。 但是, 通過(guò)分析發(fā)現(xiàn)文中方法對(duì)曲面層中帶有孔洞的復(fù)連通區(qū)域分區(qū)效果并不理想, 后續(xù)將通過(guò)孔洞識(shí)別與邊界劃分相結(jié)合的方式進(jìn)一步研究復(fù)雜曲面的分區(qū)。