Pinch grippers

Using a pinch gripper with Pally is possible, but it requires some adjustments. Here are some helpful tips and things to keep in mind when using

 

Common challenges overview

  • Only one side moves

  • Not leaving enough room for gripper

  • Vertical exit needed

  • TCP issues

Setting up the pattern

To create the pattern, it is suggested to use an inverted approach. (see picture below) This enables Pally to begin working from the side closest to the robot and move outwards, ensuring that the gripper always has enough space to open.

You can also use the “Customize box index” to arrange the boxes the way you want them, to ensure you always have free space to open the pich gripper. See picture below

Skjermbilde 2024-04-18 095139.png

 

To prevent collisions, it is suggested to lock the box rotations. (see picture below) This will ensure it is always placed in the same positions. You should see only one arrow on the top of each box.

Vertical Exit

Vertical exit is also needed when using a Pinch gripper.

Vertical exit is the default setting in Pally, and the total length of the vertical motion can be controlled by the parameter rf_foam_height (also works for pinch grippers).

Just add the following code in the initial MoveJ StartPosition (example):

rf_foam_height = 0.18

 

Vertical exit is active only if bit 2 is set in the rf_release_strategy variable. Read more about release strategy here - Release Strategy

Just add the following code in the initial MoveJ StartPosition (example):

rf_release_strategy = 6

TCP issues

Pinch grippers are configured like other custom grippers by adding the length, width, height and weight. It's keep in mind that the TCP is configured correctly. Sometimes, when only one side moves, it may be necessary to change the TCP from one product to another.

In the following example, the TCP X-offset is the distance from the tool flange to the box center point. TCP Z-offset is the distance from the tool flange to the top of the box.

The clamp offset refers to the distance between the tool flange and the fixed clamp.

When picking, it might be necessary to keep a small distance between the fixed clamp and the box. The push offset indicates this distance.

image2.png
TCP offset depends on the actual box size

To implement such push offset, we use script code to modify the variable that contains the pick position.

def FakeConveyorPosition(): rf_boxpickup = pose_trans( save_boxpickup, p[-conveyor_push_offset, 0, 0, 0, 0, 0] ) rf_boxpickup_2 = pose_trans( save_boxpickup_2, p[conveyor_push_offset, 0, 0, 0, 0, 0] ) end

The path planning calculations will use the modified position. The actual pushing motion will be added as an extra Move command in BeforeGrab:

def CustomMoveBeforeGrab(): movel( pose_trans( get_actual_tcp_pose() , p[ conveyor_push_offset, 0, 0, 0, 0, 0] ), a=rf_precise_acceleration, v=rf_precise_speed ) end

This would introduce a small error when lifting up the box from the conveyor, so we use another Move command in AfterGrab to ensure the robot is lifting up the box vertically:

def CustomMoveAfterGrab(): movel( pose_trans( get_actual_tcp_pose(), p[ 0, 0, -ProductHeight, 0, 0, 0] ), a=rf_precise_acceleration, v=rf_speed, r=0.01 ) end

 

The following sample code is provided for reference.

Example picture of code:

Screenshot 2025-03-21 at 10.43.41.png
How to use custom code

Important steps:

  • include the script “PinchGripperTools” in the initial MoveJ node under the Pally node

  • set rf_gripper_align_to_edges = False

  • set rf_foam_height=ProductHeight in the onNextTask callback

  • call ApplyTCP() in beforePallet and beforeZone

  • call CustomMoveBeforeGrab() in the beforeGrab callback (apply push offset)

  • call CustomMoveAfterGrab() in the afterGrab callback (lift up vertically)

 

Please note: the above example works with grippers where the clamp height is always greater than the box height.

Using short gripper clamps

If you are planning to pick boxes whose height exceeds gripper clamp height, another formula needs to be used:

image1.png
Using a variable Z-offset vs using a fixed Z-offset

In a mixed setup, the corresponding code lines should look like this:

gripper_clamp_height = 0.24 gripper_bracket_height = rf_gripper_height - gripper_clamp_height if ProductHeight > gripper_clamp_height: tcp_offset[2] = gripper_bracket_height else: tcp_offset[2] = rf_gripper_height - ProductHeight end tcp_offset[0] = ... tcp_offset[1] = ...

Here is the modified sample code:

 

Rotated mounted grippers

In the following example, the clamp gripper is mounted rotated:

RotatedClampGripper.jpg
Clamp gripper mounted with rotation

The offsets need to be decomposed to X and Y components by using trigonometric functions. In this specific project, the following values were used:

tcp_offset[0] = (0.222-box_width/2)*cos(1.8326) tcp_offset[1] = (0.222-box_width/2)*sin(1.8326)

 

 

See also: Gripper and TCP check

Related content