Difference between revisions of "Element Coordination/Global Coordinates"

From SoftMC-Wiki
Jump to: navigation, search
(Using Global Frame)
(Using robot-based Moving Frame)
Line 106: Line 106:
  
 
Same example can be implemented using robot-based Moving Frame feature.
 
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
 +
</pre>

Revision as of 14:04, 7 June 2012

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

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

World Frame

Having a robot in a pose defined by q = (q1,q2,q3, .... , qn) where n is the NDOF of the robot. The world 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 Frame moved by the robot.base propert:

pbase = base:pworld

where : is the compound operator.

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 (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.


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:


File:AXY;SOWEMA Global Frames.png


Using Global Frame

Having the following motion commands:

Move scara targetscaraG
Move puma targetpumaG

where both targetscaraG and targetpuma are of point type XYZYPR.
transferring these two into individual base frames of each robot we get:

For Scara:

targetscaraB ← scara.gbase-1:targetscaraG

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


For Puma:

targetpumaB = puma.gbase-1:targetpumaG

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   = #{0,0,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}

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