Difference between revisions of "Element Coordination/Global Coordinates"

From SoftMC-Wiki
Jump to: navigation, search
m
 
(43 intermediate revisions by one other user not shown)
Line 1: Line 1:
 +
{{Languages|Element_Coordination}}
 
= Global Coordinates Concept =  
 
= Global Coordinates Concept =  
  
For working with robots of different point type's ''global coordinates concept'' has been defined. This allows giving robot position in one common unique format for independently how many axes the robot has. The key property  used here is the robot's [[Axystems:MC-Basic:robot.BASE|base]] transformation as described in:[[Axystems:Robot_Working_Frames|Robot_Working_Frames]]
+
For working with robots of different point type's ''global coordinates concept'' has been defined. This allows giving robot position in one common unique format for independently how many axes the robot has. The key property  used here is the robot's [[MC-Basic:robot.BASE|base]] transformation as described in:[[Robot Working Frames|Robot_Working_Frames]]
  
== BASE ==
+
== BASE property ==
  
There are two cartesian coordinate system associated with a robot: World Frame and Base Frame
+
There are two cartesian coordinate system associated with a robot: World(Robot) Frame and Base Frame
  
=== World Frame ===
+
=== World(Robot) Frame ===
  
Having a robot in a pose defined by ''q = (q<sub>1</sub>,q<sub>2</sub>,q<sub>3</sub>, .... , q<sub>n</sub>)'' where n is the NDOF of the robot. The world frame coordinates are defined by:
+
Having a robot in a pose defined by ''q = (q<sub>1</sub>,q<sub>2</sub>,q<sub>3</sub>, .... , q<sub>n</sub>)'' where n is the NDOF of the robot. The world(robot) frame coordinates are defined by:
  
<center>'''''p<sub>world</sub> = Inverse Kinematics (q)'''''</center>
+
<center>'''''p<sub>world</sub> = DirectKinematics (q)'''''</center>
  
 
where p can be: p = (x,y,z, yaw, pitch,roll) depending on robot kinematics.
 
where p can be: p = (x,y,z, yaw, pitch,roll) depending on robot kinematics.
  
{{Note|For the sake of simplicity of this discussion we assume the '''''tool''''' is included in Inverse Kinematics calculation.<br> Frames of WorkPiece and MachineTable are omitted here.}}
+
{{Note|For the sake of simplicity of this discussion we assume the '''''tool''''' is included in Direct Kinematics calculation.<br> Frames of WorkPiece and MachineTable are omitted here.}}
  
  
 
=== Base Frame ===
 
=== Base Frame ===
  
 
+
Base Frame is the World(Robot) Frame moved by the [[MC-Basic:robot.BASE|robot.base]] propert:
Base Frame is the World Frame moved by the [[Axystems:MC-Basic:robot.BASE|robot.base]] propert:
 
  
 
p<sub>base</sub> = base:p<sub>world</sub>
 
p<sub>base</sub> = base:p<sub>world</sub>
Line 27: Line 27:
 
where ''':''' is the compound operator.
 
where ''':''' is the compound operator.
  
== Global Coordinates ==
+
== Global Base Property (Global Coordinates) ==
  
All user inputs (target points of motion commands , moving frame coordinates, etc.) are given in base coordinate system. However thse systems can differe from robot to robot (e.g. R1 has XYZR and R2 has  XYZYPR). Therefore we assume one common base coordinate system that will transform all robots into one system by:
+
All user inputs (target points of motion commands , moving frame coordinates, etc.) are given in base coordinate system. However these systems can differe from robot to robot (e.g. R1 has XYZR and R2 has  XYZYPR). Therefore we assume one common (global) base coordinate system that will transform all robots into one system by:
  
p<sup>1</sup><sub>base</sub> = R1.base:R1.InverseKinemaitcs(R1.pcmd) <br>
+
p<sup>1</sup><sub>global</sub> = '''R1.glbalbase''':R1.base:R1.DirectKinemaitcs(R1.pcmd) <br>
p<sup>2</sup><sub>base</sub> = R2.base:R2.InverseKinemaitcs(R2.pcmd) <br>
+
p<sup>2</sup><sub>global</sub> = '''R2.glbalbase''':R2.base:R2.DirectKinemaitcs(R2.pcmd) <br>
p<sup>3</sup><sub>base</sub> = R3.base:R3.InverseKinemaitcs(R3.pcmd) <br>
+
p<sup>3</sup><sub>global</sub> = '''R3.glbalbase''':R3.base:R3.DirectKinemaitcs(R3.pcmd) <br>
...
+
...<br>
p<sup>m</sup><sub>base</sub> = Rm.base:Rm.InverseKinemaitcs(Rm.pcmd) <br>
+
p<sup>m</sup><sub>global</sub> = '''Rm.glbalbase''':Rm.base:Rm.DirectKinemaitcs(Rm.pcmd) <br>
  
 
Assuming system of ''m''-robots.
 
Assuming system of ''m''-robots.
  
This is achieved by:
+
This is achieved by adding [[MC-Basic:robot.GLOBALBASE|<robot>.globalbase]] location that is always, indepandetly from the actual robot point type, given in XYZYPR
<robot>.base can assigned in two ways:
+
system.
* classical assignment by  location of same point type: R1.base = #{100,200,0}
+
 
* ''global coordinates'' - assignment by location of XYZYPR point type  R1.base = #{100,200,0,0,180,0}
+
 
 +
<div style="background-color:yellow;">
 +
'''To make possible usage of global frame the motion commands (MOVE, MOVES, MOVESKD, CIRCLE, ...) are widen in such a way that locations of XYZYPR point type are accepted in addition to the currently only allowed location of the robot point type.
 +
'''
 +
</div>
 +
 
 +
 
 +
{{Note|The given extensions works for robots of up to 6 NDOF (not more then 6).}}
 +
 
 +
 
 +
{{Note| In case the robot point-type is already XYZYPR the globalbase and base properties are have absolutely same functionality that adds one upon another. They both can be used, but we strongly suggest to use only one (and the other one to leave zero) in order to reduce confusion.}}
 +
 
 +
 
 +
 
 +
In a line with that there are also two new properties:
 +
 
 +
* [[MC-Basic:robot.GLOBALSETPOINT|<robot>.globalsetpoint]] analogous to the regular [[MC-Basic:robot.SETPOINT|<robot>.setpoint]]
 +
* [[MC-Basic:robot.GLOBALHERE|<robot>.globalhere]] analogous to the regular [[MC-Basic:robot.HERE|<robot>.here]]
 +
 
 +
== Example ==
 +
 
 +
Given SCARA and PUMA robots in same production cell one on a top of another:
 +
 
 +
 
 +
[[File:Global Frames.png]]
 +
 
 +
 
 +
=== Using Global Frame ===
 +
 
 +
Having the following motion commands:
 +
 
 +
'''Move scara target<br>
 +
'''Move puma target<br>
 +
 
 +
where target is a location of point type XYZYPR.<br>
 +
transferring it into individual base frames of each robot we get:
 +
 
 +
<u>For Scara:</u>
 +
 
 +
target<sup>scara</sup><sub>B</sub> ← scara.gbase<sup>-1</sup>:target
 +
 
 +
where "←" means copying only X,Y,Z and Roll coordinates.
 +
 
 +
 
 +
<u>For Puma:</u>
 +
 
 +
target<sup>puma</sup><sub>B</sub> = puma.gbase<sup>-1</sup>:target
 +
 
 +
here we have "=" sign as puma's and global frame have same point type.
 +
 
 +
==== numeric example ====
 +
 
 +
<pre>
 +
Move scara #{100,100,700,0,0,50}
 +
Move puma  #{100,100,700,0,0,50}
 +
</pre>
 +
 
 +
and having:
 +
 
 +
<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>
 +
 
 +
we get the local target position of '''SCARA''' (in SCARA's base frame):
 +
 
 +
 
 +
<nowiki>#</nowiki>{0,100,700,0,0,0}<sup>-1</sup> : #{100,100,700,0,0,50} is #{'''100''' , '''0''' , '''0''' , 0 , 0 ,''' 50'''}, which we can write as:<br>
 +
<nowiki>#</nowiki>{100,0,0,50}← #{0,100,700,0,0,0}<sup>-1</sup> : #{100,100,700,0,0,50}
 +
means target position is SCARA's base frame is: '''<u>#{100,0,0,50}</u>'''
 +
 
 +
 
 +
The local target point of '''PUMA''' is computed in similar way:
 +
 
 +
<nowiki>#</nowiki>{200,100,0,0,0,0}<sup>-1</sup> : #{100,100,700,0,0,50} is #{'''-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}
 +
means target position is PUMA's base frame is: '''<u>#{-100,0,700,0,0,50}</u>'''
 +
 
 +
 
 +
 
 +
{{Note| GBASE and BASE in PUMA kinematics represent same thing, although different values can be given (and then combination gbase:base used) it is strongly suggested using only one and the other leave zero i.e.: #{0,0,0,0,0,0} }}
 +
 
 +
=== Using robot-based Moving Frame ===
 +
 
 +
Same example can be implemented using robot-based Moving Frame feature.
 +
 
 +
let's assume PUMA robot is master:
 +
 
 +
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>
 +
 
 +
Now issuing:<br>
  
In both cases the <robot>.base coordinate will be kept internally as  XYZYPR point.
+
Move puma target<br>
 +
''and''<br>
 +
Moves MF.zero<br>
  
Also all IverseKinemaitcs(.) function results will be embedded into ''global coordinates'' (i.e. XYZYPR) by adding '''zeros''' on cartesian coordinates that are not included in robot kinematics.
+
will bring both puma and scara  at same position (target)<br>

Latest revision as of 02:59, 31 May 2017

Language: English  • 中文(简体)‎

Global Coordinates Concept

For working with robots of different point type's global coordinates concept has been defined. This allows giving robot position in one common unique format for independently how many axes the robot has. The key property used here is the robot's base transformation as described in:Robot_Working_Frames

BASE property

There are two cartesian coordinate system associated with a robot: World(Robot) Frame and Base Frame

World(Robot) Frame

Having a robot in a pose defined by q = (q1,q2,q3, .... , qn) where n is the NDOF of the robot. The world(robot) frame coordinates are defined by:

pworld = DirectKinematics (q)

where p can be: p = (x,y,z, yaw, pitch,roll) depending on robot kinematics.

NOTE-Info.svgNOTE
For the sake of simplicity of this discussion we assume the tool is included in Direct Kinematics calculation.
Frames of WorkPiece and MachineTable are omitted here.


Base Frame

Base Frame is the World(Robot) Frame moved by the robot.base propert:

pbase = base:pworld

where : is the compound operator.

Global Base Property (Global Coordinates)

All user inputs (target points of motion commands , moving frame coordinates, etc.) are given in base coordinate system. However these systems can differe from robot to robot (e.g. R1 has XYZR and R2 has XYZYPR). Therefore we assume one common (global) base coordinate system that will transform all robots into one system by:

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)

Assuming system of m-robots.

This is achieved by adding <robot>.globalbase location that is always, indepandetly from the actual robot point type, given in XYZYPR system.


To make possible usage of global frame the motion commands (MOVE, MOVES, MOVESKD, CIRCLE, ...) are widen in such a way that locations of XYZYPR point type are accepted in addition to the currently only allowed location of the robot point type.


NOTE-Info.svgNOTE
The given extensions works for robots of up to 6 NDOF (not more then 6).


NOTE-Info.svgNOTE
In case the robot point-type is already XYZYPR the globalbase and base properties are have absolutely same functionality that adds one upon another. They both can be used, but we strongly suggest to use only one (and the other one to leave zero) in order to reduce confusion.


In a line with that there are also two new properties:

Example

Given SCARA and PUMA robots in same production cell one on a top of another:


Global Frames.png


Using Global Frame

Having the following motion commands:

Move scara target
Move puma target

where target is a location of point type XYZYPR.
transferring it into individual base frames of each robot we get:

For Scara:

targetscaraB ← scara.gbase-1:target

where "←" means copying only X,Y,Z and Roll coordinates.


For Puma:

targetpumaB = puma.gbase-1:target

here we have "=" sign as puma's and global frame have same point type.

numeric example

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

and having:

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}

we get the local target position of SCARA (in SCARA's base frame):


#{0,100,700,0,0,0}-1 : #{100,100,700,0,0,50} is #{100 , 0 , 0 , 0 , 0 , 50}, which we can write as:
#{100,0,0,50}← #{0,100,700,0,0,0}-1 : #{100,100,700,0,0,50} means target position is SCARA's base frame is: #{100,0,0,50}


The local target point of PUMA is computed in similar way:

#{200,100,0,0,0,0}-1 : #{100,100,700,0,0,50} is #{-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} means target position is PUMA's base frame is: #{-100,0,700,0,0,50}


NOTE-Info.svgNOTE
GBASE and BASE in PUMA kinematics represent same thing, although different values can be given (and then combination gbase:base used) it is strongly suggested using only one and the other leave zero i.e.: #{0,0,0,0,0,0}

Using robot-based Moving Frame

Same example can be implemented using robot-based Moving Frame feature.

let's assume PUMA robot is master:

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

Now issuing:

Move puma target
and
Moves MF.zero

will bring both puma and scara at same position (target)