当前位置: 首页 > news >正文

DH(Denavit–Hartenberg)矩阵

DH 矩阵(Denavit-Hartenberg 矩阵)是 1955 年由 Denavit 和 Hartenberg 提出的一种机器人运动学建模方法,用于描述机器人连杆和关节之间的关系。该方法通过在机器人每个连杆上建立坐标系,并用 4×4 的齐次变换矩阵(DH 矩阵)描述相邻连杆的空间关系,从而推导出末端执行器相对于基坐标系的位姿,建立机器人的运动学方程 。

DH 方法包括传统 DH(Classic DH)和改进 DH(Modified DH),主要区别在于坐标系建立位置和参数变换顺序 。每个连杆用 4 个参数(如关节角 θθθ、连杆长度 aaa、连杆偏移 ddd、连杆扭角 ααα)描述,转动关节的关节变量为 θθθ,移动关节的关节变量为 ddd 。通过依次相乘各关节的 DH 矩阵,可得到机器人末端在基坐标系中的位姿,适用于机器人正运动学解算和 3D 模型运算 。
请添加图片描述
视频链接
在本人复刻Dummy机械臂的时候,重温DH矩阵,并做如下记录:

DH 方法也被用于五轴机床等复杂系统的运动学建模和几何误差补偿 。下面给出一份系统性、逐条拆解的 DH(Denavit–Hartenberg)矩阵教程。


1. 为什么要用 DH?

  • 机器人/机床通常由 nnn 个连杆 +n+ n+n 个关节 串联而成。

  • 我们需要把 关节变量 qqq(转动关节的 θθθ 或移动关节的 ddd)映射到 末端位姿 T(q)T(q)T(q),用于正运动学、仿真、控制、标定。

  • DH 提供一种最少参数、无歧义的建系规范,使所有运动学方程都可以用 4×4 齐次变换矩阵连乘得到:

    T0n(q)=T01(q1)T12(q2)⋯T(n−1)n(qn)T_{0n}(q) = T_{01}(q_1)\,T_{12}(q_2)\cdots T_{(n-1)n}(q_n)T0n(q)=T01(q1)T12(q2)T(n1)n(qn)


2. 两种约定:Classic vs. Modified

对比项Classic DH (1955)Modified DH (MDH, 1986)
坐标系位置连杆 远端(关节 i+1i+1i+1 处)连杆 近端(关节 iii 处)
变换顺序先沿 ziz_izi 旋转/平移,再沿 xix_ixi 平移/旋转( 依次ziz_izi 旋转->ziz_izi 平移,再沿 xix_ixi 平移->xix_ixi 旋转)先沿 xi−1x_{i-1}xi1 平移/旋转,再沿 ziz_izi 旋转/平移( 依次xi−1x_{i-1}xi1 旋转->xi−1x_{i-1}xi1 平移,再沿 ziz_izi 旋转->ziz_izi 平移)
工业软件RoboticsToolbox(MATLAB)、KUKAKRC、ABBRAPIDRobotics Toolbox (MATLAB)、\\KUKA KRC、ABB RAPIDRoboticsToolbox(MATLAB)KUKAKRCABBRAPIDROSMoveIt、OpenRAVE、URDF、SolidWorksROS MoveIt、OpenRAVE、\\URDF、SolidWorksROSMoveItOpenRAVEURDFSolidWorks

在这里插入图片描述

参考 https://www.bilibili.com/video/BV1Ue4y1R7QJ/?spm_id_from=333.337.search-card.all.click&vd_source=6c355cf343a2ceefccfcf5bb64aee668

同一套参数,两种约定算出的矩阵不同,千万别混用


3. 四个参数几何意义(以 MDH 为例)

Modified DH(MDH) 里,四个参数必须严格对应“前一连杆”和“当前关节”:

参数下标几何意义变量
连杆扭角 ααααi−1αᵢ₋₁αi1xi−1xᵢ₋₁xi1 轴,从 zi−1zᵢ₋₁zi1 旋转到 zizᵢzi 的角度常数
连杆长度 aaaai−1aᵢ₋₁ai1沿 xi−1xᵢ₋₁xi1 轴,从 zi−1zᵢ₋₁zi1 移动到 zizᵢzi 的距离常数
关节角 θθθθiθᵢθizizᵢzi 轴,从 xi−1xᵢ₋₁xi1 旋转到 xixᵢxi 的角度转动关节变量
连杆偏距 ddddidᵢdi沿 zizᵢzi 轴,从 xi−1xᵢ₋₁xi1 移动到 xixᵢxi 的距离移动关节变量

4. 变换矩阵公式(MDH)

变换顺序

  1. 先绕 xi−1x_{i-1}xi1 轴旋转 αi−1α_{i-1}αi1 再平移 ai−1a_{i-1}ai1
  2. 再绕 ziz_izi 轴旋转 θiθ_iθi 再平移 did_idi

4×4 齐次矩阵 Ti−1,iT_{i-1,i}Ti1,i 应该是:

Ti−1,i(qi)=Rot(x,αi−1)Trans(x,ai−1)Rot(z,θi)Trans(z,di)T_{i-1,i}(q_i) = \mathrm{Rot}(x,\alpha_{i-1})\,\mathrm{Trans}(x,a_{i-1})\, \mathrm{Rot}(z,\theta_i)\,\mathrm{Trans}(z,d_i)Ti1,i(qi)=Rot(x,αi1)Trans(x,ai1)Rot(z,θi)Trans(z,di)

展开后:
Ti−1,i=[cos⁡θi−sin⁡θi0ai−1sin⁡θicos⁡αi−1cos⁡θicos⁡αi−1−sin⁡αi−1−disin⁡αi−1sin⁡θisin⁡αi−1cos⁡θisin⁡αi−1cos⁡αi−1dicos⁡αi−10001]T_{i-1,i} = \begin{bmatrix} \cos\theta_i & -\sin\theta_i & 0 & a_{i-1} \\ \sin\theta_i\cos\alpha_{i-1} & \cos\theta_i\cos\alpha_{i-1} & -\sin\alpha_{i-1} & -d_i\sin\alpha_{i-1} \\ \sin\theta_i\sin\alpha_{i-1} & \cos\theta_i\sin\alpha_{i-1} & \cos\alpha_{i-1} & d_i\cos\alpha_{i-1} \\ 0 & 0 & 0 & 1 \end{bmatrix}Ti1,i=cosθisinθicosαi1sinθisinαi10sinθicosθicosαi1cosθisinαi100sinαi1cosαi10ai1disinαi1dicosαi11

  • αααaaa 的下标是 i−1i-1i1(因为它们属于“前一连杆”的几何属性)
  • θθθddd 的下标是 iii(关节变量属于“当前关节”)

5. 建立坐标系(MDH 流程)

步骤做什么对哪个标号关键要点
0编号关节 i=1…ni=1…ni=1n基座系为 000,末端系为 nnn
1zizᵢzii=0…ni=0…ni=0nzizᵢzi 与关节 iii 的轴线重合,方向自定
2xi−1xᵢ₋₁xi1i=1…ni=1…ni=1nxi−1xᵢ₋₁xi1zi−1zᵢ₋₁zi1zizᵢzi 的公垂线,方向从 zi−1zᵢ₋₁zi1 指向 zizᵢzi
3Oi−1Oᵢ₋₁Oi1i=1…ni=1…ni=1nOi−1Oᵢ₋₁Oi1 位于 zi−1zᵢ₋₁zi1xi−1xᵢ₋₁xi1 的交点
4yi−1yᵢ₋₁yi1i=1…ni=1…ni=1nyi−1=zi−1×xi−1yᵢ₋₁ = zᵢ₋₁ × xᵢ₋₁yi1=zi1×xi1,右手定则
5重复 1−41-414直到 i=ni=ni=n末端系 nnn 的原点放在工具中心
6444 个参数i=1…ni=1…ni=1nαi−1、ai−1、θi、diαᵢ₋₁、aᵢ₋₁、θᵢ、dᵢαi1ai1θidi,按定义测量

6. 完整示例:2 自由度平面 RR 机械臂

  • 关节 1、2 平行于 zzz 轴,连杆长度 L1L1L1L2L2L2
  • 所有 αi=0,di=0,a1=L1,a2=L2α_i = 0,d_i = 0,a_1 = L1,a_2 = L2αi=0di=0a1=L1a2=L2
iiiθiθ_iθidid_idiaia_iaiαiα_iαi
111θ1θ₁θ1000L1L1L1000
222θ2θ₂θ2000L2L2L2000

计算末端位姿:
T02=T01(θ1)T12(θ2)=[c12−s120L1c1+L2c12s12c120L1s1+L2s1200100001]T_{02} = T_{01}(\theta_1)\,T_{12}(\theta_2) = \begin{bmatrix} c_{12} & -s_{12} & 0 & L_1c_1 + L_2c_{12} \\ s_{12} & c_{12} & 0 & L_1s_1 + L_2s_{12} \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}T02=T01(θ1)T12(θ2)=c12s1200s12c12000010L1c1+L2c12L1s1+L2s1201

其中 c1=cosθ1,s1=sinθ1,c12=cos(θ1+θ2)…c₁ = cosθ₁, s₁ = sinθ₁, c₁₂ = cos(θ₁+θ₂)…c1=cosθ1,s1=sinθ1,c12=cos(θ1+θ2)


7. 常见陷阱

  • 坐标系画错:Classic/Modified 的 xix_ixiziz_izi 定义不同,容易混。
  • 移动关节变量:在 MDH 中,移动关节变量是 did_idi,不是 θiθ_iθi
  • 参数符号:有的教材把 aia_iai 写成 rir_iri,把 αiα_iαi 写成 φiφ_iφi
  • 零位对齐:机器人出厂零位 ≠DH≠ DH=DH 零位,需加 offsetoffsetoffset
  • URDF ↔ DH 转换:ROS 的 URDF 用 MDH,但标签的 rpy/xyzrpy/xyzrpy/xyz 顺序是 xyzxyzxyz 而非 xαzθxα zθzθ,需要二次解析。

8. Python 代码(以 MDH 为例)

import numpy as npdef dh_matrix(theta, d, a, alpha):"""返回 4×4 DH 变换矩阵(MDH 约定)"""ct, st, ca, sa = np.cos(theta), np.sin(theta), np.cos(alpha), np.sin(alpha)return np.array([[ct, -st*ca,  st*sa, a*ct],[st,  ct*ca, -ct*sa, a*st],[0,   sa,     ca,    d   ],[0,   0,      0,     1   ]])# 2R 机械臂参数
L1, L2 = 1.0, 0.5
q1, q2 = np.deg2rad(30), np.deg2rad(45)T01 = dh_matrix(q1, 0, L1, 0)
T12 = dh_matrix(q2, 0, L2, 0)
T02 = T01 @ T12print("End-effector position:", T02[:3, 3])

9. 进阶话题

  • 标定:用激光跟踪仪或视觉测量实际 DHDHDH 参数误差,建立误差模型 ΔTΔTΔT
  • 微分运动学:对 DHDHDH 矩阵求偏导得到雅可比 J(q)J(q)J(q)
  • 树形/闭环结构:标准 DHDHDH 仅适用于串联链,需引入虚拟关节或 URDFURDFURDF<joint type="floating">

一句话总结:
DH矩阵=机械杆件的“身份证”+坐标系“说明书”,只要遵循同一套约定,就能把任何串联机构转换成一串4×4矩阵的乘积。DH 矩阵 = 机械杆件的“身份证” + 坐标系“说明书”,只要遵循同一套约定,就能把任何串联机构转换成一串 4×4 矩阵的乘积。DH矩阵=机械杆件的身份证+坐标系说明书,只要遵循同一套约定,就能把任何串联机构转换成一串4×4矩阵的乘积。

http://www.lryc.cn/news/586824.html

相关文章:

  • redis汇总笔记
  • JAVA生成PDF(itextpdf)
  • 译码器设计
  • 论意识与人工智能:跨越鸿沟的艰难求索
  • gitlab批量删除远程分支(推荐方案二)
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的视频摘要快速生成与检索优化(345)
  • 【读书笔记】《C++ Software Design》第十章与第十一章 The Singleton Pattern The Last Guideline
  • vue3 ref vs reactive值的修改
  • 【Python练习】042. 编写一个函数,实现二叉树的前序、中序、后序遍历
  • k8s:0/1 nodes are available: pod has unbound immediate PersistentVolumeClaims.
  • 线性代数学习笔记
  • 【unitrix】 5.1 第二套类型级二进制数基本结构体(types2.rs)
  • k8s存储入门
  • archive/tar: unknown file mode ?rwxr-xr-x
  • JSON/AJAX/XHR/FetchAPI知识点学习整理
  • 06.计算两个日期之间的差值
  • IT岗位任职资格体系及发展通道-产品经理岗位任职标准参考
  • 基于Flink的实时开发平台-Dinky
  • composer如何安装以及举例在PHP项目中使用Composer安装TCPDF库-优雅草卓伊凡
  • Spring Boot中的路径变量
  • INA226 数据手册解读
  • 13.使用NiN网络进行Fashion-Mnist分类
  • macOS - Chrome 关闭自动更新
  • Python 的 MRO
  • [办公及工程版浏览器]_Google Chrome 138.0.7204.101全屏启动插件
  • es里为什么node和shard不是一对一的关系
  • 香港理工大学实验室定时预约
  • 前端框架状态管理对比:Redux、MobX、Vuex 等的优劣与选择
  • 关于 java:11. 项目结构、Maven、Gradle 构建系统
  • 用 Node.js 构建模块化的 CLI 脚手架工具,从 GitHub 下载远程模板