机器人学——3.2-正运动学
机械臂的正运动学通常表述为如下的函数形式:
ξE=K(q)\xi_E=\mathcal{K}(q) ξE=K(q)它表明末端执行器的位姿是基于关节坐标的一个函数。若使用齐次变换,其表达式将是由之前推导的连杆坐标系变换矩阵方程所给的单个连杆变换矩阵 j−1Aj^{j-1}A_jj−1Aj 的简单乘积。对于一个 NNN 轴机械臂,有
ξE∼0TE=0A11A2⋯N−1AN\xi_E\sim{}^0T_E={}^0A_1{}^1A_2\cdots{}^{N-1}A_N ξE∼0TE=0A11A2⋯N−1AN
对于任何一个串联机械臂,无论其关节的数量和类型如何,都可以计算出其正向运动学的解。我们以后会详细讨论如何确定机器人上每个连杆的 D-H 参数。
末端执行器的位姿 ξE∼TE∈SE(3)\xi_E\sim T_E\in SE(3)ξE∼TE∈SE(3) 共有 666 个自由度—— 333 个移动自由度和 333 个转动自由度。因此为了使末端执行器具有任意的位姿,机械臂通常具有 666 个关节或者自由度。对于一个 666 轴机器人,其总的变换矩阵通常被写作 T6T_6T6。
两连杆机器人
我们讨论一个如图所示的两连杆平面机械手。它的 D-H 参数如下
连杆 | θi\theta_iθi | did_idi | aia_iai | αi\alpha_iαi | σi\sigma_iσi |
---|---|---|---|---|---|
111 | q1q_1q1 | 000 | 111 | 000 | 000 |
222 | q2q_2q2 | 000 | 111 | 000 | 000 |
然后我们用这些参数创建一个Link
对象的向量:
>> L(1) = Link([0 0 1 0]);
>> L(2) = Link([0 0 1 0]);
>> L
L = theta=q1, d= 0, a= 1, alpha= 0, offset= 0 (R,stdDH)theta=q2, d= 0, a= 1, alpha= 0, offset= 0 (R,stdDH)
这个向量将被传递给构造函数SerialLink
:
>> two_link = SerialLink(L, 'name', 'two link');
>> two_link
two_link =
two link (2 axis, RR, stdDH, fastRNE)
+---+-----------+-----------+-----------+-----------+-----------+
| j | theta | d | a | alpha | offset |
+---+-----------+-----------+-----------+-----------+-----------+
| 1| q1| 0| 1| 0| 0|
| 2| q2| 0| 1| 0| 0|
+---+-----------+-----------+-----------+-----------+-----------+
grav = 0 base = 1 0 0 0 tool = 1 0 0 0 0 0 1 0 0 0 1 0 0 9.81 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1
它将会返回一个SerialLink
对象,显示如下:它为这个机器人提供了一种简明的描述。可以看出,该机器人的结构字符串为“RR
”,表明它有两个转动关节,而且它是使用标准的 D-H 参数定义的,另外重力默认作用于z轴方向(与机器人运动平面垂直)。同时对象中还列出了连杆的运动学参数,而关节变量用“q1
”和“q2
”表示。我们还为机器人取了一个名字,它在任何时候显示机器人时都会出现。输入指令:
>> mdl_planar2
它将直接执行上述步骤,将该机器人定义在 MATLAB 的工作空间,并创建名为twolink
的SerialLink
对象。
SerialLink
对象的一些简单的操作如下
>> two_link.n
ans =2
该指令返回关节数目。
>> links = two_link.links
links = theta=q1, d= 0, a= 1, alpha= 0, offset= 0 (R,stdDH)theta=q2, d= 0, a= 1, alpha= 0, offset= 0 (R,stdDH)
该指令返回一个Link
对象的向量,Link
对象中包含机器人。我们还可以复制一个SerialLink
对象,并命名为foo
:
>> clone = SerialLink(two_link, 'name', 'foo')
clone =
foo (2 axis, RR, stdDH, fastRNE)
+---+-----------+-----------+-----------+-----------+-----------+
| j | theta | d | a | alpha | offset |
+---+-----------+-----------+-----------+-----------+-----------+
| 1| q1| 0| 1| 0| 0|
| 2| q2| 0| 1| 0| 0|
+---+-----------+-----------+-----------+-----------+-----------+
grav = 0 base = 1 0 0 0 tool = 1 0 0 0 0 0 1 0 0 0 1 0 0 9.81 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1
现在可以让机械臂工作了。正向运动学的计算使用了fkine
方法。这个例子中,q1=q2=0q_1=q_2=0q1=q2=0。
>> two_link.fkine([0 0])
ans =1 0 0 20 1 0 00 0 1 00 0 0 1
该方法将返回代表机器人第二个连杆坐标系位姿的齐次变换 T2T_2T2。对于一个不同的位形,工具位姿为
>> two_link.fkine([pi/4 -pi/4])
ans =1.0000 0 0 1.70710 1.0000 0 0.70710 0 1.0000 00 0 0 1.0000
按照惯例,机器人工具箱使用的关节坐标都是行向量。
用以下指令可以画出机器人的图形:
>> two_link.plot([0 0])
另一种位姿
>> two_link.plot([pi/4 -pi/4])
图中包含了机器人的名称,末端连杆的坐标系(此例的 T2T_2T2),所有的关节和它们的轴线,以及机器人投影在地面上的影子。有关plot
方法的更多特性,如多视图和多机器人绘制,之后有机会再介绍,更详细的说明参见在线文档。
上面介绍的简单两连杆机器人所能达到的姿态有限,因为它的运动完全在 xyxyxy 平面内,其任务空间是 J⊂R2\mathcal{J}\subset\mathbb{R}^2J⊂R2。
六轴机器人
真正实用的机器人的任务空间是 J⊂SE(3)\mathcal{J}\subset SE(3)J⊂SE(3),这就使得其末端执行器能到达任意的位置和姿态。这个任务空间有 666 个空间自由度:333 个平移和 333 个转动。这需要一个具有位形空间 C⊂R6\mathcal{C}\subset\mathbb{R}^6C⊂R6 的机器人,即一个有 666 关节的机器人。本节中,我们将以 Puma560 机器人作为所有全旋转六轴机械臂的一个例子来介绍。我们使用如下指令来定义一个 Puma560 机器人的实例:
>> mdl_puma560
它将在工作区中创建一个名为p560
的SerialLink
对象:
>> p560
p560 =
Puma 560 (6 axis, RRRRRR, stdDH, fastRNE) viscous friction; params of 8/95;
+---+-----------+-----------+-----------+-----------+-----------+
| j | theta | d | a | alpha | offset |
+---+-----------+-----------+-----------+-----------+-----------+
| 1| q1| 0| 0| 1.571| 0|
| 2| q2| 0| 0.4318| 0| 0|
| 3| q3| 0.15| 0.0203| -1.571| 0|
| 4| q4| 0.4318| 0| 1.571| 0|
| 5| q5| 0| 0| -1.571| 0|
| 6| q6| 0| 0| 0| 0|
+---+-----------+-----------+-----------+-----------+-----------+
grav = 0 base = 1 0 0 0 tool = 1 0 0 0 0 0 1 0 0 0 1 0 0 9.81 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1
请注意,aja_jaj 和 djd_jdj 都采用国际标准单位,这意味着正向运动学的平移部分也将使用国际标准单位。
指令“md1_puma560
”还在工作区中创建了大量关节坐标向量,它们代表了一些典型的机器人位形:
qz
|
(0,0,0,0,0,0)(0, 0, 0, 0, 0, 0)(0,0,0,0,0,0) | 零角度 |
---|---|---|
qr
|
(0,π2,−π2,0,0,0)(0, \dfrac{\pi}{2}, -\dfrac{\pi}{2}, 0, 0, 0)(0,2π,−2π,0,0,0) | 就绪状态,机械臂伸直且垂直 |
qs
|
(0,0,−π2,0,0,0)(0, 0, -\dfrac{\pi}{2}, 0, 0, 0)(0,0,−2π,0,0,0) | 伸展状态,机械臂伸直且水平 |
qn
|
(0,π4,−π,0,π4,0)(0, \dfrac{\pi}{4}, -\pi, 0, \dfrac{\pi}{4}, 0)(0,4π,−π,0,4π,0) | 标准状态,机械臂处于一个灵巧工作姿态(远离奇异点) |
使用plot
方法绘制位形,例如
>> p560.plot(qz)
机器人的正向运动学计算如下:
>> p560.fkine(qz)
ans =1.0000 0 0 0.45210 1.0000 0 -0.15000 0 1.0000 0.43180 0 0 1.0000
它返回一个对应末端执行器位姿的齐次变换 T6T_6T6。机器人上连杆 666 坐标系 {6}\{6\}{6} 的原点被定义为最后三个关节轴的交点——这个点在机器人的腕关节内部。通过如下的命令:
>> p560.tool = transl(0, 0, 0.2);
我们可以定义一个工具变换,从 T6T_6T6 坐标系变换到实际的工具顶端。在本例中,工具顶端是沿着 T6T_6T6 的 zzz 轴延伸了 200mm200mm200mm。此时,工具顶端(也称工具中心点或者 TCP)的位姿变成
>> p560.fkine(qz)
ans =1.0000 0 0 0.45210 1.0000 0 -0.15000 0 1.0000 0.63180 0 0 1.0000
我们在定义上述运动学变换时,认为机器人的基座点是位于机器人结构内部的腰关节和肩关节轴线的交点上。Puma560 机器人有一个 303030 英寸高的底座结构。我们可以通过一个基座变换将机器人的原点从其内部转移到底座的下端部:
>> p560.base = transl(0, 0, 30*0.0254);
其中,为了一致,我们将底座高度转换为了国际标准单位。现在,经过基座变换和工具变换之后,正向运动学变为
>> p560.fkine(qz)
ans =1.0000 0 0 0.45210 1.0000 0 -0.15000 0 1.0000 1.39380 0 0 1.0000
可以看到,现在工具的 zzz 坐标值比以前更大。
我们还可以做更多有趣的事情,例如:
>> p560.base = transl(0, 0, 3) * trotx(pi);
>> p560.fkine(qz)
ans =1.0000 0 0 0.45210 -1.0000 -0.0000 0.15000 0.0000 -1.0000 2.36820 0 0 1.0000
它将机器人的坐标原点比世界坐标原点升高了 3m3m3m,并让机器人坐标系绕着 xxx 轴旋转 180°180°180°。现在机器人就像挂在天花板上一样!(可能需要缩放后才能看得见)
机器人工具箱支持关节角按时间序列或按轨迹线的显示方式,例如,我们定义一个不同时间的关节坐标值:
>> q
q =0 0 0 0 0 00 0.0365 -0.0365 0 0 00 0.2273 -0.2273 0 0 00 0.5779 -0.5779 0 0 00 0.9929 -0.9929 0 0 00 1.3435 -1.3435 0 0 00 1.5343 -1.5343 0 0 00 1.5708 -1.5708 0 0 0
其中每一行表示不同时间步下的关节坐标值,而每列的数字则对应每个关节。此时再使用方法fkine
:
>> T = p560.fkine(q)
它将返回一个三维矩阵:
>> about(T)
T [double] : 4x4x8 (1.0 kB)
其中,前两维是一个 4×44×44×4 阶的齐次变换矩阵,第三维是time step。对应于q
中第 444 行关节坐标值的齐次变换矩阵是
>> T(:,:,4)
ans =1.0000 0.0000 0 0.38200 -1.0000 -0.0000 0.15000 0.0000 -1.0000 2.13230 0 0 1.0000
之后我们还会讨论如何创建一个轨迹。
机器人学——3.2-正运动学相关推荐
- 中正平和的机器人学笔记——1. 机械臂正运动学(附MATLAB代码)
中正平和的机器人学笔记--1.正运动学 0. 何为运动学?何为正运动学? 运动学主要研究的就是机械臂的运动特性(位置.速度.加速度等),但是不考虑使机械臂产生运动时施加的力和力矩(这部分是动力学).而 ...
- 机器人学回炉重造(1-2):各种典型机械臂的正运动学建模(标准D-H法)
文章目录 写在前面 三连杆平面机械臂 平行四边形操作臂 闭链结构 例:平行四边形操作臂 球形臂 拟人臂 球腕 斯坦福机械臂 带球形手腕的拟人化机械臂 DLR机械臂 参考文献 写在前面 本文所有机械臂均 ...
- 机器人学基础(1)-位置运动学-正运动学、逆运动学方程建立及其求解
机器人学基础(1)位置运动学:正运动学.逆运动学方程建立及其求解 机器人学基础学了个知识框架入门,以此来写一下总结笔记,便于以后要用到相关知识点进行翻阅. 本次机器人学基础笔记主要分为几个章节:位置运 ...
- 【现代机器人学——螺旋理论】UR5机器人正运动学求解
系列文章目录 [现代机器人学--螺旋理论]UR5机器人正运动学求解 [现代机器人学--螺旋理论]UR5机器人逆运动学求解 提示:本文介绍基于螺旋理论分析的UR5机器人正运动学求解思路,仅供参考. 文章 ...
- 【机器人学】基于PoE模型的串联机械臂UR5的正运动学、微分运动学和逆运动学
文章目录 基本概念 正运动学 源码 一阶运动学 基本概念 PoE(Product of Exponential)指数积公式. PoE和DH的作用都是一样的. 实际使用过程中,绝大多数在售的机器人还都是 ...
- 【机器人学】3-RUU-delta并联机器人正运动学、逆运动学和微分运动学
文章目录 串联和并联机器人对比 delta机器人 逆运动学 正运动学 微分运动学 工作空间 串联和并联机器人对比 串联机器人和并联机器人各有优缺点. 串联机器人 优点 工作空间大: 可实现的姿态多: ...
- 工业机器人——4 正运动学(台大机器人学学习笔记)
前面几篇文章,我们对于如何描述刚体的运动状态进行了具体的讲解,今天开始我们学习机械手臂的正向运动学. 1)定义 运动学(kinematics):讨论运动状态的本身,不涉及产生运动的力. 具体描述就是位 ...
- 中正平和的机器人学笔记——6. 一种气驱型柔性臂的正运动学模型
1. 前言 柔性臂是当前机器人领域一个比较热的研究方向,国内外高校如MIT.Stanford.JHU和我校.上交.中科大.北航等等都有做研究.大致可以分为三类:气驱/绳驱,超弹性材料,智能材料(DE/ ...
- 3. 机器人正运动学---坐标系及其变换
目录 1. 引言 2. 位姿的描述(位置与姿态) 2.1 平移的描述(位置) 2.2 旋转的描述(姿态) 3. 总结 1. 引言 个人认为机器人运动学是整个机器人学的核心内容.仍然以前面的SCARA机 ...
- python 机械臂控制_机械臂正运动学-DH参数-Python快速实现
机械臂正运动学-DH参数-Python快速实现 前言: 最近在玩一个非常弱智的机械臂,好多功能都没有,连个配套的仿真环境都没, 虚拟边界和碰撞检测的功能都非常难用. 没办法,我只能自己实现一个简陋的虚 ...
最新文章
- script 录制终端会话
- IOS网络编程之http请求响应篇
- Redis(RedisTemplate)使用list链表
- CentOS 安装中文语言包 教程
- 计算机应用基础word教程,计算机应用基础-文字处理word教程PPT课件.ppt
- ListView控件使用简介(转载)
- 计算机制作贺卡教案,制作贺卡教案
- 电脑、手机 自动化 键鼠操作( 类似按键精灵 )
- 游戏辅助制作技术分析
- Mixly遥控调光器
- 100条历史典故,读懂半个中国
- C++11 多线程之 packaged_task
- oracle误删除一条数据库,Oracle误删除数据的恢复方法
- Git Bash 下进行快速复制粘贴
- 性能测试的实施及总结(二)
- java计算机毕业设计康养旅游信息系统源程序+mysql+系统+lw文档+远程调试
- win10下安装win7双系统
- 外交部发言人与BBC恳谈绿坝和娃
- 读书笔记--《初等数论(第三版)》(闵嗣鹤 严士健 编)第一章 整数可除性(上)
- 几种常见的数字签名算法比较