3. 运动学基础(下):并联机构位置逆解(IK)与正解(FK)问题、数值求解方法(牛顿-拉夫逊法)、雅可比矩阵推导

各位工程师朋友,咱们接着聊运动学。上一节我们把并联机构的位置描述和坐标系变换理清了,这一节要啃硬骨头——位置逆解(IK)和正解(FK)。

说实话,我刚入行那会儿,觉得正解逆解不就是解方程嘛,有啥难的?直到第一次调试六自由度Stewart平台,电机死活走不到目标位姿,我才意识到:并联机构的运动学,远比你想象的更“拧巴”

3.1 位置逆解(IK):从“想去哪”到“腿多长”

位置逆解,说白了就是:已知动平台的目标位姿,求各驱动支链的长度(或关节角度)

对于串联机器人,逆解往往很复杂,多解甚至无解。但并联机构恰恰相反——逆解相对简单,正解才是老大难。为什么?因为并联机构的支链是独立的,每条腿的长度只取决于动、静平台两个铰点之间的空间距离。

我习惯把逆解拆成三步走:

  1. 确定静平台铰点坐标(在基坐标系下固定不变)
  2. 计算动平台铰点坐标(通过目标位姿的旋转矩阵和平移向量)
  3. 两点间欧氏距离,就是支链长度

举个6-UPS机构的例子。静平台铰点Ai坐标已知,动平台铰点Bi在动坐标系下的坐标也已知。给定目标位姿(旋转矩阵R,平移向量t),Bi在基坐标系下的位置就是:

B_i_base = R * B_i_local + t

然后第i条腿的长度:

L_i = || B_i_base - A_i ||

就这么简单?对,就是这么简单。但要注意:每条腿的长度必须满足机械限位。我在项目中遇到过,逆解算出来的腿长是负数——显然,机构已经“穿模”了。所以逆解之后一定要做可达性检查

核心要点:并联机构逆解是解析解,计算效率极高,适合实时控制。但前提是——你得保证目标位姿在机构的工作空间内。

3.2 位置正解(FK):从“腿多长”到“在哪”

正解就麻烦了。已知各支链长度,求动平台的位姿。这本质上是一个非线性方程组求解问题。

你想想看,6条腿的长度,对应6个未知数(3个位置+3个姿态角)。方程组长什么样?每条腿的长度方程都是一个非线性方程:

f_i(x, y, z, α, β, γ) = L_i^2 - || B_i_base - A_i ||^2 = 0

6个方程,6个未知数。理论上可解,但实际中——没有封闭解。这就是为什么并联机构的正解必须依赖数值方法。

我记得第一次手算正解,用了整整一个下午,算到怀疑人生。后来学乖了,直接上牛顿-拉夫逊法。

3.3 牛顿-拉夫逊法:数值求解的“老司机”

牛顿-拉夫逊法,说白了就是用切线逼近根。对于单变量函数,迭代公式是:

x_{k+1} = x_k - f(x_k) / f'(x_k)

对于多变量系统(比如我们的正解问题),就变成了:

X_{k+1} = X_k - J^{-1} * F(X_k)

其中J是雅可比矩阵,F是残差向量。

具体到并联机构正解,算法流程如下:

  1. 初始化:给一个初始位姿估计X0(通常用上一时刻的位姿)
  2. 计算残差:根据当前位姿,计算每条腿的理论长度,与实际长度做差
  3. 计算雅可比矩阵:残差对位姿变量的偏导数
  4. 求解线性方程组:J * ΔX = -F,得到位姿修正量ΔX
  5. 更新位姿:X = X + ΔX
  6. 判断收敛:如果||ΔX||小于阈值,停止;否则回到第2步

实战技巧:我建议用阻尼牛顿法(Levenberg-Marquardt),当雅可比矩阵接近奇异时,加一个阻尼因子防止迭代发散。曾经有一次,我的平台在奇异位形附近,普通牛顿法直接飞了,换成LM法才稳住。

代码实现(Python伪码):

def forward_kinematics(leg_lengths, initial_guess, max_iter=100, tol=1e-6):
    X = initial_guess
    for i in range(max_iter):
        F = compute_residuals(X, leg_lengths)
        J = compute_jacobian(X)
        delta = np.linalg.solve(J, -F)
        X = X + delta
        if np.linalg.norm(delta) < tol:
            return X
    raise Exception("未收敛,请检查初始值或机构参数")

3.4 雅可比矩阵推导:从“腿长变化”到“位姿变化”

雅可比矩阵,是连接关节空间速度操作空间速度的桥梁。对于并联机构,它描述的是:支链长度变化率与动平台速度之间的关系。

推导思路其实很直接。对每条腿的长度方程求时间导数:

L_i^2 = (B_i - A_i)^T (B_i - A_i)

两边对时间求导:

2 * L_i * dL_i/dt = 2 * (B_i - A_i)^T * dB_i/dt

而dB_i/dt = v + ω × r_i(其中v是线速度,ω是角速度,r_i是B_i相对于动平台质心的位置向量)。整理后得到:

dL_i/dt = u_i^T * v + (r_i × u_i)^T * ω

其中u_i是支链方向的单位向量。把所有6条腿的方程写在一起,就是:

dL/dt = J * [v; ω]

这个J就是运动学雅可比矩阵,维度6×6。

注意:并联机构的雅可比矩阵与串联机构有本质区别。串联机构的雅可比是从关节空间到操作空间,而并联机构正好相反——是从操作空间到关节空间。所以并联机构的奇异性分析,要看雅可比矩阵是否满秩。

我在调试高速并联机器人时,就遇到过雅可比矩阵接近奇异的情况。当时平台在某个位姿突然抖动,电机电流飙升。后来一查,是雅可比矩阵的条件数太大了,导致速度映射失真。解决办法是重新规划轨迹,避开奇异位形

3.5 知识体系总览

为了让你更直观地理解本章的知识结构,我画了一张图:

并联机构运动学核心知识体系 运动学基础 位置逆解 (IK) 已知位姿→求腿长 解析解,计算快 位置正解 (FK) 已知腿长→求位姿 数值解,需迭代 牛顿-拉夫逊法 迭代格式:X = X - J⁻¹F 阻尼LM法防发散 雅可比矩阵推导 dL/dt = J * [v; ω] 奇异性分析:det(J)=0

3.6 实战中的避坑指南

最后,分享几个我踩过的坑:

  • 初始值敏感:牛顿法对初始值很敏感。我建议用上一控制周期的位姿作为初始值,如果平台运动不快,通常一次迭代就能收敛。
  • 奇异位形:当雅可比矩阵接近奇异时,数值解会剧烈震荡。解决办法是在轨迹规划阶段就避开奇异区域,或者在迭代中加入阻尼项。
  • 实时性要求:正解计算必须在控制周期内完成(通常1ms以内)。我一般把雅可比矩阵的解析形式提前推导好,避免数值微分带来的计算开销。

个人习惯:我会在代码里加一个“收敛状态”标志位。如果连续3个周期都不收敛,就切换到开环控制模式,同时报警。这样至少保证平台不会乱跑。

好了,运动学基础就讲到这里。记住:逆解是送分题,正解是拉分题,雅可比是核心题。把这些吃透了,后面的动力学和控制学才能站得稳。


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