Pally General - Pattern json File Format

Pally General - Pattern json File Format

Pallet pattern files are simple text files in json format. You can use any text editor to open and edit the files.

After editing a file manually, make sure the file is a syntactically correct json file. Several free tools are available online, e.g., jsonformatter.org, where you can easily verify your file before uploading to the robot.

Each product type requires its own pallet pattern definition file. This file includes all product-specific information that the robot needs for palletizing:

  • Product data

  • Layer types

  • Layers

  • Zones

Project overview

This section of the pattern file includes base data about the product itself, such as

  • The dimensions (width, length, height) of the pallet, mm: 

  • Height of the empty pallet (see palletHeight), mm:

  • The dimensions (width, length, height) of one box of product, mm: 

  • The weight of one box, g: 

  • The label position on the box (labelOrientation):

    • 0: label in front

    • -90: label on the left side

    • 90: label on the right side

    • 180: label on the back side

    • null or missing value: label not defined 

  • The maximum number of boxes the robot can pick at once (maxGrip)

    • 1: single pick

    • 2: double pick

    • 3: triple pick

    • … (up to 8-pick) or

  • Automatic calculation of the maximum number of boxes in multi-grip (maxGripAuto)

  • A unique name, a description, and a timestamp,

  • And some additional metadata for the graphical pattern editor.

 

It is important that the product dimensions are as accurate as possible to achieve the best possible result.

{     "name": "test",     "description": "my first pattern",     "dateModified": "2020-04-29T07:03:20.288Z",     "dimensions": {         "height": 1048,         "length": 1200,         "width": 800,         "palletHeight": 145     },     "productDimensions": {         "width": 365,         "height": 262,         "length": 377,         "weight": 5000     },     "maxGrip": 1,     "maxGripAuto": true,     "labelOrientation": 0,

Layer types

Layer types define possible layouts of individual layers. Depending on the desired stacking method, the pallet can be built by using the same layer type repeatedly (column stack) or alternating two or more different layouts (flipped, rotated, etc.) in order to create interlocking between the layers for increased stability.

 

{     [...]     "layerTypes": [         {             "name": "normal",             "pattern": [                 {                     "x": 588.5,                     "y": 217,                     "r": [90, 270]                 },                 {                     "x": 211.5,                     "y": 217,                     "r": [90, 270],                     "g": [0],                     "f": 1                 },                 [...]             ],             "altPattern": [                 {                     "x": 588.5,                     "y": 217,                     "r": [90, 270]                 },                 [...]             ],             "approach": "inverse"         },         {             "name": "rotated",             "pattern": [                 {                     [...]

Box position

Each box has a specific position (the "x" and "y" values) relative to the pallet corner. The edges of the pallet define a Cartesian coordinate system with the origo in the lower left corner. By default, positions are defined in millimeters.

Note: The layer type is a 2-dimensional logical model of the layout, thus only the x and y coordinates are defined. The z-coordinate will be calculated from the product height and the actual layer being palletized. The [x, y, z] values point to the center point at the top of the box on the pallet.

Box rotation

Each product has at least one allowed rotation (the "r" values) on the pallet, which can be 0, 90, 180, or 270 degrees, or the combinations of [0, 180] and [90, 270] respectively. 

Box order

Boxes are palletized in the same order as they are defined in the pattern file. All positions of one layer are completed before the robot continues on the next layer. The only exception is the use of zones.

Enforced single/multi-grip

By default, the robot will try to palletize two or more adjacent boxes in one turn, in order to maximize throughput. The number of boxes that the robot can pick at once is limited by the maxGrip parameter in the pattern file, as well as the installed product sensors on the production line and the size of the gripper.

In order to force the robot to pick fewer than the maximum possible number of boxes, the separator flag (the "f" value) can be used. The separator flag will instruct the robot to stop looking for more boxes. An “f”-value set to 1 means that the robot will check to see if it can pick the current box with the next box in the pattern. If the “f”-value is set to 0, then the robot will not try to pick the current box with the next box. 

 

The following outtake of a pattern file shows how it is possible to force the robot to complete a double-pick followed by a single-pick for the first three boxes in a pattern where the robot can pick three boxes at once. 

"maxGrip": 3  [...] "pattern": [                 {                     "x": 690,                     "y": 165,                     "r": [0, 180],                     "f": 1                 },                 {                     "x": 690,                     "y": 455,                     "r": [0, 180],                     "f": 0                 }, {                     "x": 690,                     "y": 745,                     "r": [0, 180],                     "f": 0                 },                 [...]             ], [...]

Gripper rotation at the conveyor

By default, the robot will choose the best gripper position when picking up the box(es) from the conveyor. The possible options are specified by the gripper optimization settings in the URCap (4-ways, 2-ways, or none). 

For specific box positions, however, it is possible to enforce a gripper position (the "g" values) or limit the possible gripper positions the robot can choose from. Any combination of the following values is allowed: 0, 90, 180, and 270, where 0 corresponds to the configured pickup position in the URCap; other values are angles, counterclockwise when seen from above.

Left and right pallet layout

Each layout can be defined separately for the left and right pallet positions. Even if the left and right pallets look identical, the order of the boxes can be different.

The default layout (the "pattern" structure) defines the layout for the right pallet. The alternative layout (the "altPattern" structure) defines the layout for the left pallet. By default - if no alternative layout is defined - the robot will generate a mirrored layout for the left pallet, in order to make a symmetric setup.

Inverse approach

For each layer type, it is possible to define how the robot should approach the target position (the "approach" value corresponds to the right, and the "altApproach" to the left pallet layout). The approach direction should depend on the box order -  palletizing from the furthest side of the pallet and in ("normal") or starting at the nearest side and continuing further out ("inverse"). In special circumstances - especially when the mounting base is wide - the inverse box order and approach produce a better result with fewer or no collision situations.

Shim paper

Shim papers are considered special layers without actual products. The shim paper layer has its own height, usually 2-3 mm. The number of shim paper layers is not limited.

The shim paper layer type is marked with the "class": "separator" field and must not contain the "pattern" and "altPattern" structures.

  "layerTypes": [         {             "name": "shimPaper",             "class": "separator",             "height": 3         } ...     ],     "layers": [         "shimPaper", ...

Layers

The "layers" structure defines the actual layout of the final pallet. Each layer is built according to one of the layer types as described above.

{     [...]     "layers": [         "normal",         "rotated",         "shimPaper",          "normal",         "rotated"     ]

Note: The first element in the layer list is the first layer on the empty pallet. The last element in the list is the topmost layer.