机器人学导论 · 交互式学习平台 · 第五课

08 雅可比与奇异Jacobian & Singularities — 列公式 · 物体雅可比 · 降秩

知识清单 K19–K22考试对应 2024 Q3(c)(d)体系 李泽湘 / MLS §3.4
08.0引言FROM JOINT RATES TO TIP VELOCITY

1 同样的关节速率,末端可能走完全不同的方向

想象你在示教器上让两个关节各转 11 rad/s,以为末端会沿某个方向匀速前进;换一个姿态,同样的关节速率却让末端几乎不动,或者猛地窜出去。原因很直接:末端速度不只取决于关节转多快,还取决于当前位形。把这两者的关系写成一个矩阵,就是雅可比:

Vs=Js(θ) θ˙.V_s=J_s(\theta)\,\dot\theta.

JsJ_s 是 6×n6\times n 的矩阵,nn 是关节数,66 是末端速度的六个分量。它随位形 θ\theta 变化;同一个机械臂,换个姿态,这个矩阵就换一套数。

2 名字的来历:每一列就是一个关节的贡献

多元微积分里,y=f(x)y=f(x) 的雅可比是偏导矩阵 ∂yi/∂xj\partial y_i/\partial x_j。这里 VV 的六个分量各自对 nn 个关节角求偏导,拼起来就是 JJ。所以第 ii 列的含义很直接:只有第 ii 个关节以单位速率转、其余关节不动时,末端产生的六维速度。换句话说,JJ 的每一列就是一个关节对末端速度的“贡献方向”,把所有列按关节顺序排好,就得到完整的雅可比。

3 本节要造的三件事

三件事:列公式、换系、找奇异
  • 列公式:不直接对 gg 求导,而是把每个关节旋量 ξi\xi_i 用前面关节的变换搬到当前位形,按列排成 JsJ_s。
  • 物体雅可比:同一组列在物体系里的版本 JbJ_b,与 JsJ_s 只差一次 Adgst\mathrm{Ad}_{g_{st}}。
  • 奇异:JJ 降秩的位形。末端某个方向动不了;考试要你把代数条件翻译成几何描述。

三件里,第一件是根:列公式写对了,后两件都只是换系和读秩。2024 Q3 的 (c)(d) 就是这三件事的组合。

4 前置:两条结论,一句话

04 给了关节旋量 ξi=(vi,ωi)\xi_i=(v_i,\omega_i) 与指数 eξ^iθie^{\hat\xi_i\theta_i};05 给了 Adg\mathrm{Ad}_g 和 Vs=AdgVbV_s=\mathrm{Ad}_gV_b。本节没有新的数学工具,只有一件事:把已有的旋量按列排成矩阵,再用 Ad\mathrm{Ad} 把整列从零位形搬到当前位形。记不清这两条,先回看 04.1 和 05.3。

08.1空间雅可比SPATIAL JACOBIAN

1 每列一个旋量:从零位形搬到当前位形

06 的指数积把整条臂写成 gst(θ)=eξ^1θ1⋯eξ^nθngst(0)g_{st}(\theta)=e^{\hat\xi_1\theta_1}\cdots e^{\hat\xi_n\theta_n}g_{st}(0),其中每个 ξi\xi_i 都是在零位形下量的关节旋量:方向是关节轴,位置是零位形下轴上的点。问题是,对于 i≥2i\ge2,当前位形下第 ii 根轴已经不在零位形的位置了,它的旋量也跟着变;变多少,只由它前面的 i−1i-1 个关节决定。

原因是关节 ii 的轴挂在它前面的连杆上。前面的关节动,会把整条子链(连同第 ii 根轴)刚体般地搬走;后面的关节 i+1,…,ni+1,\dots,n 动,不会挪动这根轴。所以第 ii 列只需要用前 i−1i-1 个关节的指数积去搬:

ξi′=Adeξ^1θ1⋯eξ^i−1θi−1 ξi.\xi_i'=\mathrm{Ad}_{e^{\hat\xi_1\theta_1}\cdots e^{\hat\xi_{i-1}\theta_{i-1}}}\,\xi_i.

这里的 Ad\mathrm{Ad} 就是 05.3 的坐标翻译器:它把零位形坐标下的旋量,翻译成当前位形坐标下的同一个旋量。把所有列按顺序排成矩阵,就得到空间雅可比:

Js=[ξ1′ξ2′⋯ξn′].J_s=\begin{bmatrix}\xi_1' & \xi_2' & \cdots & \xi_n'\end{bmatrix}.

第 1 列没有前序关节,所以 ξ1′=ξ1\xi_1'=\xi_1,永远是零位形的旋量。这条性质是验算的好工具:算完 JsJ_s,先看第 1 列是否还是原始旋量,再看第 2 列是否只含 θ1\theta_1。

暂停一下。如果只让第 2 个关节转,末端速度方向由哪一列给出?这一列和零位形的 ξ2\xi_2 差了什么?先写下答案,再看下一小节。

2 平面 2R:把第 2 列转一次

取一个最简单的例子:两根连杆都在 xyxy 平面内,关节轴都沿 zz。零位形下,第 1 根轴过原点,第 2 根轴过 (l1,0,0)(l_1,0,0),所以

ξ1=(0,0,0; 0,0,1),ξ2=(0,−l1,0; 0,0,1).\xi_1=(0,0,0;\,0,0,1),\qquad \xi_2=(0,-l_1,0;\,0,0,1).

第 2 列要被 eξ^1θ1e^{\hat\xi_1\theta_1} 搬一次。这是一个绕 zz 轴转 θ1\theta_1 的纯旋转;ω=(0,0,1)\omega=(0,0,1) 正好沿转轴,所以角速度部分不变,只有线速度部分被转动:

ξ2′=Adeξ^1θ1ξ2=[l1sin⁡θ1−l1cos⁡θ10001].\xi_2'=\mathrm{Ad}_{e^{\hat\xi_1\theta_1}}\xi_2 =\begin{bmatrix}l_1\sin\theta_1\\-l_1\cos\theta_1\\0\\0\\0\\1\end{bmatrix}.

于是

Js=[0l1sin⁡θ10−l1cos⁡θ100000011].J_s=\begin{bmatrix} 0 & l_1\sin\theta_1\\ 0 & -l_1\cos\theta_1\\ 0 & 0\\ 0 & 0\\ 0 & 0\\ 1 & 1 \end{bmatrix}.

前两行是线速度,最后一行是角速度,中间三行全零。平面机构只有 x,yx,y 平移和绕 zz 转动三个自由度,所以 6×n6\times n 的雅可比里只有这三行有内容;这不是巧合,是自由度被限制在平面内的结果。

走一组数:取 l1=1.3l_1=1.3、θ1=30∘\theta_1=30^\circ,第 2 列是 (1.3sin⁡30∘,−1.3cos⁡30∘,0,0,0,1)=(0.65,−1.126,0,0,0,1)(1.3\sin30^\circ,-1.3\cos30^\circ,0,0,0,1)=(0.65,-1.126,0,0,0,1)。代入 θ1=0∘\theta_1=0^\circ,第 2 列回到 (0,−1.3,0,0,0,1)(0,-1.3,0,0,0,1);代入 θ1=90∘\theta_1=90^\circ,它变成 (1.3,0,0,0,0,1)(1.3,0,0,0,0,1)。第 2 列的线速度部分,就是零位形下的 (0,−l1,0)(0,-l_1,0) 被 θ1\theta_1 旋转后的结果。

常见错误
  • 用整条臂的 gstg_{st} 去乘 ξi\xi_i。列公式只用前 i−1i-1 个关节的指数积;用 gstg_{st} 是 08.2 的物体雅可比换算,场景不同。
  • 让第 1 列也乘一遍。零位形没有前序关节,第 1 列就是 ξ1\xi_1 本身。
  • 把 Ad\mathrm{Ad} 当成 3×33\times3 旋转。旋量是六维的,Ad\mathrm{Ad} 是 6×66\times6;平面情形可以按 3×33\times3 块手算,但要知道自己乘的是哪个块。
  • 忘记 ξi\xi_i 是零位形量。当前位形的轴已经变了,不能直接把 ξi\xi_i 当第 ii 列。
离开本节前,合上文字回答
  • JsJ_s 的第 1 列为什么不含任何 θ\theta?
  • 第 ii 列为什么只受前 i−1i-1 个关节影响?
  • 平面 2R 的 JsJ_s 有几行非零,为什么?
08.2物体雅可比BODY JACOBIAN

1 同一组列,换到物体系

JbJ_b 的列是在物体系里表达的关节旋量。05.3 已经给出 Vs=AdgstVbV_s=\mathrm{Ad}_{g_{st}}V_b:同一个六维速度,从物体系读数换成空间系读数,用的就是 Adgst\mathrm{Ad}_{g_{st}}。这条关系对每一个关节单独成立,所以对整列也成立;把每一列都换过去,再按列排成矩阵,就得到

Js=Adgst Jb.J_s=\mathrm{Ad}_{g_{st}}\,J_b.

注意 Adgst\mathrm{Ad}_{g_{st}} 是 6×66\times6,它左乘整个 6×n6\times n 的 JbJ_b,不是只乘某一列;矩阵乘法逐列作用,所以“每一列都换系”和“整个矩阵换系”是同一件事。反过来,Jb=Adg−1JsJ_b=\mathrm{Ad}_{g^{-1}}J_s,因为 Adg−1=(Adg)−1\mathrm{Ad}_{g^{-1}}=(\mathrm{Ad}_g)^{-1}。

2 什么时候用哪个

题目问“空间速度/空间雅可比”就用 JsJ_s,问“物体速度/物体雅可比”就用 JbJ_b。两者只差一次换算,所以考试里先算一个,另一个用 Ad\mathrm{Ad} 换,比重新推一遍快,也不容易错。2024 Q2 的 (b)(c) 就是这种关系:算完 VsV_s,VbV_b 用 Adg−1\mathrm{Ad}_{g^{-1}} 一步得到;雅可比同理。

举个最小的数:取 gg 为绕 zz 轴转 90∘90^\circ、平移为零。如果 JbJ_b 的某一列是 (0,1,0,0,0,1)(0,1,0,0,0,1),那么 Adg\mathrm{Ad}_g 把线速度部分 (0,1,0)(0,1,0) 转成 (−1,0,0)(-1,0,0),角速度部分 (0,0,1)(0,0,1) 不变,所以 JsJ_s 的对应列是 (−1,0,0,0,0,1)(-1,0,0,0,0,1)。整列换系,逐列做,就是矩阵乘法。

暂停一下。如果题目问的是物体速度,应该先算 JsJ_s 还是 JbJ_b?为什么两者只差一次 Ad\mathrm{Ad}?先回答,再看下一节。

常见错误
  • 把 Js=AdgstJbJ_s=\mathrm{Ad}_{g_{st}}J_b 写成 Jb=AdgstJsJ_b=\mathrm{Ad}_{g_{st}}J_s。方向反了;从物体系到空间系用 Adg\mathrm{Ad}_g,换回去用 Adg−1\mathrm{Ad}_{g^{-1}}。
  • 把 Ad\mathrm{Ad} 乘在右边。JbJ_b 是 6×n6\times n,Ad\mathrm{Ad} 是 6×66\times6,只能左乘;写成 Jb AdJ_b\,\mathrm{Ad} 在 n≠6n\neq6 时连维度都不对。
  • 把 gstg_{st} 当成常数。它随位形变,所以 JsJ_s 和 JbJ_b 也随位形变。
  • 只换线速度、不换角速度。Ad\mathrm{Ad} 同时作用在两块上。
离开本节前,合上文字回答
  • 已知 JbJ_b,怎么得到 JsJ_s?换回去呢?
  • 为什么 Ad\mathrm{Ad} 要左乘整个 6×n6\times n 矩阵,而不是逐列乘一个 3×33\times3?
  • 如果题目问物体速度,先算 JsJ_s 还是 JbJ_b?为什么?
08.3奇异与可操作性SINGULARITIES

1 奇异 = JJ 降秩,不等于“不能动”

V=Jθ˙V=J\dot\theta 把关节速率映射成末端速度。如果 JJ 的列不满秩,就存在某个方向的速度,无论关节怎么转都产生不了——这个位形叫奇异位形。数学上是 det⁡J=0\det J=0(方阵)或秩小于该机构的最大可能秩(6R 是 6,平面 2R 是 2)。要注意,奇异不等于“末端完全不能动”:大多数方向仍然能动,只是少了一个方向;而且接近奇异时,某些关节速率会被放大成很大的末端速度,实际控制里要避开。

2 平面 2R:一个 sin⁡\sin 就够

末端位置 p=(l1cos⁡θ1+l2cos⁡(θ1+θ2),  l1sin⁡θ1+l2sin⁡(θ1+θ2))p=(l_1\cos\theta_1+l_2\cos(\theta_1+\theta_2),\;l_1\sin\theta_1+l_2\sin(\theta_1+\theta_2))。对两个角求偏导,拼成 2×22\times2 的线速度雅可比:

Jv=[−l1sin⁡θ1−l2sin⁡(θ1+θ2)−l2sin⁡(θ1+θ2)l1cos⁡θ1+l2cos⁡(θ1+θ2)l2cos⁡(θ1+θ2)],det⁡Jv=l1l2sin⁡θ2.J_v=\begin{bmatrix} -l_1\sin\theta_1-l_2\sin(\theta_1+\theta_2) & -l_2\sin(\theta_1+\theta_2)\\ l_1\cos\theta_1+l_2\cos(\theta_1+\theta_2) & l_2\cos(\theta_1+\theta_2) \end{bmatrix}, \qquad \det J_v=l_1l_2\sin\theta_2.

行列式只依赖 θ2\theta_2,所以奇异条件只有两个:θ2=0\theta_2=0(两连杆伸直)和 θ2=π\theta_2=\pi(折回重合)。这两处两列平行,末端只能沿垂直于臂的方向动,径向动不了。取 l1=1.3l_1=1.3、l2=1.0l_2=1.0:θ2=30∘\theta_2=30^\circ 时 det⁡Jv=0.65\det J_v=0.65;θ2=90∘\theta_2=90^\circ 时 det⁡Jv=1.3\det J_v=1.3;θ2→0\theta_2\to0 时 det⁡Jv→0\det J_v\to0。行列式的大小可以当作“离奇异有多远”的粗指标。

暂停一下。det⁡Jv\det J_v 只依赖 θ2\theta_2,那改变 θ1\theta_1 会不会让机器人接近奇异?先回答,再看下一节。

3 6R 的三类几何情形

考试要的是几何描述,不是代数条件。三类最常见:

  1. 两关节共轴:两根轴重合,两个关节产生同一个运动,秩少 1。答的时候要指出是哪两个关节。
  2. 三根平行轴共面:三列线性相关;臂展成一条直线时就是这种。答的时候要指出是哪三根轴、怎么共面。
  3. 四根轴汇交于一点:腕部的球腕在“手腕奇点”,两个转动退化成同一个。答的时候要指出汇交点。

答法固定三步:先写 det⁡J=0\det J=0 或“某两列线性相关”,再翻译成上面三种之一,最后指出是哪几个关节、哪几根轴。

4 可操作性:离奇异有多远

μ2=σmin⁡/σmax⁡\mu_2=\sigma_{\min}/\sigma_{\max} 是 JJ 的最小奇异值与最大奇异值之比。μ2=1\mu_2=1 说明各个方向的速度传递一样好;μ2→0\mu_2\to0 说明已经接近奇异——此时关节速度稍大,末端速度就可能爆掉,实际控制里要避开。它衡量的是速度传递的好坏,不是末端能不能到达某个点;可达性是另一件事,别混。

读图之前先猜一件事:把 θ2\theta_2 调到 0∘0^\circ,看 JvJ_v 的两列是否平行、det⁡\det 是否变成 0;再把 θ2\theta_2 调到 90∘90^\circ,看 det⁡\det 和 μ2\mu_2 怎么变。图里的红列是“只转关节 1”的贡献方向,灰列是“只转关节 2”的贡献方向;两列平行时,末端就少了一个可动方向。

常见错误
  • 只说“det⁡J=0\det J=0”不翻译成几何。题目要的是“哪几根轴怎么了”,不是一行代数。
  • 把奇异当成“末端不能动”。是一个方向不能动,其余方向仍能动;接近奇异时末端速度还可能很大。
  • 用 μ2\mu_2 判断“能不能到”。它衡量的是速度传递的好坏,不是可达性。
雅可比的列 · 何时两列平行Ctrl+拖 = 平移 拖末端 = 改 θ
θ₁ 35° θ₂ 60°
线速度雅可比 J_vdet

两列分别是“只转关节 1”“只转关节 2”时末端的单位速度方向。红 = 第 1 列,灰 = 第 2 列。

可操作性μ₂

—

离开本节前,合上文字回答
  • 平面 2R 的两个奇异位形分别是什么?用“两列平行”解释。
  • 奇异时末端是完全不能动吗?如果不是,是哪个方向动不了?
  • μ2\mu_2 衡量的是什么?它和“能不能到达”有什么区别?
08.4小测CHECK

规则。三题分别检查列公式、2R 的奇异条件、奇异方向的几何描述。每题做完立刻给反馈,解析里会指出该回看的小节;错一题就回去把那一段重读一遍,再回来做,不要只看答案。

Q1JsJ_s 的第 ii 列是?
Q2取 l1=1.3l_1=1.3、l2=1.0l_2=1.0、θ2=30∘\theta_2=30^\circ,平面 2R 的 det⁡Jv\det J_v 等于?
Q3θ2=0\theta_2=0(两连杆伸直)时,末端哪个方向动不了?
0/ 3 · 答对即刻计入