Difference between revisions of "Element Coordination/zh-hans"

From SoftMC-Wiki
Jump to: navigation, search
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{Languages}}
+
{{Languages|Element_Coordination}}
= 介绍 =  
+
=全局坐标概念 =  
  
此功能的主要目标是几个机器人的空间和时间上运动同步。这将使用系统中存在的标准主 - 从关系将其扩展为通用机器人到机器人连接。将要使用的功能是'''移动坐标系特性''',通常用于'''传输带跟踪'''。移动坐标系的源将从简单的轴列表扩展到任何机器人类型的笛卡尔命令(SETPOINT,HERE)。
+
对于使用不同点类型的''全局坐标概念''的机器人已经被定义。 这允许以一种常见的独特格式给予机器人位置,以独立地观察机器人具有多少轴。 这里使用的关键属性是机器人的[[MC-Basic:robot.BASE|base]]变换,如[[Robot Working Frames|Robot_Working_Frames]]所述
  
主机器人是从机器人跟随的移动坐标系的主源。 将使用相同的同步算法,除了与跟踪窗口和触发相关的问题(这两个将是无关紧要的)。
+
== 基坐标系属性 ==
 +
机器人有两个笛卡尔坐标系:世界(机器人)坐标系和基坐标系。
  
跟踪期间从机器人的相对运动是允许的,在常规的输送机跟踪以相同的方式执行。
+
=== 世界(机器人)坐标系 ===
  
机器人的相互空间关系将通过新添加的基坐标系和移动坐标系的对象位置偏移来定义。 与此同时,可以实现不同点类型(世界(机器人)框架)和/或不同NDOF的机器人的相互协作。
+
在由''q = (q<sub>1</sub>,q<sub>2</sub>,q<sub>3</sub>, .... , q<sub>n</sub>)''定义的机器人姿势中,n是机器人的NDOF。 世界(机器人)参考坐标由下式定义:
  
 +
<center>'''''p<sub>world</sub> = DirectKinematics (q)'''''</center>
  
 +
其中p可以是:p =(x,y,z,偏航,俯仰,滚动)取决于机器人运动学。
  
{{Note/Important| 只有在机器人具有相同点类型的情况下,才能使用完整的位置(位置+姿态)。 在具有不同点类型的机器人的情况下,仅跟踪主机器人位置的位置部分(X,Y,Z)。 姿态角(Yaw,Pitch,Roll)将 '''被忽略 '''}}
+
{{Note|为了简化讨论,我们假定该'''''工具'''''包含在正运动学计算中。这里省略了工件和工作台的坐标系。}}
  
  
{{Note/Important| 在具有相同点类型的机器人的情况下,用户能够选择是仅仅在位置或姿态坐标上进行跟踪或者在两者上进行跟踪。请参阅[[MC-Basic:movingFrame.TYPE|MovingFrame.type]]属性。}}
+
=== 基坐标系 ===
  
 +
基坐标系是由[[MC-Basic:robot.BASE|robot.base]]属性移动的世界(机器人)坐标系:
  
{{Note| 在跟踪期间检测(监控)轴的位置限制和加速度/速度阈值,方式与常规传送带跟踪相同。 }}
+
p<sub>base</sub> = base:p<sub>world</sub>
  
 +
其中''':'''是复合运算符。
  
{{Note/Danger|需要重要强调的是此功能(使用基于机器人的运动坐标系的元素协作)'''不会'''阻止机器人碰撞。 机器人防碰撞完全脱离了这个主题。}}
+
== 全局基坐标属性(全局坐标) ==
  
= 系统设置 =
+
所有用户输入(目标运动指令点,运动参考坐标等)都在基座坐标系中给出。 然而,这些系统可以与机器人不同(例如,R1具有XYZR和R2具有XYZYPR)。 因此,我们假设一个共同的(全局)基坐标系,将所有机器人转换到一个系统:
  
== 数据创建 ==
+
p<sup>1</sup><sub>global</sub> = '''R1.glbalbase''':R1.base:R1.DirectKinemaitcs(R1.pcmd) <br>
 +
p<sup>2</sup><sub>global</sub> = '''R2.glbalbase''':R2.base:R2.DirectKinemaitcs(R2.pcmd) <br>
 +
p<sup>3</sup><sub>global</sub> = '''R3.glbalbase''':R3.base:R3.DirectKinemaitcs(R3.pcmd) <br>
 +
...<br>
 +
p<sup>m</sup><sub>global</sub> = '''Rm.glbalbase''':Rm.base:Rm.DirectKinemaitcs(Rm.pcmd) <br>
  
ControlStudio中有两种运动参考系(MF)对象:基于轴和基于机器人。它们都以与使用该命令的基于轴的方式以相同的方式创建:<br>
+
假设系统有''m''个机器人
  
<center>'''COMMON SHARED <mf name> as moving frame of <mf-type>'''</center><br>
+
这是通过添加始终与实际机器人点类型无关的[[MC-Basic:robot.GLOBALBASE|<robot>.globalbase]]位置来实现的,在XYZYPR系统中给出
  
基于轴和基于机器人的运动参考系之间的差异在提供给 '''[[MC-Basic:movingFrame.MASTERSOURCE| MasterSource]]''' 命令的参数中。在<u>基于轴</u>的MF中,仅使用主轴作为主源。此外,在<u>基于轴</u>的MF中,所有位置MF的属性(零,此处,上行,下行)的点类型与MF的点类型(即<mf-type>)相同。<br>
 
  
<u>基于机器人</u> 的MF的主源是具有自己的点类型的机器人元素。在<u>基于机器人</u>的MF中,MF的位置和机器人的位置之间的关系将使用新引入的属性来定义。 ''(参考: Translation Transformation )''
+
<div style="background-color:yellow;">
 +
'''为了使全局坐标系尽可能的使用,运动命令(MOVE,MOVES,MOVESKD,CIRCLE ...)的扩展方式除了目前仅允许的机器人点类型的位置之外,还可以接受XYZYPR点类型的位置。
 +
'''
 +
</div>
  
== 主源 ==
 
  
[[MC-Basic:movingFrame.MASTERSOURCE|<Moving Frame>.MasterSource]]属性将允许将机器人元素的命令(setpoint)或反馈(here)添加为主站,以下句法将有效:
+
{{Note|给定的扩展适用于最多6个NDOF(不超过6个)的机器人。}}
  
[[MC-Basic:movingFrame.MASTERSOURCE|<Moving Frame>.MasterSource]] = <robot>.setpoint
 
and
 
[[MC-Basic:movingFrame.MASTERSOURCE|<Moving Frame>.MasterSource]] = <robot>.here
 
  
{{Note|'''master'''<robot>的点类型不必与<nowiki><moving frame></nowiki>的点类型匹配!
+
{{Note| 如果机器人点类型已经是XYZYPR,则全局和基本属性具有绝对相同的功能,可以相互添加。 他们都可以使用,但我们强烈建议只使用一个(而另一个保留为零),以减少混乱。}}  
但是,<nowiki><moving frame></nowiki>和'''从'''机器人的类型必须匹配!!}}
 
  
  
=== MF.TYPE ===
 
将主机器人的位置分配给主源会自动在MF和主机器人的位置和方向之间施加一定的关系。'''下表说明了主站和从站点类型与<MF> .type值之间的关系。'''
 
  
→ 将[[MC-Basic:movingFrame.MASTERSOURCE|MasterSource]]设置为主机器人位置之一(SetPoint或Here)将自动将Moving-Frame'''[[MC-Basic:movingFrame.TYPE|type]]'''更改为其默认值(参见表)并将其锁定。<u>锁定</u>意味着根据给定的MasterSource,只允许某些MF.type值(表中带有“?”符号)。并且如果用户尝试分配任何其他值,将返回错误。
+
与此同时,还有两个新的属性:
  
 +
* [[MC-Basic:robot.GLOBALSETPOINT|<robot>.globalsetpoint]]类似于常规[[MC-Basic:robot.SETPOINT|<robot>.setpoint]]
 +
* [[MC-Basic:robot.GLOBALHERE|<robot>.globalhere]] 类似于常规[[MC-Basic:robot.HERE|<robot>.here]]
  
{| border = "1" valign = "top"
+
== 例子 ==  
|- valign="top" align = "center"
 
| [[MC-Basic:movingFrame.TYPE|<mf>.'''type''']] value || '''axis-MF'''|| '''robot-MF''' <br> pointtype(position)<sub>robot</sub> = robot-MF pointtype(position)<sub>MF</sub> <br>''or:''<br> pointtype(orientation)<sub>robot</sub> = robot-MF pointtype(orientation)<sub>MF</sub>|| '''robot-MF''' <br> neither position or orientation match
 
|-
 
| 0 (linear)  ||''' ✓'''(default) || invalid || invalid
 
|-
 
| 1 (rotary) || ✓ || invalid || invalid
 
|-
 
| 2 (rotary de-coupled) || ✓ || invalid || invalid
 
|-
 
| 3 (position only) || N/A || ✓ ||'''✓''' (default)
 
|-
 
| 4 (orientation only) || N/A || ✓ || invalid 
 
|-
 
| 5 (both pos. and ori.) || N/A || '''✓''' (default) || invalid
 
|-
 
|}
 
<br>
 
  
 +
给定SCARA和PUMA机器人在同一个生产单元中,SCARA机器人在PUMA机器人的上方:
  
====一些最常用的点类型的类型分配表 ====
 
  
{| border = "1" valign = "top"
+
[[File:Global Frames.png]]
|- valign="top" align = "center"
 
| || colspan="8" |'''master-robot'''
 
|-
 
|rowspan="8"|'''MF''' || || '''X''' || '''XY''' || '''XYZ''' || '''XYZR''' || '''XYZYPR''' || '''YPR''' || '''YP'''
 
|-
 
|  '''X''' || p || p || p || p || p || p || p
 
|-
 
|  '''XY''' || p || p || p || p || p || p || p
 
|-
 
|  '''XYZ''' || p || p || p || p || p || p || p
 
|-
 
|  '''XYZR''' || p || p || p || p/o/po || p || p || p
 
|-
 
|  '''XYZYPR''' || p || p || p || p || p/o/po || o || p<br>(inactive)
 
|-
 
|  '''YPR''' || p<br>(inactive) || p<br>(inactive) || p<br>(inactive) || p<br>(inactive) || o || o || p<br>(inactive)
 
|-
 
|  '''YP''' || p<br>(inactive) || p<br>(inactive) || p<br>(inactive) || p<br>(inactive) || p<br>(inactive) || p<br>(inactive) || o
 
|-
 
|}
 
  
* p(3) 仅位置
 
* o(4) 仅姿态
 
* po(5) 位置和姿态
 
  
 +
=== 使用全局坐标系 ===
  
{{Note| 在由主机器人点类型不足以驱动的纯方向运动参考系的情况下,类型将被设置为位置(3),但是运动参考系将无效(不能运动}}
+
执行以下运动命令:
  
 +
'''Move scara target<br>
 +
'''Move puma target<br>
 +
其中目标是点类型XYZYPR的位置<br>
 +
将其转移到每个机器人的基本坐标系中:
  
[[Fil
+
<u>对Scara:</u>
 +
 
 +
target<sup>scara</sup><sub>B</sub> ← scara.gbase<sup>-1</sup>:target
 +
 
 +
其中 "←" 表示仅复制X,Y,Z和旋转坐标
 +
 
 +
 
 +
<u>对Puma:</u>
 +
 
 +
target<sup>puma</sup><sub>B</sub> = puma.gbase<sup>-1</sup>:target
 +
 
 +
这里我们有"=" 符号,因为puma和全局坐标系具有相同的点类型
 +
 
 +
==== 数字示例 ====
 +
 
 +
<pre>
 +
Move scara #{100,100,700,0,0,50}
 +
Move puma  #{100,100,700,0,0,50}
 +
</pre>
 +
 
 +
有:
 +
 
 +
<pre>scara.gbase = #{0,100,700,0,0,0}
 +
scara.base  = #{100,100,0,0}
 +
 
 +
puma.gbase  = #{0,0,0,0,0,0}
 +
puma.base  = #{200,100,0,0,0,0}
 +
</pre>
 +
 
 +
我们获得'''SCARA'''的本地目标位置(在SCARA的基坐标系中):
 +
 
 +
 
 +
<nowiki>#</nowiki>{0,100,700,0,0,0}<sup>-1</sup> : #{100,100,700,0,0,50}为 #{'''100''' , '''0''' , '''0''' , 0 , 0 ,''' 50'''},可以写为:<br>
 +
<nowiki>#</nowiki>{100,0,0,50}← #{0,100,700,0,0,0}<sup>-1</sup> : #{100,100,700,0,0,50}
 +
表示目标点在SCARA的基坐标系是: '''<u>#{100,0,0,50}</u>'''
 +
 
 +
'''PUMA'''机器人本地目标点以类似的方法计算:
 +
 
 +
<nowiki>#</nowiki>{200,100,0,0,0,0}<sup>-1</sup> : #{100,100,700,0,0,50}为 #{'''-100''' , '''0''' , '''700''' , 0 , 0 ,''' 50'''}, which we can write as:<br>
 +
<nowiki>#</nowiki>{-100,0,700,0,0,50}← #{200,100,0,0,0,0}<sup>-1</sup> : #{100,100,700,0,0,50}
 +
表示目标点在PUMA机器人基坐标系上为: '''<u>#{-100,0,700,0,0,50}</u>'''
 +
 
 +
 
 +
 
 +
{{Note| PUMA运动学中的GBASE和BASE表示相同的事情,尽管可以给出不同的值(然后使用组合gbase:base),但强烈建议仅使用一个,另一个保留为零,即:#{0,0,0,0,0,0} }}
 +
 
 +
=== 使用基于机器人的运动参考系 ===
 +
 
 +
可以使用基于机器人的运动参考系实现相同的功能示例。
 +
 
 +
我们假设PUMA机器人是主机器人:
 +
 
 +
common shared MF as Moving Frame of XYZR
 +
 
 +
<pre>
 +
MF.MSource  = puma.setppoint
 +
MF.OBJECTLOC = #{0,0,0,0}
 +
MF.BASE      = Inverse(#{0,100,700,0,0,0})
 +
scara.MasterFrame = MF
 +
scara.slave  = 5
 +
</pre>
 +
 
 +
现在发行:<br>
 +
 
 +
Move puma target<br>
 +
''和''<br>
 +
Moves MF.zero<br>
 +
 
 +
将puma和scara移动到同样的位置(目标)。<br>

Latest revision as of 03:27, 31 May 2017

语言: English  • 中文(简体)‎

全局坐标概念

对于使用不同点类型的全局坐标概念的机器人已经被定义。 这允许以一种常见的独特格式给予机器人位置,以独立地观察机器人具有多少轴。 这里使用的关键属性是机器人的base变换,如Robot_Working_Frames所述

基坐标系属性

机器人有两个笛卡尔坐标系:世界(机器人)坐标系和基坐标系。

世界(机器人)坐标系

在由q = (q1,q2,q3, .... , qn)定义的机器人姿势中,n是机器人的NDOF。 世界(机器人)参考坐标由下式定义:

pworld = DirectKinematics (q)

其中p可以是:p =(x,y,z,偏航,俯仰,滚动)取决于机器人运动学。

NOTE-Info.svgNOTE
为了简化讨论,我们假定该工具包含在正运动学计算中。这里省略了工件和工作台的坐标系。


基坐标系

基坐标系是由robot.base属性移动的世界(机器人)坐标系:

pbase = base:pworld

其中:是复合运算符。

全局基坐标属性(全局坐标)

所有用户输入(目标运动指令点,运动参考坐标等)都在基座坐标系中给出。 然而,这些系统可以与机器人不同(例如,R1具有XYZR和R2具有XYZYPR)。 因此,我们假设一个共同的(全局)基坐标系,将所有机器人转换到一个系统:

p1global = R1.glbalbase:R1.base:R1.DirectKinemaitcs(R1.pcmd)
p2global = R2.glbalbase:R2.base:R2.DirectKinemaitcs(R2.pcmd)
p3global = R3.glbalbase:R3.base:R3.DirectKinemaitcs(R3.pcmd)
...
pmglobal = Rm.glbalbase:Rm.base:Rm.DirectKinemaitcs(Rm.pcmd)

假设系统有m个机器人

这是通过添加始终与实际机器人点类型无关的<robot>.globalbase位置来实现的,在XYZYPR系统中给出


为了使全局坐标系尽可能的使用,运动命令(MOVE,MOVES,MOVESKD,CIRCLE ...)的扩展方式除了目前仅允许的机器人点类型的位置之外,还可以接受XYZYPR点类型的位置。


NOTE-Info.svgNOTE
给定的扩展适用于最多6个NDOF(不超过6个)的机器人。


NOTE-Info.svgNOTE
如果机器人点类型已经是XYZYPR,则全局和基本属性具有绝对相同的功能,可以相互添加。 他们都可以使用,但我们强烈建议只使用一个(而另一个保留为零),以减少混乱。


与此同时,还有两个新的属性:

例子

给定SCARA和PUMA机器人在同一个生产单元中,SCARA机器人在PUMA机器人的上方:


Global Frames.png


使用全局坐标系

执行以下运动命令:

Move scara target
Move puma target
其中目标是点类型XYZYPR的位置
将其转移到每个机器人的基本坐标系中:

对Scara:

targetscaraB ← scara.gbase-1:target

其中 "←" 表示仅复制X,Y,Z和旋转坐标


对Puma:

targetpumaB = puma.gbase-1:target

这里我们有"=" 符号,因为puma和全局坐标系具有相同的点类型

数字示例

Move scara #{100,100,700,0,0,50}
Move puma  #{100,100,700,0,0,50}

有:

scara.gbase = #{0,100,700,0,0,0}
scara.base  = #{100,100,0,0}

puma.gbase  = #{0,0,0,0,0,0}
puma.base   = #{200,100,0,0,0,0}

我们获得SCARA的本地目标位置(在SCARA的基坐标系中):


#{0,100,700,0,0,0}-1 : #{100,100,700,0,0,50}为 #{100 , 0 , 0 , 0 , 0 , 50},可以写为:
#{100,0,0,50}← #{0,100,700,0,0,0}-1 : #{100,100,700,0,0,50} 表示目标点在SCARA的基坐标系是: #{100,0,0,50}

PUMA机器人本地目标点以类似的方法计算:

#{200,100,0,0,0,0}-1 : #{100,100,700,0,0,50}为 #{-100 , 0 , 700 , 0 , 0 , 50}, which we can write as:
#{-100,0,700,0,0,50}← #{200,100,0,0,0,0}-1 : #{100,100,700,0,0,50} 表示目标点在PUMA机器人基坐标系上为: #{-100,0,700,0,0,50}


NOTE-Info.svgNOTE
PUMA运动学中的GBASE和BASE表示相同的事情,尽管可以给出不同的值(然后使用组合gbase:base),但强烈建议仅使用一个,另一个保留为零,即:#{0,0,0,0,0,0}

使用基于机器人的运动参考系

可以使用基于机器人的运动参考系实现相同的功能示例。

我们假设PUMA机器人是主机器人:

common shared MF as Moving Frame of XYZR

MF.MSource   = puma.setppoint
MF.OBJECTLOC = #{0,0,0,0}
MF.BASE      = Inverse(#{0,100,700,0,0,0})
scara.MasterFrame = MF
scara.slave  = 5

现在发行:

Move puma target

Moves MF.zero

将puma和scara移动到同样的位置(目标)。