跳转至

雅可比矩阵与奇异性

引言

雅可比矩阵(Jacobian Matrix)是关节空间与笛卡尔空间之间的桥梁:它把关节速度映射为末端速度,也把末端受力映射为关节力矩。几乎所有需要"在笛卡尔空间下指挥机器人"的算法——速度控制、导纳与阻抗控制、数值逆运动学、力控装配、可操作度优化——都建立在雅可比矩阵之上。理解雅可比的秩何时下降,就理解了机器人为什么会在某些位形失去某个方向的运动能力。

定义

正运动学给出位姿关于关节变量的映射 。对时间求导,由链式法则得:

矩阵 即雅可比矩阵, 为任务空间维度(空间任务通常为 6), 为关节数。

雅可比是位形相关的:机器人在不同姿态下,同样的关节速度会产生完全不同的末端速度。这是它与线性系统中常数矩阵的根本区别。

末端速度 包含线速度与角速度两部分,相应地雅可比分为两块:

几何雅可比与解析雅可比

几何雅可比

几何雅可比(Geometric Jacobian)直接由机器人的几何结构构造,其角速度部分描述真实的空间角速度向量。对串联机械臂,第 列有简洁的几何意义:

转动关节

移动关节

其中 是关节 的轴方向(在基座坐标系中表示), 是关节 上一点的位置, 是末端位置。

这个公式的物理直觉非常清晰:转动关节以角速度 绕轴 转动,会在末端产生大小为 的线速度( 是从转轴到末端的位置矢量),同时贡献 的角速度;移动关节只贡献线速度,不产生角速度。

由于所有量都能从 正运动学 的中间结果直接读出,几何雅可比可以在一次正运动学遍历中顺带算完,代价极低。

解析雅可比

解析雅可比(Analytical Jacobian)定义为末端位姿参数化表示(如位置加欧拉角)对关节变量的偏导:

其中 是欧拉角。两者通过一个与姿态相关的变换矩阵关联:

关键区别:欧拉角的导数 不等于角速度 ,二者通过 联系,且 在万向节死锁处奇异。这意味着解析雅可比会引入表示奇异(Representation Singularity)——这种奇异不是机器人的物理特性,而是姿态参数化方式的产物。

工程结论:控制与规划一律使用几何雅可比。只有在目标函数直接以欧拉角表述时才用解析雅可比,且需要额外处理表示奇异。

静力学对偶

雅可比不仅描述速度映射,还描述力的映射。由虚功原理(Principle of Virtual Work),末端上的广义力 (力与力矩)与产生它所需的关节力矩 满足功率相等:

由于对任意 成立,得到静力学对偶关系

这一关系是力控制的理论基础,有两个方向的用途:

  • 力控:期望末端输出某个接触力时,用 换算出需要的关节力矩指令
  • 力估计:用关节电流估计出的力矩反推末端受力,实现无腕力传感器的碰撞检测与柔顺控制。反解需要 ,在奇异位形附近同样不可靠

注意速度映射与力映射的对偶性:速度的零空间对应力的可承受方向。在奇异位形处机器人失去某个方向的运动能力,恰恰意味着它在该方向可以承受无穷大的外力而不需要关节力矩——夹紧的老虎钳正是利用了这一点。

奇异位形

定义与后果

当雅可比矩阵的秩下降()时,机器人处于奇异位形(Singularity)。此时:

  • 末端失去至少一个方向的瞬时运动能力,无论关节如何运动都无法沿该方向移动
  • 逆问题 病态,接近奇异时求得的关节速度趋于无穷
  • 逆运动学的多组解在此处合并,穿越奇异点时构型可能突变
  • 静力学上,机器人在退化方向上可以承受任意大的外力

第二条是实际系统中最危险的:机器人以恒定末端速度接近奇异位形时,关节速度指令会急剧上升,触发速度限位保护而急停,或者在保护不足时造成剧烈甩动。

三种典型奇异

以六轴球形手腕机械臂为例:

腕部奇异(Wrist Singularity):关节 5 角度为 0 时,关节 4 与关节 6 的轴线共线,两个自由度退化为一个。末端在绕该共线轴的方向上仍能转动,但 的分配不确定;穿越时两者会反向高速旋转("腕部翻转")。这是工业现场最常遇到的奇异,也是示教时要求"避免让 J5 过零"的原因。

肘部奇异(Elbow Singularity):手臂完全伸直,腕心位于肩关节到肘关节的延长线上。此时末端已在工作空间边界,无法继续沿手臂方向外伸。

肩部奇异(Shoulder Singularity):腕心落在关节 1 的轴线上(通常是机器人正上方或正下方)。此时无论 取何值腕心位置都不变, 不确定;接近时 需要高速旋转以跟踪末端的横向移动。

度量指标

可操作度(Manipulability)由 Yoshikawa 提出,衡量机器人偏离奇异的程度:

其中 的奇异值。 即处于奇异位形。几何上 正比于可操作度椭球(Manipulability Ellipsoid)的体积——该椭球是单位关节速度球 在任务空间的像,其半轴长度为 、方向为对应的左奇异向量。椭球在某个方向被压扁,就表示该方向的运动能力弱。

下图以平面两连杆机械臂为例,给出三种位形下的可操作度椭球。手臂从弯曲到伸直的过程中,椭球逐渐被压扁,在完全伸展时退化为一条线段——此时末端沿手臂方向完全失去运动能力:

平面两连杆机械臂在三种位形下的可操作度椭圆

可操作度的缺点是量纲不一致(混合了长度与角度)且对整体尺度敏感,通常只用于同一机器人不同位形之间的比较。

条件数(Condition Number) 衡量各方向能力的均匀程度, 称为各向同性位形(Isotropic Configuration),是精度最优的位形。 即奇异。

最小奇异值 是最直接的实用指标:它给出末端在最弱方向的速度传递比,可以直接用作阻尼调节与降速的触发量。

处理奇异位形

策略 做法 适用场景
阻尼最小二乘 逆运动学,用 替代伪逆 通用,速度级控制的默认方案
奇异值滤波 SVD 分解后把过小的 置零或抬升 需要精细控制退化方向时
任务降维 主动放弃退化方向的跟踪,只跟踪可实现的分量 姿态精度要求不高的任务
零空间规避 冗余机械臂用零空间运动最大化可操作度 7 轴及以上机械臂
路径规划层规避 作为规划约束 离线规划、示教编程
关节空间过渡 检测到即将穿越奇异时,改用关节空间插值通过该段 工业机器人常用的实用手段

工业控制器普遍采用的做法是降速通过:监测 ,当其低于阈值时按比例降低末端指令速度,使关节速度保持在限值内。代价是末端不能保持恒定速度,但避免了急停。

代码实现

由正运动学构造几何雅可比

import numpy as np
from forward_kinematics import forward_kinematics, PUMA560_MDH


def geometric_jacobian(q, params=PUMA560_MDH):
    """由各连杆坐标系位姿构造 6xn 几何雅可比(全部为转动关节)

    注意改进 DH 约定下坐标系 {i} 的 z 轴即关节 i 的轴线,
    因此第 i 列(0 起始,对应关节 i+1)应取 frames[i + 1]。
    """
    T_end, frames = forward_kinematics(q, params)
    p_e = T_end[:3, 3]

    n = len(q)
    J = np.zeros((6, n))
    for i in range(n):
        T_i = frames[i + 1]             # 坐标系 {i+1},其 z 轴为关节 i+1 的轴线
        z_i = T_i[:3, 2]                # 关节轴方向(基座坐标系下)
        p_i = T_i[:3, 3]                # 关节轴上一点
        J[:3, i] = np.cross(z_i, p_e - p_i)
        J[3:, i] = z_i
    return J


def manipulability(J):
    """可操作度、条件数与最小奇异值"""
    s = np.linalg.svd(J, compute_uv=False)
    w = float(np.prod(s))
    cond = float(s[0] / s[-1]) if s[-1] > 1e-12 else np.inf
    return w, cond, float(s[-1])

数值验证雅可比

手写雅可比极易出错,有限差分是最有效的验证手段:

def numeric_jacobian(fk, q, eps=1e-6):
    """有限差分雅可比,用于验证解析实现"""
    from scipy.linalg import logm

    n = len(q)
    T0 = fk(q)
    J = np.zeros((6, n))
    for i in range(n):
        dq = np.zeros(n)
        dq[i] = eps
        T1 = fk(q + dq)

        J[:3, i] = (T1[:3, 3] - T0[:3, 3]) / eps
        dR = T1[:3, :3] @ T0[:3, :3].T
        so3 = logm(dR).real
        J[3:, i] = np.array([so3[2, 1], so3[0, 2], so3[1, 0]]) / eps
    return J


if __name__ == '__main__':
    q = np.array([0.2, -0.7, 0.9, 0.3, 0.5, -0.4])
    J_geo = geometric_jacobian(q)
    J_num = numeric_jacobian(lambda x: forward_kinematics(x)[0], q)
    print('最大偏差:', np.abs(J_geo - J_num).max())

    w, cond, s_min = manipulability(J_geo)
    print(f'可操作度 w = {w:.6f}, 条件数 = {cond:.2f}, sigma_min = {s_min:.6f}')

    # 腕部奇异:theta5 = 0
    q_sing = np.array([0.2, -0.7, 0.9, 0.3, 0.0, -0.4])
    w_s, cond_s, s_min_s = manipulability(geometric_jacobian(q_sing))
    print(f'腕部奇异处 w = {w_s:.2e}, 条件数 = {cond_s:.2e}')

笛卡尔速度控制(导纳形式)

def cartesian_velocity_control(q, v_desired, jac_fn,
                               dq_max, lam=0.05, sigma_thresh=0.02):
    """把期望末端速度转换为关节速度指令,带奇异降速保护"""
    J = jac_fn(q)
    s = np.linalg.svd(J, compute_uv=False)
    sigma_min = s[-1]

    # 接近奇异时按比例降低末端速度指令
    scale = min(1.0, sigma_min / sigma_thresh) if sigma_thresh > 0 else 1.0
    v_cmd = v_desired * scale

    # 阻尼最小二乘求解关节速度
    dq = J.T @ np.linalg.solve(J @ J.T + lam ** 2 * np.eye(6), v_cmd)

    # 统一缩放以满足关节速度限制,保持运动方向不变
    ratio = np.max(np.abs(dq) / dq_max)
    if ratio > 1.0:
        dq /= ratio
    return dq, scale

统一缩放而非逐关节钳位是关键细节:逐关节钳位会改变关节速度矢量的方向,从而使末端偏离期望的运动方向;统一缩放只降低速度大小,路径保持不变。

与其他主题的联系

  • 逆运动学:所有数值 IK 方法本质上都是对雅可比做局部求逆并迭代
  • 机器人动力学:雅可比出现在操作空间动力学方程中,操作空间惯量矩阵为
  • 控制:阻抗控制与导纳控制通过 在关节力矩层实现笛卡尔空间的期望阻抗
  • 运动规划:可操作度可作为轨迹优化的代价项,引导规划器远离奇异区域

参考资料

  1. Craig, J. J. (2005). Introduction to Robotics: Mechanics and Control (3rd ed.). Pearson Prentice Hall. — 第 5 章讲解雅可比与静力学。
  2. Yoshikawa, T. (1985). Manipulability of Robotic Mechanisms. International Journal of Robotics Research, 4(2), 3-9. — 可操作度概念的原始论文。
  3. Siciliano, B., Sciavicco, L., Villani, L. & Oriolo, G. (2010). Robotics: Modelling, Planning and Control. Springer. — 第 3 章系统讨论微分运动学与奇异性。
  4. Chiaverini, S. (1997). Singularity-Robust Task-Priority Redundancy Resolution for Real-Time Kinematic Control of Robot Manipulators. IEEE Transactions on Robotics and Automation, 13(3), 398-410.
  5. Lynch, K. M. & Park, F. C. (2017). Modern Robotics. Cambridge University Press. — 第 5 章以旋量方法推导雅可比。
  6. Khatib, O. (1987). A Unified Approach for Motion and Force Control of Robot Manipulators: The Operational Space Formulation. IEEE Journal of Robotics and Automation, 3(1), 43-53.