[论文学习笔记]01一种轮廓平行扫描算法【3D打印路径规划】

零.论文来源

Y. Yang,et al.Equidistant path generation for improving scanning efficiency in layered manufacturing[J].Rapid Prototyping Journa,2002,Volume 8 · Number 1:30-37.

0.1 概述

轮廓平行扫描是尺寸精度最佳的3D打印路径规划算法之一,这种算法沿着切片轮廓平行的方向逐层向内扫描,最大程度上保证了轮廓的精度,避免了台阶效应产生的失真等问题。这篇论文的作者把自己的方法称为“Equidistant path generation method”。

一.算法描述

1.1 定义一些概念

1.简单多边形:非相邻边彼此不相交的多边形。
图1图1

图1引用自 Y. Yang,et al.Equidistant path generation for improving scanning efficiency in layered manufacturing[J].Rapid Prototyping Journa,2002,Volume 8 · Number 1:30-37.

   数学表示: e i ∩ e j = ∅ , ∀ j ≠ i + 1 e_i\cap e_j=\varnothing,\forall j\neq i+1 eiej=,j=i+1
          其中 e i 、 e j e_i、e_j eiej是多边形的边。

2.循环(cycle)和链(chain):
1)循环是闭合的边界曲线,由有序的、首尾相连的线段组成。
2)链是多边形边界曲线上的线段。

3.循环深度:循环深度指的是轮廓包围的循环层数,可以用来刻画轮廓的复杂程度,可以画出深度树(图2)来形象的表示。如图2、3所示。
在这里插入图片描述图2
在这里插入图片描述图3

图2、3引用自 Y. Yang,et al.Equidistant path generation for improving scanning efficiency in layered manufacturing[J].Rapid Prototyping Journa,2002,Volume 8 · Number 1:30-37.

4.内循环和外循环:循环数是偶数,则是外循环,否则是内循环。如图2、3所示。

5.链的方向:链的左侧为实体时,此时链的前进方向为正方向。
   显然,对于外循环,逆时针为正方向;对于内循环,顺时针为正方向。

1.2 域分区

(文章中并没有提及怎样进行分区处理,需要后续进行学习)
这是生成算法的预处理步骤,需要识别出切片层的实体部分(如图3中的阴影部分),这些部分将被填充,可以视为深度树中偶数的循环和其下一层循环之间的部分。

1.3 偏移量的生成

(文章中只有简单多边形的偏移量生成方法,没有提及曲线偏移量的生成方法,且在SLM过程中,也许会为了提高加工质量而更改加工参数,可能需要变距、变激光功率)

该算法的主要思想是等距离偏移轮廓。
链的直线可以用以下式子表示:
在这里插入图片描述
相邻两条边产生外偏移量的直线时会产生一个交点,如图4所示,该交点的方程为:
在这里插入图片描述
内偏移的交点方程为:
在这里插入图片描述
在这里插入图片描述图4

图4引用自 Y. Yang,et al.Equidistant path generation for improving scanning efficiency in layered manufacturing[J].Rapid Prototyping Journa,2002,Volume 8 · Number 1:30-37.

求解方程可得到交点坐标:
在这里插入图片描述
将得到的所有交点按顺序相连,可得到偏移的轮廓。

1.4 自交问题

如图5所示,某条轮廓偏移线可能出现自交的情况。
在这里插入图片描述图5

图5引用自 Y. Yang,et al.Equidistant path generation for improving scanning efficiency in layered manufacturing[J].Rapid Prototyping Journa,2002,Volume 8 · Number 1:30-37.

可以检查某条偏移线的交点,看是否发生了非相邻边相交的情况,并记录下来。
当发生自交时,说明这条偏移线中有小于最小可制造尺寸的位置,应当划分为多条闭合曲线,如图5所示。
用记录下来的交点之外的链构成的简单多边形循环当作新的独立的循环,交点之间的部分丢弃。

1.5 尖角

(感觉用处不大,没有细研究)
有一些尖角特征太细小了就是打印不出来,而且还会影响到下一次轮廓偏移,需要处理成比较平滑的轮廓。如图6所示。
在这里插入图片描述图6

图6引用自 Y. Yang,et al.Equidistant path generation for improving scanning efficiency in layered manufacturing[J].Rapid Prototyping Journa,2002,Volume 8 · Number 1:30-37.

1.6 外部轮廓和内部轮廓相交

如图7所示,有时会出现外部轮廓和内部轮廓相交的情况。
在这里插入图片描述图7

图7引用自 Y. Yang,et al.Equidistant path generation for improving scanning efficiency in layered manufacturing[J].Rapid Prototyping Journa,2002,Volume 8 · Number 1:30-37.

这两条循环将平面分为许多小区域,其中只有逆时针方向的封闭链是实体区域的边界,将这些链作为新的循环,最终可以形成如图8所示的效果。
在这里插入图片描述图8

图8引用自 Y. Yang,et al.Equidistant path generation for improving scanning efficiency in layered manufacturing[J].Rapid Prototyping Journa,2002,Volume 8 · Number 1:30-37.

1.7 空隙

这种方法会产生空隙,采用不同层之间不同的偏移量来解决。
(在slm中,相邻轨道之间有一部分重叠,所以空隙问题可能并不明显,并且这篇论文中对于空隙处理的方式太落后了,后续需要学习新的方法)

1.8 连续运动

在材料喷射类方法中,喷嘴路径需要连续。
(但是在粉末床类的技术中不需要,所以这部分问题不是问题)

二.评估

2.1 总路径长度

(这篇论文中材料喷射的喷头速度恒定,所以计算方法并不适用)
结论:由于这种算法有路径重叠的问题,所以总路径比平行扫描方式略长。但是由于本方法的曲率和拐角较少,不需要喷嘴减速到静止再加速运动,整体速度略快于平行扫描方式。

2.2 表面质量

由于平行扫描方式的所有扫描末端都集中在表面部分,导致表面质量要比本方法差。

三.我的问题

1.粉末床类的工艺和材料喷射类工艺有相似之处,也有不同之处,那么在算法上需要怎样改进以适应粉末床类的工艺?
2.每种规划路径都需要有一些优化目标,我的优化目标是什么呢?

### 关于3D打印路径规划算法的MATLAB实现 #### 1. 基本概念与方法概述 3D打印中的路径规划是指通过计算最优路径来指导打印机喷头移动,从而提高打印效率和质量。常见的路径规划算法包括A*算法、遗传算法以及蚁群算法等。这些算法可以用于确定最佳填充模式、支撑结构生成及多层打印顺序。 对于基于智能优化算法实现自动泊车路径动态规划的研究表明,在复杂环境中找到一条安全有效的行驶路线同样适用于3D打印领域内的轨迹设计[^1]。然而具体到3D打印的应用场景,则更侧重于如何减少材料浪费并加快成型速度。 #### 2. A*算法应用于3D打印路径规划 A*是一种启发式搜索算法,能够有效地解决最短路径问题。在3D打印过程中应用此算法可以帮助选择从起点到达终点的最佳路径,同时避开障碍物和其他已存在的实体部分。下面是一个简单的A*算法MATLAB代码示例: ```matlab function path = aStar(startPoint, endPoint, gridMap) openList = PriorityQueue(); closedList = []; % 初始化起始节点 startNode = struct('position', startPoint, 'gCost', 0, ... 'hCost', heuristic(endPoint, startPoint), 'parent', []); enqueue(openList, startNode); while ~isempty(openList) currentNode = dequeue(openList); add(closedList, currentNode); if isequal(currentNode.position, endPoint) break; end neighbors = getNeighbors(gridMap, currentNode.position); for i = 1:length(neighbors) neighborPos = neighbors(i).position; if containsPosition(closedList, neighborPos) continue; end tentativeGScore = currentNode.gCost + distanceBetweenNodes(currentNode.position, neighborPos); if ~containsPosition(openList.queue, neighborPos) || (tentativeGScore < getNodeFromOpenList(neighborPos).gCost) newNeighbor = struct('position', neighborPos,... 'gCost', tentativeGScore,... 'hCost', heuristic(endPoint, neighborPos),... 'parent', currentNode); enqueue(openList, newNeighbor); end end end path = reconstructPath(getFinalNode()); end ``` 该函数实现了基本的A*寻路逻辑,并可以根据给定的地图数据(`gridMap`)、起始位置(`startPoint`) 和目标位置 (`endPoint`) 来返回由一系列坐标组成的路径列表 `path`。 #### 3. 遗传算法优化3D打印路径 为了进一步提升3D打印过程中的性能表现,还可以采用遗传算法来进行全局性的参数调整。这种方法允许探索更大的解空间,并可能发现传统局部搜索难以触及的良好解决方案。以下是利用遗传算法求解3D打印路径的一个简化版本: ```matlab % 定义适应度函数 fitnessFunction = @(chromosome) evaluateFitness(chromosome, modelData); options = optimoptions('ga',... 'PopulationSize', 50,... % 种群大小 'MaxGenerations', 100,... % 最大迭代次数 'CrossoverFraction', 0.8); % 交叉概率 % 执行GA运算 [x,fval] = ga(fitnessFunction, numberOfVariables,options); disp(['Best fitness value found: ', num2str(fval)]); plot(x,'o-'); title('Optimized Path via Genetic Algorithm'); xlabel('Layer Index'); ylabel('X/Y Position'); ``` 上述代码片段展示了使用MATLAB内置工具箱中的遗传算法功能对特定模型的数据集执行优化操作的过程。这里假设已经定义好了评估个体优劣程度所需的辅助函数 `evaluateFitness()` ,它接收染色体编码形式表示的一条潜在路径作为输入,并输出相应的评分指标;而变量 `modelData` 则包含了待处理对象的具体几何特征描述信息。 #### 4. 结合线性规划(LP)的方法 考虑到实际生产环境里可能存在资源约束条件或者成本考量因素,因此也可以引入线性规划技术来构建更为精细复杂的决策框架。例如,在文献中提到过一种考虑火灾产物影响下的人流疏散路径规划方案就采用了类似的思路[^2]。虽然这里的应用场景有所不同,但是核心原理是可以借鉴过来用作改进现有3D打印路径规划策略的基础之一。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值