机器人工具箱学习(二)

一、机械臂及运动学

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:m
    T = 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 on
    plot3(x(i),y(i),z(i),'r*');
    hold on
    three_link.plot(q(:,i)');
    
    subplot(3,3,2)
    hold on
    plot(t(i),q(1,i)*180/pi,'b.')
    xlabel('time /s')
    ylabel('\theta_1 /deg')
    
    subplot(3,3,5)
    hold on
    plot(t(i),q(2,i)*180/pi,'r.')
    xlabel('time /s')
    ylabel('\theta_2 /deg')
    
    subplot(3,3,8)
    hold on
    plot(t(i),q(3,i)*180/pi,'m.')
    xlabel('time /s')
    ylabel('\theta_3 /deg')
    
    subplot(3,3,3)
    hold on
    plot(t(i),x(i),'b.')
    xlabel('time /s')
    ylabel('x /m')
    
    subplot(3,3,6)
    hold on
    plot(t(i),y(i),'r.')
    xlabel('time /s')
    ylabel('y /m')
    
    subplot(3,3,9)
    hold on
    plot(t(i),z(i),'m.')
    xlabel('time /s')
    ylabel('z /m')
end

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

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

笔者最近有点忙。。。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring中Bean的作用域、实例化方式、生命周期、循环依赖问题

Spring中Bean的作用域、实例化方式、生命周期、循环依赖问题 一、Bean的作用域1.singleton2.prototype3.其他scope值 二、Bean的实例化方式1.通过构造方法实例化2.通过简单工厂模式实例化3.通过factory-bean实例化4.通过FactoryBean接口实例化5.BeanFactory和FactoryBean的区别…

http【详解】状态码,方法,接口设计 —— RestfuI API,头部 —— headers,缓存

http 状态码 1xx 服务器收到请求 2xx 请求成功 200 成功 3xx 重定向(目标服务器返回另一个服务器的地址,浏览器会自动去访问另一个服务器) 常见应用场景:搜索引擎,短网址 301 永久重定向 (常用于已停服的…

05-prometheus的联邦模式-分布式监控

一、联邦模式概述 1,架构介绍 由于,在大型企业中,被监控项目比较多,多到一台prometheus服务无法承载其大量的监控数据的传输,所以,联邦模式应运而生,它同等于zabbix监控的分布式,就…

Web前端---表格和表单

1.表格概述 表格标记&#xff1a;<table></table> 表格标题标记&#xff1a;<caption></caption> 表头&#xff1a;<th></th>------heading 行标记&#xff1a;<tr></tr>-----r是row 列标记&#xff1a;<td></t…

2024年计算语言学与自然语言处理国际会议(CLNLP 2024) | Ei、Scopus双检索

会议简介 Brief Introduction 2024年计算语言学与自然语言处理国际会议(CLNLP 2024) 会议时间&#xff1a;2024年7月19日-21日 召开地点&#xff1a;中国银川 大会官网&#xff1a;www.clnlp.org CLNLP 2024将围绕“计算语言学与自然语言处理”的最新研究领域而展开&#xff0c…

用FPGA CORDIC IP核实现信号的相位检测,计算相位角

用FPGA CORDIC IP核实现信号的相位检测 1.matlab仿真 波形仿真代码&#xff1a; 代码功能&#xff1a;生成一个点频信号s&#xff0c;求出s的实部和虚部&#xff1b;并且结算相位角atan2。画出图形&#xff0c;并且将Q和I数据写入文件中。 %代码功能&#xff1a;生成一个点…

Linux 之一:Linux 简介、客户端、安装

Linux简介 Linux 内核最初只是由芬兰人林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;在赫尔辛基大学上学时出于个人爱好而编写的。 Linux&#xff0c;全称GNU/Linux&#xff0c;是一种免费使用和自由传播的类UNIX操作系统&#xff0c;其内核由林纳斯本纳第克特托瓦兹于…

Java 反射详解:动态创建实例、调用方法和访问字段

“一般情况下&#xff0c;我们在使用某个类之前已经确定它到底是个什么类了&#xff0c;拿到手就直接可以使用 new 关键字来调用构造方法进行初始化&#xff0c;之后使用这个类的对象来进行操作。” Writer writer new Writer(); writer.setName("少年");像上面这个…

HTTP常用状态码详解

目录 1xx - 信息性状态码 2xx - 成功状态码 3xx - 重定向状态码 4xx - 客户端错误状态码 5xx - 服务器错误状态码 总结 HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是一种用于传输超文本的应用层协议。在HTTP通信中&#xff0c;服务器和客户端之间会通过状态…

使用华为云云函数functiongraph

之前使用腾讯云serverless&#xff0c;但是突然开始收费了。所以改用functiongraph 首先登陆华为云。 目录 1.登录华为云 2.在控制台找到functiongraph并开通 3.添加依赖包&#xff1a; 3.1 制作依赖包 3.2引入依赖包 4.发送请求 4.1直接发送 4.1.1uri 4.1.2 请求头…

使用word写论文或项目书时,插入图片显示不完整或随文字移动解决办法

一、背景 虽然我们写科技论文时可以用Latex进行排版&#xff0c;但在写项目书或硕士论文时&#xff0c;一般给的模板都是word类型&#xff0c;所以我们还是不能放弃word的使用。但在word中插入图片时&#xff0c;会出现图片显示不完整情况&#xff0c;如下图所示&#xff0c;具…

单调队列(347. 前 K 个高频元素239. 滑动窗口最大值)

单调队列和单调栈其实差不多,就是维护一个区间单调的队列或者是栈,单调队列就是我们所说的大顶堆小顶堆, //升序队列 小顶堆 great 小到大 priority_queue <int,vector<int>,greater<int> > pri_que; //降序队列 大顶堆 less 大到小 默认 priority_qu…

xss.haozi.me:0x01

<textarea></textarea> 标签是不可以写入javascript代码的 所以我们要把textarea标签给闭合掉 这样就成功了 </textarea><script>alert(1)</script>

【Java设计模式】四、原型设计模式

文章目录 1、原型设计模式2、深克隆和浅克隆 1、原型设计模式 说明&#xff1a; 用一个原型对象&#xff0c;创建和原型对象相同的对象&#xff0c;以能够保证创建对象的性能是创建大量相同对象的最佳方式 使用场景&#xff1a; 对象的创建非常复杂&#xff0c;可以使用原型…

神经网络结构——CNN、RNN、LSTM、Transformer !!

文章目录 前言 一、什么是CNN 网络结构 解决问题 工作原理 实际应用 二、什么是RNN 网络结构 解决问题 工作原理 应用场景 三、什么是LSTM 网络结构 解决问题 工作原理 应用场景 四、什么是Transformer 网络结构 解决问题 工作原理 BERT GPT 前言 本文将从什么是CNN&#xff1…

使用 Footprint Analytics 提升 Web3 项目的空投活动

作者&#xff1a;stellafootprint.network 空投已成为 Web3 项目提升知名度、激励早期贡献者并吸引新用户的核心策略。尽管空投的概念一目了然——即向各类钱包免费发放代币&#xff0c;但要成功实施却需要周密的执行和战略规划。单纯的代币分发并非万全之策。在许多的空投后&a…

爬虫案例一

首先我举一个案例比如豆瓣电影排行榜 (douban.com)这个电影&#xff0c;首先我们进去检查源代码 说明源代码有&#xff0c;说明是服务器渲染&#xff0c;可以直接那html 但是返回的结果是空&#xff0c;所以我们需要在头里面加上User-Agent 然后可以看到有返回的结果&#xff0…

VBA字典与数组第十二讲:行列数相同的数组间运算

《VBA数组与字典方案》教程&#xff08;10144533&#xff09;是我推出的第三套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;字典是VBA的精华&#xff0c;我要求学员必学。7.1.3.9教程和手册掌握后&#xff0c;可以解决大多数工作中遇到的实际问题。…

RabbitMQ的整体架构是怎么样的?

RabbitMQ是一个开源的消息中间件&#xff0c;用于在应用程序之间传递消息。它实现了AMQP(高级消息队列协议)并支持其他消息传递协议&#xff0c;例如STOMP(简单文本定向消息协议)和MQTT&#xff08;物联网协议&#xff09; 他的整体架构大致如下&#xff1a; Producer&#xf…

ABAP - SALV教程12 显示图标和提示信息

ALV要求字段的值为图标的需求并不多见&#xff0c;一般都用于红黄绿灯&#xff0c;来表示单据的执行状态&#xff0c;添加图标的方式也可以实现红黄绿灯的功能&#xff0c;也可以参考SALV实现红黄绿灯这篇文章&#xff1a;http://t.csdnimg.cn/Dzx7x效果图SAVL列设置为图标图标…