机器人工具箱学习(二)

一、机械臂及运动学

1.1 机械臂构成

  机械臂多采用关节式机械结构,一般具有6个自由度,其中3个用来确定末端执行器的位置,另外3个则用来确定末端执行装置的方向(姿态)。
  如图所示,一个机械臂是由一组可做相对运动的关节连接的连杆结合体。第一个连杆固定,连接该机械臂的基座,而最后一个连杆连接的是它的末端执行器。
在这里插入图片描述

  通常可将关节划分为两种:第一种称为转动关节(或称为旋转关节),转动关节可绕基准轴转动,相应的转动量称为关节角:第二种称为移动关节,移动关节是沿着基准轴移动,相应的位移称为关节偏距。还有一种特殊的关节称为球关节,球关节拥有三个自由度。可以用三个转动关节和一个零长度的连杆来描述一个球关节。
  位于机械臂固定基座的坐标系称为基坐标系;位于操作臂末端执行器的坐标系称为工具坐标系,通常用它来描述机械臂的位置。

1.2 机器人运动学介绍

  机器人运动学只研究机器人运动,不关注机器人运动过程中各零部件的质量及相关力,也不关注关节驱动力和力矩。
 (1)机器人正运动学:给定一组机器人关节变量(转角或位移),求解末端工具坐标系相对于基坐标系的位置和姿态。
 (2)机器人逆运动学:给定机器人末端工具箱坐标系的位置和姿态,求解机器人各关节变量。

二、D-H参数法

  D-H 参数全称为Denavit-Hartenberg参数,它使用连杆参数来描述机构运动关系。在DH参数法中,描述机械臂中的每一个连杆需要4个运动学参数:
● 连杆长度 a i − 1 a _ { i - 1 } ai1:关节轴 i − 1 i-1 i1与关节轴 i i i之间公垂线的长度;
● 连杆转角 α i − 1 \alpha _ { i-1 } αi1:第 i − 1 i-1 i1个关节轴和第 i i i个关节轴之间的夹角;
● 连杆偏距 d i d_{i} di:沿两个相邻连杆公共轴线方向的距离;
● 关节角 θ i \theta_{i} θi:两相邻连杆绕公共轴线旋转的夹角。
在这里插入图片描述

2.1 标准D-H法(SDH)

建模规则
(1)找出各关节轴,画出关节轴的延长线;
(2)确定 Z Z Z轴:与关节轴线重合,其中 Z i − 1 Z_{i-1} Zi1轴与关节 i i i的轴线重合;
(3)确定 X X X轴: Z i − 1 Z_{i-1} Zi1轴与 Z i Z_{i} Zi轴的公垂线,方向由 Z i − 1 Z_{i-1} Zi1轴指向 Z i Z_{i} Zi
  1)如果 Z i − 1 Z_{i-1} Zi1轴与 Z i Z_{i} Zi轴平行,选取与前一关节的公垂线共线的一条公垂线作为 X X X轴;
  2)如果 Z i − 1 Z_{i-1} Zi1轴与 Z i Z_{i} Zi轴相交, X X X轴为 Z i − 1 Z_{i-1} Zi1轴与 Z i Z_{i} Zi轴的叉积方向;
(4)确定 Y Y Y轴:右手定则。
在这里插入图片描述

D-H参数含义
(1) a i a_{i} ai:关节轴线 i − 1 i-1 i1和关节轴线 i i i的公垂线长度
(2) α i \alpha_{i} αi:关节轴线 i − 1 i-1 i1和关节轴线 i i i的夹角,指向为从轴线 i − 1 i-1 i1到轴线 i i i
(3) d i d_{i} di:关节 i i i上的两条公垂线 a i − 1 a_{i-1} ai1 a i a_{i} ai之间的距离,沿关节轴线 i i i测;
(4) θ i \theta_{i} θi:连杆 i i i相对于连杆 i − 1 i-1 i1绕轴线 i i i的旋转角度。

齐次变换矩阵
  从坐标系 i − 1 i-1 i1到坐标系 i i i,先绕 Z i − 1 Z_{i-1} Zi1轴旋转角度 θ i \theta_{i} θil,再沿 Z i − 1 Z_{i-1} Zi1轴移动 d i d_{i} di,然后沿 X i X_i Xi轴平移 a i a_i ai,最后绕 X i X_i Xi轴旋转 α i \alpha_i αi。齐次变换矩阵 i − 1 i T _ { i - 1 } ^ { i } T i1iT可以写为:
在这里插入图片描述

2.2 改进D-H法(MDH)

建模规则
(1)找出各关节轴,画出关节轴的延长线;
(2)确定 Z Z Z轴:与关节轴线重合,其中 Z i Z_{i} Zi轴与关节 i i i的轴线重合;
(3)确定 X X X轴: Z i Z_{i} Zi轴与 Z i + 1 Z_{i+1} Zi+1轴的公垂线,方向由 Z i Z_{i} Zi轴指向 Z i + 1 Z_{i+1} Zi+1轴;
(4)确定 Y Y Y轴:右手定则。
在这里插入图片描述

D-H参数含义
(1) a i − 1 a_{i-1} ai1:沿 X i − 1 X_{i-1} Xi1轴,从 Z i − 1 Z_{i-1} Zi1轴移动到 Z i Z_{i} Zi轴的距离;
(2) α i − 1 \alpha_{i-1} αi1:绕 X i − 1 X_{i-1} Xi1轴,从 Z i − 1 Z_{i-1} Zi1轴旋转到 Z i Z_{i} Zi轴的角度;
(3) d i d_{i} di:沿 Z i Z_{i} Zi轴,从 X i − 1 X_{i-1} Xi1轴移动到 X i X_{i} Xi轴的距离;
(4) θ i \theta_{i} θi:绕 Z i Z_{i} Zi轴,从 X i − 1 X_{i-1} Xi1轴旋转到 X i X_{i} Xi轴的角度;

齐次变换矩阵
从坐标系 i − 1 i-1 i1到坐标系 i i i,先绕 X i − 1 X_{i-1} Xi1轴旋转角度 α i − 1 \alpha_{i-1} αi1,再沿 X i − 1 X_{i-1} Xi1轴平移 a i − 1 a_{i-1} ai1,然后绕 Z i Z_{i} Zi轴旋转角度 θ i \theta_{i} θi,最后沿 Z i Z_{i} Zi轴移动 d i d_{i} di。齐次变换矩阵 i − 1 i T _ { i - 1 } ^ { i } T i1iT可以写为:
在这里插入图片描述

2.3 SDH和MDH的区别及适用场景

2.3.1 SDH和MDH的区别

  (其实一直以来笔者都不太能区分这两种方法,笔者最开始学习机器人学是看的《机器人学导论》这本书,上面似乎是偏向于MDH方法,所以后续我都是习惯于用MDH去建模)
  (1)区别一:连杆坐标系建立的位置不同。SDH将连杆 i i i的坐标系固定在连杆的远端;MDH将连杆 i i i的坐标系固定在连杆的近端。
在这里插入图片描述

  (2)区别二:执行变换的顺序不同

2.3.2 SDH和MDH的适用场景

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

三、机器人运动学

3.1 创建一个连杆对象

  在机器人工具箱中,还用变量 σ i \sigma _ { i } σi表示机器人的关节类型, σ i = 0 \sigma _ { i } = 0 σi=0表示转动关节, σ i = 1 \sigma _ { i } = 1 σi=1表示移动关节(若未指定该参数,默认为转动关节)。
  在工具箱中,用函数Link( )可以创建一个机械臂对象,其中输入的参数顺序分别是:关节角 θ i \theta _ { i } θi、连杆偏距 d i d_{i} di、连杆长度 a i − 1 a_{i-1} ai1、连杆转角 α i − 1 \alpha_{i-1} αi1和关节类型。例如,创建一个关节角为30°,连杆偏距为0.2m,连杆长度为0.5m,连杆转角为60°,关节类型为旋转关节的连杆,代码如下所示:

L = Link([pi/6, 0.2, 0.5, pi/3, 0])

在这里插入图片描述

这里,Revolute表示转动关节,std表示标准D-H参数法,offset表示关节偏移量。可以通过以下命令获得连杆的各个参数:
 ● 获取连杆的关节类型:L.type( )(注意:老版本的工具箱是L.RP);
 ● 获取连杆的关节角:L.theta;
 ● 获取连杆的连杆偏距:L.d;
 ● 获取连杆的连杆长度:L.a;
 ● 获取连杆的连杆转角:L.alpha。

在这里插入图片描述
 ● 获取改连杆的齐次变换矩阵:L.A( θ \theta θ),例如连杆转动了30°,其齐次变换矩阵T为:

在这里插入图片描述

3.2 创建一个平面3-DOF的机械臂

  这里创建了一个平面三R机构(三个转动关节),该平面三连杆机构的DH参数表如下所示:
在这里插入图片描述

% standard-表示标准DH法
%               theta(z)   d(z)     a(x)     alpha(x)  
RRR_L(1) = Link([  0       0        1        0    ],'standard');
RRR_L(2) = Link([  0       0      0.8        0    ],'standard');
RRR_L(3) = Link([  0       0      0.6        0    ],'standard');

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

通过构造函数SerialLink( )可以给创建的机械臂对象命名,并显示出对象的信息。输入命令:

three_link = SerialLink(RRR_L, 'name', 'three-link-RRR')

运行结果:

在这里插入图片描述
用以下的命令可以获取已创建机械臂的各个参数:

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

在这里插入图片描述

同时也可以对创建的机械臂对象进行复制,如复制一个名称为“three_link2”的机械臂输人命令:

three_link2 = SerialLink(RRR_L, 'name', 'three-link-RRR_2')

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

使用teach( )函数,可以对创建的机器人进行示教,如图所示:

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

3.3 机器人正运动学

  机器人正运动学即给定一组关节角,计算出机器人末端相对于基坐标系的位置和姿态,如下图:
在这里插入图片描述

  机器人工具箱中,fkine( )可以进行正运动学计算,即给定关节变量,得到末端坐标系关于基坐标系的齐次变换矩阵(位置和姿态)。这里以3.2节的3-DOF平面机械臂为例,当机器人三个关节角都为0°时:

% RRR机械臂
clear;
close all;
clc;%               theta(z)   d(z)     a(x)     alpha(x)  
RRR_L(1) = Link([  0       0        1        0    ],'standard');
RRR_L(2) = Link([  0       0      0.8        0    ],'standard');
RRR_L(3) = Link([  0       0      0.6        0    ],'standard');three_link = SerialLink(RRR_L, 'name', 'three-link-RRR');
q0 = [0 0 0]'*pi/180;
T0 = three_link.fkine(q0)

运行结果:

在这里插入图片描述

当机器人一关节10°,二关节-30°,三关节60°时,机器人末端的位置和姿态如图:

在这里插入图片描述
可以用plot( )函数绘制此时机器人的状态,如图:
在这里插入图片描述

例子:给定平面3-RRR机械臂各个关节的角度如图所示,求解机器人运动过程中末端点的三维坐标

在这里插入图片描述

% RRR机械臂
clear;
close all;
clc;%               theta(z)   d(z)     a(x)     alpha(x)  
RRR_L(1) = Link([  0       0        1        0    ],'standard');
RRR_L(2) = Link([  0       0      0.8        0    ],'standard');
RRR_L(3) = Link([  0       0      0.6        0    ],'standard');three_link = SerialLink(RRR_L, 'name', '3-DOF');t = 0:0.05:4;
m = length(t);
theta1 = 120*sin(4*pi*t/4);
theta2 = 60*sin(2*pi*t/4);
theta3 = 30*sin(2*pi*t/4);q = [theta1;theta2;theta3]*pi/180;for i = 1:mT = three_link.fkine(q(:,i)');x(i) = T.t(1);y(i) = T.t(2);z(i) = T.t(3);subplot(3,3,[1 4 7])hold onplot3(x(i),y(i),z(i),'r*');hold onthree_link.plot(q(:,i)');subplot(3,3,2)hold onplot(t(i),q(1,i)*180/pi,'b.')xlabel('time /s')ylabel('\theta_1 /deg')subplot(3,3,5)hold onplot(t(i),q(2,i)*180/pi,'r.')xlabel('time /s')ylabel('\theta_2 /deg')subplot(3,3,8)hold onplot(t(i),q(3,i)*180/pi,'m.')xlabel('time /s')ylabel('\theta_3 /deg')subplot(3,3,3)hold onplot(t(i),x(i),'b.')xlabel('time /s')ylabel('x /m')subplot(3,3,6)hold onplot(t(i),y(i),'r.')xlabel('time /s')ylabel('y /m')subplot(3,3,9)hold onplot(t(i),z(i),'m.')xlabel('time /s')ylabel('z /m')
end

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

3.4 机器人逆运动学(未完待续)

笔者最近有点忙。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/720030.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Arduino应用开发——使用GUI-Guider制作LVGL UI并导入ESP32运行

Arduino应用开发——使用GUI-Guider制作LVGL UI并导入ESP32运行 目录 Arduino应用开发——使用GUI-Guider制作LVGL UI并导入ESP32运行前言1 使用GUI-Guider设计UI1.1 创建工程1.2 设计UI 2 ESP工程导入UI2.1 移植LVGL2.2 移植UI文件2.3 调用UI文件2.4 烧录测试 结束语 前言 GU…

二维码门楼牌管理系统技术服务:楼牌编设规则详解

文章目录 前言一、院落内新增楼栋的楼牌编制二、围合式或分片式建筑群的楼牌编设三、围合单位建筑内部的楼牌编制四、独栋单位建筑的楼牌编制五、无名称院落的楼牌编制六、同一裙楼上多栋楼房的楼牌编制 前言 随着城市建设的快速发展,门楼牌管理成为城市管理的重要…

山西电力市场日前价格预测【2024-02-27】

日前价格预测 预测说明: 如上图所示,预测明日(2024-02-27)山西电力市场全天平均日前电价为332.28元/MWh。其中,最高日前电价为544.59元/MWh,预计出现在19:00。最低日前电价为211.48元/MWh,预计…

如何在Linux使用Docker部署Redis并结合内网穿透实现公网远程连接本地数据库

文章目录 前言1. 安装Docker步骤2. 使用docker拉取redis镜像3. 启动redis容器4. 本地连接测试4.1 安装redis图形化界面工具4.2 使用RDM连接测试 5. 公网远程访问本地redis5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 正文开始前给大家推荐个网站…

还在手动Word转PPT?快来试试这些一键生成工具!

在我们日常的工作和学习中,将Word转化成PPT的需求时常出现,尤其是当我们需要进行演讲或者报告时。这不仅能使我们的演讲更具视觉冲击力,也有助于我们更好地传达信息。 那么,如何才能轻松地将Word转换成PPT呢?下面将为…

商家转账到零钱功能申请方法

商家转账到零钱是什么? 【商家转账到零钱】可以说是【企业付款到零钱】的升级版,商家转账到零钱可以为商户提供同时向多个用户微信零钱转账的能力,支持分销返佣、佣金报酬、企业报销、企业补贴、服务款项、采购货款等自动向用户转账的场景。…

Intel 芯片 Mac 如何重新安装系统

使用可引导安装器重新安装(可用于安装非最新的 Mac OS,系统降级,需要清除所有数据,过程确保连接上网络,虽然这种方式不会下载 Mac OS,但是需要下载固件等信息) 插入制作好的可引导安装器&#x…

leetcode 热题 100_找到字符串中所有字母异位词

题解一&#xff1a; 滑动窗口&#xff1a;类似于字符串匹配&#xff0c;但匹配异位词需要包含相同的字母及个数&#xff0c;可以分别用两个数组存储字符串s滑动窗口和字符串p的字母及个数&#xff0c;再用Array.equals()进行比对。对于s.length()<p.length()的情况需要特判。…

【python】python用户管理系统[简易版](源码+报告)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

怎么异地共享文件?

不同地点的团队成员之间共享文件是现代企业中常见的需求之一。随着分布式团队的不断增加&#xff0c;找到一种安全、高效的方式来实现异地共享文件变得尤为重要。本文将介绍一种名为【天联】的工具&#xff0c;它可以帮助团队成员在异地互相共享文件。 【天联】是一种专门为异地…

Corel 会声会影 2023 激活码 会声会影 2023 序列号生成器

会声会影 2023 已经出来很长时间了&#xff0c;但是对它的热爱一直持续不减&#xff0c;今天我给大家带来2023版本为用户带来的多个全新功能&#xff0c;可以更好的编辑视频&#xff0c;不过软件还是付费的&#xff0c;为此我带来了会声会影 2023序列号生成器&#xff0c;可以轻…

STM32 | STM32时钟分析、GPIO分析、寄存器地址查找、LED灯开发(第二天)

STM32 第二天 一、 STM32时钟分析 寄存器&#xff1a;寄存器的功能是存储二进制代码&#xff0c;它是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码&#xff0c;故存放n位二进制代码的寄存器&#xff0c;需用n个触发器来构成 在计算机领域&#x…

数码管的动态显示(一)

1.原理 把每一个数码管闪烁的时间设置为1ms&#xff0c;肉眼观察不到就会认为6个数码管在同时闪烁。 实验目标&#xff1a; 使用6位8段数码管实现数码管的动态显示&#xff0c;显示的内容就是0-999_999。当计数到最大值&#xff0c;让他归零&#xff0c;然后循环显示。每0.1秒…

Doris2.0 部署流程、遇到的问题及1.0升级至2.0流程整理

背景 Doris 1.0 版本总是出现副本损坏问题&#xff0c;机器资源充足&#xff0c;FE 和 BE 数据足够&#xff0c;每日的数据量一般&#xff0c;但是总是隔三差五出现入库时副本损坏问题。Doris 已经发布了2.0 版本&#xff0c;本周又发布了新版本 2.0.5。升级 Doris 能否解决副…

Jenkins 安装

目录 1、部署 Jenkins 安装配置 Jenkins 解锁 Jenkins 安装 Jenkins 插件 创建管理员账号 手动安装插件 2、Jenkins 从 GitLat 拉取代码 安装 Jenkins 插件 在 node-16 上生成密钥对 把公钥配置到 gitlab 上 把 root 用户私钥配置到 jenkins 上 Jenkins 创建一个任务…

命名空间(namespace)

定义 在C中&#xff0c;命名空间&#xff08;Namespace&#xff09;是一个特性&#xff0c;用于封装代码并避免名称冲突。命名空间可以看作是一个容器&#xff0c;其中可以包含类、函数、变量、常量、其他命名空间等。通过使用命名空间&#xff0c;我们可以更好地组织代码&…

面试经典150题 -- 回溯 (总结)

总的链接 : 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 17 . 电话号码的字母组合 1 . 先创建一个下标 与 对应字符串映射的数组&#xff0c;这里使用hash表进行映射也是可以的 &#xff1b; 2 . 对于回溯 &#xff0c;…

python数据类型及转换

一、数据类型 数据类型分为数值型、布尔型、字符串型等 1.1数值类型 数值类型可以分为整数类型、浮点数类型、复数类型 1.1.1整数类型 (1)概念&#xff1a;整数类型指数值是没有小数部分的&#xff0c;包含正整数、负整数和0 (2)进制种类&#xff1a;十进制--->234、5…

【网站项目】139选课排课系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

Redis 群集

简介 在现在的互联网大潮中&#xff0c;NoSQL可谓家喻户晓&#xff0c;Redis作为NoSOL大军中极其重要的一员&#xff0c;是我们走向架构道路的一条必经之路。 Redis介绍 Redis 数据库是一个非关系型数据库&#xff0c;在正式学习Redis之前&#xff0c;我们先来了解关系型数据库…