声明:文中所有观点仅代表个人见解,若有不妥之处欢迎指正。
这篇论文于2019年 被 SCI 2区 "IEEE Transactions on Automation Science and Engineering"录用,原文链接
目录
1.Overview
定义识别自支撑的函数及目标函数,为弱化自支撑的约束,方法中将自支撑的约束改为最大化悬垂区域面积的减少量。
通过均匀采样选取候选切割面,在剖分准则的约束下,通过束搜索,并引入渐进式放松法避免陷入局部最优,得到最优解。
对剖分完的模型,检测是否仍旧存在悬垂区域,若有,生成支撑结构。
2. Problem Statement
(1)识别是否可以自支撑
nf是面的法向,dπ 是打印方向,所以点乘的结果是两个向量夹角的余弦值(cos);αmax是可自支撑的最大角度,该角度是打印方向与面的夹角,判断角度大小,采用sin(αmax)来转换cos,当夹角小于αmax,则返回0;否则返回1,即为危险面(risky face)。
(2)目标函数
最小化risky face(危险面)面积
e是识别risky face,A(f)是计算risky face 面积
3. Approach 剖分方法
切割打印:按照切割顺序的逆序为打印的顺序
(1)候选切割面的选取
在模型的高斯球上均匀采样250个法向,对每个采样的法向量进行均匀移动,偏移量为1mm。
(2)剖分准则
Ⅰ:所有面都可自支撑,即目标函数
Ⅱ:为确保可打印性,为避免悬浮,要切割下来的部件与前一个部件(打印平面)相连。
Ⅲ:避免喷头与打印平面碰撞
按照平面切割的方法,其实已经保证了所有已经打印的部件都在下一个打印平面的下方,所以不需要判断喷头与其他部件的碰撞情况。
Ⅳ:切割下来的部件的体积尽可能大,即切割数量尽可能少
4. 优化
当满足以上准则时,考虑优化切割面已得到最优解
(1)贪心策略
对准则Ⅰ定义一个局部的目标函数减弱约束
评估危险面面积的减小量,使这个减小量最大
对于所有候选切割面,选取的标准是:
目标函数:带有无risky face 的约束
R是risky face 的面积。
若找不到解,目标函数改为:(去掉无risky face的约束)
(2)Beam-guided 搜索
这里将准则Ⅰ换成一个弱约束:同公式11,,最小化危险面面积。
并且为避免切割出太小的部件,切割操作要避免切割的子部件体积小于V(M)/w(w为用户自定义参数)
束搜索算法流程:
input: 网格模型M
获取候选切割面,并初始化b个空束,Bj = (null, null)(每一次切割出的两个部件),B1 = (M, null) 第一次切割为(完整模型,空)
重复以下操作:
for(所有的Bj):
当要切割的部件不为空时,遍历所有切割面,判断所有切割面切割的结果,(切割时遵循两个约束:体积超过最小体积阈值;部件之间有相连部分,即可打印),评估危险面面积的减小量,取最优
渐进式放松(避免局部最优):
上一步中从空束开始以最大限制的约束进行搜索,若束没被填满,则放松约束直到填满束(过程中满足约束的候选切割面如果切割出去的危险面越大,优先级越高)。
判断中止条件:
for(所有的Bj):
判断是否有违背约束的情况,若有则停止
重复上述操作直到模型分割完毕
5.Support Generation支撑结构生成
若分解后的模型仍旧存在危险面(悬垂区域),那么需要生成支撑结构支撑悬垂区域。
这里使用渐进式投影算法生成树状支撑。每次计算Mi的悬垂区域,向基面沿打印方向的反向投影,然后计算Mi+1,进行下一次投影。效果如上图b所示;具体过程如下图所示。
通过均匀采样策略,检测所有悬垂区域类型:悬垂点;悬垂边;悬垂面。
最理想的情况:支撑结构在当前模型子空间范围内,于基面接触且接触点较少。
将树状支撑结构的自支撑结构最大角度设置为30°。生成过程自上向下生成,相遇即融合。
树状支撑结构直径的确定:
每个子区域内的支撑结构拥有相同直径,||Vi(ci × g)||是支撑结构上端的扭矩,ci是重心,Vi是体积。
实验部分及结论部分参照论文,不做赘述。
Thanks for reading!