机器人学回炉重造(1):正运动学、标准D-H法与改进D-H法的区别与应用(附ABB机械臂运动学建模matlab代码)

news/2024/11/29 0:30:30/

写在前面

学习代码都记录在个人github上,欢迎关注~

书读百遍,其义自见。

要想当一名合格的机器人工程师,机器人学就是base_link,看多少遍都不为过。现在回炉重造一下,记录一下学习笔记(以照片形式,打公式太费劲了),防止以后笔记本不见了。

正运动学

首先是旋转矩阵的理解。

在这里插入图片描述

在理解旋转矩阵的基础之上,理解一些姿态的表现方式,例如欧拉角等。

然后进入最基本的工作,计算正运动学。正运动学就是根据关节角度,计算机器人工具坐标系(末端执行器end_effector)在机器人基座标系(base_link)下的位姿。

D-H建模方法

我这里只介绍一种,Modified D-H法,即改进D-H参数法,另外还有标准D-H参数法,我就不做笔记了。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

总结改进D-H参数法建立的基本顺序及四个参数的具体定义。

在这里插入图片描述

两个简单的例子。Xi在Zi-1和Zi的公法线上,方向人为选择,最终只会影响α角的正负。

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实例

在这里插入图片描述

建立改进D-H坐标系

以ABB一款机械臂为例,采用改进D-H参数法。该机械臂6个关节都是转动关节,前3个关节确定手腕参考点的位置,后3个关节确定手腕的方位。和大多数工业机器人一样,后3个关节轴线交于一点,因此将该点作为手腕的参考点,也选作为连杆坐标系{4},{5}和{6}的原点。在改进D-H坐标系中,{0}和{1}一般重合,O1为轴1和轴2公法线在轴1上的交点,此时关节1和关节2在z方向上的偏置没有体现出来,对于整个机械臂各关节的相对运动来说并没有影响。
先建立改进D-H坐标系如下

在这里插入图片描述

改进D-H参数表

根据坐标系和上文提到的各个参数量的具体定义,填写D-H参数表如下

iαi-1ai-1diθi
1000θ1
2pi/2L1=3200θ2
30L3=9750θ3
4pi/2L5=200L6=887θ4
5-pi/200θ5
6pi/200θ6

Matlab仿真程序(Modified DH)

% Modified DH
% ABB robot
clear;
clc;
th(1) = 0; d(1) = 0; a(1) = 0; alp(1) = 0;
th(2) = 0; d(2) = 0; a(2) = 0.320; alp(2) = pi/2;   
th(3) = 0; d(3) = 0; a(3) = 0.975; alp(3) = 0;
th(4) = 0; d(4) = 0.887; a(4) = 0.2; alp(4) = pi/2;
th(5) = 0; d(5) = 0; a(5) = 0; alp(5) = -pi/2;
th(6) = 0; d(6) = 0; a(6) = 0; alp(6) = pi/2;
% DH parameters  th     d    a    alpha  sigma
L1 = Link([th(1), d(1), a(1), alp(1), 0], 'modified');
L2 = Link([th(2), d(2), a(2), alp(2), 0], 'modified');
L3 = Link([th(3), d(3), a(3), alp(3), 0], 'modified');
L4 = Link([th(4), d(4), a(4), alp(4), 0], 'modified');
L5 = Link([th(5), d(5), a(5), alp(5), 0], 'modified');
L6 = Link([th(6), d(6), a(6), alp(6), 0], 'modified');
robot = SerialLink([L1, L2, L3, L4, L5, L6]); 
robot.name='ABBRobot-6-dof';
robot.display() 
% Forward Pose Kinematics
theta = [0, 120, -15, 0, 0, 0]*pi/180;
robot.teach();
robot.plot(theta); 
t0 = robot.fkine(theta)    %末端执行器位姿

运行结果
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

建立标准D-H坐标系

和改进D-H参数法不同的是:

  • 改进D-H参数法α和a的下标均为i-1,而标准D-H中两个参数的下标均为i;
  • 改进D-H中Xi是Zi和Zi+1的公垂线,而在标准D-H中Xi是Zi-1和Zi的公垂线;
  • 在使用两种方法时,一般先使各θi角为0进行建模;
  • 标准D-H中各参数定义如下:
    • αi angle(Zi-1, Zi)about Xi
    • ai distance ({i-1}, {i} origin) along Xi,因为建模时一般让theta=0,那么xi和xi-1实际上是一个方向
    • di distance (Xi-1, Xi) along Zi-1
    • θi angle (Xi-1, Xi) about Zi
      在这里插入图片描述
      在这里插入图片描述

建立标准D-H坐标系如下
在这里插入图片描述

标准D-H参数表

iαiaidiθi
1pi/20.3200.450θ1
200.9750θ2
3pi/20.2000θ3
4-pi/200.887θ4
5pi/200θ5
6000.200θ6

Matlab仿真程序(Standard D-H)

% Standard DH
% ABB robot
clear;
clc;
th(1) = 0; d(1) = 0.450; a(1) = 0.320; alp(1) = pi/2;
th(2) = 0; d(2) = 0; a(2) = 0.975; alp(2) = 0;   
th(3) = 0; d(3) = 0; a(3) = 0.200; alp(3) = pi/2;
th(4) = 0; d(4) = 0.887; a(4) = 0; alp(4) = -pi/2;
th(5) = 0; d(5) = 0; a(5) = 0; alp(5) = pi/2;
th(6) = 0; d(6) = 0.200; a(6) = 0; alp(6) = 0;
% DH parameters  th     d    a    alpha  sigma
L1 = Link([th(1), d(1), a(1), alp(1), 0]);
L2 = Link([th(2), d(2), a(2), alp(2), 0]);
L3 = Link([th(3), d(3), a(3), alp(3), 0]);
L4 = Link([th(4), d(4), a(4), alp(4), 0]);
L5 = Link([th(5), d(5), a(5), alp(5), 0]);  
L6 = Link([th(6), d(6), a(6), alp(6), 0]);
robot = SerialLink([L1, L2, L3, L4, L5, L6]); 
robot.name='ABBRobot-6-dof';
robot.display() 
theta = [0, 120, -15, 0, 0, 0]*pi/180;
robot.teach();
robot.plot(theta); 
t = robot.fkine(theta)    %末端执行器位姿

运行结果
从两个方法的末端姿态计算结果可以看出,不完全一致,这是因为两个方法的基座标位置不一样,并且改进dh法建模坐标系{6}没有建到工具坐标系上,而是在手腕位置,而标准dh法则是建到了末端工具坐标系上,这也就直接导致在[0 0 0 0 0 0]末端姿态的pz不一样,转换关系为0.887-0.45+0.2=0.637。
在这里插入图片描述在这里插入图片描述在这里插入图片描述


总结

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

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

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

浅谈标准DH(SDH)和改进DH(MDH)


http://www.ppmy.cn/news/261256.html

相关文章

计算机中h是几进制,16进制后面用H表示,其他进制的用什么表示

16进制后面用H表示,其他进制的用什么表示以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 16进制后面用H表示,其他进制的用什么表示, 为什么100H是表示16进制的二进制数,其他的怎么表示 H表示16进制呀后缀H表示…

实验5、D/A转换实验

实验内容 基础部分: 1、编写程序,产生周期的锯齿波、矩形波、三角波和阶梯波,经D/A转换,显示在软件模拟示波器上。(要求:每种波形的周期数、阶梯波的阶梯数可通过参数设置。) 拓展部分: 2在软件模拟示波器上…

机械臂D-H坐标系的建立

正解与逆解的求解需要相应的机器人运动方程,其中关键的就是DH参数表 DH参数表用来描述机器人各关节坐标系之间的关系,有了DH参数表就可以在机器人各关节之间进行坐标转换 求解正解就是从关节1到关节5的坐标转换 基本知识 : 关节&#xff1a…

H无穷控制学习笔记——H无穷/H2控制

一、 H ∞ / H 2 H_{\infty}/H_2 H∞​/H2​控制问题 实际设计过程中,人们常常需要系统满足多项性能要求。 对于这样的系统: x ˙ A x B u B 1 w 1 B 2 w 2 z 1 C 1 x D 10 u D 11 w 1 z 2 C 2 x D 20 u D 22 w 2 \dot xAxBuB_1w_1B_2w_2\\ …

df -h无响应问题解决

一、问题描述 1、linux下执行df -h 查看已挂在各分区的空间和目录情况,但执行后无反馈 二、影响 1、由于脚本程序调用df -h 判断磁盘空间情况进行日志等清理,故障导致磁盘空间占满不能清理,服务器不能访问。 三、问题分析 1、df -h和分区…

机器人运动学_不同D-H矩阵的对比

机器人运动学_不同D-H矩阵的对比 edit by XZF 在机器人学的运动学分析中,D-H矩阵是正运动学分析的基础,而对于如何建立D-H举证的连杆坐标系,有不同的方法,本文主要介绍其中的两种,并对这两种方法做下对比与分析。 …

hwd分别是长宽高_W H D在尺寸上代表什么??

展开全部 W是width的简62616964757a686964616fe58685e5aeb931333431366334写,就是宽度的意思;D是depth的简写,就是深度的意思;H是hight的简写,就是高度的意思。 Width *Depth* Height表示宽度 * 深度*高度 。 根据箱体…

如何判断视频数据是H264编码

H264详细介绍&#xff1a;H264编码总结 u8 is_h264_file(char *filename) {AVFormatContext *ifmt_ctx NULL;int ret 0;if ((ret avformat_open_input(&ifmt_ctx, filename, 0, 0)) < 0) {printf( "Could not open input file.");return 0;}// printf(&quo…