从‘单位向量’到‘内切圆’:用初中几何图解Grbl速度前瞻的核心算法
想象一下用圆规在纸上画连续折线时,如果转弯太急墨水会洇出纸面。Grbl的速度前瞻算法本质上就是在解决这个"墨水洇纸"问题——通过计算最优拐弯速度,确保机床运动既流畅又精确。本文将用初中几何知识,拆解这个藏在Grbl源码中的运动控制智慧。
1. 从折线运动到单位向量
当数控机床执行G代码时,刀具路径往往由无数微小线段组成。就像骑自行车急转弯会摔倒一样,刀具在路径拐点也需要合理减速。Grbl用三个关键向量构建运动模型:
- 当前路径向量:刀具正在移动的方向(pl.previous_unit_vec)
- 下一路径向量:即将转向的方向(unit_vec)
- 连接向量:两路径间的转折向量(junction_unit_vec)
这三个向量的关系,可以用教室墙角来类比:两面墙代表两条路径,墙角对角线就是连接向量。具体计算过程如下:
# 伪代码示例:连接向量计算 for 每个轴向: junction_cos_theta -= 前向量[轴] * 当前向量[轴] # 计算夹角余弦 junction_unit_vec[轴] = 当前向量[轴] - 前向量[轴] # 得到连接向量提示:junction_cos_theta的物理意义是两路径夹角的余弦值,1表示同向,-1表示反向,0表示垂直
2. 内切圆模型的几何构造
Grbl最精妙的设计是将抽象的向量计算转化为具象的内切圆模型。这个模型就像在两条路径间塞入一个尽可能大的圆:
| 几何要素 | 物理对应 | 计算公式 |
|---|---|---|
| 内切圆半径 | 拐角平滑度 | r = junction_deviation |
| 圆周速度 | 最大拐点速度 | v² = a·r |
| 半角正弦 | 路径转折剧烈程度 | sin(θ/2)=√[(1-cosθ)/2] |
当两条路径夹角为θ时,通过三角函数半角公式可以得到:
最大速度平方 = (加速度 × 偏差参数 × sin(θ/2)) / (1 - sin(θ/2))这个公式的几何意义是:路径转折越急(θ越大),允许的拐弯速度就越低。就像赛车手过发卡弯时必须大幅减速。
3. 四种典型拐角场景分析
通过改变θ角度值,我们得到不同运动场景下的速度限制:
零度夹角(几乎直线)
- 特征:cosθ ≈ 1
- 处理:保持最小安全速度
- 代码逻辑:
if(junction_cos_theta > 0.999999) speed = MINIMUM_JUNCTION_SPEED
锐角转弯(30°<θ<90°)
- 特征:0 < cosθ < 0.866
- 处理:按内切圆模型计算
- 关键参数:junction_deviation控制转弯平滑度
直角转弯(θ=90°)
- 特征:cosθ = 0
- 简化公式:v² = a·r (此时sin(θ/2)=√2/2)
180°调头(急转折)
- 特征:cosθ ≈ -1
- 处理:速度必须趋近于零
- 代码逻辑:
if(junction_cos_theta < -0.999999) speed = SOME_LARGE_VALUE # 实际会受物理限制
4. 参数调优的工程实践
junction_deviation参数就像赛车调校中的"转向灵敏度",需要平衡速度与精度:
雕刻精细图案:建议0.01-0.02mm
- 更小的内切圆半径
- 拐角更尖锐
- 速度损失更大
粗加工路径:可设0.05-0.1mm
- 更大的转弯半径
- 运动更流畅
- 可能损失拐角精度
实际调试时可以这样验证:
- 画一个20mm×20mm的正方形路径
- 观察不同参数下拐角处的速度变化
- 测量实际加工轮廓的圆角程度
5. 从几何到物理的完整推演
将整个速度前瞻算法总结为三个转换阶段:
向量阶段
- 输入:两条路径的单位向量
- 操作:计算点积和向量差
- 输出:夹角余弦和连接向量
几何阶段
- 输入:连接向量
- 操作:构造内切圆模型
- 输出:半角正弦值
物理阶段
- 输入:机床加速度参数
- 操作:应用圆周运动公式
- 输出:最大允许速度平方
这个过程中最易误解的是junction_deviation的物理意义——它实际上控制的是"弦高误差",即理论路径与实际圆弧路径的最大偏差值。