Warning

You are reading an old version of this documentation. If you want up-to-date information, please have a look at 4.2 .

get_part

Important

This section is only relevant when a multi-model recipe is used in production. Refer to get_part for standard, single part recipe.

Parameters

  • None

Returns

  • 200 x=<x> y=<y> rz=<rz> m=<model>, where <x>, <y>, <rz> are coordinates and orientation of the part and <model> is the number of the model predicted by EYE+ else refer to error codes.

Note

The coordinates have 5 decimal digits (e.g. x = 10.00000) and the angle has 2 (e.g. rz = 1.00).

Description

Request one or more parts. A specific model can optionally be requested.

In the context of multi-model, this command can be used to retrieve the position of one or more specific parts that match the requested model (e.g. one part of model 1 and one part of model 2) or any pickable part of any model (e.g. model 1, model 3…etc). This behavior is controlled by the part_quantity parameter and the multi-model specific model_quantity parameter.

By default, this parameter is set to return a single part of the first model found by the system.

If model_quantity is set to 0 for every model defined in the recipe, the system will return the first pickable part it finds regardless of the model.

Note

Notice that changing model_quantity for any model while a get_part is pending will not affect it. Only subsequent get_part will consider the newly set values.

Note

This command will block until the requested parts are found and can be returned. A 30-second timeout is set by default. The command returns an error if the requested number of parts of the requested model(s) cannot be found within the time period. The timeout can be adjusted before calling get_part (refer to ref:set_parameter<set_parameter>).

Assume 4 models were defined in the recipe.

Default working principle

Parameters set to:

The command get_part will give back the coordinates of a good candidate of either model, be it 1, 2, 3 or 4. The behavior is similar to the single part use case. However, the command will return parts of alternating models if possible.

  • Suppose the image analysis is completed and the system found 2 parts of each model. Calling get_part 4 times will result in a random sequence containing each model once (e.g. 4, 2, 1, 3).

  • Suppose now the system found 3 parts of model 1 and none of any other model. Calling get_part 3 times will return 1, 1, 1. Calling get_part a fourth time will trigger a feeding sequence and a new image analysis.

Working principle with part_quantity = 2

Parameters set to:

This configuration changes the minimum number of good candidates of any model that must be found each time the get_part command is called. The quantity of parts can be changed with the command set_parameter.

The get_part command will not stop until getting at least 2 good candidates on the Asycube or reaching the timeout.

  • Suppose the image analysis is completed and the system found 2 parts of model 2 and 3 parts of model 4. Calling get_part once will result in a random output such as: (2, 4). Again, there is no guarantee that the output will begin with 2 so the output could just as well be (4, 2) or even (4, 4). After a second get_part that will return 2 good parts, only a single part would be available and since we requested a part_quantity of 2, the system will trigger a feeding sequence and new image analysis since.

Working principle with model_quantity = n

Parameters set to:

In this case, since one of the model_quantity is different from zero, part_quantity is ignored. Here the system will return one part of model 2 only.

  • Suppose again the image analysis is completed and the system found 3 parts of model 1 and 2 parts of model 2. Calling get_part 2 times will return the following sequence: 2, 2. Even though there are good candidates for model 1, none will be returned and a third call to get_part will trigger a feeding sequence and new image analysis to return a new candidate of model 2.

Parameters set to:

Once again part_quantity is ignored since model_quantity is different from zero for several models. One part of model 1 and one part of model 3 are requested at the same time now.

  • Taking our previous example where the image analysis is completed and the system found 2 parts of model 1 and 3 parts of model 3: calling get_part 2 times may return the following sequence: (1, 3), (1, 3). A third call to get_part will trigger a feeding sequence and new image analysis to return (1, 3).

Note

As for part_quantity, it is possible to set model_quantity to values higher than 1. For example, if 2 parts of model 1 and 1 part of model 3 are needed in the same get_part call, model_quantity 1 must be set to 2 and model_quantity 3 to 1.

Usage example

set_parameter part_quantity 2
set_parameter model_quantity 1 0
set_parameter model_quantity 2 0
set_parameter model_quantity 3 0
set_parameter model_quantity 4 0

get_part
200 x=0.58025 y=0.43782 rz=5.02 m=4 x=0.50617 y=0.29485 rz=0.00 m=1
get_part
200 x=0.47438 y=0.13729 rz=252.02 m=4 x=0.45598 y=0.51482 rz=0.00 m=3
get_part
200 x=0.31603 y=0.16358 rz=188.96 m=4 x=0.29393 y=0.53599 rz=0.00 m=3

set_parameter part_quantity 1
set_parameter model_quantity 1 1
set_parameter model_quantity 2 0
set_parameter model_quantity 3 0
set_parameter model_quantity 4 0

get_part
200 x=0.12345 y=0.11111 rz=0.99 m=1
get_part
200 x=0.67894 y=0.12341 rz=0.79 m=1

set_parameter part_quantity 1
set_parameter model_quantity 1 1
set_parameter model_quantity 2 0
set_parameter model_quantity 3 1
set_parameter model_quantity 4 0
get_part
200 x=0.12345 y=0.11111 rz=0.99 m=1 x=0.42420 y=0.75311 rz=0.75 m=3
get_part
200 x=0.78951 y=0.96514 rz=0.42 m=1 x=0.23554 y=0.14587 rz=0.51 m=3