001|Denavit–Hartenberg:把一台机械臂写成一串坐标变换
原论文:Jacques Denavit、Richard S. Hartenberg,A Kinematic Notation for Lower-Pair Mechanisms Based on Matrices,1955,Journal of Applied Mechanics 22(2):215–221。出版记录。网页后来的数字化日期不应替代1955年的发表年份。
先接住前作的问题
本系列从阅读指南提出的“把感知、几何、控制分开检查”开始。这里没有一篇必须假定为直接前驱的系列论文:最先要补上的接口是,编码器给出的关节变量,如何变成任务描述使用的末端坐标?D-H解决这层理想几何表示,尚不处理测量噪声、执行力矩或接触变形。后面的任务速度控制会使用这层几何关系求雅可比;指数积表示则是一条平行表示路线,并不是把D-H参数重新命名。
五个前置概念
理解这篇文章最需要的五个概念是:刚体变换描述位置与朝向;坐标系规定数值的参照;齐次坐标统一旋转和平移;关节变量描述允许运动;矩阵乘法顺序对应链条中的组合顺序。
一、问题设定:编码器角度怎样变成夹爪位姿
机械臂关节编码器给出若干角度,但任务描述通常是“夹爪位于桌面上的某一点”。两者之间需要一个几何模型。困难不是三角函数本身,而是每根连杆都有自己的方向,旋转和平移的顺序不能任意交换。
考虑一条串联运动链,输入是关节变量 与固定连杆参数,输出是末端相对基座的位姿 。位姿包括位置和姿态,不能用三个位置坐标替代六维刚体关系。
| 要素 | 几何建模中的含义 |
|---|---|
| 状态输入 | 转动关节角或移动关节位移 |
| 固定信息 | 相邻关节轴的相对位置与方向 |
| 输出 | 基座到末端的刚体变换 |
| 优化目标 | 正向运动学本身是求值问题,没有训练损失 |
| 前提 | 刚体连杆、明确的关节连接、统一单位与坐标方向 |
刚体模型不等于物理系统完全刚硬。它是忽略弹性变形后的近似。制造误差、减速器回差和温度变化都会使理论末端位置与实测位置不同,这些偏差需要标定或更丰富模型处理。
论文建立了用矩阵描述低副机构运动关系的统一记号。它的贡献属于表示方法:把空间机构的连接关系转换为可以系统组合的代数关系。
把“关节角到末端位姿”写清楚后,下一步不是求控制输入,而是选择一套让局部几何关系可以连续相乘的坐标约定。
二、固定坐标约定,再把四个变换乘开
每个 都是4×4齐次变换。左上3×3块表示旋转,右上3×1列表示平移,最后一行为 。平移加入齐次坐标后,也能与旋转一起通过矩阵乘法组合。
以下使用现代常见的标准D-H约定:关节 的运动轴为 , 是公共法线方向的距离, 是相邻轴的扭转角, 和 分别是轴向平移与绕轴转角。
先把变换方向钉牢:本篇用 ,把在坐标系 表达的点转换为坐标系 的坐标,即 。因此 ;右边的变换先作用于点。令 、,四步乘开得到
右列为什么是 ,而不是 ?因为沿局部 的位移还要经过绕 的旋转。原创教学检查:取 ,局部原点映到 ,局部点 映到 。若程序给出 ,通常把平移放到了错误坐标系。逆变换则为 ,不是简单把三个平移数字变号。
转动关节通常把 作为变量,其余参数固定;移动关节通常把 作为变量。这里的“固定”是相对当前机构设计与标定值而言,并不意味着它们没有估计误差。
为什么只需要四个参数?任意两个坐标系的关系一般需要六个自由度,但D-H并不允许随意选择两个系:坐标轴按照相邻关节轴及其公共法线建立,利用了机构结构。减少参数来源于约定,不是减少真实机构的空间自由度。
矩阵写对只解决一节连杆;把它放进关节循环时,还要保证变量、零位与相乘方向在整条链上保持一致。先用两连杆算例检查这一点,再看证据到底覆盖了什么。
三、沿运动链实现递推,并用两连杆查错
输入:每个关节类型、a、alpha、d、theta,以及当前关节变量q
T = 单位齐次矩阵
按基座到末端的顺序遍历关节i:
若为转动关节,将qi与角度零偏组合成theta_i
若为移动关节,将qi与位移零偏组合成d_i
Ai = Rz(theta_i) * Tz(d_i) * Tx(a_i) * Rx(alpha_i)
T = T * Ai
输出:T,以及需要时保存的所有中间连杆变换
这段伪代码是教学实现。标准D-H和改进D-H使用不同的坐标附着及变换顺序,不能把其中一种参数表塞进另一种代码。判断约定是否一致,应检查关节轴、索引和变换方向,而不能只看变量名相同。
设两根连杆长度都为1,两个关节均绕垂直纸面的轴旋转。忽略基座和工具偏移,末端位置为:
取 ,第一根连杆向上,第二根相对第一根向右转90度,所以末端为 。第二项用的是角度之和,而非单独的 ,因为第二关节角描述相对运动。
这个例子还说明两个不同问题:正向运动学给定角度求位置;逆运动学给定位置找角度。相同位置可能对应肘上与肘下构型,D-H只提供方程,并不替你选择逆解分支。
下面先用图检查局部平移随坐标轴旋转这一具体操作,再分清这个教学检验与1955年原文机构例子的证据地位。
四、读图检验矩阵方向,再核对原文证据

读图:这张图把正文的 90° 例子投影到 xy 平面,两点的高度都为 1。局部 x 轴已经指向世界 y,故沿局部 x 再走一步应增加世界 y;不能把平移列直接当作世界 x 位移。
原摘要确认包含两个空间机构应用例子,但这不是现代意义上的训练集或机器人成功率实验。
原版全文与两个机构原图仍未取得;本篇展开的是现代标准 D-H 教学矩阵,不能把手算例子当作 1955 年原实验。
原摘要关于记号不足的讨论。 作者试图补足完整运动学描述;不能据此判断所有既有记号都不可用。
原摘要关于矩阵代数的说明。 机构关系可统一组织成矩阵方程;不意味着逆运动学必有唯一闭式解。
原摘要说明两个空间机构例子。 方法不是只针对平面链条;例子的具体参数、图号和误差尚未核实。
现代齐次变换的直接代数检验。 给定约定可验证正向求值;不是原论文硬件实验结果。
这类奠基表示论文的证据重点是表达范围、特殊几何情况与等价性,训练步数和随机种子不适用。原文两个空间机构示例的具体设置与数值尚未核实。
局部矩阵和两连杆算例都通过,只能排除一类实现错误;真实机构的标定、闭链约束与变形仍在这个表示的保证之外。
五、从理想刚体走向标定与闭环约束
相邻轴平行、重合或相交时,坐标选择可能不唯一。不同参数表可以描述同一机构,但参数随几何变化的连续性可能较差。因此用于数值标定时,表示紧凑并不自动意味着条件数良好。
另一个常见错误是混淆主动运动与坐标变换。记号 应先明确究竟把哪一坐标系的向量映到哪一坐标系。最直接的检查是拿一个已知点,通过变换后再乘逆变换,看是否回到原点,同时检查旋转块满足正交性且行列式为1。
对闭链机构,沿不同链条抵达同一刚体得到的变换必须一致,因而还需要闭环约束。对柔性机械臂、齿隙和接触变形,单一刚体运动链只能描述理想几何,不能预测实际负载下的偏移。
六、追问:两条运动链到达同一工具时,怎样检查闭环几何是否一致?
两条运动链到达同一工具时,怎样检查闭环几何是否一致?
参考答案:设两条链按相同方向计算出 、,都是工具坐标到基座坐标的变换。闭环一致要求 ,等价于残差变换 。只比较平移列会漏掉姿态不一致;若还未统一变换方向,相乘更没有这个含义。这是用Modern Robotics的下标与参照系讲法展开正文闭链约束的教学检查,不是1955年新增实验。
七、沿几何表示继续走向速度与动力学
- 模块组合:任务速度控制从位姿对关节变量求导,新增的是任务速度到关节速度的映射;几何表本身并未给出控制律。
- 平行路线:指数积表示用关节轴与指数映射组织正运动学,比较的是表示约定,不是D-H之后必然出现的同一套参数。
- 模块组合:递推逆动力学在几何和运动之外加入质量、惯量与受力,回答实现给定运动需要多少力矩。
八、自测与参考答案
问题1:为什么D-H只有四个参数,却没有丢掉必要的相邻连杆信息?
参考答案:它不是描述任意给定的两个坐标系,而是按照关节轴结构选择坐标系。选择约定消除了部分任意性,留下描述相邻轴关系和关节运动的参数。若坐标系未按该规则建立,四参数形式未必适用。
问题2:两个程序使用同一张参数表却得到不同末端位置,首先应该检查什么?
参考答案:先检查标准与改进D-H、变换方向、角度单位、轴索引及基座/工具偏移。不要立即归因于浮点误差。用单关节与两连杆可手算情形逐项验证,可以定位是约定不同还是计算错误。
问题3:正向运动学完全正确,末端仍偏了5毫米,是否说明论文方法失效?
参考答案:不一定。代码可能准确计算了理想模型,但实际连杆长度、零位和工具坐标有误,或负载导致变形。应比较测量与模型假设,先标定,再判断是否需要弹性模型;几何求值准确与硬件定位准确是两层结论。