【机器人学习】小白学习第03讲:正运动学与 DH 约定
【机器人学习】小白学习第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)0seb(q)0aeb(q)0peb(q)1]
| 符号 | 含义 |
|---|---|
| q | n 维关节变量列向量;整个矩阵的元素都是 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)=0010s12−c1200c12s1200a1c1a1s101++a2c12a2s12
记号约定: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)完全朝竖直方向 → 垂直纸面 |
| 0 | y 轴(se)没有竖直分量 → 躺在纸面里 |
| 0 | z 轴(ae)没有竖直分量 → 躺在纸面里 |
| 0 | 末端原点的竖直坐标 = 0 → 整条手臂从没离开过纸面 |
「平面臂」的平面两个字,就写在这一行里。还要提醒一句:那个1落在第 1 格不是规律,是这次建系的产物——按夹爪的取法,ae、se都躺在纸面内,垂直于它俩的 ne就必然垂直纸面。要记的是「这一行装的是竖直方向的分量」,而不是数字的位置。
顺带说清「为什么非得 4×4」:3×3 管旋转、3×1 管平移,拼起来是 3×4;但 3×4 没法自己乘自己,连乘链会断,所以补一行凑成正方形。补出来的这一行还顺手区分了「点」和「方向」——方向向量的第四位填 0,平移就自动对它无效。
常见误区
但几何法有天花板。点得很明白:它依赖「巧妙选择」和个人几何直觉;一旦关节变多、或者结构里出现闭链,就必须换成系统化、通用的方法。这就是下一节的主角。
小讲 2:DH 建系约定与四个参数的几何含义

图 1 二连杆平面臂的正运动学。左边是几何推导(两个连杆的水平/竖直贡献分别相加),右边是同一个结果写成 4×4 齐次矩阵的样子——这正是第 02 讲 T = [R p; 0 1] 的具体实例。
2.4 DH 约定:给每根连杆钉坐标系
设由 n 个关节连起 n+1 根连杆(连杆 0 固定在地面)。目标是给每根连杆 i 定义坐标系 Oi–xiyizi。的规矩(注意它的编号基准):
- zi轴:沿关节 i+1的轴。(关节 i 指的是连接连杆 i−1 与连杆 i 的那个关节。)
- 原点 Oi:在 zi轴与「zi−1和 zi的公垂线」的交点处。公垂线与 zi−1的交点记作 Oi′。
- xi轴:沿那条公垂线,方向从关节 i 指向关节 i+1。
- yi轴:按右手定则补全。
公垂线 common normal:两条(异面)直线之间最短距离线段所在的那条直线。这是 DH 里唯一的「几何新物件」,理解了它,四个参数就一目了然。
2.5 四个参数的几何含义(本讲最关键)
一旦坐标系钉好,坐标系 i 相对坐标系 i−1 的位置和姿态,就完全由四个数决定:
| 参数 | 几何定义 | 大白话 |
|---|---|---|
| ai | Oi 与 Oi′ 之间的距离 | 连杆长度:沿公垂线量出来的「两个关节轴错开多远」 |
| αi | zi−1 轴到 zi 轴、绕xi的夹角,逆时针为正 | 扭转角:两个关节轴歪了多少 |
| di | Oi′ 沿zi−1轴的坐标 | 偏置:沿前一个关节轴挪多远 |
| ϑi | xi−1 轴到 xi 轴、绕zi−1的夹角,逆时针为正 | 关节角:两个连杆夹角 |

图 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 闭链怎么办
闭链不能用「一路乘到底」。的办法是先拆再补:
- 闭环必须先被拆开:选一个没有被驱动的关节,把它虚拟切开,得到一个树状开链。
- 照 DH 给各连杆建系,写出各段齐次变换 A。
- 对切口两侧的两个坐标系(记作 j 和 k)列出等式约束:方向约束
zij(q′) = zik(q″);位置约束Rji(q′)(pij − pik) = [0 0 djk]ᵀ(转动关节情形);移动关节还要额外加一个 x 轴夹角约束。 - 总共是6 个等式,解出被选作独立关节变量的那几个(它们天然就是该驱动的关节)。
- 代回去,按
T0n(q) = A0i Aij Ajn组出正运动学。
闭环的关节数 l 大于连杆数 n,闭环个数 = l − n。也提醒:除非结构简单(比如平面的),一般没有闭式解保证。
停下来想一想
停下来想一想:按本书的 DH 约定,zi轴沿哪个关节的轴?xi轴沿哪条线、方向怎么定?
三、关键公式
小讲 4:相邻连杆变换矩阵 (2.52) 与开链连乘
3.1 相邻连杆的变换怎么拼出来
把「从坐标系 i−1 走到坐标系 i」拆成两大步,每步里再先平移后旋转:
- 先把一个与 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ϑisϑi00−sϑicϑi 0 0000100di1
- 再把中间系 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αi00cαicαi 000−sαi0ai01
两步右乘合成,得到 (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−1Aii′=cϑi −sϑicαisϑi00sϑisαi aicϑicϑicαi −cϑisαi aisϑisαi0cαi di01
| 看哪里 | 能读出什么 |
|---|---|
| 第 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 | αi | di | ϑi |
|---|---|---|---|---|
| 1 | a₁ | 0 | 0 | ϑ₁ |
| 2 | a₂ | 0 | 0 | ϑ₂ |
| 3 | a₃ | 0 | 0 | ϑ₃ |
所有转动轴平行,于是最省事的选法是所有 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)=cisi00−sici 0 aisi00010aici01 i=1,2,3
拟人臂 Anthropomorphic(Table 2.4)
| 连杆 | ai | αi | di | ϑi |
|---|---|---|---|---|
| 1 | 0 | π/2 | 0 | ϑ₁ |
| 2 | a₂ | 0 | 0 | ϑ₂ |
| 3 | a₃ | 0 | 0 | ϑ₃ |
看得出它的本质吗?一个二连杆平面臂 + 绕该平面法线的一次额外旋转。第一轴 α₁ = π/2 就是那次「抬起来」;后两根连杆 α = 0,说明它们的轴互相平行。这也解释了为什么拟人臂是最常见也最好用的工业构型。
球坐标臂 Spherical(Table 2.3)
| 连杆 | ai | αi | di | ϑi |
|---|---|---|---|---|
| 1 | 0 | −π/2 | 0 | ϑ₁ |
| 2 | 0 | π/2 | d₂ | ϑ₂ |
| 3 | 0 | 0 | d₃ | 0 |
变量是 d₃,不是 ϑ₃——因为关节 3 是移动关节(径向伸缩),所以那一行的 ϑ₃ = 0、d₃ 才是变量。这一讲第一次看到「移动关节」的记账方式。
球形腕 Spherical wrist(Table 2.5)
| 连杆 | ai | αi | di | ϑi |
|---|---|---|---|---|
| 4 | 0 | −π/2 | 0 | ϑ₄ |
| 5 | 0 | π/2 | 0 | ϑ₅ |
| 6 | 0 | 0 | d₆ | ϑ₆ |
编号从 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)=A10A21A32=c123s12300−s123c123 0 a1s1+a2s12+a3s12300010a1c101+a2c12+a3c123
直觉检查三条:
- 第三行/第三列是
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)=A10A21A32=c1c23s1c23s230−c1s23−s1s23c23 0 a2s2+a3s230s1−c10c1(a2c2s1(a2c21++a3c23)a3c23)
和平面臂对比会发现:位置的 x、y 分量里都出现了c₁或s₁这个公共因子,而 z 分量里完全没有 ϑ₁。这正是「第一关节绕竖直轴转、整个运动平面跟着转」的物理含义——ϑ₁ 只决定你在水平面里的方位角。
同样地,因为 z₃ 与 z₂ 同向,Frame 3 也不是末端系,需要一个常量变换。
动手:把这套动作走一遍
- 找出并依次编号各关节轴,设定 z₀, …, zn−1的方向。
- 选Frame 0:原点放在 z₀ 轴上,x₀、y₀ 按右手法则补全。(尽量让它与基座系重合。)
- 对 i = 1, …, n−1 循环以下三步。
- 把**Oi**放在 zi与公垂线的交点。若 zi−1与 zi平行且关节 i 是转动关节,就取 di= 0;若是移动关节,把 Oi放在行程的某个参考位置(比如机械限位)。
- **xi**沿公垂线,方向从关节 i 指向关节 i+1。
- **yi**按右手法则补全。
- 选Frame n:若关节 n 是转动关节,令 zn与 zn−1同向;若是移动关节,zn任取。xn仍按第 4 步的规则。
- 填**ai, di, αi, ϑi**参数表。
- 按 (2.52) 写出各 Ai−1i(qi)。
- 连乘得到
T0n(q) = A01 … An−1n。 - 补上
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=c1c2s1c2−s2 00−s1c1 s1s2 s1s2d3+c1d2c20c1s2c2d30c1s2d31−s1d2
检查点:① 第三列(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 个自由度;关节变量 q 唯一决定整条链的位形。
- DH 约定给每根连杆钉一个坐标系:zi沿关节 i+1 轴,xi沿 zi−1与 zi的公垂线(从关节 i 指向 i+1),原点落在 zi与公垂线的交点。
- 四个参数:ai(连杆长度)、αi(扭转角)、di(偏置)、ϑi(关节角)。a、α 恒为常量;转动关节变量是 ϑ,移动关节变量是 d。
- **相邻连杆矩阵 (2.52)**是「平移 d → 绕 z 转 ϑ → 平移 a → 绕 x 转 α」四步右乘的结果;开链正运动学就是
T0n = A01…An−1n,再补常量首尾Tbe = Tb0 T0n Tne。 - 典型结构:三连杆平面臂(α 全 0、关节角直接相加)、拟人臂(一个 α=π/2 + 平面二连杆)、球坐标臂(末关节移动,T3e= I)、Stanford = 球坐标臂 + 球形腕、而拟人臂 + 球形腕必须整体重做。
- 闭链:切开、建系、列 6 个约束、解独立变量、再组合。
**一句话总结:**给每根连杆钉好坐标系 → 读出四个 DH 参数 → 套 (2.52) 写出每个 A → 一路乘到末端 —— 这就是把「一串关节角」翻译成「末端位姿」的标准流水线。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)