3. 运动学基础(下):逆运动学推导、工作空间分析、奇异性分析
好,咱们接着上回聊。上一节我们把Delta机器人的正运动学讲透了——给你三个关节角度,你能算出末端在哪儿。但实际干活的时候,我们往往是反过来:我知道要把东西抓到哪个位置,你告诉我三个电机该转多少度。这就是逆运动学要干的事。
说实话,逆运动学才是真正考验人的地方。我在做第一个Delta项目时,就因为在逆解里少考虑了一个分支情况,结果机器人在某个位置突然“抽风”……嗯,那画面我到现在还记得。今天咱们就把这块硬骨头啃下来。
3.1 逆运动学推导:从位置到角度
逆运动学的思路其实很直接。我们已知末端执行器的坐标 P(x, y, z),想求三个主动臂的角度 θ₁、θ₂、θ₃。
Delta机器人的结构是对称的,三个支链完全一样。所以我们可以分别对每个支链求解,最后得到三个独立的角度。
拿第一条支链举例。它的主动臂在基座上的安装点 A₁ 是固定的,末端执行器上的连接点 B₁ 随着P点移动。主动臂长度 L₁,从动臂(平行四边形结构)长度 L₂。
推导过程分三步:
- 建立几何关系:把空间问题投影到主动臂所在的平面内
- 列方程:利用余弦定理建立角度和位置的关系
- 求解角度:解出 θ₁
具体公式长这样(以第一条支链为例):
// 已知:末端位置 P(x, y, z)
// 基座安装点 A₁ 坐标:(R, 0, 0),R是基座半径
// 第一步:计算从动臂连接点 B₁ 的位置
// B₁ 在末端坐标系中的偏移是固定的,记作 (r, 0, 0),r是动平台半径
B₁x = x + r
B₁y = y
B₁z = z
// 第二步:计算主动臂末端到 B₁ 的向量
dx = B₁x - R
dy = B₁y - 0
dz = B₁z - 0
// 第三步:投影到主动臂平面(这里简化了,实际要考虑旋转矩阵)
// 得到平面内的距离 d
d = sqrt(dx² + dy² + dz²)
// 第四步:余弦定理求角度
// 主动臂长度 L₁,从动臂长度 L₂
cosθ₁ = (L₁² + d² - L₂²) / (2 * L₁ * d)
θ₁ = arccos(cosθ₁) // 注意取值范围
关键点:逆解通常有两个解(手臂“向上弯”和“向下弯”),我们一般取“向下弯”的那个,因为那是实际工作姿态。
我的经验:实际编码时,记得处理 arccos 的参数范围。如果 |cosθ₁| > 1,说明这个位置根本够不到——这就是工作空间边界。我在调试时经常用这个来判断轨迹是否合理。
3.2 工作空间分析:机器人能碰到哪儿?
工作空间,说白了就是机器人末端能到达的所有点的集合。Delta机器人是并联结构,它的工作空间不是简单的球体,而是一个类似“倒扣的碗”的形状。
为什么会这样?你想想看,每个支链都有长度限制,三个支链的限制叠加起来,就形成了一个复杂的空间曲面。
工作空间分析通常分两步:
- 理论计算:根据几何约束推导边界曲面方程
- 数值仿真:用蒙特卡洛法随机采样,画出点云图
我一般用第二种方法,简单粗暴。代码大概长这样:
// 蒙特卡洛法生成工作空间
for (i = 0; i < 100000; i++) {
// 随机生成三个角度
θ₁ = random(-30°, 30°) // 实际范围看具体机构
θ₂ = random(-30°, 30°)
θ₃ = random(-30°, 30°)
// 正运动学求末端位置
P = forwardKinematics(θ₁, θ₂, θ₃)
// 记录这个点
workspacePoints.push(P)
}
// 画出所有点,就能看到工作空间的形状
影响工作空间大小的因素有:
- 主动臂长度 L₁:越长,工作空间越大,但刚度会下降
- 从动臂长度 L₂:影响工作空间的高度范围
- 基座半径 R 和动平台半径 r:比值决定了工作空间的“胖瘦”
注意:工作空间不是越大越好。我见过有人为了追求大工作空间,把臂长加得很长,结果机器人抖得像筛糠一样。刚度和工作空间要平衡。
3.3 奇异性分析:机器人的“死穴”
奇异性,是每个做机器人控制的人都会遇到的噩梦。简单说,就是在某些位姿下,机器人会失去自由度或者无法控制。
Delta机器人有三种奇异:
| 奇异类型 | 发生条件 | 后果 |
|---|---|---|
| 边界奇异 | 末端在工作空间边界上 | 某个方向无法运动 |
| 内部奇异 | 从动臂与主动臂共线 | 关节速度突变,可能损坏机构 |
| 并联奇异 | 三个支链的约束线性相关 | 末端失去约束,完全失控 |
判断奇异的方法,是看雅可比矩阵的行列式。当 det(J) = 0 时,就是奇异位姿。
// 雅可比矩阵 J 把关节速度映射到末端速度
// 当 det(J) = 0 时,存在奇异
// 实际做法:在轨迹规划时,实时计算 det(J)
if (abs(det(J)) < epsilon) {
// 接近奇异,需要处理
// 可以:减速、调整轨迹、或者干脆报警
}
避坑指南:我曾经在一个高速分拣项目里,没做奇异检测,结果机器人在某个位置突然“卡住”,然后“砰”的一声——从动臂断了。后来我学乖了,在轨迹规划阶段就提前避开奇异区域,留出至少5°的安全余量。
3.4 知识体系总览
为了让你对本章内容有个整体把握,我画了张图:
这张图把三个知识点的关系理清了。逆运动学是基础,工作空间告诉你边界在哪,奇异性告诉你哪里不能去。三者缺一不可。
3.5 实际应用中的注意事项
最后,分享几个我在项目中踩过的坑:
- 逆解计算速度:高速分拣要求控制周期在1ms以内,逆解计算不能超过0.1ms。我一般用查表法+插值,把计算时间压到0.05ms以下。
- 工作空间留余量:理论工作空间和实际能用的空间是两码事。我习惯在边界内缩10%作为安全区域。
- 奇异区域标记:在离线编程阶段就把奇异区域标出来,运行时直接跳过。别等到机器动起来才发现。
一句话总结:逆运动学让你知道怎么走,工作空间告诉你哪里能走,奇异性分析告诉你哪里不能走。三个都搞明白了,Delta机器人的控制才算入了门。
公众号:蓝海资料掘金营,微信deep3321