4、雅可比矩阵与力映射:关节空间与笛卡尔空间的力/力矩映射关系、静力变换

好,咱们接着聊。上一节我们把雅可比矩阵讲成了速度的“翻译官”,它能把关节速度映射成末端速度。但你可能已经猜到了——既然能映射速度,那能不能映射力呢?

答案是肯定的。而且这个映射关系,在机器人控制里,尤其是力控场景下,简直太重要了。我当年刚入行时,就被这个“力映射”绕晕过好一阵子。

4.1 从速度映射到力映射

先回忆一下速度映射公式:

v = J(q) · q̇

其中 v 是末端速度(笛卡尔空间),q̇ 是关节速度,J 是雅可比矩阵。

那么力映射呢?其实就一句话:力和速度是“对偶”的。什么意思?

你想想看,在关节空间里,我们用力矩 τ 去驱动关节;在笛卡尔空间里,我们用力和力矩 F 去推动末端。这两个量之间,正好是雅可比矩阵的转置关系:

τ = Jᵀ(q) · F

嗯,你没看错,是转置,不是逆矩阵。这个公式就是静力变换的核心。

核心公式:

关节力矩 τ = Jᵀ · F

其中 F = [fₓ, fᵧ, f_z, τₓ, τᵧ, τ_z]ᵀ,是笛卡尔空间末端受到的广义力(力和力矩)。

为什么会这样?我个人的理解是:功率守恒。关节空间的功率是 τᵀ · q̇,笛卡尔空间的功率是 Fᵀ · v。根据能量守恒,这两个功率必须相等。代入 v = J · q̇,就能推出 τ = Jᵀ · F。

4.2 静力变换的物理意义

说白了,这个公式告诉我们一件事:你想让末端产生多大的力,关节就得输出多大的力矩

我在项目中遇到过这样一个场景:我们要用协作机器人去拧一个螺栓。末端需要输出 10 N·m 的扭矩。但机器人关节的额定力矩是有限的。怎么办?

这时候就要用静力变换来算一算:

  1. 先确定末端需要的广义力 F = [0, 0, 0, 0, 0, 10]ᵀ(只有绕 Z 轴的扭矩)
  2. 根据当前位姿,计算雅可比矩阵 J
  3. 用 τ = Jᵀ · F 算出每个关节需要的力矩
  4. 检查是否超过关节额定值

结果发现,在某个姿态下,关节 2 的力矩需求超过了额定值。我们只好调整机器人的姿态,让关节 2 处于更省力的位置。

小技巧:

如果你想让末端输出一个很大的力,尽量让机器人处于“伸展”姿态。这时候雅可比矩阵的“力传递效率”最高。反之,如果机器人蜷缩着,同样的末端力可能需要关节输出更大的力矩。

4.3 力映射的几何解释

咱们再深入一点。雅可比矩阵的每一列,其实对应着每个关节对末端速度的贡献。那转置之后呢?

Jᵀ 的每一行,对应着每个关节力矩与末端广义力之间的关系。说白了,就是每个关节“分担”了多少末端力

举个例子,一个 2 自由度的平面机械臂:

  • 关节 1(肩关节)主要承担末端的“径向力”
  • 关节 2(肘关节)主要承担末端的“切向力”

这个直觉,在静力变换里是精确成立的。你可以自己算一算,看看 Jᵀ 的每一行是不是对应着这种“分担关系”。

4.4 静力变换的逆问题

有时候我们反过来想:已知关节力矩 τ,想知道末端能产生多大的力 F。这时候需要求逆:

F = (Jᵀ)⁻¹ · τ

但注意,J 不一定是方阵(比如冗余机器人),所以 (Jᵀ)⁻¹ 不一定存在。这时候要用伪逆:

F = (Jᵀ)⁺ · τ

其中 (Jᵀ)⁺ 是 Jᵀ 的伪逆矩阵。这个公式在力控里很常用,比如你想让末端输出一个特定的力,但关节力矩有限,就可以用这个公式来“分配”力矩。

注意:

静力变换只适用于静态或准静态情况。如果机器人运动很快,或者有较大的加速度,惯性力和科里奥利力就不能忽略了。那时候要用完整的动力学方程,而不是简单的静力变换。

我曾经在这个坑里摔过一次——做力控时直接用静力变换算力矩,结果机器人抖得跟筛子似的。后来才发现,是因为没考虑动力学效应。

4.5 力映射与奇异位形

还记得上一节讲的奇异位形吗?在奇异位形下,雅可比矩阵的秩会降低。这意味着什么?

意味着某些方向的力,关节根本“使不上劲”

举个例子,当机器人完全伸直时(肘关节 180 度),末端只能沿着手臂方向用力,垂直于手臂方向的力,关节几乎无法产生。这就是奇异位形在力域的表现。

所以,在做力控任务时,一定要避开奇异位形。否则你会发现:明明关节力矩已经很大了,末端就是使不上劲。

4.6 知识体系总览

下面这张图,把本章的核心逻辑串起来了:

雅可比矩阵与力映射知识体系 关节空间 关节速度 q̇ 关节力矩 τ (内部变量) 笛卡尔空间 末端速度 v 末端力 F (外部变量) 雅可比矩阵 J 速度映射 v = J · q̇ (运动学) 雅可比转置 Jᵀ 力映射 τ = Jᵀ · F (静力变换) 输入 输出 输入 输出 转置关系 核心逻辑:速度映射用 J,力映射用 Jᵀ,两者互为对偶

4.7 实际应用中的注意事项

最后,分享几个我在实际项目中积累的经验:

  • 力控频率要高:力映射的计算量不大,但力控环的频率至少要 1 kHz,否则容易震荡。
  • 注意坐标系:雅可比矩阵和力向量必须在同一个坐标系下定义。我见过有人把工具坐标系和基坐标系搞混,结果力控方向完全反了。
  • 考虑重力补偿:静力变换只算出了“净力矩”,实际关节力矩还要加上重力项。否则机器人会“往下掉”。
  • 滤波要小心:力传感器信号通常很 noisy,但滤波会引入延迟。延迟大了,力控就容易不稳定。这是个 trade-off。

避坑指南:

我曾经在一个项目中,直接用 τ = Jᵀ · F 算力矩,然后发给电机。结果机器人一启动就剧烈抖动。排查了半天,发现是力传感器的坐标系和雅可比矩阵的坐标系没对齐。后来加了一个旋转矩阵做坐标变换,问题就解决了。

所以,坐标系一致性是力控里最容易出错、也最容易忽略的地方。切记!

好了,这一节的内容就到这里。雅可比矩阵和力映射,说白了就是机器人在“关节世界”和“笛卡尔世界”之间的两座桥梁——一座走速度,一座走力。理解了这两座桥,你就能在力控的世界里自由穿梭了。