Smart placing using pick point data

Having multiple and/or flexible pick points increases the likelihood that an object is pickable, which significantly benefits bin picking applications. However, after picking an object, the robot usually needs to know something about the way the object was picked, in order to place it appropriately.

Concrete examples of such situations are listed below, as well as a brief explanation of how pick point data can help to obtain the desired way to place the objects, while keeping the robot program as simple as possible.

Note

Each example below contains a Robot program snippet, consisting of an implementation of the object placing sequence, place(). These snippets are written in robot-agnostic pseudo-code. Refer to the complete pick and place program to learn more about the logic of a pick and place application.

Different drop-off based on pick point ID

When using Teach CAD models to detect randomly overlapping objects, multiple pick points are usually necessary in order to be able to pick the parts from different sides. For instance, these power sockets can be picked from the top (pick point 1) or from the bottom (pick point 2).

../../_images/pick_point_data_sockets_multiple_id.png

Depending on which side is picked, the user may want the robot to place the object differently. Below, the robot program uses the pick point ID to drop the object on the left side if picked from the top, and on the right side if picked from the bottom.

Robot program snippet (click to expand)
def place():
    if PickitPickId == 1:
        # Dropoff for object picked from the top.
        movej(DropoffTop)
    else:
        # Dropoff for object picked from the bottom.
        movej(DropoffBottom)
    gripper_release()



Note

Similar logic can be written depending not on the pick point ID, but on the detected model (if multiple Teach models exist) or the detected object dimensions (Flex engine), for instance.

Same drop-off for objects with flexible pick point orientation

If you are using pick points with flexible orientations, the object can be picked in infinitely many ways. However, it is usually desired that the object is dropped off in the same way, regardless of how it was picked. In the two cases below, the robot program compensates the difference between the actual and nominal pick point to always place the object at the same drop-off location.

Robot program snippet (click to expand)
def place():
    # The '*' operator represents the pose composition operator.
    CorrectedDropoff = Dropoff * PickitPickOff
    movej(CorrectedDropoff)
    gripper_release()

Where Dropoff was defined for the nominal pick point, that is, when flexible pick orientations are not used. Learn more about PickPointOff here.


Flexibility around Z

In the example below, we use flexibility around the pick point Z-axis to prevent the robot flange from rotating upon picking the cups.

../../_images/pick_point_data_cups_flexible_offset.png

The pick point offset is used to correct the drop-off pose, such that the cups are always dropped with the same orientation, independently of how they were picked.



Flexibility around X and/or Y

The example below shows a similar offset compensation. This time, the pick point of the blocks has flexibility around the Y-axis, in order to allow being picked by a two-finger gripper as vertically as possible (see, for example, Pick a ring object with a two-finger gripper).

../../_images/pick_point_data_blocks_flexible_offset.png

Using the pick point offset, the block position is first corrected, and only then dropped on top of the previously picked blocks.



Same drop-off when picking with different pick points

In the following example, the object model contains three pick points. It is desired that the object is always picked by the highest possible pick point, to minimize the likelihood of collisions. Since the objects are oriented in different ways, the highest pick point will not always be the same.

../../_images/pick_point_data_shape_multiple_offset.png

Having multiple pick points increases the chance of an object being pickable. However, defining the same number of drop-off poses would be time-consuming, error-prone, as well as introduce complex logic in the robot program. Thanks to the ability to define reference pick points, only one drop-off pose is defined in this example. Having one pick point as the reference of the other two, the robot program only needs to define the drop-off position of the reference. The pick point offset, which is the offset between the actual pick point and its reference, is used to correct the drop-off position, allowing the object to always be placed in the same way, regardless of which pick point was used to pick it.

Robot program snippet (click to expand)
def place():
    # The '*' operator represents the pose composition operator.
    CorrectedDropoff = Dropoff * PickitPickOff
    movej(CorrectedDropoff)
    gripper_release()

Where Dropoff was defined for the reference pick point. Learn more about PickPointOff here.




Note

This article shows examples where the pick point data is used for smart object placing. However, pick point information can also be used for smart object picking, such as:

  • Different gripper settings depending on the pick point (see example below).
  • Different grippers for different pick points.
  • Different approach or retreat motions depending on the pick point.
../../_images/different_gripper_openings.png