本文是筆者在學習這篇論文時的筆記,僅供參考,如需學習,請閱讀論文原文獻。
這篇文章主要介紹了一種新的打印填充路徑 -- 連通的費馬螺旋(Connected Fermat Spirals),多數情況下路徑連續、低曲率。介紹了該算法的具體實現,然后從打印時間、急轉彎個數以及打印質量方面對比本算法與傳統的算法,證明了該方法的優勢所在。
打印路徑的不連續性或者是多輪廓性(discontinuity or contour plurality)會影響噴嘴的開閉,從而影響打印質量和精度;尖銳的轉彎和拐角(sharp turns and corners)會減慢打印速度、降低填充質量;
路徑填充算法
Zigzag是目前最普遍的打印方法,但是它有許多的急轉彎,對於邊界復雜或者空心的形狀,這個缺點會非常明顯。
輪廓平行算法由等間距的平行線組成,可以避免過多的急轉彎,但是它導致了較多的輪廓並且輪廓之間不相連。
Hilbert Spiral 通過彎曲保持空間遍歷的局部性,然而CFS為保持平滑性盡量避免彎曲。
螺旋填充,對於簡單圖形來說,是一個連續的曲線;但是對於復雜的圖形來說,會造成許多的pocket,如下右圖(a)。這些包均不相連從而導致了多路徑。
費馬螺旋由兩個相互交織的子螺旋線組成,一個向內,一個向外。
費馬螺旋有一下三個優點:
1)與輪廓平行類似,費馬螺旋只在中心處有一個急轉彎
2)一些費馬螺旋可以連續填充2D區域;傳統的螺線要么向內,要么向外,費馬螺旋既向內又向外,可以在邊界處會合。
3)費馬螺旋的起止結點可以在邊界處任意選取,便於螺線之間的連接。
連通的費馬螺旋算法:
1.將輸入區域分解成幾個子區域,每個區域可以由一條費馬螺旋填充。起止點在邊界上緊挨着。
2.遍歷子區域,將子區域的起止點相連接,形成一條連續的螺線。
3.進一步的優化以提高平滑性以及空間間隔。
CFS不一定能完全覆蓋2D的區域,也不一定具有傳統算法所有的優勢。
背景及相關內容
背景:最近,提升3D打印的外形以及內部構造非常熱門,提升物理穩定性、結構強度、打印的外形、節省材料、適應有限的打印量(improve physical stability [Prevost et al. 2013], structural strength [Stava et al. 2012; ´ Hildebrand et al. 2013; Lu et al. 2014], or appearance [Zhang et al. 2015] of the print, to save material [Vanek et al. 2014b; Hu et al. 2014], and to adapt to the limited print volume [Luo et al. 2012; Vanek et al. 2014a; Chen et al. 2015; Yao et al. 2015])
這部分主要介紹了填充路徑連續以及平滑的重要性、噴嘴結構的構造以及優化填充路徑的方法。
填充路徑連續性:在開啟噴嘴的時候,由於液體的可壓縮性,會導致少填充或過填充,造成表面填充不均與影響視覺效果,或者內部不均勻影響結構的強度;關閉噴嘴的時候,由於關閉開關與停止噴墨的時間間隔難以控制,導致填充不均勻。因此,應該最大化填充路徑的連續性。
填充路徑幾何性:急轉彎會導致更多的加速或者減速,以及更多的填充不均勻,從而影響打印時間以及質量。
方向平行VS邊緣平行:zigzag屬於方向平行類,contour-parallel屬於邊緣平行類,它有更順暢的轉彎和邊界,但是有高輪廓性,二者的結合可能會更好,但是連續性有待商榷。
螺旋填充路徑:在pocket中應用螺旋較多,但它缺少方向偏差(direction bias),連續性有待優化
空間填充曲線:SFC(Space Fill Curves)指填充2D區域的連續的路徑。廣泛應用在圖像解碼,迷宮設計。但是在路徑填充中很難實現,急轉彎比較多。
迷宮:迷宮也是一種空間填充,本算法也是一種空間填充,只是產生的結果更加的平滑,有更少的急轉彎。
域分解:
連續可填充形狀:
螺旋、費馬螺旋和螺旋性
首先介紹了輪廓平行,然后轉化成螺旋,最后轉化成費馬螺旋。
邊界等值的輪廓平行:由間距相等、各不相連,分別平行於邊界的線組成
螺旋與螺旋性:通過打斷然后重新組合兩個相鄰的等值線,可以組合成螺旋線,但是有許多包的等值線就不能打斷重新組合成一條連續的螺旋線,稱之沒有螺旋性。
費馬螺旋:具有可螺旋性的螺旋曲線能被轉化成費馬螺旋,並可以任意的選取費馬螺旋的起止點(未完待續…詳細的還沒明白)
連通的費馬螺旋填充
這一部分主要描述了如何利用本算法為任意的單一連通2d區域R構造一個連續的CFS填充路徑。關鍵是恰當地重組曲線集合和由區域邊界通過歐幾里德距離轉化過來的ISO-contour。在一個pocket中,rerouting產生一個費馬螺旋。在pocket之間或接近分枝的區域,rerouting會連接曲線。
給定路徑填充的寬度w,w描述ISO-contour之間的距離,我們使用clipper算法在R上為ISO-contour構建一個集合L。我們以 Ci,j來索引一個ISO-contour,i表示它到區域邊界 的距離
,j是所有具有相同的距離i的iso-contours的索引。比如
與
就屬於不同的pocket。通常情況下,我們令C1,1 是最外層的區域邊界
接下來我們構建一個spiral-contour tree,節點是iso-contours,與其他iso-contours的帶權連接。這個樹是一個自底向上的不斷遞歸重組contours的過程。
構造樹:
我們首先連接連續的iso-contours,比如以Ci,j 和在一個最初的圖中,我們定義一個由 Ci,j 到
的連接線段滿足。
d(p,c)表示從點p到contour上所有點的距離,片段
由這兩個ios-c之間所有可能的重組的點組成。如果它 不為空的話我們就在圖上在, Ci,j 和
之間添加一個邊,這個邊的權重是
的長度。一個長的連接片段有可能形成一個長的,低曲率的路徑,所以最好不要這樣的連接片段上重組。
初始圖構建完成后,我們就完成了最小權重生成樹,螺旋輪廓樹, 是樹的根
樹的節點有兩種情況,一種連接到形成螺旋區域的iso-c上的有小於或等於2的度,如圖中R0,R1,……,R4由第一種節點組成。 第二種節點的度大於2,在上圖(b)中藍色的節點,並且他們與分支iso-c連接在一起。這樣的iso-contour為螺旋區域或者其他的第二類結點提供一個接口。
重組:
為了獲得一個全局連續的路徑,我們以自底向上的方向重組iso-c,從葉節點最后到根節點。有兩種重組的操作。第一種是螺旋區域連接iso-c,將他們連成首尾緊鄰的單一的費馬螺旋。這一部分在section3的后邊,如下圖所示
第二個操作就是將起止點與最近的第二種類型的iso-c上的點,如圖灰色點
盡可能的,重組的點被重復使用,來避免產生新點來代替急轉彎。
曲線優化:
目前所獲得的是全局連續的,並且覆蓋了輸入區域R,但是它只是 連續,而且可能在spacing上非常不均勻。在后期過程中,我們會局部的優化它的fairness和spacing。當前的曲線是首先采用自適應曲率采樣的,以確保在曲率較大出有更多的采樣點。優化函數是三個term的加權和:
1. the first term penalizes large perturbations 波動
2. the smoothing term is defined by a chord-length weighted 1D discrete Laplacian平滑項由一個弦長為1D的拉普拉斯算子定義
3. the spacing term keeps shortest distances between adjacent curve segments close to a fixed, pre-defined patch spacing空間項保持相鄰曲線間的最短距離接近於事先規定的spacing
優化前后的結果對比如下所示:
結果對比
在同等的條件下(a RepRap Prusa i3 FDM 3D printer with firmware Marlin 1.1.0- RC)實驗對比
凹陷以及空心情況下 zigzag VS contour-paraller 通過pocket的數目,急轉彎數目,重組點的數目,打印時間等進行衡量優劣。
分別為zigzag contour-paralle CFS的路徑數目以及急轉彎(小於30%的圓)的個數
Number of tool path segments (#seg) and percentage of sharp turn points (%st),
which we explain in the text, for conventional zigzag (Z), contour-parallel (C), and
our CFS fills (F). The 10 shapes are from the last two rows of Figure 8.
相較於另外兩種方法,CFS只有一條路徑,急轉彎的個數也相對較少。
We report the number of pockets (#P) and the number of rerouting points (#R) of the tool
paths. For running times, we report time needed for rerouting to generate the initial
connected Fermat spirals (CFSt) and time for curve optimization (OPt), as well as the total.
All running times are in seconds.
Estimated over- and under-fill rate comparisons on the four shapes from Figure 11.
Top: Before and after curve optimization.
Bottom: comparison between the three fill methods zigzag (Z), contour-parallel (C), and CFS.
(smoothing)平滑會增加空隙以及少填充,優化(smoothing and spacing)會增加少填充,減少過填充,使得更加均勻的填充。
結論、限制以及展望
FDM熔融沉積制造:有兩個噴嘴,一個用於沉積制造,一個用於支撐材料。這樣制造的物件,垂直於切面的方向不夠堅固
附錄:
這一部分主要是從三個方面來通過計算優化曲線
- the magnitude of the perturbations
- smoothness potential
- spacing after smoothing
對這三個方面分別定義一個計算公式,然后最終的優化函數就是
利用高斯-牛頓方法對該函數進行優化。
為了制定曲線優化的目標函數,我們通過基於曲率的采樣方式來離散化輸入的曲線,這樣可以在高曲率的地方有更多的采樣點。 代表一組有序采樣點,我們的目標就是打亂這些點,使得路徑變得更smoother並且保留着規定的spacing,即相鄰兩個曲線間的距離應該被fix為d。
在此公式中,主要考慮三個目標。
- the magnitude of the perturbations
- smoothness potential
- spacing after smoothing
第一個目標是the magnitude of the perturbations,由最小二乘法計算
第二個目標叫是smoothness potential。我們修改了中點的定義使其反映密度的變化,確切的,我們定義
,然后smoothness potential定義為
(這里使用的是三點位於一條直線上的性質,如果三點位於一條直線上,那么該值為0)。
第三個目標是spacing after smoothing,為了實現這個目的,我們計算每一個點 在相鄰片段上最接近的點(或者叫footpoint)。對每一個footpoint有兩種情況:
1)footpoint落在邊 上,可以通過 Pj和Pj+1 計算出footpoint;
2)footpoint落在頂點上,並且Ti,j 小於等於0, Ti,j-1大於等於1
???
為了計算出在相鄰片段上的footpoint,我們選擇 ,不與已經存在的曲線相交。我們定義
,兩個集合分別包含所有的邊footpoint和頂點footpoint。我們將spacing-preserving定義為
將上述三個公式按權重求和,我們就求得了spacing-preserving path smoothing的優化。
在本次實驗中,我們令alpha=200,belta=1.0
優化:
目標函數(2)包含既包含一個離散的組件又包含連續的層面,即footpoint的集合和由曲線頂點位置確定的最小二乘。We propose to alternate between updating both,當曲線頂點的位置是固定的,我們就利用上述的方法計算footpoints。當footpoint是固定的時候,我們就應用高斯-牛頓方法去優化(2),根據它非線性最小平方。
高斯-牛頓優化為每一個頂點尋找一個局部偏移來優化(2),
是一個二次方數,,所以我們保留他們的表達式。
都是非線性的,我們via linear approximations derived from computing derivatives來近似他們。
令 ,那么 就近似為
然后
(5)
將(3)和(5)代入到(2)中,我們可以得到如下的d1……dn的最小二乘,
通過減少線性系統來最小化(6),假設為最佳位移,在下次迭代中頂點就換成
當
時我們就停止高斯-牛頓優化。一旦我們優化過頂點的位置,我們就重新計算起點。這個過程交換持續到當曲線位置上最大的displacement小於10的5次冪。在我們的實驗中,我們發現4-8次迭代就足夠了。