Universal Robots Forum

Palletizzing with List, more levels of parts?

We do have a UR10, Sofware version is 3.14.
We want to palletize rings into a box, left and right each 4 rings, and in the middle, like a hexagon shape.
So i progammed a list in the palletizing wizard, but im not able to move that list to a level higher for a 2nd label of rings (there will be 14 levels of each 11 rings).
I have programmed it with every move for higher rings with each position for each ring, for 77 rings, but it would be nice to have the ability to move the level with a variable to be able to have other ring thiknesses in future.
Can i use the palettizing wizard for this or do i need to program each position by hand ?

werkzeugbau welcome to the forum!

I’m assuming that you have taught a Plane for palletizing.
Is each layer of the palletization the same pattern?
If so you could simply adjust the Z value of the plane by the part height and any separator thickness.

Pallet_Plane[2] = Pallet_Plane[2]+Part_height+Separator

The palletization wizard is fine if you only want to do one or two parts but has its limitations for anything with multiple variations.

Thank you m.hammerton.

I do not have set a Plane yet, but i will give it a try.

The pattern is always the same, even for future variations of this part.

Thank you again very much!

Im not sure where to put the line you postet:

Pallet_Plane[2] = Pallet_Plane[2]+Part_height+Separator

The [2] ist for the 3rd item in the pose?
I do use the variable Pallet_Plane, right ?
I can change the variable value with pose_add, it changed the variable, but not the plane as it seems

Sorry, im quite a Newbe with robot programming …

If you are using Universal Robots palletizing function you’re plane is most likely called “reference_plane”, you can look up the planes name in all the move commands the palletizing wizard created. That is the plane you want to change.
Pallet_Plane[2] the means you want to change the Z value. 0 would be X, 1 would be Y.

1 Like

Thank you Dominik.

I use a subroutine for my plalleting function.
I use the teached in Plane “Kiste_Boden” for all Move commands in the subroutine.
I use a Script command “Kiste_Boden[2] = Kiste_Boden[2] + Ringdicke” in the “AfterEnd” section of the Pallet command.
I use the thikness of the Part in mm.
The Variable is changed, but the moves dont, the still go to the bottom Layer.

Any Help?

Greetings form Austria


If you use the palletizing Wizard, you define the reference plane, then the part thickness, then set the pick points for the bottom layer, set the approach/retract point(s)…then define # of layers. If you are depalletizing (starting with the top part of the layer) make sure to check the de-palletize box. The Wizard seems to work well.


My thoughts about your Problem:

  1. change the z-value of the TAP
  2. change the z-value of your reference Point in the palletizing wizard.

But my experience with the palletizing wizard is, that he does not like if you change his coordinates in any variation.

Another way of “cheating” could be as followed:

  • Set up your pattern as needed, example: 5 parts / layer.
  • Set the part heigth to (for example) 1mm
  • if you have a part heigth of 5mm and want to go to the 2nd level in reality, change your pallet_counter in that amaount, that you reach your wished level in virtuality:
    Counter 1-5 1st Level 0mm
    Counter 6-10 2nd Level 1mm
    Counter 11-15 3d Level 2mm
    Counter 16-20 3mm
    Counter 21-25 4mm
    Counter 26-30 5mm

if palet count = 6
then palet count = 26

I don’t know if this works with the heigths, but I often manipulate and control my programm based on the paletizing wizard with the changing of the counter.

Hello all,

I have done it with a little script program.
Basically the same as the palletizing wizard does, but in a script.
So i can move to each level and can modify the program for different ring hights.

movel(pose_trans(Kiste_Boden, p[0.0,0.0,0.05,3.0581322768955856,0.7157011107353846,0.001183403256205595]), a=1.2, v=0.25)
if (count_1 == 0):
  pose_1 = (pose_trans(Kiste_Boden, p[0.0,0.0,0.0,3.0581322768955856,0.7157011107353846,0.001183403256205595]))
elif (count_1 == 1):
  pose_1 = (pose_trans(Kiste_Boden, p[0.14,0.0,0.0,3.0581322768955856,0.7157011107353846,0.001183403256205595]))
elif (count_1 == 2):
  pose_1 = (pose_trans(Kiste_Boden, p[-0.14,0.0,0.0,3.0581322768955856,0.7157011107353846,0.001183403256205595]))  
elif (count_1 == 3):
  pose_1 = (pose_trans(Kiste_Boden, p[-0.07,0.113,0.0,3.0581322768955856,0.7157011107353846,0.001183403256205595]))
elif (count_1 == 4):
  pose_1 = (pose_trans(Kiste_Boden, p[0.07,0.113,0.0,3.0581322768955856,0.7157011107353846,0.001183403256205595]))
elif (count_1 == 5):
  pose_1 = (pose_trans(Kiste_Boden, p[0.07,-0.113,0.0,3.0581322768955856,0.7157011107353846,0.001183403256205595]))
elif (count_1 == 6):
  pose_1 = (pose_trans(Kiste_Boden, p[-0.07,-0.113,0.0,3.0581322768955856,0.7157011107353846,0.001183403256205595]))
elif (count_1 == 7):
  pose_1 = (pose_trans(Kiste_Boden, p[-0.21,-0.113,0.0,3.0581322768955856,0.7157011107353846,0.001183403256205595]))
elif (count_1 == 8):
  pose_1 = (pose_trans(Kiste_Boden, p[0.21,-0.113,0.0,3.0581322768955856,0.7157011107353846,0.001183403256205595]))
elif (count_1 == 9):
  pose_1 = (pose_trans(Kiste_Boden, p[-0.21,0.113,0.0,3.0581322768955856,0.7157011107353846,0.001183403256205595]))
elif (count_1 == 10):
  pose_1 = (pose_trans(Kiste_Boden, p[0.21,0.113,0.0,3.0581322768955856,0.7157011107353846,0.001183403256205595]))
if (count_1 >= 10):
  count_1 = 0
  count_1 = count_1 + 1
movel(pose_add(pose_1 , p[0,0,0.028,0,0,0]), a=1.2, v=0.25)
movel(pose_1, a=1.2, v=0.25)
set_standard_digital_out(4, False)
movel(pose_add(pose_1 , p[0,0,0.05,0,0,0]), a=1.2, v=0.25)
if (count_1 == 0):
  global Level = Level + 1
  Kiste_Boden[2] = Kiste_Boden[2] + Ringh

Thanks to all answers


1 Like