Implementation:ARISE Initiative Robosuite JacoThreeFingerGripper
| Knowledge Sources | |
|---|---|
| Domains | Robotics, Simulation, MJCF_Modeling |
| Last Updated | 2026-02-15 07:00 GMT |
Overview
JacoThreeFingerGripper provides the three-fingered gripper model for Kinova's Jaco robot arm, with variants for 1-DOF synchronized and 3-DOF dexterous control.
Description
This module defines three classes forming a hierarchy of Jaco gripper models. JacoThreeFingerGripperBase serves as the base class, loading the MJCF XML from grippers/jaco_three_finger_gripper.xml and defining 6 initial joint positions ([0.5, 0, 0.5, 0, 0.5, 0]) that set the default resting pose. The base class passes actions through without modification and maps collision geometries for an index finger, pinky finger, and thumb across proximal, distal, tip, and pad segments.
JacoThreeFingerGripper extends the base to provide 1-DOF synchronized control, where a single scalar action is mapped to all three fingers simultaneously. It uses a speed-modulated clipping approach: current_action = clip(current_action - speed * sign(action), -1, 1), then formats the output to 3 identical values via current_action * [1, 1, 1]. The gripper speed is set to 0.01, providing slow, precise control.
JacoThreeFingerDexterousGripper provides 3-DOF independent control, where each finger can be actuated separately. It uses the same speed-modulated clipping approach but returns the 3-element action vector directly, allowing differential finger positioning for complex grasping strategies.
Usage
Use JacoThreeFingerGripper for standard manipulation tasks with the Kinova Jaco arm requiring simple open/close control. Use JacoThreeFingerDexterousGripper for tasks requiring independent finger control, such as precision grasping of irregularly shaped objects. The base class JacoThreeFingerGripperBase provides full 6-DOF raw actuator access.
Code Reference
Source Location
Signature
class JacoThreeFingerGripperBase(GripperModel):
def __init__(self, idn=0):
class JacoThreeFingerGripper(JacoThreeFingerGripperBase):
# Inherits __init__; overrides format_action, speed, dof
class JacoThreeFingerDexterousGripper(JacoThreeFingerGripperBase):
# Inherits __init__; overrides format_action, speed, dof
Import
from robosuite.models.grippers.jaco_three_finger_gripper import (
JacoThreeFingerGripper,
JacoThreeFingerGripperBase,
JacoThreeFingerDexterousGripper,
)
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| idn | int or str | No | Unique identification number or string for this gripper instance. Default: 0 |
Outputs
| Name | Type | Description |
|---|---|---|
| JacoThreeFingerGripperBase instance | GripperModel | Base 6-DOF three-finger gripper model |
| JacoThreeFingerGripper instance | GripperModel | 1-DOF synchronized three-finger gripper (speed: 0.01) |
| JacoThreeFingerDexterousGripper instance | GripperModel | 3-DOF independent finger gripper (speed: 0.01) |
| init_qpos | np.array | [0.5, 0, 0.5, 0, 0.5, 0] default joint positions |
Usage Examples
from robosuite.models.grippers.jaco_three_finger_gripper import (
JacoThreeFingerGripper,
JacoThreeFingerDexterousGripper,
)
import numpy as np
# 1-DOF synchronized gripper
gripper = JacoThreeFingerGripper(idn=0)
action = np.array([1.0]) # close
formatted = gripper.format_action(action) # 3-element array, all fingers move together
# 3-DOF dexterous gripper
dex_gripper = JacoThreeFingerDexterousGripper(idn=0)
action = np.array([1.0, -1.0, 0.5]) # independent finger control
formatted = dex_gripper.format_action(action) # 3-element array with independent values