Program Examples - Robot Pick and Place (P&P)

From SoftMC-Wiki
Revision as of 12:46, 22 January 2017 by Or.karni (talk | contribs)
Jump to: navigation, search

Here are 2 examples of doing Robot Pick and Place. One using Cartesian coordinates, second using robot's Joints for movement. We use puma 6 axis robot in this example.

Pick & Place - Cartesian

PnPCartesianPositions.JPG


P1 P1.JPG P11 P11.JPG P22 P22.JPG P2 P2.JPG
'------------------------------------------------------------------------------
' File:        PnPTrn.prg
' Purpose:     Robot Pick & Place
' Version:     1.00
' Author:      Or Karni
' History:     17.JAN.2017    -    created
'------------------------------------------------------------------------------

' module global "constants"


' module global variables
dim shared jntZeroPosition as joint of xyzypr = {0 , 0 , 0 , 0 , 0 , 0}
dim shared jntP1Position as joint of xyzypr = {120,45,0,0,45,0}

dim shared P1    as location of xyzypr = #{-650.776 , 1127.18 , -151.419 , 0 , 180 , -120}
dim shared P11   as location of xyzypr = #{-650.776 , 1127.18 , -51.419 , 0 , 180 , -120}
dim shared P22   as location of xyzypr = #{650.759 , 1127.15 , -51.4505 , 0 , 180 , -60}
dim shared P2    as location of xyzypr = #{650.759 , 1127.15 , -151.4505 , 0 , 180 , -60}

dim shared RobotVelocity as double = 40.0

program

    with Puma               'set default group element, no need to explicitly indicate the motion element
        Attach              'Attach the task to motion element (with Puma)
            En = TRUE
            Sleep 100
            Vcruise = RobotVelocity
            while NOT En
                Sleep 100
            end while
            Move jntZeroPosition   'moving to zero position
            call waitMotion
              call pickPlaceXYZ                 'execute main function
            Move jntZeroPosition
            call waitMotion
        Detach
    end with    

end program


sub pickPlaceXYZ

    dim i as long

    Move PUMA jntP1Position
    call waitMotion
    Puma.BlendingMethod = 1
    Puma.Cp = 50
    for i = 1 to 10
        Moves Puma P11 
        call waitMotion
        Moves Puma P1
        call waitMotion
        Moves Puma P11
        call waitMotion
        Moves Puma P22
        call waitMotion
        Moves Puma P2
        call waitMotion
        Moves Puma P22
        call waitMotion
    next i
    Move PUMA jntZeroPosition
    call waitMotion

end sub

sub waitMotion
    while puma.IsMoving
        Sleep 1
    end while
end sub

Pick & Place - Joints

PnP.PRG:

'------------------------------------------------------------------------------ ' File: PnPJnt.prg ' Purpose: Robot Pick & Place ' Version: 1.00 ' Author: Eran Korkidi ' History: 10.DEC.2015 - created '------------------------------------------------------------------------------

dim shared jntZeroPosition as joint of xyzypr = {0,0,0,0,0,0}

dim shared jntPickHigh as joint of xyzypr = {120,45,0,0,45,0} dim shared jntPickLow as joint of xyzypr = {120 , 49.9504 , 0.352258 , 0 , 39.6973 , 0} dim shared jntPlaceHigh as joint of xyzypr = {60,45,0,0,45,0} dim shared jntPlaceLow as joint of xyzypr = {60 , 49.9504 , 0.352258 , 0 , 39.6973 , 0}

dim shared dVelSlow as double = 40.0 dim shared dVelFast as double = 80.0

program

   Sys.Vrate = 100.0
   with Puma
       Attach
           En = TRUE
           Sleep 100
           while NOT En
               Sleep 100
           end while
           Move jntZeroPosition Vcruise=dVelSlow
           call waitMotion
             call pickPlaceJoint
           Move jntZeroPosition Vcruise=dVelSlow
           call waitMotion
       Detach
   end with    

end program


sub pickPlaceJoint

   dim i as long
   dim dVelFac as double = 0.9
   
   Move PUMA jntZeroPosition Vcruise=dVelSlow
   call waitMotion
   Move PUMA jntPickHigh Vcruise=dVelSlow
   call waitMotion
   Puma.BlendingMethod = 1
   Puma.Cp = 50
   puma.J1.PeMax = 3.0 ' 0.2
   for i = 1 to 10
       Move Puma jntPickHigh Vcruise = PUMA.Vmax * dVelFac
       Move Puma jntPickLow Vcruise = PUMA.Vmax
       call waitMotion
       Move Puma jntPickHigh Vcruise = PUMA.Vmax
       Move Puma jntPlaceHigh Vcruise = PUMA.Vmax * dVelFac
       Move Puma jntPlaceLow Vcruise = PUMA.Vmax
       call waitMotion
       Move Puma jntPlaceHigh Vcruise = PUMA.Vmax
   next i
   Move PUMA jntZeroPosition Vcruise = dVelSlow
   call waitMotion

end sub

sub waitMotion

   while puma.IsMoving
       Sleep 1
   end while

end sub

</syntaxhighlight>