Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

3.3 运动学奇点

雅可比把「速度层面」的问题变成了线性代数,而线性代数最典型的病症——矩阵退化——也随之显形:某些位形下 JJ 不满秩,末端在特定方向上「给不出速度」、「解不出关节速度」,甚至「解出无穷多」。这些位形就是运动学奇点。本节对应录播 1:23:42–1:48:42(含四段工业机器人奇异规避视频)。

3.3.1 定义、后果与分类

定义 3.3.1 · 运动学奇点

使雅可比矩阵 J(q)J(q) 不满秩的位形 qq 称为运动学奇点(kinematic singularity);方阵情形判据为

det⁡J(q)=0.\det J(q)=0 .

奇点值得认真研究,理由可以归为三类(1:24:45–1:26:06):

  1. 运动退化:处于奇点时,无法让末端执行器朝任意方向运动——两关节轴平行(即两列线性相关)时,垂直于该平面方向的速度分量「造不出来」;
  2. 解不唯一:逆解可能存在无穷多组——拟人臂的腕点落在肩轴线上时,无论肩关节角怎么转,该点都不动;
  3. 邻域放大(三类中最危险):奇点邻域内,操作空间里很小的速度可能要求关节空间给出极高的速度(课堂视频:机械臂翻越奇异位形时关节瞬间加速)。

开课引子(0:19:28–0:23:40):「雅可比矩阵其中有两列线性相关——一列可以用另一列线性表出——那么雅可比矩阵就退化了,秩肯定是降秩的,就奇异了。对机器人来说,两列线性相关就说明这两个关节轴平行了。」行与列的分工:行对应操作空间速度分量,列对应关节(0:21:46)。

按出现位置分类(1:26:24–1:28:02):

边界奇点 vs 内部奇点
  • 边界奇点(boundary):机械手完全伸出或缩回、抵达工作空间边界时产生,「不表示真正的缺陷」,使用时避开边界即可;
  • 内部奇点(interior):出现在可达工作空间内部,「比较严重」,轨迹规划时一定要避开。它的产生条件是两个或两个以上运动轴线共线——共线即对应两列线性相关,这正是它不同于边界奇点、可能引起严重问题的原因。

3.3.2 例 3.2(原书):两连杆平面臂

腕点位置可以直接由几何写出(结构简单就不走 DH 通式——只有复杂的三维结构才必须用通用方法,1:28:19):

pw=[a1c1+a2c12a1s1+a2s12]⟹J=[∂pw∂ϑ1∂pw∂ϑ2]=[−a1s1−a2s12−a2s12a1c1+a2c12a2c12]p_w=\begin{bmatrix}a_1c_1+a_2c_{12}\ a_1s_1+a_2s_{12}\end{bmatrix} \qquad\Longrightarrow\qquad J=\begin{bmatrix}\dfrac{\partial p_w}{\partial\vartheta_1}&\dfrac{\partial p_w}{\partial\vartheta_2}\end{bmatrix} =\begin{bmatrix}-a_1s_1-a_2s_{12}&-a_2s_{12}\ a_1c_1+a_2c_{12}&a_2c_{12}\end{bmatrix}

det⁡J=(−a1s1−a2s12)(a2c12)−(−a2s12)(a1c1+a2c12)=a1a2(s12c1−s1c12)=a1a2sin⁡ϑ2.\det J=(-a_1s_1-a_2s_{12})(a_2c_{12})-(-a_2s_{12})(a_1c_1+a_2c_{12}) =a_1a_2(s_{12}c_1-s_1c_{12})=a_1a_2\sin\vartheta_2 .

例 3.2(原书)· 两连杆臂的奇点

det⁡J=a1a2 s2=0  ⟺  s2=0  ⟺  ϑ2=0 或 π\det J=a_1a_2\,s_2=0\iff s_2=0\iff\vartheta_2=0\ \text{或}\ \pi

  • 与 ϑ1\vartheta_1 无关:转肩不改变奇异性(1:29:35);
  • ϑ2=0\vartheta_2=0:臂伸直(工作空间边界);ϑ2=π\vartheta_2=\pi:臂折回——都是边界奇点;
  • 代入 ϑ2=0\vartheta_2=0 验证(1:29:58):两列分别变为 [−(a1+a2)s1(a1+a2)c1]\begin{bmatrix}-(a_1+a_2)s_1\\ (a_1+a_2)c_1\end{bmatrix} 与 [−a2s1a2c1]\begin{bmatrix}-a_2s_1\\ a_2c_1\end{bmatrix}——二者共线,比例系数为 (a1+a2)/a2(a_1+a_2)/a_2;秩由 2 降为 1,末端沿径向的速度分量不可产生(该方向「不可控制」)。

det⁡J\det J 的形状值得直接看图:它只依赖肘角 ϑ2\vartheta_2,按正弦振荡,在伸直与折回两处过零——「离奇点多远」一眼可读。

两连杆臂 det J 随肘角的变化 横轴为肘角 ϑ2 从 0 到 2π,纵轴为 det J 除以 a1a2(即 sin ϑ2)的正弦曲线;在 0、π、2π 三处过零对应臂伸直与折回的边界奇点,在 π/2 处取最大值对应最灵活位形。 det J = a1a2 sin ϑ2:只看肘角(与肩角 ϑ1 无关) ϑ2 det J/(a1a2) π/2:最灵活(det 最大) 3π/2:反向最灵活 ϑ2 = 0:伸直 ϑ2 = π:折回 2π:伸直 外边界 内边界 红区:两列近共线,径向速度不可产生 曲线对任何肩角 ϑ1 都一样——「转肩不改变奇异性」(1:29:35);正弦过零即两列共线(例 3.2)
例 3.2 的行列式曲线(本教程绘):det⁡J=a1a2sin⁡ϑ2\det J=a_1a_2\sin\vartheta_2 与肩角无关、随肘角正弦振荡;零点在伸直(ϑ2=0,2π\vartheta_2=0,2\pi,外边界)与折回(ϑ2=π\vartheta_2=\pi,内边界),峰值在 ϑ2=±π/2\vartheta_2=\pm\pi/2——「离奇点多远」就是 ∣sin⁡ϑ2∣|\sin\vartheta_2| 离 0 多远,这正是 3.5 节可操作度 w(q)=det⁡(JJT)w(q)=\sqrt{\det(JJ^T)} 的平面特例。

上一张图是一条静态曲线;「离奇点多远」还能看得更立体。下面的操作台把 ∥ve∥=Jq˙, ∥q˙∥≤1|v_e|=J\dot q,\ |\dot q|\le1 的末端速度集(一个椭圆)叠加在速度平面上:拖动肘角 ϑ2\vartheta_2,看椭圆如何随 det⁡J\det J 缩水、在奇异位形压扁成线段;再拖转肩角 ϑ1\vartheta_1,验证「转肩只把整幅图旋转」。

两连杆臂可操作度椭圆操作台 左图为俯视的两连杆臂与可达工作空间圆环;右图为末端速度集椭圆,随关节角实时变形,接近奇异位形时沿径向压扁成线段。 臂(俯视,a1 = 1,a2 = 0.8) 末端速度集 { J·q′ :‖q′‖ ≤ 1 } x y 径向 vx vy σ1 = + σ2 = + det J = + 扁率 σ2/σ1 = + σ 与扁率只依赖肘角 ϑ2——转肩 ϑ1 只把整幅图旋转(对照上图 det J 曲线);w = σ1σ2 = |det J| 即 3.5 节的可操作度
可操作度椭圆操作台(本教程绘):右图是把关节空间单位球 ∥q˙∥≤1\|\dot q\|\le1 经 JJ 映到速度平面的像——半轴即奇异值 σ1,σ2\sigma_1,\sigma_2,w=σ1σ2=∣det⁡J∣=a1a2∣sin⁡ϑ2∣w=\sigma_1\sigma_2=|\det J|=a_1a_2|\sin\vartheta_2|(例 3.2 与 3.5.1 可操作度的平面实例)。ϑ2→0,π\vartheta_2\to0,\pi 时 σ2→0\sigma_2\to0:椭圆沿径向压扁成线段,「径向速度不可产生」从一句话变成看得见的形状。

平面两连杆只是最简单的特例。更一般的六轴机械手,奇点按结构分成三类——腕奇点、肘奇点、肩奇点;下图把它们各自「坏」在哪里一次看清,也提前为 3.3.3 的解耦判定做铺垫。

三类奇点的几何图像:腕、肘、肩 左图两个腕关节轴共线导致自由度丢失;中图臂完全伸直使腕心落在可达边界;右图腕心落在第一关节轴上使第一关节失去作用。 ① 腕奇点 ϑ5 = 0 或 π 轴 4 轴 6(与之共线) 关节 4 与关节 6 的轴重合 绕它们的转动效果等价 ⇒ 少一个定向自由度 det J22 ∝ s5 = 0 ② 肘奇点 ϑ3 = 0 或 π 腕心 臂完全伸直(或折回):肩—肘—腕共线 腕心落在可达工作空间边界上 径向只能向里、不能向外(s3 = 0) ③ 肩奇点 a2c2 + a3c23 = 0 轴 1 腕心 腕心落在第一关节的轴上 绕轴 1 转不改变腕心位置 第一关节暂时失去作用 三类奇点都是结构的几何属性:换算法、换精度都躲不掉,只能靠规划绕开或在结构上避免。
三类奇点都是结构的几何属性,不是数值问题(本教程绘):① 腕奇点——两个腕关节轴共线,绕它们的转动等价,丢掉一个定向自由度;② 肘奇点——臂完全伸直(或折回),腕心落在可达工作空间边界,径向只能向里;③ 肩奇点——腕心落在第一关节轴上,绕该轴转不改变腕心位置。三者分别对应 det⁡J22∝s5\det J_{22}\propto s_5、det⁡J11\det J_{11} 的 s3s_3 因子、(a2c2+a3c23)(a_2c_2+a_3c_{23}) 因子(定理 3.3.A)。

3.3.3 奇点解耦:腕 + 臂分开判

六自由度机械手的 6×66\times6 行列式直接展开并不现实,于是又一次请出与逆运动学闭合解同源的技巧——球形腕解耦(定理 2.12.B 的前提在这里复用)。

定理 3.3.A · 奇点解耦

对「臂(关节 1…n−31\dots n-3)+ 球形腕(关节 n−2…nn-2\dots n)」构型,把微分运动学的参考点从末端挪到腕中心 pwp_w,雅可比分块化为下三角:

[p˙wωe]=[J110J21J22][q˙aq˙w],det⁡J=det⁡J11⋅det⁡J22\begin{bmatrix}\dot p_w\\ \omega_e\end{bmatrix}=\begin{bmatrix}J_{11}&0\\ J_{21}&J_{22}\end{bmatrix}\begin{bmatrix}\dot q_a\\ \dot q_w\end{bmatrix}, \qquad\det J=\det J_{11}\cdot\det J_{22}

J11J_{11}(3×33\times3)只含臂关节,J22J_{22}(3×33\times3)只含腕关节。奇点判定拆成两个三阶行列式。

为什么可以挪参考点(课堂问答的核心,1:32:40、1:38:15–1:43:03)

运动学奇点是机械结构固有的特性,与坐标系建在哪里无关——所以完全可以为了简化计算而重新选参考系(取在腕中心),使 J12=0J_{12}=0。但代价是:这个下三角矩阵不再提供关节速度与末端执行器速度之间的关系(参考点已经不是末端了)。因此这种建法只能用于奇点分析,不能用来表示末端的位姿与速度,也不能拿去做逆解。整个技巧的合法性来源,正是这一条:「结构上的奇点与参考点选取无关」。

分块之后,腕与臂的奇点可以分开判定:腕的问题只涉及 J22J_{22},臂的问题只涉及 J11J_{11}。腕奇点(1:35:29):三个腕关节全是转动关节,J22J_{22} 的三列形如 zn−2×(⋅)→z_{n-2}\times(\cdot)\to 角速度行恰为 zn−2,zn−1,znz_{n-2},z_{n-1},z_n,故

det⁡J22=(zn−2×zn−1)⋅zn∝s5⟹s5=0  ⟺  ϑ5=0 或 π\det J_{22}=(z_{n-2}\times z_{n-1})\cdot z_n\propto s_5 \qquad\Longrightarrow\qquad s_5=0\iff\vartheta_5=0\ \text{或}\ \pi

ϑ5=0\vartheta_5=0 时,腕关节 4 与 6 的轴共线:转 ϑ4\vartheta_4 与转 ϑ6\vartheta_6 效果相同,绕垂直于该轴方向的角速度自由度丢失(1:35:55)——这是典型的内部奇点,轨迹规划时必须避开。

再看臂:臂奇点即 det⁡J11=0\det J_{11}=0。以拟人臂 + 球形腕为例,沿用 3.2.2 的 DH 约定,可写出腕中心线速度块的行列式(该式在 3.2.2 已推、make verify 已验):

det⁡J11=det⁡JP=−a2a3 s3 (a2c2+a3c23)(与 ϑ1 无关;教材未编号式,见 3.3.3 节)\det J_{11}=\det J_P=-a_2a_3,s_3,(a_2c_2+a_3c_{23})\qquad(\text{与}\ \vartheta_1\ \text{无关;教材未编号式,见 3.3.3 节})

  • 肘奇点 s3=0s_3=0(ϑ3=0\vartheta_3=0 伸直 / π\pi 折回):属于边界奇点,与两连杆平面臂(例 3.2)在概念上完全一样——臂展达到极限,径向速度造不出来(1:43:11);
  • 肩奇点 a2c2+a3c23=0a_2c_2+a_3c_{23}=0:腕中心恰好落在 z0z_0 轴上(pwp_w 的 x,yx,y 分量同时为零)。此时 JJ 的第一列 z0×(pw−p0)=z0×pw=θz_0\times(p_w-p_0)=z_0\times p_w=\theta 整列为零——无论肩关节转多快,腕点纹丝不动;相应地,逆运动学无穷多解(ϑ1\vartheta_1 任取),沿该方向的运动不可行(1:44:31–1:46:03)。
工程规避(课堂视频,1:46:24–1:48:42)

大族机器人演示了腕 / 肩 / 肘三类奇异点,其自研力控算法「可阻止机械臂进入奇异点位置」。Doosan 协作机器人则给出两种方式:变速度(Variable Velocity,在奇点附近自动降速)与自动规避(Auto Avoidance——不严格遵循设定轨迹,在奇点附近容忍较大的轨迹跟踪误差)。

默写点 · 合上书再写(主动回忆)

先不看正文与速查卡,默写下面几条,再展开核对;写不出来,就说明这一节还没真正「拿走」。

  1. 奇点的定义是什么?三类后果各是什么?
  2. 写出 det⁡J=det⁡J11det⁡J22\det J=\det J_{11}\det J_{22} 的成立条件与适用边界。
  3. 球腕奇点、肘奇点、肩奇点各对应哪个条件?
核对

det⁡J(q)=0\det J(\boldsymbol q)=0。三类后果:① 末端在某些方向失去运动能力;② 逆解无解或无穷多解;③ 邻域内关节速度趋于无穷(J−1=adj⁡J/det⁡JJ^{-1}=\operatorname{adj}J/\det J)。

条件是带球形腕(三轴交一点)的机械手,JJ 呈 [J11 0; J21 J22][J_{11}\ 0;\ J_{21}\ J_{22}] 的块三角。边界:它只保行列式,用于奇点分析——不能拿去做逆解或速度控制(不保「末端」语义)。

球腕 s5=0s_5=0(ϑ5=0,π\vartheta_5=0,\pi);肘 s3=0s_3=0;肩 a2c2+a3c23=0a_2c_2+a_3c_{23}=0(腕点落在第一关节轴上)。

3.3 小结与常见错误

  • 一条主线:det⁡J=0\det J=0(列退化 ⇔ 轴共线)→ 三类后果(退化 / 无穷解 / 邻域放大)→ 方阵直接算(两连杆 a1a2s2a_1a_2s_2)→ 六轴球腕解耦(det⁡J11det⁡J22\det J_{11}\det J_{22})→ 腕 s5s_5、臂(肘 s3s_3 / 肩「腕点落轴」)。
  • 解耦只管奇点:参考点挪到腕中心后矩阵不再是「末端速度映射」,做速度传递必须换回末端参考。
常见错误清单 · 自查三条
  1. 把奇点当「数值 bug」——奇点是结构的几何属性(轴共线 / 腕点落轴),换算法、换精度都躲不掉,只有规划绕开或结构上避免;
  2. 用解耦矩阵做逆解 / 速度控制——它只保行列式,不保「末端」语义(定理 3.3.A 的适用边界);
  3. 忘了「邻域」二字——det⁡J≠0\det J\neq0 但很小时 J−1J^{-1} 元素已经巨大,边界奇点附近的关节速度放大同样要规划规避。