Element Coordination/zh-hans

From SoftMC-Wiki
Jump to: navigation, search
语言: [[::Element Coordination|English]]  • [[::Element Coordination/zh-hans|中文(简体)‎]]

介绍

此功能的主要目标是几个机器人的空间和时间上运动同步。这将使用系统中存在的标准主 - 从关系将其扩展为通用机器人到机器人连接。将要使用的功能是移动坐标系特性,通常用于传输带跟踪。移动坐标系的源将从简单的轴列表扩展到任何机器人类型的笛卡尔命令(SETPOINT,HERE)。

主机器人是从机器人跟随的移动坐标系的主源。 将使用相同的同步算法,除了与跟踪窗口和触发相关的问题(这两个将是无关紧要的)。

跟踪期间从机器人的相对运动是允许的,在常规的输送机跟踪以相同的方式执行。

机器人的相互空间关系将通过新添加的基坐标系和移动坐标系的对象位置偏移来定义。 与此同时,可以实现不同点类型(世界(机器人)框架)和/或不同NDOF的机器人的相互协作。


IMPORTANT.svgIMPORTANT
只有在机器人具有相同点类型的情况下,才能使用完整的位置(位置+姿态)。 在具有不同点类型的机器人的情况下,仅跟踪主机器人位置的位置部分(X,Y,Z)。 姿态角(Yaw,Pitch,Roll)将 被忽略


IMPORTANT.svgIMPORTANT
在具有相同点类型的机器人的情况下,用户能够选择是仅仅在位置或姿态坐标上进行跟踪或者在两者上进行跟踪。请参阅MovingFrame.type属性。


NOTE-Info.svgNOTE
在跟踪期间检测(监控)轴的位置限制和加速度/速度阈值,方式与常规传送带跟踪相同。


DANGER.svgDANGER
需要重要强调的是此功能(使用基于机器人的运动坐标系的元素协作)不会阻止机器人碰撞。 机器人防碰撞完全脱离了这个主题。

系统设置

数据创建

ControlStudio中有两种运动参考系(MF)对象:基于轴和基于机器人。它们都以与使用该命令的基于轴的方式以相同的方式创建:

COMMON SHARED <mf name> as moving frame of <mf-type>

基于轴和基于机器人的运动参考系之间的差异在提供给 MasterSource 命令的参数中。在基于轴的MF中,仅使用主轴作为主源。此外,在基于轴的MF中,所有位置MF的属性(零,此处,上行,下行)的点类型与MF的点类型(即<mf-type>)相同。

基于机器人 的MF的主源是具有自己的点类型的机器人元素。在基于机器人的MF中,MF的位置和机器人的位置之间的关系将使用新引入的属性来定义。 (参考: Translation Transformation )

主源

<Moving Frame>.MasterSource属性将允许将机器人元素的命令(setpoint)或反馈(here)添加为主站,以下句法将有效:

<Moving Frame>.MasterSource = <robot>.setpoint and <Moving Frame>.MasterSource = <robot>.here

NOTE-Info.svgNOTE
master<robot>的点类型不必与<moving frame>的点类型匹配! 但是,<moving frame>和机器人的类型必须匹配!!


MF.TYPE

将主机器人的位置分配给主源会自动在MF和主机器人的位置和方向之间施加一定的关系。下表说明了主站和从站点类型与<MF> .type值之间的关系。

→ 将MasterSource设置为主机器人位置之一(SetPoint或Here)将自动将Moving-Frametype更改为其默认值(参见表)并将其锁定。锁定意味着根据给定的MasterSource,只允许某些MF.type值(表中带有“?”符号)。并且如果用户尝试分配任何其他值,将返回错误。


<mf>.type value axis-MF robot-MF
pointtype(position)robot = robot-MF pointtype(position)MF
or:
pointtype(orientation)robot = robot-MF pointtype(orientation)MF
robot-MF
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



一些最常用的点类型的类型分配表

master-robot
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
(inactive)
YPR p
(inactive)
p
(inactive)
p
(inactive)
p
(inactive)
o o p
(inactive)
YP p
(inactive)
p
(inactive)
p
(inactive)
p
(inactive)
p
(inactive)
p
(inactive)
o
  • p(3) 仅位置
  • o(4) 仅姿态
  • po(5) 位置和姿态


NOTE-Info.svgNOTE
在由主机器人点类型不足以驱动的纯方向运动参考系的情况下,类型将被设置为位置(3),但是运动参考系将无效(不能运动


AXY;MovingFrameType.png

例子 1

common shared MF as moving frame of XYZR
MF.mastersource = SCARA.setpoint

将MF.type自动设置为 5(位置和姿态 - 默认值)!

尝试将其更改为主机不支持的值(例如MF.type = 0)源将返回错误:

例子 2

common shared MF as moving frame of XYZR
common shared gXYZ   as group axnm = a1 axnm = a2 axnm = a3 model=1  of XYZ
MF.mastersource = gXYZ.setpoint

在这种情况下,我们具有相同位置类型的情况,但是具有不同(或不存在)姿态类型的情况。 MF.type自动为3(仅位置)!


例子 3

common shared MF as moving frame of XYZYPR
common shared TILT   as group axnm = a1 axnm = a2 axnm = a3 model=1  of YPR
MF.mastersource = TILT.setpoint

在这种情况下,我们具有相同姿态类型但具有不同(或不存在)位置类型的情况。 MF.type自动为4(仅限姿态)!!


例子 4

common shared MF as moving frame of XYZ
common shared TILT   as group axnm = a1 axnm = a2 axnm = a3 model=1  of YPR
MF.mastersource = TILT.setpoint

在这种情况下,我们有两种点类型没有任何共同之处的情况 因此,类型将自动设置为3(仅位置)。

新属性

运动参考系基坐标偏移

主机和从机器人之间的相互空间关系(位置和姿态)由MF的BASE属性描述。

  • <moving-frame>.BASE是一个主机器人到从属的偏移量。 这是一个运动参考系的属性。

对象位置

由两个机器人运动的对象或两个机器人的端点的相对位置彼此描述由 <moving-frame>.OBJECTLOC Moving-Frame属性。它描述从实际主站的源坐标(SetPoint或Here)中从站设定点的相对位置和姿态。它与父MF(或从机器人)保持相同的点类型。

参考: Object Location Property

NOTE-Info.svgNOTE
OBJECTLOC可用于在连续的拾取和应用中更新新的接触点位置,类似于基于轴的MF的TRIGGER命令。

主从关系

一旦设置了MF参数,则主站和从站位置之间的连接由以下公式定义。

slave.robot = MS2MF( MF.base-1 : MF.MSource:MF.ObjectLoc )

其中MF.MSource是<master> .setpoint或<master> .feedback

MS2MF函数定义为

Master Source to Master Frame 函数: A = MS2MF(B) 定义为:

A->position = p-projection (B->position)
A->orientation = B->orientation (for MF.types: 4 and 5 only!)

  • p-projection是简单的矩阵乘法,形式如下: A->position = TranslationTransformation * B->position


点类型转换

Translation Transformation

与普通轴相反 - MF机器人—MF可以具有与从动机器人不同的点类型。为了将位置从MF点类型转换为从机器人点类型<moving-frame>.TranslationTransformation定义3x3双矩阵属性。

  • 定义了MF.MasterSource的点类型到MF的机器人类型的平移(位置)部分的变换矩阵。
  • 矩阵阶数通过MF和主机器人的位置维度自动调整。


Master-Source: XY Master-Source: XYZ
MF-type: XY TranslationTransformation[1-2][1-2] TranslationTransformation[1-2][1-3]
MF-type: XYZ TranslationTransformation[1-2][1-3] TranslationTransformation[1-3][1-3]


例如, 定义:

common shared MF as moving frame of XYZYPR
MF.MasterSource = GXY

自动定义:

TranslationTransformation[*][*] =

or: TranslationTransformation is 2x3 matrix!

NOTE-Info.svgNOTE
在MF的位置坐标数少于MasterSource的情况下,剩余的坐标将由 MF.BASE 相应的坐标值分配。



受影响(已更改)命令

激活(同步)

设置<robot>.slave = 5将立即进入同步跟踪模式,不需要触发命令。由于基于机器人MF的工作窗口不存在,MF.ZERO 将在进入"slave=5"时返回当前的MF位置! 在此之后,从机器人将尝试与运动帧位置同步: MovingFrame(t) = MF(t) - MF(t0)
其中t0是发出"slave=5" 的时刻。 (参考:Absolute_Movements_During_Conveyor_Tracking)

 

其中MF(.)是:

MF(t) = MS2MF( MF.base-1 : Master(t):MF.ObjectLoc )

Master(t) - 机器人主轴在时刻t的位置。
MS2MFMaster Source to Moving Frame function定义

与MC-Basic语言变量的关系是显而易见的:

<mf>.here = MF(t)

<mf>.zero = MF(0) (参考MovingFrame.ZERO)


这意味着,如果主机器人没有运动,则从机器人的全部从运动开始跟踪(slave=5, 同步或不同步)的位置与自由从机器人(slave=0)的位置是一样的。换句话说,如果您想要连接到主机器人的对象运动到某些点,只需停止主机器人,并将从站运动到对象上的所需目标点。


NOTE-Info.svgNOTE
初始化跟踪后运动到MF.ZERO会使从机器人与主机器人的位置完全同步。

停用(去同步)

设置<robot>.slave = 0将立即进入去同步模式,将跟踪速度平滑地降低到零。 (跟踪速度的不是追加运动的速度)。

NOTE-Info.svgNOTE
在基于机器人的MF中,使用以下参数完成使用笛卡尔空间(位置,速度,加速度)中运动的初始值的去同步:

在同步期间,可以激活与另一个机器人的同步或者只是平面运动。 (与基于轴的MF相同)

Is Moving Frame Synchronized

Is-Moving-Frame-Synchronized'标志将具有与基于轴的MF相同的功能。


跟踪参数

参数:

  • VelocityMaxTrans, VelocityMaxRot, AccelerationMaxTrans, AccelerationMaxRot, JerkMaxTrans, JerkMaxRot
  • Dampingfactor, FilterFactor, MaxFlops

将会以相同的方式用于基于轴的MF中,而不是作用于主轴和跟踪变量之间的标量距离(),主机器人的位置与从机器人主跟踪变量之间的的笛卡尔距离()和欧拉角的距离()用于建立同步的标准。

触发

如在机器人的MF中,工作窗口的概念和其中的对象不存在, Trigger命令将对基于机器人的运动框架没有影响。 跟随的实际时刻始终始终以slave = 5的设定,独立于先前使用的触发命令。

NOI

在MF机器人的情况下,'NOI将始终为-1。

Is In Window

Is In Window 标志将总是返回1(true),实际上这种类型的MF中没有工作窗口的概念。

未使用的运动参考属性

  • Upstream, Downstream, Upmaster, Downmaster

由于工作窗口概念不存在于基于机器人的MF中,这些属性将对MF-机器人操作绝对没有影响。

下一个项目命令

  • NEXTITEM命令对MF机器人操作没有影响。

运动参考坐标变换

从机器人连接到主轴通过运动参考系分配从站主坐标系的属性:

<slaverobot>.MasterFrame = <master frame>

主参考系是从机和主机之间的链接。它包括主源的定义,可以是机器人笛卡尔指令点(SETPOINT)或机器人的笛卡尔反馈(HERE):

<master frame>.MasterSource = <masterrobot>.SETPOINT

基坐标变换

主参考系将从机器人坐标系的空间关系(距离和旋转)定义到主坐标系: <Master Frame>.Base

Two robots with a defined distance between them using MF.BASE

定义对象

总的来说,对象由两侧的两个机器人举起。 从主坐标系看,我们有两点(在主机器人的世界(机器人)坐标系):

<masterrobot>.setpoint
<masterrobot>.setpoint:<movingframe>.objectloc

物体的第二点也可以通过从机器人到达(从主机器人的世界(机器人)坐标系上看):

<movingframe>.base:<slaverobot>.setpoint

Usage of OBJECTLOC

<Moving Frame>.ObjectLoc 是与运动参考系相同的点类型的运动参考系数据对象的位置属性。例如,例如,这意味着如果将运动参考系声明为XYZR(common shared MF as moving frame of XYZR),则OBJECTLOC也将是XYZR类型的位置。 OBJECTLOC指定从机器人的的末端执行器相对于主机器人的末端点(实际上是主坐标系)的位置和姿态。

完成从机器人命令计算示例

Frame calculations in two-robot case.


mf.base = #{100,100,0,45}
mf.base-1 = #{-141,100,0,-45}
mf.objectloc = #{80,0,0,180}
master.setpoint = #{130,-72,0,0}

slave.setpoint = mf.base-1:master.setpoint:mf.objectloc
slave.setpoint = #{-43 , -200 , 0 ,135 }


  • 如果两个机器人具有相同的(XYZR)点类型,并且使用默认的MF.type值(5-位置和方向),则上述计算为真。

工作在同一对象上的三个机器人的例子

这是三机器人协作的一个例子。 一个机器人被定义为主机,另外两个是从机。 每个从机器人通过它的主参考系连接到主机器人,与主体机器人距对象不同的距离以及不同的夹点上。

Frame Calculation in three-robot case

在这个例子中,我们将定义两个运动参考系,每个参考系都有不同的OBJECTLOC。

第一个运动参考系:

Common Shared MF1 As Moving Frame Of XYZR
MF1.MasterSource = <masterrobot>.SETPOINT
MF1.BASE = #{..., ..., ..., 0}
MF1.OBJECTLOC = #{L,..., ..., 180}

第二个运动参考系:

Common Shared MF2 As Moving Frame Of XYZR
MF2.MasterSource = <masterrobot>.SETPOINT
MF2.BASE = #{..., ..., ..., 0}
MF2.OBJECTLOC = #{SQRT(3)*L,L/2, ..., -150}
  • 假设对象是边长L的双边(等边)三角形。
NOTE-Info.svgNOTE
第二个对象位置MF的方向部分为-150度。 第一个从机器人Xtool轴与主机机器人的Xtool轴完全相反。 而第二个从机器人的Ytool轴正好与主机器人的Ytool轴完全相反。

算法和软件设计

  • 基于轴的运动参考系跟踪算法基于预测会合点并通过速度,加速度和加加速度常数来限制运动,这里描述如下:One_Dimensional_Tracking_Algorithm


  • 这里描述了用于多机器人使用的基坐标系世界(机器人)坐标系全局坐标系的概念Global Coordinates
  • 此处显示了基于轴的MF数据结构的扩展[[AXY:Element Coordination/Software Design| Software_Design]


例子

例子 1. 两种不同的机器人运动学

两个不同类型的机器人运动学之间的协作。

Cooperation between SCARA and PUMA robot kinematics, PUMA robot is the master frame here


运动参考系定义:

Common Shared MF as Moving Frame of XYZR

将其链接到源(主):

MF.MasterSource = Puma.Setpoint

主源是点式XYZYPR的机器人(PUMA),链接的(SCARA)机器人或是XYZR点类型的MF。在这种情况下,MF.type将自动设置为3(仅位置)。 主机器人的方位角变化对从机器人无影响。 所以我们需要定义变换矩阵:



或者是以下代码:

' First column:
MF.TranslationTransformation[1][1]=1
MF.TranslationTransformation[2][1]=0
MF.TranslationTransformation[3][1]=0
' Second column:
MF.TranslationTransformation[1][2]=0
MF.TranslationTransformation[2][2]=1
MF.TranslationTransformation[3][2]=0
' Third column:
MF.TranslationTransformation[1][3]=0
MF.TranslationTransformation[2][3]=0
MF.TranslationTransformation[3][3]=1


然后偏移定义:

XY坐标将偏移(10,10)mm:

MF.base = #{10,10,0,0}

两个机器人工具尖端之间的距离定义为100mm:

MF.ObjectLoc = #{0,0,100,0}


跟踪(主 - 从)定义为:

Scara.Masterframe = MF

and started:

Scara.slave = 5

例子2. SCARA和倾斜台

AXY;SCARA TILT.png

运动参考系定义 :

Common Shared MF as Moving Frame of XYZR


定义倾斜台机器人(对象只有偏角和俯仰角):

Common Shared TiltTable As Group Axnm = Ax5 Axnm = Ax6 Model = 1 of YP

链接到源上(主机器人):

MF.MasterSource = TilTable.Setpoint

主源是YP点类型的倾斜台,链接的机器人或MF是XYZR点类型。 MF.type将自动设置为3(仅位置)。

位置变换矩阵实际上不存在,因为倾斜表没有位置组件! 所以没有什么可以设置在这里。


然后偏移定义:

XY坐标将偏移200 mm:

MF.base = #{-200,0,0,0}


定义100mm的对象位置的诀窍!

mf.base = #{Xb,Yb,Zb,Rb}
mf.objectloc = #{Xo,Yo,Zo,0}
master.setpoint = #{yaw,pitch}

slave.setpoint = mf.base-1:master.setpoint:mf.objectloc

即矢量[Xo,Yo,Zo]将旋转倾斜台[yaw,pitch]角度!!!

跟踪(主-从)定义为:

Scara.Masterframe = MF

and started:

Scara.slave = 5

示例3. 两个SCARA在同一件工件上工作

机器人跟踪机器人示例:
两个SCARA机器人,一个主机,另一个是从机。
Case of tracking with two SCARA robots.

Setup:
设置从机器人,以100mm的距离跟踪主机器人,指向面对面的方向 (180º)

Common Shared MF as Moving Frame Of XYZR
MF.MasterSource = ScaraMaster
MF.ObjectLoc = #{100,0,0,180}
ScaraSlave.MovingFrame = MF
ScaraSlave.Slave=5

在接合时(即Slave=5)记录零点!



等待同步并一起到达主位置:
系统等待直到MF同步(Is-Moving-Frame-Synchronized等于1),并且零点运动完成(isMoving标志不为正)

Moves MF.Zero
While ScaraSlave.IMFS <> 1 and ScaraSlave.Ismoving > 0
Sleep 1
End While

做一些事情,或者只是停留在跟踪模式。


停止.去同步:

slave = 0
while  ScaraSlave.IMFS <> 0
Sleep 1
End While

在此之后,ScaraSlave将不会完全停止在ScaraMaster的路径上 (偏差或多或少随机并取决于主机的机器人路径和关节的减速参数)

例子 4. 协作

机器人跟踪期间的相对位置,从机器人跟踪主机100mm的距离,指向面对面方向 (180º)

Coordination. zoomed detail: Coordination detail


例子 5. PUMA和SCARA的组装作业

Setup.

设置全局坐标,请参考: Global_Coordinates

Detail view of work-space locations


几何结构

Geometric Setup.

参考: Global_Coordinates

给定的设置可以通过四种不同的方式来实现:

World(Robot) Frame Base Frame Global Base Moving Frame

puma.base = #{0,0,0,0,0,0}
scara.base = #{0,0,0,0}
Moves puma #{50,0,600,90,90,0}
Moves scara #{-100,-100,0,0}

puma.base = #{200,100,0,0,0,0}
scara.base = #{100,100,0,0}
Moves puma #{250,100,600,90,90,0}
Moves scara #{200,0,-100,0}

puma.base = #{200,100,0,0,0,0}
puma.gbase = #{0,0,0,0,0,0}
scara.base = #{100,100,0,0}
scara.gbase = #{0,100,700,0}
Moves puma #{250,100,600,90,90,0}
Moves scara #{250,100,600,90,90,0}

puma.base = #{200,100,0,0,0,0}
scara.base = #{100,100,0,0}
puma.globalbase = #{0,0,0,0,0,0}
scara.globalbase = #{0,0,0,0,0,0}
Moves puma #{250,100,600,90,90,0}
MF.MasterSource = puma.setpoint
MF.Base = #{200,0,-600,0}
MF.ObjectLoc = #{0,0,50,0}
scara.MasterFrame = MF
scara.slave = 5
Moves scara MF.zero

NOTE-Info.svgNOTE
所有四个给定的代码示例是两个机器人相同的位置!
IMPORTANT.svgIMPORTANT
“运动参照系”示例考虑到SCARA基坐标系,而不是全局基准坐标,因为MF被声明为XYZR点类型。

系统设置

定义:

Common Shared MF As Moving Frame Of XYZR
Common Shared hold As Location Of XYZR
Common Shared patch_feeder As Location Of XYZR

初始化:

SCARA.Base  = #{100,100,0,0}
SCARA.GBASE = #{0,100,700,0,0,0}
PUMA.Base   = #{200,100,0,0}


MF.MasterSource = PUMA.SETPOINT
MF.ObjectLoc    = #{0,0,50,0}
MF.Base         = #{200,0,-700,0}

SCARA.BlendingMethod = 2
SCARA.BlendingFactor = 80
SCARA.MasterFrame = MF

执行代码

while patches()
   MoveS PUMA MoldPose((PatchNumber()))
   MoveS SCARA patch_feeder
   MoveS SCARA down
   Call TakePatch(SCARA)
   Moves SCARA up
   Moves SCARA hold
   MF.ObjectLoc = MoldProfile(PatchNumber())
   SCARA.slave = 5
   Moves SCARA MF.Zero
   Call GluePatch(SCARA)
   Moves SCARA up
   SCARA.Slave = 0
   Moves SCARA hold
end while

上面程序中使用的函数和变量:

Function MoldPose( n as long) as location of XYZYPR

在PUMA坐标系(即XYZYPR)中返回模具上的贴片位置函数

Function MoldProfile( n as long) as location of XYZR

返回模具的形状轮廓在XYZ坐标函数,设置的OBJECTLOC将有效地将SCARA机器人的正确位置置于模具上。返回SCARA位置(XYZR)。

Sub TakePatch(robot as generic group)

从送料器取出(夹具操作,真空,等待等)贴片的子程序.

Sub GluePatch(robot as generic group)

将贴片放在模具上的子程序。 这里包括所有需要的同步(等待,夹持器打开,...)

MF.Base 

运动参考系基点偏移,

hold

等待位置

Patch_feeder

贴片取料的位置