Skip to content
Sci&Eng Blog
Go back

基于费马螺线的路径生成

Updated:
Edit page

传统 FDM 切片软件中常见的 Gyroid 和 ZigZag 填充策略虽然成熟,但它们本质上是不连续的。在打印中导致的问题是,每一条扫描线的末端都需要执行回抽(Retraction),然后走空行程到下一条线的起点。 这种频繁的压力突变不仅浪费了大量时间,更会在转折点留下材料堆积形成的疵点,甚至在连续纤维打印中直接导致纤维断裂或排布混乱。

山东大学的赵海森在SIGGRAPH16上提出了基于费马螺线的方法生成连续路径。费马螺线的明显优势是100% 连续、没有空行程、让喷头从进入填充区域的那一刻起,直到填满整个多边形。在理想情况下,喷头可以永远处于匀速挤出状态。

Zhao Siggraph16
Photo by haisenzhao.github.io

原理

在极坐标系下,费马螺线也称平方根螺线,它的参数方程非常简洁:

r=aθr = a \sqrt{\theta}

其中 rr 是极径,θ\theta 是极角,aa 是控制螺旋间距的缩放参数。为了用费马螺线完美填充任意边界形状,需要考虑带有孔洞的任意多边形,因此我们无法直接套用 r=aθr = a\sqrt{\theta}。工程上最直观的思路是先定沉积间距,在几何上,沉积间距可以描述为轮廓线的偏移量。然后利用轮廓等距偏移 (Iso-Contour Offset),将最外层边界向内以恒定距离不断缩进,直到中心。一般喷嘴直径为 0.4mm,那么沉积间距就设置为0.4mm。

实现

简化实现

工程实现的时候,我们只考虑单一的闭区间内的连续路径生成。我们提供了sucam-core库,提供了简化实现的算法。

在开源算法库 sucam-core中,采用了基于深度优先搜索 (DFS) 和奇偶层交替的简化实现,步骤如下:

在这种方法中,In + Out 策略逻辑清晰,计算开销低(约 O(nlog⁡n)O(n \log n)),极易在 Python 中用常规数据结构实现。但简化构建影响了几何稳定性——在螺旋的最中心(In 切换到 Out 的转折点),以及不同 Pocket 之间的缝合处,容易出现曲率突变。虽然经过滤波处理,但在实际打印时,这类节点上仍需进行微小的加减速。

原文方法

赵海森等人的论文《Connected Fermat Spirals for Layered Fabrication》中的实现在几何上更加严谨,能够生成真正逼近理论费马螺线的平滑轨迹。文中给出了无向图向欧拉图的转化的方法,构建了轮廓间的连通图,还利用了图论中的完美匹配算法,确定了切割轮廓的最佳位置。

与我们的简化实现相比,算法并不是简单地把奇偶层分开,而是在选定的入口和出口处打断闭合轮廓,采用特定半径的过渡圆弧(或样条曲线)将第 NN 层平滑过渡到第 N+1N+1 层。全局 G1G^1 连续性:通过复杂的拓扑重连,算法保证了整条路径在任何转折点都具备 G1G^1 连续性(切线方向连续),完全消除了局部尖角。这种几何稳定的方法能够让硬件执行得更加流畅,避免了 sucam-core 简化方法中由于局部拓扑拼接引起的离散间距波动。

讨论

无论采用哪种连接拓扑,在离散化输出为点云路径时,都会面临点距不均的问题。特别是考虑到 3D 打印需要恒定的体积流率。

借助现代张量计算框架,我们可以对最终的螺线进行非线性优化。将数万个路径点作为可优化的张量,设定目标函数为相邻点间距的方差最小化与边界偏移惩罚,通过梯度下降算法,在极短时间内进行全局优化。

总体上来说,费马螺线可以作为 3D 打印工艺中的一种填充模式,通过起点和终点位置的一致、全局连续性,从根本上消除了回抽引起的工艺缺陷。它允许连续增强纤维在不断剪、不折损的情况下被顺滑铺放,从而使得各个方向的拉伸与抗剪切性能趋于均衡。

但费马螺线作为填充模式也存在问题,因为局部的路径方向不可控。而且在多层打印的时候,如果都采用一致的路径,会引起填充不均匀的问题。在实际打印连续纤维的时候,我们也会发现由于打印方向的变化,连续纤维会被拖拽的方向不同,产生不同的聚集情况。这些都是未来需要解决的问题。


Edit page
Share this post:

Previous Post
AstroPaper 5.0
Next Post
大尺寸增材制造(LFAM)