# Add parallel grippers

> Learn how to create and use parallel grippers in your NOVA simulation.

![Parallel gripper (Schunk Coact)](/assets/nova/omniservice/parallel-gripper/Schunk_Coact_Foto.webp)

Configure a parallel gripper in a scene.
This guide demonstrates how to manually build a gripper using prismatic joints and physics drives.

The workflow covers geometry setup, physics configuration, and control via an action graph.

### Step 1: Create gripper geometry

Video: [/video/omniservice/parallel-gripper/InitialSetup\_1.webm](/video/omniservice/parallel-gripper/InitialSetup_1.webm)

1. Drag and drop the `Gripper_Body.usd` into the scene.
2. Create a cube via `Create` → `Mesh` → `Cube`.
3. Adjust the transform to form the first finger segment:

| | X | Y | Z |
| - | - | - | - |
| Translate | 0.0 | 0.04 | 0.16 |
| Orient | 0.0 | 0.0 | 0.0 |
| Scale | 0.05 | 0.01 | 0.05 |

4. Create a second cube and apply:

| | X | Y | Z |
| - | - | - | - |
| Translate | 0.0 | 0.025 | 0.13 |
| Orient | 90.0 | 0.0 | 0.0 |
| Scale | 0.05 | 0.01 | 0.04 |

5. Group both cubes into an `Xform` named `Finger_R`.
6. Duplicate it to create `Finger_L` and rotate it **180° on Z**.

### Step 2: Configure rigid bodies and friction

Video: [/video/omniservice/parallel-gripper/Physics\_Material.webm](/video/omniservice/parallel-gripper/Physics_Material.webm)

1. Add rigid bodies with colliders to:
   - `Gripper_Body`
   - `Finger_R`
   - `Finger_L`

2. Create a physics material via `Create` → `Physics` → `Physics Material`.

3. Configure friction:
   - Dynamic friction: `0.8`
   - Static friction: `0.8`
   - Combine mode: `Max`

4. Assign the material to both fingers.

Proper friction settings prevent objects from slipping during gripping.

### Step 3: Create prismatic joints

Video: [/video/omniservice/parallel-gripper/CreatingJoints.webm](/video/omniservice/parallel-gripper/CreatingJoints.webm)

1. Create a prismatic joint for each finger via
   `Create` → `Physics` → `Joint` → `Prismatic Joint`.

2. Configure the joint connections:

| Joint | Body 0 | Body 1 |
| - | - | - |
| Left finger | Gripper\_Body | Finger\_L |
| Right finger | Gripper\_Body | Finger\_R |

These joints allow linear motion of the fingers.

### Step 4: Configure linear drives

Video: [/video/omniservice/parallel-gripper/Configuring\_the\_Linear\_Drive.webm](/video/omniservice/parallel-gripper/Configuring_the_Linear_Drive.webm)

1. Add a linear drive to each prismatic joint via
   `Add` → `Physics` → `Linear Drive`.

2. Configure both drives:

| Parameter | Value |
| - | - |
| Axis | Y |
| Lower Limit | -0.005 |
| Upper Limit | 0.005 |
| Max Force | 100 |
| Damping | 100 |
| Stiffness | 3000 |

The drives act as motors controlling finger movement.

### Step 5: Create action graph

Video: [/video/omniservice/parallel-gripper/Add\_Action\_Graph.webm](/video/omniservice/parallel-gripper/Add_Action_Graph.webm)

1. Create an action graph via
   `Create` → `Visual Scripting` → `Action Graph`.

2. Add the following nodes:
   - On IO Change (Wandelbots)
   - Branch
   - Write Prim Attribute (4×)
   - Constant Float (2×)

3. Connect the logic:
   - IO Change → Branch (trigger + condition)
   - True → closing motion
   - False → opening motion

4. Define velocities:
   - Opening: `0.5`
   - Closing: `-0.5`

5. Configure all Write Prim Attribute nodes:

| State | Target Prim | Attribute |
| - | - | - |
| Open | PrismaticJoint\_Finger\_R | drive:linear:physics:targetVelocity |
| Open | PrismaticJoint\_Finger\_L | drive:linear:physics:targetVelocity |
| Close | PrismaticJoint\_Finger\_R | drive:linear:physics:targetVelocity |
| Close | PrismaticJoint\_Finger\_L | drive:linear:physics:targetVelocity |

The action graph enables IO-based control of opening and closing.

### Step 6: Test parallel gripper

1. Set up a test scene and add the created parallel gripper.
2. Trigger the I/O signal defined in the Action Graph.
3. Verify that both fingers move synchronously and grip objects securely.

Learn [how to set up a test scene](/simulation/quickstart) and add your gripper.
