Implementation:ARISE Initiative Robosuite GR1Robot
| Knowledge Sources | |
|---|---|
| Domains | Robotics, Robot Modeling, Humanoid Robots |
| Last Updated | 2026-02-15 07:00 GMT |
Overview
The GR1Robot module defines the robot model and variants for the GR1 humanoid robot, a full-body bimanual legged manipulator with configurable lower-body actuation modes.
Description
This module provides the GR1 base class and three variant classes for the GR1 humanoid robot. The base GR1 class extends LeggedManipulatorModel and represents the full humanoid with 32 degrees of freedom, including torso, head, two 7-DOF arms, and two legs. It loads its MJCF definition from robots/gr1/robot.xml and configures Fourier dexterous hands (right and left) as default grippers.
The controller configuration covers six body parts: right arm, left arm, head, torso, right leg, and left leg, each with a GR1-specific default controller. The initial joint configuration places the arms in a slightly bent posture with elbows at approximately -90 degrees.
Three variants modify the base configuration for different use cases. GR1FixedLowerBody removes leg joint actuation and the free joint, fixing the lower body in place for tabletop manipulation tasks (20 DOF). GR1FloatingBody similarly removes leg actuation and the free joint but uses a FloatingLeggedBase for a mobile base that can be repositioned. GR1ArmsOnly removes legs, head, and torso actuation, leaving only the 14 arm DOF for arm-only manipulation tasks.
All variants use the _remove_joint_actuation and _remove_free_joint methods inherited from LeggedManipulatorModel to strip unnecessary joints and actuators from the MJCF model at construction time.
Usage
Use GR1 for full humanoid simulation with legs, GR1FixedLowerBody for tabletop bimanual tasks, GR1FloatingBody for mobile bimanual tasks, and GR1ArmsOnly for isolated arm control experiments.
Code Reference
Source Location
- Repository: ARISE_Initiative_Robosuite
- File: robosuite/models/robots/manipulators/gr1_robot.py
Signature
class GR1(LeggedManipulatorModel):
arms = ["right", "left"]
def __init__(self, idn=0)
class GR1FixedLowerBody(GR1):
def __init__(self, idn=0)
class GR1FloatingBody(GR1):
def __init__(self, idn=0)
class GR1ArmsOnly(GR1):
def __init__(self, idn=0)
Import
from robosuite.models.robots.manipulators.gr1_robot import (
GR1, GR1FixedLowerBody, GR1FloatingBody, GR1ArmsOnly
)
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| idn | int or str | No | Unique identification number or string for this robot instance (default: 0) |
Outputs
| Name | Type | Description |
|---|---|---|
| default_base | str | "NoActuationBase" (GR1, GR1FixedLowerBody, GR1ArmsOnly) or "FloatingLeggedBase" (GR1FloatingBody) |
| default_gripper | dict | {"right": "FourierRightHand", "left": "FourierLeftHand"} |
| default_controller_config | dict | Dict mapping body parts (right, left, head, torso, right_leg, left_leg) to controller configs |
| init_qpos | np.ndarray | Initial joint positions (size depends on variant: 32, 20, or 14) |
| arm_type | str | "bimanual" |
| _eef_name | dict | {"right": "right_eef", "left": "left_eef"} |
Usage Examples
import robosuite
# Create environment with full GR1 humanoid
env = robosuite.make(
"Lift",
robots="GR1",
has_renderer=True,
)
env.reset()
# Use the fixed lower body variant for tabletop tasks
env_fixed = robosuite.make(
"Lift",
robots="GR1FixedLowerBody",
has_renderer=True,
)
env_fixed.reset()
# Use the arms-only variant for simplified control
env_arms = robosuite.make(
"Lift",
robots="GR1ArmsOnly",
has_renderer=True,
)
env_arms.reset()