【机器人学习】小白学习第03讲:正运动学与 DH 约定

一句话核心:给我一组关节角,我把末端位姿算出来——只要给每个连杆钉一个坐标系,再把这些坐标系之间的 4×4 矩阵一路乘起来就行。

  • 本讲目标:会按 Denavit–Hartenberg 约定逐连杆建系;会填 a, α, d, ϑ 四参数表;会写相邻连杆变换 Ai并连乘得到 T;知道开链与闭链做法的差别

一、为什么需要这个

回忆第 01 讲的那个核心问题。正运动学就是它的前半问:

正运动学 direct kinematics

**已知关节变量 q,求末端执行器的位姿。**反过来「已知位姿求关节变量」叫逆运动学 inverse kinematics,是下一块内容。

打比方:你的手臂。肩、肘、腕各转多少度是「因」,手掌落在哪儿、朝哪儿是「果」。正运动学就是顺着连杆从肩一路推到手掌。

它有一个好脾气:永远有唯一解,而且一定算得出来——只要顺着链乘矩阵就行,不存在「多解」或「解不出来」。(逆运动学就没有这个好脾气了。)

DH 约定:一套钉坐标系的标准动作

难点不在道理,在记账。一个六轴机器人有七个坐标系(含基座),手写谁和谁的旋转关系很容易乱。DH 约定就是一套「钉坐标系的标准动作」,照着做,任何开链机械臂都能机械地产出一张参数表,然后连乘。

停下来想一想

停下来想一想:正运动学为什么永远有唯一解、一定算得出来?逆运动学为什么没有这个好脾气?

二、核心概念

小讲 1:两种关节、末端位姿矩阵与几何法

2.1 关节只有两种
转动关节 revolute

相邻两连杆做相对转动。变量是角 ϑi。工程上偏爱转动关节,因为它紧凑、可靠、好密封。

移动关节 prismatic

相邻两连杆做相对平移。变量是位移 di。气缸、直线模组属于这一类。

这两种关节都只有1 个自由度,分别对应一个关节变量 joint variable。整个结构串起来就是运动链 kinematic chain;链的一端固定在基座上,另一端装末端执行器。

  • 开链 open chain:从头到尾只有一条连杆序列。这是我们能用递归方法处理的前提。
  • 闭链 closed chain:有一段连杆围成了环 loop。好处是刚度和负载,代价是正运动学不一定有解析解。
2.2 正运动学函数长什么样

末端坐标系取三个正交单位向量ne, se, ae加原点坐标pe,全部写成基座系下的分量:

Teb(q)=[neb(q)seb(q)aeb(q)peb(q)0001] \begin{aligned} T^{b}_{e}(q) = \\ \begin{bmatrix} n^{b}_{e}(q) & s^{b}_{e}(q) & a^{b}_{e}(q) & p^{b}_{e}(q) \\ 0 & 0 & 0 & 1 \end{bmatrix} \end{aligned} Teb​(q)=[neb​(q)0​seb​(q)0​aeb​(q)0​peb​(q)1​]​

符号含义
qn 维关节变量列向量;整个矩阵的元素都是 q 的函数
Tbe末端系相对于基座系 base frame Ob–xbybzb 的齐次变换
n, s, a末端系三根单位向量,构成右手系
pe末端系原点的位置向量

末端系怎么取:如果是夹爪——原点放在夹爪中心,ae指向接近物体的方向,se垂直于 ae且落在两爪滑动平面内,ne与前两者垂直,三者构成右手系。

2.3 几何法先感受一下(二连杆平面臂)

Example 2.4:对简单的平面结构,用初等三角就能直接写出结果。

Teb(q)=[0s12c12a1c1+a2c120−c12s12a1s1+a2s1210000001] \begin{aligned} T^{b}_{e}(q) = \\ \begin{bmatrix} 0 & s_{12} & c_{12} & a_{1}c_{1} & + & a_{2}c_{12} \\ 0 & -c_{12} & s_{12} & a_{1}s_{1} & + & a_{2}s_{12} \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \end{aligned} Teb​(q)=​0010​s12​−c12​00​c12​s12​00​a1​c1​a1​s1​01​++a2​c12​a2​s12​​​

记号约定:s₁₂ = sin(ϑ₁+ϑ₂),c₁₂ = cos(ϑ₁+ϑ₂);单个下标同理。这是全书统一的简写。

直觉:末端位置就是两个连杆各自贡献的水平/竖直分量直接相加——第一根贡献a₁c₁, a₁s₁,第二根贡献a₂c₁₂, a₂s₁₂。

2.3 附:这张 4×4 矩阵怎么读

这张表按2×2 分块看最省力。先分清哪块是「算出来的」、哪块是「规定死的」:

位置是什么读法
左上 3×3姿态 R末端系三根轴分别在基座系里的方向
右上 3×1位置 p末端系原点在基座系里的坐标
最后一行0 0 0 1固定的补丁,不是算出来的,任何齐次矩阵最后一行都是它

逐行读:第 1 行是「x 分量」,第 2 行是「y 分量」,第 3 行是「z 分量」(也就是垂直纸面那个方向)。那个看着奇怪的1 0 0 0正是第 3 行:

第 3 行的四个数意思
1末端系的 x 轴(ne)完全朝竖直方向 → 垂直纸面
0y 轴(se)没有竖直分量 → 躺在纸面里
0z 轴(ae)没有竖直分量 → 躺在纸面里
0末端原点的竖直坐标 = 0 → 整条手臂从没离开过纸面

「平面臂」的平面两个字,就写在这一行里。还要提醒一句:那个1落在第 1 格不是规律,是这次建系的产物——按夹爪的取法,ae、se都躺在纸面内,垂直于它俩的 ne就必然垂直纸面。要记的是「这一行装的是竖直方向的分量」,而不是数字的位置。

顺带说清「为什么非得 4×4」:3×3 管旋转、3×1 管平移,拼起来是 3×4;但 3×4 没法自己乘自己,连乘链会断,所以补一行凑成正方形。补出来的这一行还顺手区分了「点」和「方向」——方向向量的第四位填 0,平移就自动对它无效。

常见误区

但几何法有天花板。点得很明白:它依赖「巧妙选择」和个人几何直觉;一旦关节变多、或者结构里出现闭链,就必须换成系统化、通用的方法。这就是下一节的主角。

小讲 2:DH 建系约定与四个参数的几何含义

图 1 二连杆平面臂的正运动学

图 1 二连杆平面臂的正运动学。左边是几何推导(两个连杆的水平/竖直贡献分别相加),右边是同一个结果写成 4×4 齐次矩阵的样子——这正是第 02 讲 T = [R p; 0 1] 的具体实例。

2.4 DH 约定:给每根连杆钉坐标系

设由 n 个关节连起 n+1 根连杆(连杆 0 固定在地面)。目标是给每根连杆 i 定义坐标系 Oi–xiyizi。的规矩(注意它的编号基准):

  1. zi轴:沿关节 i+1的轴。(关节 i 指的是连接连杆 i−1 与连杆 i 的那个关节。)
  2. 原点 Oi:在 zi轴与「zi−1和 zi的公垂线」的交点处。公垂线与 zi−1的交点记作 Oi′。
  3. xi轴:沿那条公垂线,方向从关节 i 指向关节 i+1。
  4. yi轴:按右手定则补全。

公垂线 common normal:两条(异面)直线之间最短距离线段所在的那条直线。这是 DH 里唯一的「几何新物件」,理解了它,四个参数就一目了然。

2.5 四个参数的几何含义(本讲最关键)

一旦坐标系钉好,坐标系 i 相对坐标系 i−1 的位置和姿态,就完全由四个数决定:

参数几何定义大白话
aiOi 与 Oi′ 之间的距离连杆长度:沿公垂线量出来的「两个关节轴错开多远」
αizi−1 轴到 zi 轴、绕xi的夹角,逆时针为正扭转角:两个关节轴歪了多少
diOi′ 沿zi−1轴的坐标偏置:沿前一个关节轴挪多远
ϑixi−1 轴到 xi 轴、绕zi−1的夹角,逆时针为正关节角:两个连杆夹角

图 2 DH 四个参数的几何位置(对应)

图 2 DH 四个参数的几何位置(对应)。抓住一条主线:a 与 d 回答「沿哪根轴挪多远」,α 与 ϑ 回答「绕哪根轴转多少」;符号的下标 i 指向的就是连杆 i 自己的轴。

四个参数里谁是常量、谁是变量

提示

谁常量、谁变量,记住这一句就够:

ai和αi永远是常量,只取决于连杆本身的制造几何。

di与ϑi里恰好只有一个是变量:

· 关节 i 是转动关节 → 变量是ϑi

· 关节 i 是移动关节 → 变量是di

所以每个 A 矩阵都只是单个关节变量的函数。

小讲 3:DH 建系不唯一的五种情形与闭链怎么切

2.6 DH 不是万能的:五种定义不唯一的情形

专门列出这些「随便你怎么选」的情形,遇到它们不要慌,利用自由度把矩阵尽量简化(比如让相邻轴平行):

  • 坐标系 0:只规定了 z₀ 的方向,O₀ 和 x₀ 可任选(能的话让它与基座系重合)。
  • 坐标系 n:没有「关节 n+1」,zn定义不出来,只要求 xn垂直于 zn−1;若关节 n 是转动关节,通常就把 zn取成与 zn−1同向。
  • 相邻两轴平行:它们之间的公垂线不唯一。
  • 相邻两轴相交:xi的方向任意。
  • 关节 i 是移动关节:zi−1的方向任意。
2.7 闭链怎么办

闭链不能用「一路乘到底」。的办法是先拆再补:

  1. 闭环必须先被拆开:选一个没有被驱动的关节,把它虚拟切开,得到一个树状开链。
  2. 照 DH 给各连杆建系,写出各段齐次变换 A。
  3. 对切口两侧的两个坐标系(记作 j 和 k)列出等式约束:方向约束zij(q′) = zik(q″);位置约束Rji(q′)(pij − pik) = [0 0 djk]ᵀ(转动关节情形);移动关节还要额外加一个 x 轴夹角约束。
  4. 总共是6 个等式,解出被选作独立关节变量的那几个(它们天然就是该驱动的关节)。
  5. 代回去,按T0n(q) = A0i Aij Ajn组出正运动学。

闭环的关节数 l 大于连杆数 n,闭环个数 = l − n。也提醒:除非结构简单(比如平面的),一般没有闭式解保证。

停下来想一想

停下来想一想:按本书的 DH 约定,zi轴沿哪个关节的轴?xi轴沿哪条线、方向怎么定?

三、关键公式

小讲 4:相邻连杆变换矩阵 (2.52) 与开链连乘

3.1 相邻连杆的变换怎么拼出来

把「从坐标系 i−1 走到坐标系 i」拆成两大步,每步里再先平移后旋转:

  1. 先把一个与 i−1 系重合的临时系,沿**zi−1平移di,再绕zi−1**旋转ϑi→ 对齐到中间系 i′:

Ai′i−1=[cϑi−sϑi00sϑicϑi 0 0001di0001] \begin{aligned} A^{i-1}_{i'} = \\ \begin{bmatrix} c\vartheta_{i} & -s\vartheta_{i} & 0 & 0 \\ s\vartheta_{i} & c\vartheta_{i} 0 0 \\ 0 & 0 & 1 & d_{i} \\ 0 & 0 & 0 & 1 \end{bmatrix} \end{aligned} Ai′i−1​=​cϑi​sϑi​00​−sϑi​cϑi​ 0 000​010​0di​1​​​

  1. 再把中间系 i′ 沿**xi′平移ai,再绕xi′**旋转αi→ 对齐到坐标系 i:

Aii′=[100ai0cαi−sαi00 sαicαi 00001] \begin{aligned} A^{i'}_{i} = \\ \begin{bmatrix} 1 & 0 & 0 & a_{i} \\ 0 & c\alpha_{i} & -s\alpha_{i} & 0 \\ 0 s\alpha_{i} & c\alpha_{i} 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \end{aligned} Aii′​=​100 sαi​0​0cαi​cαi​ 00​0−sαi​0​ai​01​​​

两步右乘合成,得到 (2.52)——这是本讲唯一必须背下来的矩阵:

Aii−1(qi)=Ai′i−1Aii′=[cϑi −sϑicαisϑisαi aicϑisϑicϑicαi −cϑisαi aisϑi0sαicαi di0001] \begin{aligned} A^{i-1}_{i}(q_{i}) = A^{i-1}_{i'} A^{i'}_{i} = \\ \begin{bmatrix} c\vartheta_{i} -s\vartheta_{i}c\alpha_{i} & s\vartheta_{i}s\alpha_{i} a_{i}c\vartheta_{i} \\ s\vartheta_{i} & c\vartheta_{i}c\alpha_{i} -c\vartheta_{i}s\alpha_{i} a_{i}s\vartheta_{i} \\ 0 & s\alpha_{i} & c\alpha_{i} d_{i} \\ 0 & 0 & 0 & 1 \end{bmatrix} \end{aligned} Aii−1​(qi​)=Ai′i−1​Aii′​=​cϑi​ −sϑi​cαi​sϑi​00​sϑi​sαi​ ai​cϑi​cϑi​cαi​ −cϑi​sαi​ ai​sϑi​sαi​0​cαi​ di​0​1​​​

看哪里能读出什么
第 4 列前三个元素坐标系 i 的原点位置:aicϑi, aisϑi, di
左上 3×3姿态;由 ϑi 和 αi 共同决定
第三行有sαi, cαiαi 是绕 x 的转角,所以出现在 x 之外的行/列

直觉:这个矩阵只含一个关节变量(ϑi或 di),其余全是结构常量。它就是把「先转个 ϑ、再偏个 d、再退个 a、再扭个 α」四件事打包成一张票据。

3.2 开链:一路乘到底

Tn0(q)=A10(q1)A21(q2)…Ann−1(qn) T^{0}_{n}(q) = A^{0}_{1}(q_{1}) A^{1}_{2}(q_{2}) \dots A^{n-1}_{n}(q_{n}) Tn0​(q)=A10​(q1​)A21​(q2​)…Ann−1​(qn​)

再补上首尾两段(通常都是常量矩阵),得到真正要用的正运动学:

Teb(q)=T0b⋅Tn0(q)⋅Ten T^{b}_{e}(q) = T^{b}_{0} \cdot T^{0}_{n}(q) \cdot T^{n}_{e} Teb​(q)=T0b​⋅Tn0​(q)⋅Ten​

符号含义
T0n最后一根连杆的坐标系相对第一根连杆的坐标系的位姿
Tb0坐标系 0 相对基座系的位置(常量)
Tne末端系相对坐标系 n 的位置(常量,用来把 DH 系「摆正」成末端系)

常见误区

最容易踩的坑:坐标系 n 往往并不等于末端坐标系。在三连杆平面臂里专门指出——那里末端的接近方向 a 是沿 x₃ 而不是沿 z₃,所以必须补一个常量矩阵把这个夹角差异扭过来。拟人臂同理。

小讲 5:典型结构的参数表与拼表陷阱

3.3 典型结构的参数表
三连杆平面臂(Table 2.1)
连杆aiαidiϑi
1a₁00ϑ₁
2a₂00ϑ₂
3a₃00ϑ₃

所有转动轴平行,于是最省事的选法是所有 xi沿各连杆方向:这样全部 di= 0,且 x 轴之间的夹角直接就是关节变量。代入 (2.52) 得:

Aii−1(ϑi)=[ci−si0aicisici 0 aisi00100001] i=1,2,3 \begin{aligned} A^{i-1}_{i}(\vartheta_{i}) = \\ \begin{bmatrix} c_{i} & -s_{i} & 0 & a_{i}c_{i} \\ s_{i} & c_{i} 0 a_{i}s_{i} \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} i = 1, 2, 3 \end{aligned} Aii−1​(ϑi​)=​ci​si​00​−si​ci​ 0 ai​si​00​010​ai​ci​01​​ i=1,2,3​

拟人臂 Anthropomorphic(Table 2.4)
连杆aiαidiϑi
10π/20ϑ₁
2a₂00ϑ₂
3a₃00ϑ₃

看得出它的本质吗?一个二连杆平面臂 + 绕该平面法线的一次额外旋转。第一轴 α₁ = π/2 就是那次「抬起来」;后两根连杆 α = 0,说明它们的轴互相平行。这也解释了为什么拟人臂是最常见也最好用的工业构型。

球坐标臂 Spherical(Table 2.3)
连杆aiαidiϑi
10−π/20ϑ₁
20π/2d₂ϑ₂
300d₃0

变量是 d₃,不是 ϑ₃——因为关节 3 是移动关节(径向伸缩),所以那一行的 ϑ₃ = 0、d₃ 才是变量。这一讲第一次看到「移动关节」的记账方式。

球形腕 Spherical wrist(Table 2.5)
连杆aiαidiϑi
40−π/20ϑ₄
50π/20ϑ₅
600d₆ϑ₆

编号从 4 开始——因为它通常是装在六轴机器人的三自由度臂上的腕。Stanford 臂 = 球坐标臂 + 球形腕,两个部分的 Frame 3 恰好重合,所以可以直接相乘T06 = T03 T36。

提示

和第 02 讲的呼应:指出,由于这里坐标系的选法,从 T36里抠出来的旋转矩阵恰好等于第 02 讲的 ZYZ 欧拉角矩阵 (2.18)。也就是说ϑ₄, ϑ₅, ϑ₆ 就是一组 ZYZ 欧拉角。球形腕「三轴交于一点」的几何特性,在数学上就体现为它能直接对应一组欧拉角——这也是逆运动学能在球形腕上求得闭式解的原因。

为什么拟人臂 + 球形腕不能直接相乘

常见误区

反面拟人臂 + 球形腕不能简单相乘。明说——拟人臂的 Frame 3 和球形腕的 Frame 3不可能重合。要么在中间插一个常量变换矩阵,要么干脆对整个六轴结构重做一遍 DH。重做后参数表变成 Table 2.6:α₃ = π/2、α₄ = −π/2、d₄ ≠ 0,与前两张单结构表都不同,所以 A23和 A34必须改写。

教训:把两部分的参数表直接抄过来拼,是最经典的 DH 错误。

停下来想一想

停下来想一想:球坐标臂的关节 3 是移动关节,那一行里变量应该是 d₃ 还是 ϑ₃?为什么?

小讲 6:从图上读出 DH 四参数与二连杆几何法

停下来想一想

停下来想一想:图 1 里 ai与 di回答什么、αi与 ϑi回答什么?哪两个参数永远是常量?

五、例题 / 动手

例题 1:三连杆平面臂的 T03

用 Table 2.1 的参数,逐个套 (2.52),再连乘三个 A 矩阵:

T30(q)=A10A21A32=[c123−s1230a1c1+a2c12+a3c123s123c123 0 a1s1+a2s12+a3s12300100001] \begin{aligned} T^{0}_{3}(q) = A^{0}_{1}A^{1}_{2}A^{2}_{3} = \\ \begin{bmatrix} c_{123} & -s_{123} & 0 & a_{1}c_{1} & + & a_{2}c_{12} & + & a_{3}c_{123} \\ s_{123} & c_{123} 0 a_{1}s_{1} + a_{2}s_{12} + a_{3}s_{123} \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \end{aligned} T30​(q)=A10​A21​A32​=​c123​s123​00​−s123​c123​ 0 a1​s1​+a2​s12​+a3​s123​00​010​a1​c1​01​+a2​c12​+a3​c123​​​

直觉检查三条:

  • 第三行/第三列是0 0 1:所有转动轴都平行于 z₀,连杆被限制在平面内,所以 z 方向的分量永远是 0,pz = 0。
  • 姿态角是 ϑ₁+ϑ₂+ϑ₃:平面结构的朝向就是各关节角直接相加。
  • 位置是三项累加:每根连杆贡献一份。

还提醒:这里 Frame 3 的 z₃ 与 z₀ 同向,还不能当作末端系——因为接近方向 a 应该沿着 x³ 而不是 z³。需要再乘一个常量矩阵 T3e(把 x₃ 摆成 Δ 方向),取 n 与 z₀ 同向。

例题 2:拟人臂的 T03

用 Table 2.4:第一轴 α₁ = π/2,代入 (2.52) 得 A01含cα₁ = 0, sα₁ = 1;第二、三轴 α = 0,退化成平面形式。连乘:

T30(q)=A10A21A32=[c1c23−c1s23s1c1(a2c2+a3c23)s1c23−s1s23−c1s1(a2c2+a3c23)s23c23 0 a2s2+a3s230001] \begin{aligned} T^{0}_{3}(q) = A^{0}_{1}A^{1}_{2}A^{2}_{3} = \\ \begin{bmatrix} c_{1}c_{23} & -c_{1}s_{23} & s_{1} & c_{1}(a_{2}c_{2} & + & a_{3}c_{23}) \\ s_{1}c_{23} & -s_{1}s_{23} & -c_{1} & s_{1}(a_{2}c_{2} & + & a_{3}c_{23}) \\ s_{23} & c_{23} 0 a_{2}s_{2} + a_{3}s_{23} \\ 0 & 0 & 0 & 1 \end{bmatrix} \end{aligned} T30​(q)=A10​A21​A32​=​c1​c23​s1​c23​s23​0​−c1​s23​−s1​s23​c23​ 0 a2​s2​+a3​s23​0​s1​−c1​0​c1​(a2​c2​s1​(a2​c2​1​++a3​c23​)a3​c23​)​​

和平面臂对比会发现:位置的 x、y 分量里都出现了c₁或s₁这个公共因子,而 z 分量里完全没有 ϑ₁。这正是「第一关节绕竖直轴转、整个运动平面跟着转」的物理含义——ϑ₁ 只决定你在水平面里的方位角。

同样地,因为 z₃ 与 z₂ 同向,Frame 3 也不是末端系,需要一个常量变换。

动手:把这套动作走一遍
  1. 找出并依次编号各关节轴,设定 z₀, …, zn−1的方向。
  2. 选Frame 0:原点放在 z₀ 轴上,x₀、y₀ 按右手法则补全。(尽量让它与基座系重合。)
  3. 对 i = 1, …, n−1 循环以下三步。
  4. 把**Oi**放在 zi与公垂线的交点。若 zi−1与 zi平行且关节 i 是转动关节,就取 di= 0;若是移动关节,把 Oi放在行程的某个参考位置(比如机械限位)。
  5. **xi**沿公垂线,方向从关节 i 指向关节 i+1。
  6. **yi**按右手法则补全。
  7. 选Frame n:若关节 n 是转动关节,令 zn与 zn−1同向;若是移动关节,zn任取。xn仍按第 4 步的规则。
  8. 填**ai, di, αi, ϑi**参数表。
  9. 按 (2.52) 写出各 Ai−1i(qi)。
  10. 连乘得到T0n(q) = A01 … An−1n。
  11. 补上Tb0与Tne,得到Tbe(q) = Tb0 T0n Tne。

实际工程提醒:机器人厂家定义的零位和 DH 参数表里的零位往往不一致,必须把常量偏移加到传感器读数上去。

动手:一题练手

取的球坐标臂参数表,自己套 (2.52) 写出 A01、A12、A23,然后连乘,验证结果:

T30=[c1c2−s1c1s2c1s2d3−s1d2s1c2c1 s1s2 s1s2d3+c1d2−s2 0c2c2d30001] \begin{aligned} T^{0}_{3} = \\ \begin{bmatrix} c_{1}c_{2} & -s_{1} & c_{1}s_{2} & c_{1}s_{2}d_{3} & - & s_{1}d_{2} \\ s_{1}c_{2} & c_{1} s_{1}s_{2} s_{1}s_{2}d_{3} + c_{1}d_{2} \\ -s_{2} 0 & c_{2} & c_{2}d_{3} \\ 0 & 0 & 0 & 1 \end{bmatrix} \end{aligned} T30​=​c1​c2​s1​c2​−s2​ 00​−s1​c1​ s1​s2​ s1​s2​d3​+c1​d2​c2​0​c1​s2​c2​d3​0​c1​s2​d3​1​−s1​d2​​​

检查点:① 第三列(a 向量)里完全没有 d₃——因为移动关节不改变姿态;② y₃ 的方向只由第一个关节决定(因为 z₁ 与 y₃ 平行);③ 这个结构的 Frame 3可以直接当末端系用,这是它比平面臂、拟人臂省心的地方。

停下来想一想

停下来想一想:三连杆平面臂的 Frame 3 为什么不能直接当末端系用?忘了补常量矩阵 Tne会出现「位置对、姿态错」还是「姿态对、位置错」?

六、常见误区

6.1 建系与编号上的坑

常见误区

误区 1:把 DH 的编号基准搞反。本书(以及经典 DH)把 zi放在关节 i+1 的轴上;也有些和软件采用「改进 DH」,把 zi放在关节 i 的轴上。两套都自洽,但绝不能混着用:参数表一旦用错基准,α 和 a 会整体错位一格。动手前先确认你参考的那份表用的是哪套。

常见误区

**误区 2:以为坐标系 n 就等于末端坐标系。经常不成立。三连杆平面臂里接近方向沿 x₃,拟人臂里 z₃ 与 z₂ 同向,都需要额外的常量变换 Tne**把 DH 系摆成末端系。忘记这一步,位置对而姿态错。

6.2 参数表拼接与关节变量的坑

常见误区

误区 3:把两个子结构的参数表直接凑起来。Stanford 臂能直接相乘是因为球坐标臂和球形腕的 Frame 3 恰好重合;拟人臂 + 球形腕就不行,必须对整个结构重做 DH(关节变量连 manut α₃、d₄ 都变了)。通用做法永远是重跑一遍五的操作清单。

常见误区

**误区 4:给移动关节留错了变量。**移动关节那一行应该是ϑi = 常量(常取 0)、di = 变量;转动关节则相反。写反了会得到「这个自由度消失」或「两个变量同时动」的错误模型。

6.3 闭链的坑

常见误区

**误区 5:以为闭链也能「一路乘到底」。**闭链必须先切断一个非驱动关节、列 6 个约束方程、解出独立关节变量,再代回去。还特别提醒:一般不保证有闭式解,只有平面等特殊几何才可能。

停下来想一想

停下来想一想:闭链的正运动学要先切开一个什么关节、列出几个等式约束?说它是否保证有闭式解?

七、本讲小结

停下来想一想

停下来想一想:把「一串关节角」翻译成「末端位姿」的标准流水线是哪四步?球形腕的三个关节角刚好构成第 02 讲的哪一组欧拉角?

要点回顾
  1. 正运动学 = 已知关节变量求末端位姿,永远唯一、永远算得出来,方法是顺着连杆一路连乘齐次矩阵。
  2. 关节非转动即移动,各提供 1 个自由度;关节变量 q 唯一决定整条链的位形。
  3. DH 约定给每根连杆钉一个坐标系:zi沿关节 i+1 轴,xi沿 zi−1与 zi的公垂线(从关节 i 指向 i+1),原点落在 zi与公垂线的交点。
  4. 四个参数:ai(连杆长度)、αi(扭转角)、di(偏置)、ϑi(关节角)。a、α 恒为常量;转动关节变量是 ϑ,移动关节变量是 d。
  5. **相邻连杆矩阵 (2.52)**是「平移 d → 绕 z 转 ϑ → 平移 a → 绕 x 转 α」四步右乘的结果;开链正运动学就是T0n = A01…An−1n,再补常量首尾Tbe = Tb0 T0n Tne。
  6. 典型结构:三连杆平面臂(α 全 0、关节角直接相加)、拟人臂(一个 α=π/2 + 平面二连杆)、球坐标臂(末关节移动,T3e= I)、Stanford = 球坐标臂 + 球形腕、而拟人臂 + 球形腕必须整体重做。
  7. 闭链:切开、建系、列 6 个约束、解独立变量、再组合。

**一句话总结:**给每根连杆钉好坐标系 → 读出四个 DH 参数 → 套 (2.52) 写出每个 A → 一路乘到末端 —— 这就是把「一串关节角」翻译成「末端位姿」的标准流水线。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐