网站开发移动app,微网站 布局,创意图案设计网站,景区旅游网站平台建设DH 矩阵#xff08;Denavit-Hartenberg 矩阵#xff09;是 1955 年由 Denavit 和 Hartenberg 提出的一种机器人运动学建模方法#xff0c;用于描述机器人连杆和关节之间的关系。该方法通过在机器人每个连杆上建立坐标系#xff0c;并用 44 的齐次变换矩阵#xff08;DH 矩…DH 矩阵Denavit-Hartenberg 矩阵是 1955 年由 Denavit 和 Hartenberg 提出的一种机器人运动学建模方法用于描述机器人连杆和关节之间的关系。该方法通过在机器人每个连杆上建立坐标系并用 4×4 的齐次变换矩阵DH 矩阵描述相邻连杆的空间关系从而推导出末端执行器相对于基坐标系的位姿建立机器人的运动学方程 。
DH 方法包括传统 DHClassic DH和改进 DHModified DH主要区别在于坐标系建立位置和参数变换顺序 。每个连杆用 4 个参数如关节角 θθθ、连杆长度 aaa、连杆偏移 ddd、连杆扭角 ααα描述转动关节的关节变量为 θθθ移动关节的关节变量为 ddd 。通过依次相乘各关节的 DH 矩阵可得到机器人末端在基坐标系中的位姿适用于机器人正运动学解算和 3D 模型运算 。 视频链接 在本人复刻Dummy机械臂的时候重温DH矩阵并做如下记录
DH 方法也被用于五轴机床等复杂系统的运动学建模和几何误差补偿 。下面给出一份系统性、逐条拆解的 DHDenavit–Hartenberg矩阵教程。 1. 为什么要用 DH 机器人/机床通常由 nnn 个连杆 n nn 个关节 串联而成。 我们需要把 关节变量 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(n−1)n(qn) 2. 两种约定Classic vs. Modified
对比项Classic DH (1955)Modified DH (MDH, 1986)坐标系位置连杆 远端关节 i1i1i1 处连杆 近端关节 iii 处变换顺序先沿 ziz_izi 旋转/平移再沿 xix_ixi 平移/旋转( 依次ziz_izi 旋转-ziz_izi 平移再沿 xix_ixi 平移-xix_ixi 旋转)先沿 xi−1x_{i-1}xi−1 平移/旋转再沿 ziz_izi 旋转/平移( 依次xi−1x_{i-1}xi−1 旋转-xi−1x_{i-1}xi−1 平移再沿 ziz_izi 旋转-ziz_izi 平移)工业软件RoboticsToolbox(MATLAB)、KUKAKRC、ABBRAPIDRobotics Toolbox (MATLAB)、\\KUKA KRC、ABB RAPIDRoboticsToolbox(MATLAB)、KUKAKRC、ABBRAPIDROSMoveIt、OpenRAVE、URDF、SolidWorksROS MoveIt、OpenRAVE、\\URDF、SolidWorksROSMoveIt、OpenRAVE、URDF、SolidWorks参考 https://www.bilibili.com/video/BV1Ue4y1R7QJ/?spm_id_from333.337.search-card.all.clickvd_source6c355cf343a2ceefccfcf5bb64aee668
同一套参数两种约定算出的矩阵不同千万别混用。 3. 四个参数几何意义以 MDH 为例
在 Modified DHMDH 里四个参数必须严格对应“前一连杆”和“当前关节”
参数下标几何意义变量连杆扭角 ααααi−1αᵢ₋₁αi−1绕 xi−1xᵢ₋₁xi−1 轴从 zi−1zᵢ₋₁zi−1 旋转到 zizᵢzi 的角度常数连杆长度 aaaai−1aᵢ₋₁ai−1沿 xi−1xᵢ₋₁xi−1 轴从 zi−1zᵢ₋₁zi−1 移动到 zizᵢzi 的距离常数关节角 θθθθiθᵢθi绕 zizᵢzi 轴从 xi−1xᵢ₋₁xi−1 旋转到 xixᵢxi 的角度转动关节变量连杆偏距 ddddidᵢdi沿 zizᵢzi 轴从 xi−1xᵢ₋₁xi−1 移动到 xixᵢxi 的距离移动关节变量4. 变换矩阵公式MDH
变换顺序
先绕 xi−1x_{i-1}xi−1 轴旋转 αi−1α_{i-1}αi−1 再平移 ai−1a_{i-1}ai−1再绕 ziz_izi 轴旋转 θiθ_iθi 再平移 did_idi
4×4 齐次矩阵 Ti−1,iT_{i-1,i}Ti−1,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)Ti−1,i(qi)Rot(x,αi−1)Trans(x,ai−1)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}Ti−1,icosθisinθicosαi−1sinθisinαi−10−sinθicosθicosαi−1cosθisinαi−100−sinαi−1cosαi−10ai−1−disinαi−1dicosαi−11
ααα 和 aaa 的下标是 i−1i-1i−1因为它们属于“前一连杆”的几何属性θθθ 和 ddd 的下标是 iii关节变量属于“当前关节” 5. 建立坐标系MDH 流程
步骤做什么对哪个标号关键要点0编号关节 i1…ni1…ni1…n基座系为 000末端系为 nnn1画 zizᵢzi对 i0…ni0…ni0…nzizᵢzi 与关节 iii 的轴线重合方向自定2找 xi−1xᵢ₋₁xi−1对 i1…ni1…ni1…nxi−1xᵢ₋₁xi−1 是 zi−1zᵢ₋₁zi−1 与 zizᵢzi 的公垂线方向从 zi−1zᵢ₋₁zi−1 指向 zizᵢzi3定 Oi−1Oᵢ₋₁Oi−1对 i1…ni1…ni1…nOi−1Oᵢ₋₁Oi−1 位于 zi−1zᵢ₋₁zi−1 与 xi−1xᵢ₋₁xi−1 的交点4画 yi−1yᵢ₋₁yi−1对 i1…ni1…ni1…nyi−1zi−1×xi−1yᵢ₋₁ zᵢ₋₁ × xᵢ₋₁yi−1zi−1×xi−1右手定则5重复 1−41-41−4直到 ininin末端系 nnn 的原点放在工具中心6量 444 个参数对 i1…ni1…ni1…nαi−1、ai−1、θi、diαᵢ₋₁、aᵢ₋₁、θᵢ、dᵢαi−1、ai−1、θi、di按定义测量6. 完整示例2 自由度平面 RR 机械臂
关节 1、2 平行于 zzz 轴连杆长度 L1L1L1、L2L2L2。所有 αi0di0a1L1a2L2α_i 0d_i 0a_1 L1a_2 L2αi0di0a1L1a2L2。
iiiθiθ_iθidid_idiaia_iaiαiα_iαi111θ1θ₁θ1000L1L1L1000222θ2θ₂θ2000L2L2L2000
计算末端位姿 T02T01(θ1)T12(θ2)[c12−s120L1c1L2c12s12c120L1s1L2s1200100001]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}T02T01(θ1)T12(θ2)c12s1200−s12c12000010L1c1L2c12L1s1L2s1201
其中 c1cosθ1,s1sinθ1,c12cos(θ1θ2)…c₁ cosθ₁, s₁ sinθ₁, c₁₂ cos(θ₁θ₂)…c1cosθ1,s1sinθ1,c12cos(θ1θ2)… 7. 常见陷阱
坐标系画错Classic/Modified 的 xix_ixi、ziz_izi 定义不同容易混。移动关节变量在 MDH 中移动关节变量是 did_idi不是 θiθ_iθi。参数符号有的教材把 aia_iai 写成 rir_iri把 αiα_iαi 写成 φiφ_iφi。零位对齐机器人出厂零位 ≠DH≠ DHDH 零位需加 offsetoffsetoffset。URDF ↔ DH 转换ROS 的 URDF 用 MDH但标签的 rpy/xyzrpy/xyzrpy/xyz 顺序是 xyzxyzxyz 而非 xαzθxα zθxα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 typefloating。 一句话总结 DH矩阵机械杆件的“身份证”坐标系“说明书”只要遵循同一套约定就能把任何串联机构转换成一串4×4矩阵的乘积。DH 矩阵 机械杆件的“身份证” 坐标系“说明书”只要遵循同一套约定就能把任何串联机构转换成一串 4×4 矩阵的乘积。DH矩阵机械杆件的“身份证”坐标系“说明书”只要遵循同一套约定就能把任何串联机构转换成一串4×4矩阵的乘积。