为什么

  • 机械臂关节通常只关于一个轴进行移动(旋转或者平移),两段手臂的坐标系之间的变换可以由原本的6变量(3位移+3旋转)简化成4变量(DH参数)
  • 关节自由度高(例如手腕可绕3个轴旋转),也可以分解成多个单轴

是什么


图源《Introduction to Robotics Mechanics and Control》

四个参数中,有两个表示关节轴相对前一关节轴的变化,另外两个表示关节沿轴的运动。

轴到轴的变化

设两个相邻关节的轴i−1_{i-1}i−1​和轴i_{i}i​的公共垂线为lll,方向为i−1{i-1}i−1到i{i}i,轴的变化可以表示为俩个参数

  • 轴间距离ai−1a_{i-1}ai−1​
  • 轴i−1_{i-1}i−1​旋转到轴i_ii​的角度αi−1\alpha_{i-1}αi−1​,沿着lll右手系旋转

关节的运动

  • 沿轴平移did_idi​
  • 绕轴旋转θi\theta_iθi​

通常其中一个为常数,另一个为变量,根据不同关节类型而定

坐标系

将轴i−1_{i-1}i−1​到轴i_{i}i​中间的连接称为linki−1link_{i-1}linki−1​,靠近轴i_{i}i​的称为前端,靠近轴i−1_{i-1}i−1​的称为后端,则有两种坐标系建立的方式,对应不同的变换矩阵Tii−1T^{i-1}_iTii−1​,坐标系iii到i−1i-1i−1的变换。

设在后端

垂线lll设为Xi−1X_{i-1}Xi−1​,轴i−1_{i-1}i−1​设为Zi−1Z_{i-1}Zi−1​,转换和(ai−1,αi−1,di,θia_{i-1}, \alpha_{i-1},d_i,\theta_iai−1​,αi−1​,di​,θi​)有关

Tii−1=[cθi−sθi0ai−1sθicαi−1cθicαi−1−sαi−1−sαi−1disθisαi−1cθisαi−1cαi−1cαi−1di0001]T^{i-1}_{i} = \left[ \begin{array}{c} c\theta_i & -s\theta_i & 0 & a_{i-1} \\ s\theta_i c\alpha_{i-1} & c\theta_i c\alpha_{i-1} & -s\alpha_{i-1} & -s\alpha_{i-1} d_i \\ s\theta_i s\alpha_{i-1} & c\theta_i s\alpha_{i-1} & c\alpha_{i-1} & c\alpha_{i-1} d_i \\ 0 & 0 & 0 & 1\\ \end{array} \right]Tii−1​=⎣⎢⎢⎡​cθi​sθi​cαi−1​sθi​sαi−1​0​−sθi​cθi​cαi−1​cθi​sαi−1​0​0−sαi−1​cαi−1​0​ai−1​−sαi−1​di​cαi−1​di​1​⎦⎥⎥⎤​

图源《Introduction to Robotics Mechanics and Control》

设在前端

同样垂线lll设为Xi−1X_{i-1}Xi−1​,但是将轴i_{i}i​设为Zi−1Z_{i-1}Zi−1​,转换和(ai,αi,di,θia_i, \alpha_i,d_i,\theta_iai​,αi​,di​,θi​)有关

Tii−1=[cθi−sθicαisθisαiaicθisθicθicαi−cθisαiaisθi0sαicαidi0001]T^{i-1}_{i} = \left[ \begin{array}{c} c\theta_i & -s\theta_i c\alpha_i & s\theta_i s\alpha_i & a_i c\theta_i \\ s\theta_i & c\theta_i c\alpha_i & -c\theta_i s\alpha_i & a_i s\theta_i \\ 0 & s\alpha_i & c\alpha_i & d_i \\ 0 & 0 & 0 & 1\\ \end{array} \right]Tii−1​=⎣⎢⎢⎡​cθi​sθi​00​−sθi​cαi​cθi​cαi​sαi​0​sθi​sαi​−cθi​sαi​cαi​0​ai​cθi​ai​sθi​di​1​⎦⎥⎥⎤​

图源《Robotics Vision And Control》

怎么用

参数表

求机械臂运动学正解(forward kinematics)
将多个关节串联起来,获得末端位姿

例:UR5

ur5 ros github 参数 (以设在前端的方式建立坐标)

i aia_iai​ αi\alpha_iαi​ did_idi​ θi\theta_iθi​
1 0 1.570796327 0.089159 θ1\theta_1θ1​
2 -0.42500 0 0 θ2\theta_2θ2​
3 -0.39225 0 0 θ3\theta_3θ3​
4 0 1.570796327 0.10915 θ4\theta_4θ4​
5 0 -1.570796327 0.09465 θ5\theta_5θ5​
6 0 0 0.0823 θ6\theta_6θ6​

q_home_offset = [0, -1.570796327, 0, -1.570796327, 0, 0]
joint_direction = [-1, -1, 1, 1, 1, 1]

末端位姿T60=T10T21T32T43T54T65T^{0}_{6} = T^{0}_{1}T^{1}_{2}T^{2}_{3}T^{3}_{4}T^{4}_{5}T^{5}_{6}T60​=T10​T21​T32​T43​T54​T65​

DH参数(Denavit-Hartenberg parameters)相关推荐

  1. 【Matlab 六自由度机器人】定义标准型及改进型D-H参数建立机器人模型(附MATLAB建模代码)

    Matlab建立六自由度机器人模型 近期更新 前言 1.Matlab机器人工具箱 2.研究对象-六自由度机器人 正文 一.D-H参数(Denavit–Hartenberg parameters) 1. ...

  2. Robotstudio 获取机器人D-H参数

    1.来源论坛里的帖子,主要是回答如何通过Robotstudio来获取ABB机器人的D-H参数. 对话内容(复制粘贴): Hej Hej, My name is Nikolas and I am res ...

  3. Udacity机器人软件工程师课程笔记(十五)-运动学-正向运动学和反向运动学(其二)-DH参数等

    正向运动学和反向运动学 目录 2D中的旋转矩阵 sympy包 旋转的合成 旋转矩阵中的欧拉角 平移 齐次变换及其逆变换 齐次变换的合成 Denavit-Hartenberg 参数 DH参数分配算法 正 ...

  4. 浅谈DH参数(以华数机器人为例)

    1.DH参数说明 欧几里得空间中的直角坐标系由三个两两相交且相互垂直的轴构成:X 轴,Y轴和 Z轴.因此,一个三维直角坐标系有六个变换自由度:沿 X,Y,Z 轴的平移自由度:绕 X,Y,Z 轴的旋转自 ...

  5. PI机器人解决方案RMS-下篇——DH参数校准模块

    https://www.chuandong.com/tech/detail.aspx?id=36041 API机器人解决方案RMS-下篇--DH参数校准模块 2019年03月14日 11:48:40 ...

  6. 机器人学一些概念2——四元数,D-H 参数

    文章目录 机器人学一些概念2 四元数 D-H 参数 机器人学一些概念2 四元数 ​ 这里是机器人旋转中用到的四元数,总结来看主要是用于运算方便,避免θ\thetaθ接近0的时候造成旋转矩阵无法求解. ...

  7. python 机械臂控制_机械臂正运动学-DH参数-Python快速实现

    机械臂正运动学-DH参数-Python快速实现 前言: 最近在玩一个非常弱智的机械臂,好多功能都没有,连个配套的仿真环境都没, 虚拟边界和碰撞检测的功能都非常难用. 没办法,我只能自己实现一个简陋的虚 ...

  8. Python知道cos值求角度_机械臂正运动学-DH参数-Python快速实现

    # 机械臂正运动学-DH参数-Python快速实现 @[toc] 前言: 最近在玩一个非常弱智的机械臂,好多功能都没有,连个配套的仿真环境都没, 虚拟边界和碰撞检测的功能都非常难用. 没办法,我只能 ...

  9. 【机器人学、机器视觉与控制】用工具箱确定D-H参数

    用工具箱确定D-H参数 确定D-H参数的经典方法是系统地为每个连杆分配一个坐标系.Puma机器人的连杆坐标系就是采用标准D-H形式进行设定的,如图下图所示. 然而,设定每一个坐标系上都有很强的约束,因 ...

  10. Uber Go 语言编程规范:避免语义不明确的参数(Naked Parameters)

    函数调用中的意义不明确的参数(Naked parameters )可能会影响可读性,当参数名称的含义不明显时,请为参数添加 C 样式注释 (/* ... */) Bad // func printIn ...

最新文章

  1. 在线作图|在线做扩增子抽平
  2. vsearch2.8.1使用和命令简介——中文帮助文档(免费64位版usearch)
  3. 适配器模式(为被封装对象提供不同的接口)
  4. ansible模块介绍
  5. java 文件转换字符串_java字符串文件互相转换
  6. Android 编程下 Touch 事件的分发和消费机制
  7. 分支程序设计02 - 零基础入门学习C语言11
  8. C#:SQLite大量插入的效率问题
  9. 微信小程序如何使用阿里矢量库
  10. openkore 207cn 中文加强版 2010.01.12【彪彪修改】
  11. 分子系统学-多序列比对和系统进化分析教程
  12. python画图怎么使用特殊符号?
  13. MT7620A路由刷DDWRT
  14. windows键被禁用_如何在Windows 10上禁用插入键
  15. 通过身份证号码得出性别和年龄
  16. 【算法】【c++】打家劫舍问题
  17. vrchat模型房_VRChat之blender教程
  18. 计算机将文本朗读出来应用语音,如何实现电脑语音朗读文字?可以选择两种方法...
  19. Idea 中如何导入项目
  20. centos7搭建hexo博客步骤

热门文章

  1. 解决下载了pygame后,pycharm依然报错No module named ‘pygame
  2. 把docx格式的word文档转换为txt文件
  3. 【伸手党福利】开发人员重装系统顺序
  4. 傅里叶变换与拉普拉斯变换
  5. c语言开发arcgis,2017Esri开发竞赛GIS应用开发组一等奖作品
  6. 2022新华三十大技术趋势白皮书
  7. 最优化算法之牛顿法、高斯-牛顿法、LM算法
  8. hbase安装与配置
  9. 推广帖:超好用的mac下shell工具 finalshell --xshell替代,mac ssh客户端
  10. Axure各种版本注册码 | 最新Axure RP 8.1.0.3377的授权码