This is the documentation of the public API of the Jacobi Palletizer. The general documentation e.g. about installation and project setup can be found at https://docs.jacobirobotics.com.
The API consists of two endpoints:
A Websocket endpoint at ws://<host>:8081/v1/<...>
to subscribe and publish to asynchronous updates of the palletizer. It is described in the Control section below.
The websocket part of the API allows for asynchronous communication between the Jacobi Palletizer and the client, and is mostly used to send/receive live updates of the running palletizer. Each message is a JSON encoded string with a required key
field.
Each sent (published) command will be acknowledged by a corresponding subscription message. When a command triggers a response, a response will be (usually) sent with the same key
but an additional value
field.
For authentication, pass ?token=<...>
as a query parameter to the websocket URL.
For error management, there are three types of errors / warnings:
Errors that need to be (fixed and) acknowledged before palletizing can be continued. Both raising and resolving the error is communicated via the system/alarm
or system/safety
variables, and are then acknowledge via "acknowledge/alarm" or "acknowledge/safety".
Warnings that allow the palletizing to continue. Warnings are communicated via the system/warning
variable.
User feedback errors that directly results from user interaction. The response message will contain an "error": [string]
field with a unique error string. Here, the HMI can decide itself how long the error message should be shown (e.g. via a toast with a timeout, or until the next user interaction). Possible error values are:
"robot-not-at-home" | "action-not-allowed-in-current-state"| "vacuum-is-still-on" | "still-no-robot-connection" | "no-trajectory-for-current-box" | "unknown-pallet" | "there-is-only-a-single-zone" | "a-zone-was-already-requested" | "no-zone-is-currently-requested" | "unknown-system-error" | "pallet-needs-to-be-empty"
An HTTP endpoint at http://<host>:8080/api/v1
to read values from the palletizer or set values while the palletizer is stopped. It is described in the remaining sections of the documentation.
For authentication, pass the given token in the HTTP headers, with the common Authorization
key and Bearer: <token>
value.
Available at the /control
path of the websocket endpoint. On initial connection of the websocket, all subscription variables below are sent once.
Start the palletizer. Triggers a system/state
response.
{
"key": "start"
}
Turn on the suction.
{
"key": "start/suction"
}
Pause the palletizer.
{
"key": "pause"
}
Stop the palletizer after placing the current box.
{
"key": "stop/after_box"
}
Stop the palletizer after the next finished pallet.
{
"key": "stop/after_pallet"
}
Stop the suction.
{
"key": "stop/suction"
}
Go to the specific position. ossible positions are: home
, maintenance
, pick
, double_pick
, discard
. In case the value is false, it will stop the motion.
{
"key": "go_to/<position>",
"value": boolean
}
Set the active pallet.
{
"key": "pallet",
"value": string
}
Set the next active box to place. The box number refers to the index on the current pallet.
{
"key": "box",
"value": integer
}
Set the next active box to place, relative to the current active box.
{
"key": "box/relative",
"value": "reset" | "prev" | "next"
}
Set the next active layer to place. The layer number refers to the index on the current pallet.
{
"key": "layer",
"value": integer
}
Set the next active layer to place, relative to the current active layer.
{
"key": "layer/relative",
"value": "reset" | "prev" | "next"
}
Reload the current active setup.
{
"key": "setup/reload"
}
Clear the pallet with the given name, so that the palletizer know that it is empty and ready to be filled.
{
"key": "pallet/clear",
"value": string
}
Acknowledge a specific alarm fault.
{
"key": "acknowledge/alarm",
"value": string
}
Acknowledge a specific safety fault.
{
"key": "acknowledge/safety",
"value": string
}
Silence the audio signal of an alarm.
{
"key": "alarm/silence"
}
Request zone access to the current pallet.
{
"key": "zone_access/request",
"value": string | undefined
}
Release the current zone access.
{
"key": "zone_access/release"
}
Receive changes about the setup id.
{
"key": "setup_id",
"value": number
}
Receive changes about the setup name.
{
"key": "setup_name",
"value": string
}
Receive changes about the pallet names.
{
"key": "pallet_names",
"value": string[]
}
Receive changes about the pallet states. This is not updated live with the current pallet, but only on new websocket connections, setup changes, and pallet clearance.
{
"key": "pallet_states",
"value": Map<string, {
sequence: number,
layer: number,
box: number,
box_in_layer: number,
start: string,
goal: string
}>
}
Receive changes about the general system state.
{
"key": "system/state",
"value": "booting" | "ready" | "running" | "pausing" | "stopping" | "paused" | "stopped" | "faulted"
}
The system state is booting
until either all connection checks pass (then it will switch to stopped
), or until a timeout (3min by default) where it will switch to faulted
and throw more detailed system alarms.
Receive changes about the system safety. All alarms will stop the robot, bring the system into a faulted state, and need to be acknowledged before the system continuous operation.
{
"key": "system/safety",
"value": {
"area_scanner_active": boolean,
"collision": boolean,
"e_stop_active": boolean,
"guard_door_open": boolean,
"light_curtain_broken": boolean
}
}
Receive changes about the system alarm. All alarms will stop the robot, bring the system into a faulted state, and need to be acknowledged before the system continuous operation.
{
"key": "system/alarm",
"value": {
"box_drop": boolean,
"box_jam": boolean,
"box_unpickable": boolean,
"conveyor_overflow": boolean,
"low_pressure": boolean,
"no_collision_free_motion": boolean,
"no_pallet_while_placing": boolean,
"robot": boolean,
"robot_connection": boolean,
"robot_not_ready": boolean,
"setup_loading": boolean,
"system_not_ready": boolean
}
}
Receive changes about the system warning.
{
"key": "system/warning",
"value": {
"area_scanner_slowdown": boolean,
"area_scanner_stop": boolean,
"heartbeat_ping_timeout": boolean,
"no_pallet": boolean,
}
}
Receive changes whether the robot is going to a specific position. Possible positions are: home
, maintenance
, pick
, double_pick
, discard
.
{
"key": "is_going_to/<position>",
"value": boolean
}
Receive changes whether the robot is at a specific position. Possible positions are: home
, maintenance
, pick
, double_pick
, discard
.
{
"key": "is_at/<position>",
"value": boolean
}
Receive changes whether the robot will stop after the next placed box.
{
"key": "will_stop_after_box",
"value": boolean
}
Receive changes whether the robot will stop after the next finished pallet.
{
"key": "will_stop_after_pallet",
"value": boolean
}
Receive changes of the might stop suction variable. It indicates whether the user is allowed to currently stop the suction.
{
"key": "user_might_stop_suction",
"value": boolean
}
Receive changes about whether the system might continue automatically after a pause.
{
"key": "might_continue_automatically",
"value": boolean
}
Receive changes of the current pallet.
{
"key": "current_pallet",
"value": string
}
Receive changes of the current sequence, which is an index of the trajectory the robot is executing, of the current pallet.
{
"key": "current_sequence",
"value": number
}
Receive changes of the current layer of the current pallet.
{
"key": "current_layer",
"value": number
}
Receive changes of the current box in the current layer of the current pallet.
{
"key": "current_box_in_layer",
"value": number
}
Receive changes of the current box of the current pallet.
{
"key": "current_box",
"value": number
}
Receive changes of the start of the current motion.
{
"key": "current_start",
"value": string
}
Receive changes of the goal of the current motion.
{
"key": "current_goal",
"value": string
}
Receive changes of the current pick count.
{
"key": "current_picks",
"value": number
}
Receive changes of the average cycle time.
{
"key": "current_avg_cycle_time",
"value": number
}
Receive changes whether the pallets are present and ready for placing boxes. The value is a simple object mapping pallet names to booleans.
{
"key": "is_pallet_present",
"value": object
}
Receive changes whether the pallets are full and ready to be removed. The value is a simple object mapping pallet names to booleans.
{
"key": "is_pallet_full",
"value": object
}
Receive changes about an area scanner's detection of an obstacle. The value is an object mapping area scanner zone names (usually equal to pallet names) to either 'alarm' | 'warning' | 'safe'
.
{
"key": "safety/area_scanner",
"value": object
}
Receive changes about the speed enforced by an area scanner. The value is an object mapping area scanner zone names (usually equal to pallet names) to either 'stop' | 'slowdown' | 'safe'
.
{
"key": "safety/speed_level",
"value": object
}
Receive changes whether e-stops are active. The value is a simple object mapping e-stop names to booleans.
{
"key": "safety/e_stop",
"value": object
}
Receive changes whether light curtains are active. The value is a simple object mapping light curtain names (usually equal to pallet names) to booleans.
{
"key": "safety/light_curtain",
"value": object
}
Receive changes about the requested/released zone access.
{
"key": "zone_access",
"value": string | null
}
Receive changes about whether the zone access is active (or granted).
{
"key": "zone_access/is_active",
"value": boolean
}
Available at the /heartbeat
path of the websocket endpoint.
Receive an oscillating boolean value (either true
or false
) in case the system is currently alive, sent every second. Otherwise, nothing is sent at all.
{
"key": "heartbeat",
"value": boolean
}
Sends a ping to the controller. If the option of a ping requirement is active, and no ping was received in the last 2s, the controller will stop the palletizing process and emit an heartbeat_ping_timeout
system alarm. This can be used to make sure that an HMI is always connected and responsive. During manual motions (e.g. going home), the heartbeat timeout is reduced to 400ms.
{
"key": "ping"
}
Available at the /test
path of the websocket endpoint.
This is for setting mock data. Only available in testing mode without a physical robot. There is no direct message response.
Simulate a program crash.
{
"key": "crash"
}
Simulate PLC connection / disconnection.
{
"key": "plc_connection",
"value": boolean
}
Simulate the vacuum of the robot.
{
"key": "vacuum",
"value": boolean
}
Simulate whether a box is picked, as detected by the vacuum pressure sensor.
{
"key": "vacuum_picked",
"value": boolean
}
Simulate whether a left pallet is present.
{
"key": "left_pallet_present",
"value": boolean
}
Simulate whether a right pallet is present.
{
"key": "right_pallet_present",
"value": boolean
}
Simulate whether the area scanner is active.
{
"key": "area_scanner_triggered",
"value": boolean
}
Simulate whether the e-stop is active.
{
"key": "e_stop",
"value": boolean
}
Simulate the result type of a trajectory execution by the robot.
{
"key": "robot_result",
"value": "success" | "e_stop" | "safety" | "error"
}
{- "audience": "string",
- "automatic_clear_pallet": true,
- "clear_pallet_duration": 0,
- "check_pressure_sensor": true,
- "controller_type": "string",
- "conveyor_control_by_plc": true,
- "disable_after_stop": true,
- "fault_on_area_scanner_triggered": true,
- "gripper_has_blowoff": true,
- "is_editable": true,
- "name": "string",
- "pallet_names": [
- "string"
], - "area_scanner_names": [
- "string"
], - "light_curtain_names": [
- "string"
], - "e_stop_names": [
- "string"
], - "require_heartbeat_ping": true,
- "robot_cell": "string",
- "robot_driver_type": "string",
- "robot_host": "string",
- "sleep_after_vacuum_change": 0,
- "vacuum_activation_lead_time": 0
}
authorization required | string (Authorization) |
audience required | string (Audience) |
automatic_clear_pallet required | boolean (Automatic Clear Pallet) |
clear_pallet_duration required | number (Clear Pallet Duration) |
check_pressure_sensor required | boolean (Check Pressure Sensor) |
controller_type required | string (Controller Type) |
conveyor_control_by_plc required | boolean (Conveyor Control By Plc) |
disable_after_stop required | boolean (Disable After Stop) |
fault_on_area_scanner_triggered required | boolean (Fault On Area Scanner Triggered) |
gripper_has_blowoff required | boolean (Gripper Has Blowoff) |
is_editable required | boolean (Is Editable) |
name required | string (Name) |
pallet_names required | Array of strings (Pallet Names) |
area_scanner_names required | Array of strings (Area Scanner Names) |
light_curtain_names required | Array of strings (Light Curtain Names) |
e_stop_names required | Array of strings (E Stop Names) |
require_heartbeat_ping required | boolean (Require Heartbeat Ping) |
robot_cell required | string (Robot Cell) |
robot_driver_type required | string (Robot Driver Type) |
robot_host required | string (Robot Host) |
sleep_after_vacuum_change required | number (Sleep After Vacuum Change) |
vacuum_activation_lead_time required | number (Vacuum Activation Lead Time) |
{- "audience": "string",
- "automatic_clear_pallet": true,
- "clear_pallet_duration": 0,
- "check_pressure_sensor": true,
- "controller_type": "string",
- "conveyor_control_by_plc": true,
- "disable_after_stop": true,
- "fault_on_area_scanner_triggered": true,
- "gripper_has_blowoff": true,
- "is_editable": true,
- "name": "string",
- "pallet_names": [
- "string"
], - "area_scanner_names": [
- "string"
], - "light_curtain_names": [
- "string"
], - "e_stop_names": [
- "string"
], - "require_heartbeat_ping": true,
- "robot_cell": "string",
- "robot_driver_type": "string",
- "robot_host": "string",
- "sleep_after_vacuum_change": 0,
- "vacuum_activation_lead_time": 0
}
null
authorization required | string (Authorization) |
Alias (string) or Alias (integer) or Alias (null) (Alias) | |
Active On (integer) or Active On (boolean) (Active On) Default: 1 | |
name required | string (Name) |
category required | string (Category) |
Suffix (string) or Suffix (null) (Suffix) | |
Default Value (integer) or Default Value (boolean) (Default Value) Default: 0 | |
Description (string) or Description (null) (Description) | |
direction | integer (Direction) Default: 0 |
[- {
- "alias": "string",
- "active_on": 1,
- "name": "string",
- "category": "string",
- "suffix": "string",
- "default_value": 0,
- "description": "string",
- "direction": 0
}
]
null
{- "config": {
- "audience": "string",
- "automatic_clear_pallet": true,
- "clear_pallet_duration": 0,
- "check_pressure_sensor": true,
- "controller_type": "string",
- "conveyor_control_by_plc": true,
- "disable_after_stop": true,
- "fault_on_area_scanner_triggered": true,
- "gripper_has_blowoff": true,
- "is_editable": true,
- "name": "string",
- "pallet_names": [
- "string"
], - "area_scanner_names": [
- "string"
], - "light_curtain_names": [
- "string"
], - "e_stop_names": [
- "string"
], - "require_heartbeat_ping": true,
- "robot_cell": "string",
- "robot_driver_type": "string",
- "robot_host": "string",
- "sleep_after_vacuum_change": 0,
- "vacuum_activation_lead_time": 0
}, - "signals": [
- {
- "alias": "string",
- "active_on": 1,
- "name": "string",
- "category": "string",
- "suffix": "string",
- "default_value": 0,
- "description": "string",
- "direction": 0
}
]
}
authorization required | string (Authorization) |
run_with_suction required | boolean (Run With Suction) |
run_with_reduced_speed required | boolean (Run With Reduced Speed) |
{- "run_with_suction": true,
- "run_with_reduced_speed": true
}
null
Get the list of all saved setups
authorization required | string (Authorization) |
[- {
- "setup_id": 0,
- "project_id": "string",
- "project_name": "string",
- "name": "string",
- "comment": "string",
- "operator_name": "string",
- "operator_comment": "string",
- "data": {
- "double_pick": false,
- "rotate_for_single_pick": false,
- "speed_with_pick": 1,
- "clamp_prepick_height": 0,
- "clamp_push_distance": 0,
- "clamp_prepush_distance": 0,
- "pick_offset_x": 0,
- "pick_offset_y": 0,
- "pick_offset": 0,
- "pick_offset_a": 0,
- "pick_offset_b": 0,
- "pick_offset_c": 0,
- "place_offset_x": 0,
- "place_offset_y": 0,
- "place_offset_left_y": 0,
- "place_offset_right_y": 0,
- "place_offset": 0,
- "place_offset_a": 0,
- "place_offset_b": 0,
- "place_offset_c": 0,
- "layer_distance": 0,
- "wait_above_pick_distance": 0.1,
- "pick_retraction_distance": 0.05,
- "pick_retraction_speed": 1,
- "pick_retraction_approximate": false,
- "place_approach_distance": 0.05,
- "place_approach_distance_z": 0,
- "place_approach_angle_xy": 0.7853981633974483,
- "place_approach_speed": 1,
- "place_retraction_distance": 0,
- "place_retraction_speed": 1,
- "place_retraction_approximate": false,
- "box": {
- "width": 0,
- "length": 0,
- "height": 0,
- "label": false,
- "label_theta": 0
}, - "pallet": {
- "bounding_box": {
- "min": [
- 0
], - "max": [
- 0
], - "center": [
- 0
]
}, - "layers": [
- null
], - "per_pallet": { }
}
}, - "created": "string",
- "updated": "string",
- "planned": true
}
]
Get the currently active setup.
authorization required | string (Authorization) |
{- "setup_id": 0,
- "project_id": "string",
- "project_name": "string",
- "name": "string",
- "comment": "string",
- "operator_name": "string",
- "operator_comment": "string",
- "data": {
- "double_pick": false,
- "rotate_for_single_pick": false,
- "speed_with_pick": 1,
- "clamp_prepick_height": 0,
- "clamp_push_distance": 0,
- "clamp_prepush_distance": 0,
- "pick_offset_x": 0,
- "pick_offset_y": 0,
- "pick_offset": 0,
- "pick_offset_a": 0,
- "pick_offset_b": 0,
- "pick_offset_c": 0,
- "place_offset_x": 0,
- "place_offset_y": 0,
- "place_offset_left_y": 0,
- "place_offset_right_y": 0,
- "place_offset": 0,
- "place_offset_a": 0,
- "place_offset_b": 0,
- "place_offset_c": 0,
- "layer_distance": 0,
- "wait_above_pick_distance": 0.1,
- "pick_retraction_distance": 0.05,
- "pick_retraction_speed": 1,
- "pick_retraction_approximate": false,
- "place_approach_distance": 0.05,
- "place_approach_distance_z": 0,
- "place_approach_angle_xy": 0.7853981633974483,
- "place_approach_speed": 1,
- "place_retraction_distance": 0,
- "place_retraction_speed": 1,
- "place_retraction_approximate": false,
- "box": {
- "width": 0,
- "length": 0,
- "height": 0,
- "label": false,
- "label_theta": 0
}, - "pallet": {
- "bounding_box": {
- "min": [
- 0
], - "max": [
- 0
], - "center": [
- 0
]
}, - "layers": [
- null
], - "per_pallet": { }
}
}, - "created": "string",
- "updated": "string",
- "planned": true
}
Update the motion parameters of the given setup.
setup_id required | integer (Setup Id) |
authorization required | string (Authorization) |
double_pick | boolean (Double Pick) Default: false Whether there might be double picks of two boxes simultaneously. |
rotate_for_single_pick | boolean (Rotate For Single Pick) Default: false Rotate the gripper around 90 deg for single picks only. Might reduce the overhang of the gripper. |
speed_with_pick | number (Speed With Pick) Default: 1 Relative speed for motions with a picked item. |
clamp_prepick_height | number (Clamp Prepick Height) Default: 0 [m] |
clamp_push_distance | number (Clamp Push Distance) Default: 0 [m] |
clamp_prepush_distance | number (Clamp Prepush Distance) Default: 0 [m] |
pick_offset_x | number (Pick Offset X) Default: 0 x-offset of the pick pose [m]. |
pick_offset_y | number (Pick Offset Y) Default: 0 y-offset of the pick pose [m]. |
pick_offset | number (Pick Offset) Default: 0 z-offset of the pick pose [m]. |
pick_offset_a | number (Pick Offset A) Default: 0 Rotation offset around x-axis of the pick pose [rad]. |
pick_offset_b | number (Pick Offset B) Default: 0 Rotation offset around y-axis of the pick pose [rad]. |
pick_offset_c | number (Pick Offset C) Default: 0 Rotation offset around z-axis of the pick pose [rad]. |
place_offset_x | number (Place Offset X) Default: 0 x-offset of the place pose [m]. |
place_offset_y | number (Place Offset Y) Default: 0 y-offset of the place pose [m]. |
place_offset_left_y | number (Place Offset Left Y) Default: 0 y-offset of the place pose for the left pallet [m]. |
place_offset_right_y | number (Place Offset Right Y) Default: 0 y-offset of the place pose for the right pallet [m]. |
place_offset | number (Place Offset) Default: 0 z-offset of the place pose [m]. |
place_offset_a | number (Place Offset A) Default: 0 Rotation offset around x-axis of the place pose [rad]. |
place_offset_b | number (Place Offset B) Default: 0 Rotation offset around y-axis of the place pose [rad]. |
place_offset_c | number (Place Offset C) Default: 0 Rotation offset around z-axis of the place pose [rad]. |
layer_distance | number (Layer Distance) Default: 0 Distance between layers [m]. |
wait_above_pick_distance | number (Wait Above Pick Distance) Default: 0.1 Distance between the wait position and the top of the box [m]. |
pick_retraction_distance | number (Pick Retraction Distance) Default: 0.05 Upwards retraction after picking the box [m]. |
pick_retraction_speed | number (Pick Retraction Speed) Default: 1 Relative speed for the pick retraction sub-motion. |
pick_retraction_approximate | boolean (Pick Retraction Approximate) Default: false Whether to approximate the linear pick retraction sub-motion. |
place_approach_distance | number (Place Approach Distance) Default: 0.05 Linear retraction towards the box place position [m]. |
Place Approach Distance Z (number) or Place Approach Distance Z (null) (Place Approach Distance Z) Linear retraction towards the box place position along the z-axis [m]. | |
place_approach_angle_xy | number (Place Approach Angle Xy) Default: 0.7853981633974483 Angle in the xy-plane for the place approach [rad]. |
place_approach_speed | number (Place Approach Speed) Default: 1 Relative speed for the place approach sub-motion. |
place_retraction_distance | number (Place Retraction Distance) Default: 0 Upwards retraction after placing the box [m]. |
place_retraction_speed | number (Place Retraction Speed) Default: 1 Relative speed for the place retraction sub-motion. |
place_retraction_approximate | boolean (Place Retraction Approximate) Default: false Whether to approximate the linear place retraction sub-motion. |
{- "double_pick": false,
- "rotate_for_single_pick": false,
- "speed_with_pick": 1,
- "clamp_prepick_height": 0,
- "clamp_push_distance": 0,
- "clamp_prepush_distance": 0,
- "pick_offset_x": 0,
- "pick_offset_y": 0,
- "pick_offset": 0,
- "pick_offset_a": 0,
- "pick_offset_b": 0,
- "pick_offset_c": 0,
- "place_offset_x": 0,
- "place_offset_y": 0,
- "place_offset_left_y": 0,
- "place_offset_right_y": 0,
- "place_offset": 0,
- "place_offset_a": 0,
- "place_offset_b": 0,
- "place_offset_c": 0,
- "layer_distance": 0,
- "wait_above_pick_distance": 0.1,
- "pick_retraction_distance": 0.05,
- "pick_retraction_speed": 1,
- "pick_retraction_approximate": false,
- "place_approach_distance": 0.05,
- "place_approach_distance_z": 0,
- "place_approach_angle_xy": 0.7853981633974483,
- "place_approach_speed": 1,
- "place_retraction_distance": 0,
- "place_retraction_speed": 1,
- "place_retraction_approximate": false
}
null
Sets the given setup as the active one. Then, setup/reload
needs to be called on the websocket before running a setup.
setup_id required | integer (Setup Id) |
authorization required | string (Authorization) |
null
setup_id required | integer (Setup Id) |
authorization required | string (Authorization) |
name required | string (Name) |
{- "name": "string"
}
null
Plans all motions for the given setup. This needs to be done before activating a newly created setup, or after changing the setup data.
As this might take a while, the /progress
endpoint provides data about the current progress of the calculation.
setup_id required | integer (Setup Id) |
authorization required | string (Authorization) |
Array of Boxes To Overwrite (objects) or Boxes To Overwrite (null) (Boxes To Overwrite) | |
return_on_first_error | boolean (Return On First Error) Default: false |
{- "boxes_to_overwrite": [
- {
- "pallet": "string",
- "current_box": 0
}
], - "return_on_first_error": false
}
{- "errors": [ ]
}
Provide progress data about the calculation of the given setup.
setup_id required | integer (Setup Id) |
authorization required | string (Authorization) |
{- "is_calculating": true,
- "done": 0,
- "total": 0
}
project_id required | string (Project Id) |
authorization required | string (Authorization) |
double_pick | boolean (Double Pick) Default: false Whether there might be double picks of two boxes simultaneously. |
rotate_for_single_pick | boolean (Rotate For Single Pick) Default: false Rotate the gripper around 90 deg for single picks only. Might reduce the overhang of the gripper. |
speed_with_pick | number (Speed With Pick) Default: 1 Relative speed for motions with a picked item. |
clamp_prepick_height | number (Clamp Prepick Height) Default: 0 [m] |
clamp_push_distance | number (Clamp Push Distance) Default: 0 [m] |
clamp_prepush_distance | number (Clamp Prepush Distance) Default: 0 [m] |
pick_offset_x | number (Pick Offset X) Default: 0 x-offset of the pick pose [m]. |
pick_offset_y | number (Pick Offset Y) Default: 0 y-offset of the pick pose [m]. |
pick_offset | number (Pick Offset) Default: 0 z-offset of the pick pose [m]. |
pick_offset_a | number (Pick Offset A) Default: 0 Rotation offset around x-axis of the pick pose [rad]. |
pick_offset_b | number (Pick Offset B) Default: 0 Rotation offset around y-axis of the pick pose [rad]. |
pick_offset_c | number (Pick Offset C) Default: 0 Rotation offset around z-axis of the pick pose [rad]. |
place_offset_x | number (Place Offset X) Default: 0 x-offset of the place pose [m]. |
place_offset_y | number (Place Offset Y) Default: 0 y-offset of the place pose [m]. |
place_offset_left_y | number (Place Offset Left Y) Default: 0 y-offset of the place pose for the left pallet [m]. |
place_offset_right_y | number (Place Offset Right Y) Default: 0 y-offset of the place pose for the right pallet [m]. |
place_offset | number (Place Offset) Default: 0 z-offset of the place pose [m]. |
place_offset_a | number (Place Offset A) Default: 0 Rotation offset around x-axis of the place pose [rad]. |
place_offset_b | number (Place Offset B) Default: 0 Rotation offset around y-axis of the place pose [rad]. |
place_offset_c | number (Place Offset C) Default: 0 Rotation offset around z-axis of the place pose [rad]. |
layer_distance | number (Layer Distance) Default: 0 Distance between layers [m]. |
wait_above_pick_distance | number (Wait Above Pick Distance) Default: 0.1 Distance between the wait position and the top of the box [m]. |
pick_retraction_distance | number (Pick Retraction Distance) Default: 0.05 Upwards retraction after picking the box [m]. |
pick_retraction_speed | number (Pick Retraction Speed) Default: 1 Relative speed for the pick retraction sub-motion. |
pick_retraction_approximate | boolean (Pick Retraction Approximate) Default: false Whether to approximate the linear pick retraction sub-motion. |
place_approach_distance | number (Place Approach Distance) Default: 0.05 Linear retraction towards the box place position [m]. |
Place Approach Distance Z (number) or Place Approach Distance Z (null) (Place Approach Distance Z) Linear retraction towards the box place position along the z-axis [m]. | |
place_approach_angle_xy | number (Place Approach Angle Xy) Default: 0.7853981633974483 Angle in the xy-plane for the place approach [rad]. |
place_approach_speed | number (Place Approach Speed) Default: 1 Relative speed for the place approach sub-motion. |
place_retraction_distance | number (Place Retraction Distance) Default: 0 Upwards retraction after placing the box [m]. |
place_retraction_speed | number (Place Retraction Speed) Default: 1 Relative speed for the place retraction sub-motion. |
place_retraction_approximate | boolean (Place Retraction Approximate) Default: false Whether to approximate the linear place retraction sub-motion. |
required | object (BoxData) Information about the box to palletize. |
required | object (PalletData) Information about the pallet including all layers and box positions. |
{- "double_pick": false,
- "rotate_for_single_pick": false,
- "speed_with_pick": 1,
- "clamp_prepick_height": 0,
- "clamp_push_distance": 0,
- "clamp_prepush_distance": 0,
- "pick_offset_x": 0,
- "pick_offset_y": 0,
- "pick_offset": 0,
- "pick_offset_a": 0,
- "pick_offset_b": 0,
- "pick_offset_c": 0,
- "place_offset_x": 0,
- "place_offset_y": 0,
- "place_offset_left_y": 0,
- "place_offset_right_y": 0,
- "place_offset": 0,
- "place_offset_a": 0,
- "place_offset_b": 0,
- "place_offset_c": 0,
- "layer_distance": 0,
- "wait_above_pick_distance": 0.1,
- "pick_retraction_distance": 0.05,
- "pick_retraction_speed": 1,
- "pick_retraction_approximate": false,
- "place_approach_distance": 0.05,
- "place_approach_distance_z": 0,
- "place_approach_angle_xy": 0.7853981633974483,
- "place_approach_speed": 1,
- "place_retraction_distance": 0,
- "place_retraction_speed": 1,
- "place_retraction_approximate": false,
- "box": {
- "width": 0,
- "length": 0,
- "height": 0,
- "label": false,
- "label_theta": 0
}, - "pallet": {
- "bounding_box": {
- "min": [
- 0
], - "max": [
- 0
], - "center": [
- 0
]
}, - "layers": [
- null
], - "per_pallet": { }
}
}
{- "property1": {
- "property1": 0,
- "property2": 0
}, - "property2": {
- "property1": 0,
- "property2": 0
}
}