机器人建模方法:DH 把杆件收成矩阵链
WARNING
🧪 Beta公测版本提示:教程主体已完成,正在优化细节,欢迎大家提Issue反馈问题或建议。
2R 三角公式 写两根杆刚刚好。六轴再手写
会疯。Denavit–Hartenberg(DH) 给每一关节四个几何数,齐次矩阵连乘就得到基座到末端。本章把「为什么是四个参数、一帧矩阵怎么乘、和 2R 公式如何对上」写清楚。旋转矩阵为什么必须 见 李群。
一、通俗理解:相邻两根杆之间要说清四件事
空间里一个刚体相对另一个,一般要
- 每个转动关节的
轴沿着那根转轴; 轴沿着两根 的公垂线。
贴完之后,相邻系之间只剩下:沿公垂线走多远(杆长
换一套贴法(modified DH / Craig 约定)数字会变,但「四个标量 + 齐次阵连乘」这件事不变。本章与 demo 用经典顺序:
绕
转 → 沿 移 → 沿 移 → 绕 转 。
读任何 DH 表,先看教材用的是哪一套,不要混抄矩阵。以代码 dh() 的乘法顺序为准。
保姆级:四个字母各管哪一截。 站在关节

图解说明:每关节
沿转轴, 沿公垂线。四步: 。平面 3R 的 。

图解说明:相邻系
与 之间, 杆长, 扭角, 偏置, 关节角。右手定则。
动画说明:平面 3R,每节坐标系贴在关节上。
变了,齐次阵连乘,末端跟着走。杆长与 demo 相同。
二、一帧齐次变换:把四步写成一个
每一步都是一个简单 dh() 一致):
保姆级读矩阵:
- 右上
:下一坐标系原点写在当前系里。平面臂 时就是 ——「转完再沿杆走 」,与运动学章 相同。 - 左上
:下一系的姿态。 时就是平面旋转 。 - 第三行:
才真正用上,表示 轴扭出了纸面。平面臂第三行是 。
整条链:
左乘还是右乘?从基座往外乘:T = T @ A_i(Python 右乘下一帧)。这与「点的坐标先在末端表示,再一帧帧送回基座」一致。
逐步推导:四步初等变换怎样乘成 (点击展开)
每一小步都是「只转或只移」的
写开(
从右往左乘(先作用
验算右上角:
三、和 2R 公式对上(数字级验算)
平面转动关节:
右上两维正好是 运动学 的
四、平面 3R 在做什么
三根杆
给真实六轴填 DH 表的口诀(标准 DH):
- 给每个关节轴画
; - 作
与 的公垂线,作为 ,交点定原点; - 读
(公垂线长)、 (两 夹角)、 、 ; - 平行轴时公垂线不唯一,选方便测量的那条,
仍是垂直距离。
ROS 2 的 URDF 用「xyz + rpy」而不是 DH 表,但正运动学仍然是齐次变换连乘;读 URDF 时可把每条 <joint> 想成一帧
五、常见疑问
Q:标准 DH 和 modified DH 差在哪?
坐标系贴在连杆「前关节」还是「后关节」,以及乘法顺序(先
Q:为什么我的末端差一个符号?
最常见:A @ T vs T @ A)。用 2R 特例对照三角公式最快。
Q:偏置
相邻关节轴异面(不共面也不平行)时,公垂线之外还要沿
Q:标定是在标 DH 吗?
工厂出厂有一套名义 DH;测量后微调
六、代码在做什么
demo.py 对 fk_chain,打印末端 dh_3r.png。

七、小结
| 概念 | 一句话 |
|---|---|
| 四个参数 | 关节轴贴法把 6 个相对位姿减成 4 个 |
| 一帧 | |
| 连乘 | |
| 与 2R | 三角是 |
| 下游 | 标定、URDF、李群上的姿态、旋量 / PoE |
📥 Code
| File | View | Download |
|---|---|---|
| demo.py | Open | Download |
| exercise.py | Open | Download |
参考
- Denavit & Hartenberg, “A Kinematic Notation…” (1955)
- Craig, Introduction to Robotics(标准 DH 表与画法)
- 对照 运动学 的 2R 公式验算