Discussion

Left ArrowBack to discussions page
bprattbpratt Posts: 2 Recruit
Hey all, we are looking at modifying a current UR10 program that is picking up boxes from a conveyor and stacking them on 2 skids. There are 4 different box sizes with different ways of being stacked on the skids. Currently they are using a make-shift palletizing program with long scripts defining fixed points for each drop position. My question is whether or not there is a simple way of utilizing the palletizing wizard to orientate the boxes shown in the image below. I have searched online but find nothing for a cross stacked pallet as such. I really don't want to have to create 5 different 2D pallet programs for each skid as that will add up fast for each different box. 
Any input is appreciated, thank you.

Tagged:

Comments

  • matthewd92matthewd92 Posts: 983Founding Pro, Tactile Sensor Beta Testers Handy
    edited December 2019
    I am not very familiar with what is capable to be done using the palletizing wizard (we don't really use it, depend a lot on scripts for stuff like this) but I can see a way to do this in script and make a relatively easy program but a few questions first.  Are all 4 part numbers stacked the same pattern, just different box sizes?  If not, how much do the patterns vary?

    We have done similar type applications, not palletizing, but packaging where we had to make determinations on orientation based on some pattern. You can use the modulo operator to help with that determination and then use some simple math to make the pattern.

    So assuming that we want to stack the first layer, we would want to know the box height, width and length.  Let's call this layer 0 and lets start with column 0, so the bottom pink row.

    I am going to assume that we have a feature with the origin at the front left corner of the pallet (corner of the pink box in the middle of the image) and that X runs to my left, Y runs to the back and then Z runs up.  This will be the coordinate system that we will use to determine where to place each box.

    So here is some psuedo code and how I would think about doing the task

    EDIT: I tried to format this as a code snippet but it would not show the whole thing so here it is as plain text

    ##############################################################

    # Some constants that I would ask the operator at the start of the program

    width (X direction)

    length (Y direction)

    height (Z Direction)

    totalBoxes Total number of boxes per layer

    numberOfcolumns Number of columns per layer

    numberBoxesInLongColumn (pink columns)

    numberBoxesInShortColumn (yellow columns)

    originOfPallet (stored as a feature)

    numberOfLayers

     

    #Some variables that we will need to keep track of where we are in the process, I would make these installation variables

    columnCount = 0

    rowCount = 0

    layerCount = 0

     

    # First lets determine which layer we are on, even or odd so we know where the pink row goes

     

    if (layer%2 == 0):

      layerName = "even"

    elif( layer%2 == 1):

      layerName = "odd"

    end

     

    #Pick box from conveyor

    Some move here to get box from the conveyor to near the box

     

    #Start doing math to determine how to place box

     

    if (layerName == even):

     if (columnCount == 0):

       xDistance = width

       yDistance = length

       zRotation = 1.57 (90 degrees in radians)

       longRow = True

     else:

      xDistance = length
      yDistance = width

      zRotation = 0

      longRow = False
     end

    else:

     if (columnCount == 3):

       xDistance = width

       yDistance = length

       zRotation = 1.57 (90 degrees in radians)

       longRow = True

     else:

       xDistance = length

       yDistance = width

       zRotation = 0

       longRow = False

     end
    end

     

    xLocation = 0.5*xDistance + xDistance*columnCount

    yLocation = 0.5*yDistance + yDistance*rowCount

    zLocation = layerCount*height

    boxLocation = pose_trans(originOfPallet,p[xLocation, yLocation, zLocation, 0, 0, zRotation])

    overBoxLocation = pose_trans(boxLocation, p[0,0,height,0,0,0])

     

    #Use variable waypoint and move to the box location

    moveJ(overBoxLocation)

    moveL(boxLocation)

    set vacuum off

    moveL(overBoxLocation)

     

    # Move back over conveyor

     

    #Keep track of all the counters

    rowCount = rowCount + 1

    if (longRow):

      if rowCount > numberBoxesInLongColumn:

        rowCount = 0

        columnCount = columnCount +1

      end

    else:

      if rowCount > numberBoxesInShortColumn

        rowCount = 0

        columnCount = columnCount +1

      end

    end

     

    if columnCount > numberOfColumns:

      layerCount = layerCount + 1

      columnCount = 0

      if layerCount > numberOfLayers:

       layerCount = 0

       popup("Please remove the completed pallet and place a new empty pallet, THEN press CONTINUE")

      end

    end

     ##############################################################


    This is a very quick example based on the single image above but hopefully you can get the idea of how you could write a rather simple program to provide the pallet stacking like you are showing in the image above.

    If you venture this and try it, let us know how it works out please.

      
  • bprattbpratt Posts: 2 Recruit
    Thank you for the in depth reply Matthew! We will be working on this in the coming month and I will let you know how it goes. 

    All 4 boxes are unfortunately stacked differently but that will just be extra "if" statements at the beginning of the program determining what the style is from the PLC and then jumping into a subprogram to accomplish the task. 

    Cheers.
Sign In or Register to comment.
Left ArrowBack to discussions page