Stack mixed SKUs on the robot you already have.
Paste the SKU list. The planner returns layers, stability, density and cycle time, then an export for the controller.
- All SKUs placed. Static stability within limits.
URScript stub (preview)
# Palletizer stack plan — URScript STUB (Grimaldi Engineering, Frankfurt)
# Not commissioned. Verify pallet_frame, approach heights, gripper IO and safety config on the cell before RUN.
# pallet 1200 x 800 mm, 5 layers, 1230 mm, 249.8 kg, stability 0.97, state RUN
def palletizer_stack():
# --- cell inputs (teach on the pendant) ---
pallet_frame = p[0.0, 0.0, 0.0, 0.0, 0.0, 0.0] # pallet deck corner, x along length, y along width, z up
pick_pose = p[0.0, 0.0, 0.0, 0.0, 0.0, 0.0] # infeed pick, tool centre at box top face
approach_z = 0.150 # m above place pose
acc = 1.2
vel = 0.8
def grip():
set_standard_digital_out(0, True) # gripper class: vacuum, adapt to cell
sleep(0.3)
end
def release():
set_standard_digital_out(0, False)
sleep(0.2)
end
def place(box_pose, yaw):
target = pose_trans(pallet_frame, box_pose)
target = pose_trans(target, p[0, 0, 0, 0, 0, yaw])
above = pose_add(target, p[0, 0, approach_z, 0, 0, 0])
movel(pick_pose, acc, vel)
grip()
movel(above, acc, vel)
movel(target, acc, vel * 0.5)
release()
movel(above, acc, vel)
end
# --- placements: tool centre over box centre, z = box top face ---
place(p[0.3000, 0.2000, 0.3000, 0, 0, 0], 0.0) # 1 SKU-02 L1 15 kg
place(p[0.9000, 0.2000, 0.3000, 0, 0, 0], 0.0) # 2 SKU-02 L1 15 kg
place(p[0.3000, 0.6000, 0.3000, 0, 0, 0], 0.0) # 3 SKU-02 L1 15 kg
place(p[0.9000, 0.6000, 0.3000, 0, 0, 0], 0.0) # 4 SKU-02 L1 15 kg
place(p[0.2000, 0.2000, 0.5800, 0, 0, 0], 0.0) # 5 SKU-04 L2 11 kg
place(p[0.6000, 0.2000, 0.5800, 0, 0, 0], 0.0) # 6 SKU-04 L2 11 kg
place(p[1.0000, 0.2000, 0.5800, 0, 0, 0], 0.0) # 7 SKU-04 L2 11 kg
place(p[0.2000, 0.6000, 0.5800, 0, 0, 0], 0.0) # 8 SKU-04 L2 11 kg
place(p[0.6000, 0.6000, 0.5800, 0, 0, 0], 0.0) # 9 SKU-04 L2 11 kg
place(p[1.0000, 0.6000, 0.5800, 0, 0, 0], 0.0) # 10 SKU-04 L2 11 kg
place(p[0.2000, 0.1500, 0.8300, 0, 0, 0], 0.0) # 11 SKU-01 L3 8.5 kg
place(p[0.6000, 0.1500, 0.8300, 0, 0, 0], 0.0) # 12 SKU-01 L3 8.5 kg
place(p[1.0000, 0.1500, 0.8300, 0, 0, 0], 0.0) # 13 SKU-01 L3 8.5 kg
place(p[0.2000, 0.4500, 0.8300, 0, 0, 0], 0.0) # 14 SKU-01 L3 8.5 kg
place(p[0.6000, 0.4500, 0.8300, 0, 0, 0], 0.0) # 15 SKU-01 L3 8.5 kg
place(p[1.0000, 0.4500, 0.8300, 0, 0, 0], 0.0) # 16 SKU-01 L3 8.5 kg
place(p[0.2000, 0.7000, 0.8300, 0, 0, 0], 0.0) # 17 SKU-06 L3 2.4 kg
place(p[0.6000, 0.7000, 0.8300, 0, 0, 0], 0.0) # 18 SKU-06 L3 2.4 kg
place(p[1.0000, 0.7000, 0.8300, 0, 0, 0], 0.0) # 19 SKU-06 L3 2.4 kg
place(p[0.1250, 0.1250, 1.0300, 0, 0, 0], 0.0) # 20 SKU-05 L4 3.2 kg
place(p[0.3750, 0.1250, 1.0300, 0, 0, 0], 0.0) # 21 SKU-05 L4 3.2 kg
place(p[0.6250, 0.1250, 1.0300, 0, 0, 0], 0.0) # 22 SKU-05 L4 3.2 kg
place(p[0.8750, 0.1250, 1.0300, 0, 0, 0], 0.0) # 23 SKU-05 L4 3.2 kg
place(p[0.1250, 0.3750, 1.0300, 0, 0, 0], 0.0) # 24 SKU-05 L4 3.2 kg
place(p[0.3750, 0.3750, 1.0300, 0, 0, 0], 0.0) # 25 SKU-05 L4 3.2 kg
place(p[0.6250, 0.3750, 1.0300, 0, 0, 0], 0.0) # 26 SKU-05 L4 3.2 kg
place(p[0.8750, 0.3750, 1.0300, 0, 0, 0], 0.0) # 27 SKU-05 L4 3.2 kg
place(p[0.1500, 0.6000, 1.0300, 0, 0, 0], 0.0) # 28 SKU-03 L4 4 kg
place(p[0.4500, 0.6000, 1.0300, 0, 0, 0], 0.0) # 29 SKU-03 L4 4 kg
place(p[0.7500, 0.6000, 1.0300, 0, 0, 0], 0.0) # 30 SKU-03 L4 4 kg
place(p[1.0500, 0.6000, 1.0300, 0, 0, 0], 0.0) # 31 SKU-03 L4 4 kg
place(p[0.1500, 0.1000, 1.2300, 0, 0, 0], 0.0) # 32 SKU-03 L5 4 kg
place(p[0.4500, 0.1000, 1.2300, 0, 0, 0], 0.0) # 33 SKU-03 L5 4 kg
place(p[0.7500, 0.1000, 1.2300, 0, 0, 0], 0.0) # 34 SKU-03 L5 4 kg
place(p[1.0500, 0.1000, 1.2300, 0, 0, 0], 0.0) # 35 SKU-03 L5 4 kg
place(p[0.1500, 0.3000, 1.2300, 0, 0, 0], 0.0) # 36 SKU-03 L5 4 kg
place(p[0.4500, 0.3000, 1.2300, 0, 0, 0], 0.0) # 37 SKU-03 L5 4 kg
end
palletizer_stack()Static geometry: base support and centre of mass. Not a transport or wrapping certification.Cycle time at 6 s per pick, planning assumption.
What ships
Planner
Height-grouped layers, shelf packing with rotation, per-box base support, centre-of-mass score, crush-limit check. Runs in the browser here and in the Python engine in the repository.
State machine
IDLE · RUN · HOLD · FAULT with named transitions and the fault codes the planner emits. Documented on /docs so a PLC or a person can read it.
Adapters
A URScript stub today. FANUC, KUKA and ABB adapters are planned and listed as such below — not claimed.
Robot adapters
| Robot | Interface | Status | Note |
|---|---|---|---|
| Universal Robots | URScript stub (movel, IO) | ships | Exported from the planner on this page. |
| FANUC | KAREL / TP via socket | planned | No date. Listed when it exists. |
| KUKA | KRL via EthernetKRL | planned | No date. Listed when it exists. |
| ABB | RAPID via PC SDK | planned | No date. Listed when it exists. |
Status
software shipped|cell not commissioned
Software shipped: repository public, planner live on this page. Cell not commissioned: no customer cell runs this software yet, so no cell video, no throughput claim and no reference appear here until one does.