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.2 典型机械手结构的雅可比

几何雅可比的构造是一条流水线;这一节把这条流水线放到三种结构上试跑:三连杆平面臂(全转动、平面)、拟人臂(三转动、空间)和斯坦福机械手(五转一移、六自由度)。结构越复杂,越能显出「从 TT 矩阵读取 z,pz,p」的威力——斯坦福机械手的雅可比没有人愿意手推,实际全部由符号计算完成。录播 1:12:12–1:23:42(1:23:39「以上是重点中的重点」)。

方法 3.2.A · 雅可比计算的五步流程(三种结构共用)
  1. 按 DH 规则建立各连杆坐标系(第 2 章已练);
  2. 求解 DH 参数 ai,αi,di,ϑia_i,\alpha_i,d_i,\vartheta_i(每行 3 常 1 变,定义 2.8.3);
  3. 求 Aii−1A_i^{i-1} 与 Ti0=A10⋯Aii−1T_i^0=A_1^0\cdots A_i^{i-1}(每个中间 TT 都要保留);
  4. 从 Ti−10T_{i-1}^0 读 zi−1z_{i-1}(Ri−1R_{i-1} 第三列)与 pi−1p_{i-1}(第四列前三行);
  5. 按移动 / 转动列公式(定理 3.1.C)逐列组装 JJ。

在逐列组装 JJ 之前,值得先单独看一眼这两种「积木列」的几何(下图):转动列的速度来自叉乘,方向天然垂直于矢径;移动列的速度就是轴本身,不产生转动——所有结构的雅可比都由这两类列拼装而成。

几何雅可比的两类列:转动关节与移动关节 左图俯视:转动关节绕指出纸面的 z 轴旋转,末端速度等于角速度叉乘矢径,方向在平面内垂直于矢径。右图侧视:移动关节沿轴平移,速度沿轴方向,角速度为零。 逐列组装的两类积木 转动关节 i(俯视,zi−1 指出纸面 ⊙) 移动关节 i(侧视) pi−1,zi−1 ⊙ ϑ′i r = pe−pi−1 v = zi−1×r 转动列 = [ zi−1×(pe−pi−1) ; zi−1 ]:速度 ⊥ 矢径(平面内),随 r 增大而增大 zi−1 v = zi−1·d′i 滑鞍沿轴平移 移动列 = [ zi−1 ; 0 ]:只平移、不转动(ω = 0) 「锁死其余关节、单位速度驱动第 i 关节」:全部雅可比列都由这两类积木拼成
两类雅可比列的几何(本教程绘):转动列的速度项 zi−1×(pe−pi−1)z_{i-1}\times(p_e-p_{i-1}) 在俯视图里一目了然——永远垂直于矢径,离轴越远越大;移动列则只有平移项 zi−1z_{i-1},角速度行恒为零。「锁死其余关节、单位速度驱动第 i 关节」的逐列物理图像,见 3.1 的绿框图(定理 3.1.C);2.9 节中,各结构的 zi−1,pi−1z_{i-1},p_{i-1} 都能从中间 TT 矩阵直接读出,读出后逐列套用即可。

3.2.1 三连杆平面臂

三个转动关节,四个轴全部竖直且互相平行(平面结构);aia_i 即三根杆长,αi=di=0\alpha_i=d_i=0:

Aii−1(ϑi)=[ci−si0aicisici0aisi00100001],Ti0=A10⋯Aii−1A_i^{i-1}(\vartheta_i)=\begin{bmatrix}c_i&-s_i&0&a_ic_i\ s_i&c_i&0&a_is_i\ 0&0&1&0\ 0&0&0&1\end{bmatrix},\qquad T_i^0=A_1^0\cdots A_i^{i-1}

这几个量可以直读结构得到(不必乘出矩阵也能看出来):所有 zz 轴竖直平行,

z0=z1=z2=[0,0,1]T;p0=[0,0,0]T, p1=[a1c1,a1s1,0]T, p2=[a1c1+a2c12, a1s1+a2s12, 0]Tz_0=z_1=z_2=[0,0,1]^{\mathrm T};\qquad p_0=[0,0,0]^{\mathrm T},\ p_1=[a_1c_1,a_1s_1,0]^{\mathrm T},\ p_2=[a_1c_1+a_2c_{12},\ a_1s_1+a_2s_{12},\ 0]^{\mathrm T}

(c12=cos⁡(ϑ1+ϑ2)c_{12}=\cos(\vartheta_1+\vartheta_2),下同)。三列全部取转动列,叉乘按 [0,0,1]×[x,y,0]=[−y,x,0][0,0,1]\times[x,y,0]=[-y,x,0] 逐列算出:

J=[−a1s1−a2s12−a3s123−a2s12−a3s123−a3s123a1c1+a2c12+a3c123a2c12+a3c123a3c123000000000111]J=\begin{bmatrix} -a_1s_1-a_2s_{12}-a_3s_{123}&-a_2s_{12}-a_3s_{123}&-a_3s_{123}\ a_1c_1+a_2c_{12}+a_3c_{123}&a_2c_{12}+a_3c_{123}&a_3c_{123}\ 0&0&0\ 0&0&0\ 0&0&0\ 1&1&1 \end{bmatrix}

平面任务既不涉及 zz 向平动,也不涉及 x,yx,y 向转动,因此只取有效行(前两行 + 末行),得到 3×33\times3 任务雅可比(1:15:50「平面情形只取前两行;如需 ωz\omega_z 再加末行」):

Jˉ=[−a1s1−a2s12−a3s123−a2s12−a3s123−a3s123a1c1+a2c12+a3c123a2c12+a3c123a3c123111]\bar J=\begin{bmatrix} -a_1s_1-a_2s_{12}-a_3s_{123}&-a_2s_{12}-a_3s_{123}&-a_3s_{123}\ a_1c_1+a_2c_{12}+a_3c_{123}&a_2c_{12}+a_3c_{123}&a_3c_{123}\ 1&1&1 \end{bmatrix}

3.2.2 拟人臂

同样是三个转动关节,区别在于第一个关节带 π/2\pi/2 扭转(肩部),后两个关节的轴水平且互相平行:

iiaia_iαi\alpha_idid_iϑi\vartheta_i
10π/2\pi/20ϑ1\vartheta_1
2a2a_200ϑ2\vartheta_2
3a3a_300ϑ3\vartheta_3

A10=[c10s10s10−c1001000001],Aii−1=[ci−si0aicisici0aisi00100001] (i=2,3)A_1^0=\begin{bmatrix}c_1&0&s_1&0\ s_1&0&-c_1&0\ 0&1&0&0\ 0&0&0&1\end{bmatrix},\qquad A_i^{i-1}=\begin{bmatrix}c_i&-s_i&0&a_ic_i\ s_i&c_i&0&a_is_i\ 0&0&1&0\ 0&0&0&1\end{bmatrix}\ (i=2,3)

把三个变换连乘起来,逐一读出:

z0=[0,0,1]T,z1=z2=[s1,−c1,0]T (水平,随肩转动)z_0=[0,0,1]^{\mathrm T},\qquad z_1=z_2=[s_1,-c_1,0]^{\mathrm T}\ (\text{水平,随肩转动})

p0=p1=[0,0,0]T,p2=[a2c1c2, a2s1c2, a2s2]T,p3=p2+a3 [c1c23, s1c23, s23]Tp_0=p_1=[0,0,0]^{\mathrm T},\quad p_2=[a_2c_1c_2,\ a_2s_1c_2,\ a_2s_2]^{\mathrm T},\quad p_3=p_2+a_3,[c_1c_{23},\ s_1c_{23},\ s_{23}]^{\mathrm T}

「z1z_1 跟 z0z_0 就不一样了——z1,z2z_1,z_2 平行、都是水平的」(1:18:27)。逐列组装时,叉乘按 [s1,−c1,0]×[X,Y,Z]=[−c1Z, −s1Z, s1Y+c1X][s_1,-c_1,0]\times[X,Y,Z]=[-c_1Z,,-s_1Z,,s_1Y+c_1X] 进行;组装完成后会发现,六行中只有三行线性无关——秩最多等于列数 3,而 ωx,ωy\omega_x,\omega_y 两个分量经由 ϑ˙2,ϑ˙3\dot\vartheta_2,\dot\vartheta_3 耦合在一起,并不独立。于是经行变换取出「关节速度 → 末端线速度」的 3×33\times3 块:

Jˉ=[−s1(a2c2+a3c23)−c1(a2s2+a3s23)−c1a3s23c1(a2c2+a3c23)−s1(a2s2+a3s23)−s1a3s230a2c2+a3c23a3c23]\bar J=\begin{bmatrix} -s_1(a_2c_2+a_3c_{23})&-c_1(a_2s_2+a_3s_{23})&-c_1a_3s_{23}\ c_1(a_2c_2+a_3c_{23})&-s_1(a_2s_2+a_3s_{23})&-s_1a_3s_{23}\ 0&a_2c_2+a_3c_{23}&a_3c_{23} \end{bmatrix}

(注意第三行是余弦组合——该行在转写中一度被误读成正弦,本编按课件绿框、教材式 (3.37)–(3.38) 与数值差分三源核对后,采用余弦,见勘误 E3.1。)取行列式,并按第一列展开(c12+s12=1c_1^2+s_1^2=1 三次消去):

det⁡Jˉ=−a2a3 s3 (a2c2+a3c23)\det\bar J=-a_2a_3,s_3,(a_2c_2+a_3c_{23})

两个因子各自为零,正对应拟人臂的两类奇点:s3=0s_3=0(肘伸直 / 折回,边界奇点)与 a2c2+a3c23=0a_2c_2+a_3c_{23}=0(腕点落到 z0z_0 轴上,肩奇点)——与 3.3 的解耦分析逐条对应(习题 B2)。

为什么敢「丢三行」

雅可比的行对应操作空间的速度分量,列对应关节(0:21:46)。拟人臂只有 3 个自由度,在 6 维操作空间里至多张出 3 维子空间;因此丢掉相关的行并不损失信息,保留下来的三行(vx,vy,vzv_x,v_y,v_z)恰好构成「臂部」的有效映射。这一「按任务取行」的思想,到 3.4 的冗余分析里就是正式工具了。

3.2.3 斯坦福机械手

六个关节中只有关节 3 是移动关节,其余五个都是转动关节(臂部:肩摆 + 肘转 + 伸缩;腕部:三轴汇交):

iiaia_iαi\alpha_idid_iϑi\vartheta_i
10−π/2-\pi/20ϑ1\vartheta_1
20π/2\pi/2d2d_2ϑ2\vartheta_2
300d3d_3—(移动)
40−π/2-\pi/20ϑ4\vartheta_4
50π/2\pi/20ϑ5\vartheta_5
600d6d_6ϑ6\vartheta_6

要注意,六个相邻变换各不相同——「每个都不一样,不能用通式」(1:21:25):

A10=[c10−s10s10c100−1000001], A21=[c20s20s20−c20010d20001], A32=[10000100001d30001],A_1^0=\begin{bmatrix}c_1&0&-s_1&0\ s_1&0&c_1&0\ 0&-1&0&0\ 0&0&0&1\end{bmatrix},\ A_2^1=\begin{bmatrix}c_2&0&s_2&0\ s_2&0&-c_2&0\ 0&1&0&d_2\ 0&0&0&1\end{bmatrix},\ A_3^2=\begin{bmatrix}1&0&0&0\ 0&1&0&0\ 0&0&1&d_3\ 0&0&0&1\end{bmatrix},

A43=[c40−s40s40c400−1000001], A54=[c50s50s50−c5001000001], A65=[c6−s600s6c600001d60001]A_4^3=\begin{bmatrix}c_4&0&-s_4&0\ s_4&0&c_4&0\ 0&-1&0&0\ 0&0&0&1\end{bmatrix},\ A_5^4=\begin{bmatrix}c_5&0&s_5&0\ s_5&0&-c_5&0\ 0&1&0&0\ 0&0&0&1\end{bmatrix},\ A_6^5=\begin{bmatrix}c_6&-s_6&0&0\ s_6&c_6&0&0\ 0&0&1&d_6\ 0&0&0&1\end{bmatrix}

连乘 T10=A10, T20=A10A21, …, T60=A10⋯A65T_1^0=A_1^0,\ T_2^0=A_1^0A_2^1,\ \dots,\ T_6^0=A_1^0\cdots A_6^5,然后逐个读取;读取时优先利用结构特征,而不是硬算:

  • p0=p1=[0,0,0]Tp_0=p_1=[0,0,0]^{\mathrm T};p3=p4=p5p_3=p_4=p_5(腕中心,三腕轴汇交,与 2.12 解耦点同一位置);p6p_6 最复杂(含 d6d_6 工具偏置);
  • z0=[0,0,1]Tz_0=[0,0,1]^{\mathrm T};z1z_1 沿肩轴水平;z2=z3=[c1s2, s1s2, c2]Tz_2=z_3=[c_1s_2,\ s_1s_2,\ c_2]^{\mathrm T}(伸缩方向);z4,z5z_4,z_5 表达式最长。

组装时,第 3 列取移动列,其余各列取转动列,得到 6×66\times6 几何雅可比:

J=[z0×(p6−p0)z1×(p6−p1)z2z3×(p6−p3)z4×(p6−p4)z5×(p6−p5)z0z10z3z4z5]J=\begin{bmatrix} z_0\times(p_6-p_0)&z_1\times(p_6-p_1)&z_2&z_3\times(p_6-p_3)&z_4\times(p_6-p_4)&z_5\times(p_6-p_5)\ z_0&z_1&0&z_3&z_4&z_5 \end{bmatrix}

「这个计算过程不是手推的」(1:20:13)

符号推导「都是 MATLAB 来写的,表达式非常复杂,很多 sin、cos 在合成,计算量很大;实际应用中都是写代码。人手推也能做出来,但非常花时间。」本编已把三个结构的雅可比全部做了中心差分数值验证并入库(tools/verify_ch03_jac.py,make verify)——这也是读者自查任何雅可比的通用手段(习题 C1)。

[1:23:39] 「以上是重点中的重点。」——几何雅可比的推导与构造到此收束;接下来要看的,是它的「病理学」(奇点)与「超定 / 欠定学」(冗余)。

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

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

  1. 默写雅可比计算五步。
  2. 斯坦福机械手的第 3 列为什么取移动列,而不取转动列?
  3. 平面臂的雅可比哪几行恒为零?为什么?
核对

建系 → 填 DH 表 → 连乘得 Ti0T_i^0 → 读 zi−1z_{i-1} 与 pi−1\boldsymbol p_{i-1} → 逐列组装。

q3=d3q_3=d_3 是移动关节,故 J3=[z2; 0]J_3=[z_2;\ \boldsymbol 0]——角速度行是零。把这一列错写成转动列,是本节最常见的错误。

第三、四、五行恒为零(平面运动没有 zz 向线速度、xx/yy 向角速度);讨论行列式与秩之前,应先把有效行选出来。

3.2 小结与常见错误

  • 一条主线:五步流水线(建系 → 填表 → 连乘 → 读取 → 组装)。平面臂完全可以看结构直读 z,pz,p,空间臂要老老实实走流水线,斯坦福机械手则交给符号计算。
  • 两个结构规律:腕三轴汇交 ⇒ p3=p4=p5p_3=p_4=p_5(腕中心);平行轴族 ⇒ 对应的 zz 相等,经行变换后可以降维。
常见错误清单 · 自查三条
  1. 斯坦福第 3 列误取转动列——q3=d3q_3=d_3 是移动关节,J3=[z20]J_3=\begin{bmatrix}z_2\\0\end{bmatrix},角速度行是零;
  2. 拟人臂忘了 z1≠z0z_1\neq z_0——肩部 π/2\pi/2 扭转后,关节 2、3 的轴水平([s1,−c1,0]T[s_1,-c_1,0]^{\mathrm T}),不随 ϑ2,ϑ3\vartheta_2,\vartheta_3 改变,却随 ϑ1\vartheta_1 改变;
  3. 平面臂保留全部六行去做运算——第三、四、五行恒为零,应当先选出有效行,再谈行列式与秩。