机器人标准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

【Python全栈开发】第8讲 | Web 全栈之巅:FastAPI 高性能后端开发

环境声明 * Python版本:Python 3.12+ (建议使用 3.10 以上版本) * 开发工具:PyCharm 或 VS Code * 操作系统:Windows / macOS / Linux (通用) 1. 为什么是 FastAPI? 如果你还在学习传统的 Django 或者 Flask,那这一讲你得认真看看了。 在现代全栈开发里,FastAPI 已经是很多大厂和初创公司的首选。为什么? 1. 速度快:它的运行速度可以和 NodeJS 或 Go 媲美,这在 Python 界是突破性的。 2. 类型驱动:它利用 Python 的类型提示(Type Hints),能自动帮你生成接口文档、做数据校验。

旧安卓手机别扔!用KSWEB搭个人博客,搭配外网访问超香

旧安卓手机别扔!用KSWEB搭个人博客,搭配外网访问超香

KSWEB 作为安卓端轻量级 Web 服务器,核心功能是提供 PHP、MySQL 运行环境,能轻松部署 Typecho、WordPress 等博客系统,Termux 则可辅助管理内网穿透服务;这类工具特别适合预算有限的学生、个人博主,或是想折腾闲置设备的数码爱好者,优点也很突出 —— 对硬件要求极低,1GB 内存就能运行,旧款红米、华为畅享等机型都能适配,而且内置的运行环境无需手动配置,新手也能快速上手。 使用这套工具时也有不少需要注意的地方,比如手机要长期插电并连接稳定 Wi-Fi,否则服务容易中断;还要给 KSWEB 和 Termux 关闭电池优化、放开存储权限,我用小米手机测试时就因为没关后台限制,导致 Apache 服务频繁被系统杀掉,折腾了好一会儿才排查出问题;另外非 Root 机型也能使用,但部分文件权限操作会稍显繁琐。 不过仅靠 KSWEB 部署完博客后,只能在局域网内访问,这会带来很多不便:比如在家用电脑能连手机看博客,

2026前端避坑指南:弹窗遮罩层背景乱滚?3招彻底锁死滚动条

2026前端避坑指南:弹窗遮罩层背景乱滚?3招彻底锁死滚动条

2026前端避坑指南:弹窗遮罩层背景乱滚?3招彻底锁死滚动条 * 2026前端避坑指南:弹窗遮罩层背景乱滚?3招彻底锁死滚动条 * 这破玩意儿到底啥原理 * 方案一:暴力美学,直接给body动刀子 * 方案二:position固定法,投机取巧但有用 * 方案三:touchmove事件拦截,真·高手玩法 * 这些方案到底咋选 * 实际场景里的坑 * 排查思路得野路子一点 * 几个私藏的防抖小技巧 * 最后唠两句 2026前端避坑指南:弹窗遮罩层背景乱滚?3招彻底锁死滚动条 别整那些虚的,先说说为啥你写的弹窗一出来,背景还能丝滑滚动,用户体验直接负分。咱今天不聊大道理,就聊聊这个让无数前端兄弟头秃的"背景滚动"玄学问题。你以为加个overflow: hidden就完事了?太天真了,iOS和安卓能把你教做人。 这破玩意儿到底啥原理 先给大伙盘盘道。说白了就是DOM层级和事件冒泡那点破事——遮罩层虽然盖住了,但滚动事件没被拦截,浏览器觉得你还能接着滑。特别是移动端,那个惯性滚动简直离谱,手指都抬起来了页面还在跑,跟

FastAPI:Python 高性能 Web 框架的优雅之选

FastAPI:Python 高性能 Web 框架的优雅之选

🚀 FastAPI:Python 高性能 Web 框架的优雅之选 * 🌟 FastAPI 框架简介 * ⚡ 性能优势:为何选择 FastAPI? * 性能对比表 * 🔍 同步 vs 异步:性能测试揭秘 * 测试代码示例 * 测试结果分析 * 🛠️ FastAPI 开发体验:优雅而高效 * 1. 类型提示与自动验证 * 2. 交互式 API 文档 * 🏆 真实案例:为什么企业选择 FastAPI * 📚 后续学习引导 * 🎯 结语 🌟 FastAPI 框架简介 在当今快速发展的互联网时代,构建高效、可靠的 API 服务已成为后端开发的核心需求。FastAPI 作为 Python 生态中的新星,以其卓越的性能和开发者友好特性迅速赢得了广泛关注。 框架概述:FastAPI 是一个现代化的 Python Web 框架,专为构建