3. 运动学基础(下):逆运动学推导、工作空间分析、奇异性分析

好,咱们接着上回聊。上一节我们把Delta机器人的正运动学讲透了——给你三个关节角度,你能算出末端在哪儿。但实际干活的时候,我们往往是反过来:我知道要把东西抓到哪个位置,你告诉我三个电机该转多少度。这就是逆运动学要干的事。

说实话,逆运动学才是真正考验人的地方。我在做第一个Delta项目时,就因为在逆解里少考虑了一个分支情况,结果机器人在某个位置突然“抽风”……嗯,那画面我到现在还记得。今天咱们就把这块硬骨头啃下来。

3.1 逆运动学推导:从位置到角度

逆运动学的思路其实很直接。我们已知末端执行器的坐标 P(x, y, z),想求三个主动臂的角度 θ₁、θ₂、θ₃。

Delta机器人的结构是对称的,三个支链完全一样。所以我们可以分别对每个支链求解,最后得到三个独立的角度。

拿第一条支链举例。它的主动臂在基座上的安装点 A₁ 是固定的,末端执行器上的连接点 B₁ 随着P点移动。主动臂长度 L₁,从动臂(平行四边形结构)长度 L₂。

推导过程分三步:

  1. 建立几何关系:把空间问题投影到主动臂所在的平面内
  2. 列方程:利用余弦定理建立角度和位置的关系
  3. 求解角度:解出 θ₁

具体公式长这样(以第一条支链为例):

// 已知:末端位置 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机器人是并联结构,它的工作空间不是简单的球体,而是一个类似“倒扣的碗”的形状。

为什么会这样?你想想看,每个支链都有长度限制,三个支链的限制叠加起来,就形成了一个复杂的空间曲面。

工作空间分析通常分两步:

  1. 理论计算:根据几何约束推导边界曲面方程
  2. 数值仿真:用蒙特卡洛法随机采样,画出点云图

我一般用第二种方法,简单粗暴。代码大概长这样:

// 蒙特卡洛法生成工作空间
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 知识体系总览

为了让你对本章内容有个整体把握,我画了张图:

Delta机器人运动学基础(下) 逆运动学推导 工作空间分析 奇异性分析 几何关系 → 余弦定理 → 角度求解 多解处理:取“向下弯”姿态 边界曲面 → 蒙特卡洛仿真 影响因素:臂长、基座半径 边界奇异 / 内部奇异 / 并联奇异 雅可比矩阵 det(J) = 0 判断 核心目标:从位置反算角度 → 确定可达范围 → 避开奇异区域 三者结合,才能写出稳定可靠的控制程序

这张图把三个知识点的关系理清了。逆运动学是基础,工作空间告诉你边界在哪,奇异性告诉你哪里不能去。三者缺一不可。

3.5 实际应用中的注意事项

最后,分享几个我在项目中踩过的坑:

  • 逆解计算速度:高速分拣要求控制周期在1ms以内,逆解计算不能超过0.1ms。我一般用查表法+插值,把计算时间压到0.05ms以下。
  • 工作空间留余量:理论工作空间和实际能用的空间是两码事。我习惯在边界内缩10%作为安全区域。
  • 奇异区域标记:在离线编程阶段就把奇异区域标出来,运行时直接跳过。别等到机器动起来才发现。

一句话总结:逆运动学让你知道怎么走,工作空间告诉你哪里能走,奇异性分析告诉你哪里不能走。三个都搞明白了,Delta机器人的控制才算入了门。


公众号:蓝海资料掘金营,微信deep3321