机器人标准DH(SDH)与改进DH(MDH)

机器人标准DH(SDH)与改进DH(MDH)
首先说一下为什么要写这一篇博客,就是为了提醒大家要明确区分标准DH和改进DH。很多机器人初学者只知道用DH法建立串联机器人连杆坐标系,然后在看书或者使用DH的时候很糊涂的就模糊了这标准DH和改进DH的区别,最大的坑就是:一些比较老的机器人学教科书用的是标准DH,而现在比较新的机器人书或者说我们大部分用的都是改进DH,这就导致老的教科书里面的一些公式推导和新的网上找的代码不一致,就会比较麻烦。

一:改进DH法

建立连杆坐标系:

使用改进D-H参数,将

坐标系定义在i

连杆的前端关节:

二:标准DH与改进DH法的区别

我们知道一个连杆有两端,一端离基座近,一端离基座远。简单的来说,标准DH将坐标系i建立在连杆i离基座近的一端,改进DH建立在离基座远的一端。

2.1 机器人连杆与关节的标号

先标号,再建系。

连杆编号:基座为杆0,从基座往后依次定义为杆1,杆2,…,杆i;

关节编号:杆i离基座近的一端(近端)的关节为关节i,远的一端(远端)为关节i+1。

为便于理解,这里我把连杆的近端用绿色表示,远端用橙色表示,且远端驱动近端转动。大家只要记住一句话,连杆近端关节的标号和连杆标号是一致的

图1连杆和关节标号

2.2 两种建系方法的区别

区别一:连杆坐标系建立的位置不同。SDH方法将连杆i的坐标系固定在连杆的远端,MDH方法把连杆i的坐标系固定在连杆的近端。

(a)SDH                                (b)MDH

图2 建系方法的不同

区别二:执行变换的的顺序不同。按照SDH方法变换时四个参数相乘的顺序依次为d—>θ—>a—>α,而MDH方法则按照α—>a—>θ—>d(正好与SDH相反)。

三:为什么要用改进DH法,而不选标准DH法

对于树形结构或者闭链机构的机器人来说,按照SDH方法建立的连杆坐标系会产生歧义,因为SDH的建系原则是把连杆i的坐标系建立在连杆的远端,如图3(a)所示,这就导致连杆0上同时出现了两个坐标系。而MDH把连杆坐标系建立在每个连杆的近端,则不会坐标系重合的情况,如图3(b)所示,这就克服了SDH方法建系的缺点。

(a)SDH                                               (b)MDH

图3 坐标系分配的不同

四.总结

1.SDH适合应用于开链结构的机器人

2.当使用SDH表示树状或闭链结构的机器人时,会产生歧义;

3.MDH法对开链、树状、闭链结构的机器人都适用,推荐使用。

五.我遇到的坑

在下面这本教材里面

显然用的是DH参数法,因此在后面推导几何雅可比矩阵的时候

提到

z_{i-1}

p_{i-1}

分别由

R^0_{i-1}

T^0_{i-1}

得到:

但是如果你用的是改进DH参数法进行建模,核心公式(3.30)应该是:

原因是原本的标准DH的坐标系

i-1

对应的z轴

z_{i-1}

就是改进的DH的的坐标系

i

的z轴

z_i

下面是基于改进DH计算几何雅可比的代码
 

function J_geo = geometric_jacobian_from_q_corrected(q) % 根据关节角度计算几何雅可比矩阵,匹配MATLAB工具箱的顺序 % 输入: q - 7×1关节角向量 (弧度) % 输出: J_geo - 6×7几何雅可比矩阵 % Franka Panda的DH参数 (Modified DH) % 格式: [alpha, a, d, theta] MDH = [0, 0, 0.333, q(1); -pi/2, 0, 0, q(2); pi/2, 0, 0.316, q(3); pi/2, 0.0825, 0, q(4); -pi/2, -0.0825,0.384, q(5); pi/2, 0, 0, q(6); pi/2, 0.088, 0.107, q(7)]; % 计算每个关节的变换矩阵和位置 n = 7; T = eye(4); T_all = cell(n, 1); p_all = zeros(3, n); z_all = zeros(3, n); for i = 1:n alpha = MDH(i, 1); a = MDH(i, 2); d = MDH(i, 3); theta = MDH(i, 4); % 改进DH变换矩阵 Ti = [cos(theta), -sin(theta), 0, a; sin(theta)*cos(alpha), cos(theta)*cos(alpha), -sin(alpha), -d*sin(alpha); sin(theta)*sin(alpha), cos(theta)*sin(alpha), cos(alpha), d*cos(alpha); 0, 0, 0, 1]; T = T * Ti; T_all{i} = T; p_all(:, i) = T(1:3, 4); z_all(:, i) = T(1:3, 3); end % 末端执行器位置 p_ee = p_all(:, end); % 计算几何雅可比 - 修正关节编号对应关系 J_geo = zeros(6, n); for i = 1:n if i == 1 % 关节1:使用基坐标系 p_i = [0; 0; 0]; z_i = [0; 0; 1]; else % 关节i:使用连杆i-1的坐标系 p_i = p_all(:, i); % 改进DH:使用i z_i = z_all(:, i); % 改进DH:使用i end % MATLAB顺序:线速度在前,角速度在后 J_geo(4:6, i) = z_i; J_geo(1:3, i) = cross(z_i, p_ee - p_i); end end function T = forward_kinematics_mdh(q) % 改进DH正运动学 MDH = [0, 0, 0.333, q(1); -pi/2, 0, 0, q(2); pi/2, 0, 0.316, q(3); pi/2, 0.0825, 0, q(4); -pi/2, -0.0825,0.384, q(5); pi/2, 0, 0, q(6); pi/2, 0.088, 0.107, q(7)]; T = eye(4); for i = 1:7 alpha = MDH(i, 1); a = MDH(i, 2); d = MDH(i, 3); theta = MDH(i, 4); Ti = [cos(theta), -sin(theta), 0, a; sin(theta)*cos(alpha), cos(theta)*cos(alpha), -sin(alpha), -d*sin(alpha); sin(theta)*sin(alpha), cos(theta)*sin(alpha), cos(alpha), d*cos(alpha); 0, 0, 0, 1]; T = T * Ti; end end % 

Read more

【AI】2026年AI学习路线(从入门到精通)重点版

一、2026年AI学习知识图谱(从入门到精通) (一)入门阶段(0-6个月):建立认知,夯实基础 核心目标:掌握AI基础概念、必备数学与编程能力,能实现简单机器学习模型,建立系统的AI认知框架。 核心内容: * AI通识:AI发展史、核心概念、主要学派、经典案例,了解2026年AI前沿趋势(如多模态、具身智能)。 * 数学基础:微积分、线性代数、概率论与统计、优化理论,掌握AI算法所需的数学工具。 * 编程基础:Python核心语法、数据结构与算法、CUDA基础,能熟练使用Python处理数据、编写简单代码。 * 传统机器学习入门:监督/无监督学习基础、线性回归、决策树、模型评估方法,入门Scikit-learn工具。 * 基础实践:完成鸢尾花分类、房价预测等简单项目,参与Kaggle入门赛,积累基础实战经验。 (二)进阶阶段(6-12个月):掌握核心算法,

2025年终总结,这就是AI的时代

2025年终总结,这就是AI的时代

今天是2025年的最后一天,又到了写年终总结的时候了。 我先去翻看了前几年的年终总结,突然发现,在过去的几年里,每年的年终总结我都写得比较消极。 可能这就是我这几年的个人体感,和当下整体大环境的趋势也许是比较相符的。 那么今年还继续消极吗?是的,从大环境方面来看,今年我更加消极了。但是我决定,今年的年终总结文章我要写得积极一点,至少在今天,我们一起都乐观向上一下。 还是先来说说公众号吧。 在去年的年终总结中,我宣布了公众号运营策略将进行重大调整。从25年开始,本公众号只会发布我的原创文章,不再接收其他技术文章的投稿。 这当然不是我主动想要进行的调整,主要还是因为有投稿意愿的作者,或者说还在写Android类技术文章的作者越来越少了,我实在没有办法再像往常那样维持日更的节奏。所以说,这也是一个在当下大环境的趋势下,不得不进行的一个调整。 不过,虽然公众号无法做到技术文章日更了,广告商的需求还是有的。只不过现在找我的基本没有Android类的广告商了,全都是和AI相关的。 我并不想让我的公众号变成一个广告性质过强的公众号,所以我把绝大部分找我的广告商全都拒绝了,只保留了极少

算力调度算法:基于AI的智能算力分配方法

算力调度算法:基于AI的智能算力分配方法

算力调度算法:基于AI的智能算力分配方法 📚 本章学习目标:深入理解基于AI的智能算力分配方法的核心概念与实践方法,掌握关键技术要点,了解实际应用场景与最佳实践。本文属于《云原生、云边端一体化与算力基建:AI时代基础设施革命教程》云原生技术进阶篇(第二阶段)。 在上一章,我们学习了"边缘节点节能技术:算力与功耗的平衡策略"。本章,我们将深入探讨基于AI的智能算力分配方法,这是云原生与AI基础设施学习中非常重要的一环。 一、核心概念与背景 1.1 什么是基于AI的智能算力分配方法 💡 基本定义: 基于AI的智能算力分配方法是云原生与AI基础设施领域的核心知识点之一。掌握这项技能对于提升云原生架构设计能力和AI应用落地效果至关重要。 # 云原生基础命令示例# Docker容器操作docker run -d--name myapp nginx:latest dockerpsdocker logs myapp # Kubernetes基础操作 kubectl get pods -n default kubectl describe pod myapp-pod kubectl

AI生成图片R18提示词:新手入门指南与最佳实践

AI 生成图片 R18 提示词:新手入门指南与最佳实践 (2026 年视角,适用于本地 Stable Diffusion / Flux / Pony 等开源模型,或部分支持 NSFW 的在线平台) R18(成人限制级)内容在 AI 图像生成中属于高敏感领域,不同模型/平台对它的开放程度差异极大: * 完全封禁或强过滤:Midjourney、DALL·E 3/4、Flux.1 [dev/pro] 官方、Google Imagen、Adobe Firefly 等 * 部分支持但需技巧:NovelAI、Pony Diffusion、Flux Uncensored 变体、某些 SDXL LoRA 模型