Implementation:ARISE Initiative Robosuite FourierHands
| Knowledge Sources | |
|---|---|
| Domains | Robotics, Simulation, MJCF_Modeling |
| Last Updated | 2026-02-15 07:00 GMT |
Overview
FourierHands defines the dexterous left and right hand gripper models for the Fourier GR1 humanoid robot in robosuite.
Description
This module contains two classes, FourierLeftHand and FourierRightHand, both extending GripperModel. These represent the five-fingered dexterous hands of the Fourier GR1 robot, each with 6 degrees of freedom (DOF) in control space that map to 11 physical joints through the format_action method.
The format_action method implements a joint coupling scheme where a 6-dimensional action vector is expanded to 11 joint values using index mapping. Specifically, action indices [0,0,1,1,2,2,3,3,4,4,5] map the 6 control inputs to 11 joints: index and middle finger joints are each duplicated (2 joints per action), while the thumb rotation and a separate control each have their own dedicated action. This coupling avoids using MuJoCo equality constraints, which were found to make finger movement laggy.
Both hands share identical control properties: a grasp speed of 0.15, initial joint positions of all zeros (11 joints), and grasp configurations that map -1 (open) and 1 (close) to specific joint angle arrays. The left hand uses geometry names prefixed with L_ and the right hand uses R_, covering thumb, index, middle, ring, and pinky finger collision geometries for both finger and fingerpad groups.
Usage
Use FourierLeftHand or FourierRightHand when configuring a Fourier GR1 humanoid robot that requires dexterous manipulation capabilities. These grippers are typically assigned automatically by the robot model configuration but can also be specified explicitly in custom robot setups.
Code Reference
Source Location
- Repository: ARISE_Initiative_Robosuite
- File: robosuite/models/grippers/fourier_hands.py
Signature
class FourierLeftHand(GripperModel):
def __init__(self, idn=0):
class FourierRightHand(GripperModel):
def __init__(self, idn=0):
Import
from robosuite.models.grippers.fourier_hands import FourierLeftHand, FourierRightHand
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 |
|---|---|---|
| FourierLeftHand / FourierRightHand instance | GripperModel | Dexterous hand model with 6 DOF control and 11 physical joints |
| init_qpos | np.array | Array of 11 zeros representing the default open position |
| dof | int | Returns 6 (control degrees of freedom) |
| speed | float | Returns 0.15 (grasp speed) |
| grasp_qpos | dict | Maps -1 (open) and 1 (close) to 6-element joint angle arrays |
Usage Examples
from robosuite.models.grippers.fourier_hands import FourierLeftHand, FourierRightHand
import numpy as np
# Create left and right hand instances
left_hand = FourierLeftHand(idn=0)
right_hand = FourierRightHand(idn=0)
# Format a 6-DOF action to 11 joint commands
action = np.array([0.5, -0.3, 0.2, 0.1, -0.5, 0.8])
joint_commands = left_hand.format_action(action)
# joint_commands has shape (11,) due to joint coupling
# Access grasp configurations
open_config = left_hand.grasp_qpos[-1] # open position
close_config = left_hand.grasp_qpos[1] # close position