Implementation:ARISE Initiative Robosuite HumanoidUpperBodyModel
| Knowledge Sources | |
|---|---|
| Domains | Robotics, Robot Modeling, Humanoid Robots |
| Last Updated | 2026-02-15 07:00 GMT |
Overview
The HumanoidUpperBodyModel class is the abstract base class for humanoid upper-body robot models in robosuite, supporting bimanual configurations where the base platform can be of any type.
Description
HumanoidUpperBodyModel extends RobotModel to provide a base class for humanoid robots where only the upper body (bimanual arms and torso) is modeled, with flexibility in the base platform choice. This distinguishes it from the full HumanoidModel which assumes a free-standing humanoid with legs.
The class provides the same gripper management functionality as HumanoidModel: the add_gripper method merges gripper MJCF models into the robot's end-effector bodies, tracking them in an OrderedDict. It extracts hand rotation offsets for both arms during initialization and maintains a list of camera names from the worldbody.
The key distinction from HumanoidModel is that default_mount is defined as an abstract property (raises NotImplementedError) rather than defaulting to "HumanoidFreeMount". This requires subclasses to explicitly define their mount type, enabling upper-body humanoids to be placed on wheeled bases, fixed mounts, or other platforms.
All other abstract properties match those of HumanoidModel: default_gripper, arm_type, base_xpos_offset, top_offset, _horizontal_radius, default_controller_config, and init_qpos.
Usage
Do not instantiate this class directly. Use it as the base class when defining humanoid upper-body robot models that need a configurable base platform (e.g., mounted on a mobile base, a fixed stand, or a wheeled platform).
Code Reference
Source Location
- Repository: ARISE_Initiative_Robosuite
- File: robosuite/models/robots/manipulators/humanoid_upperbody_model.py
Signature
class HumanoidUpperBodyModel(RobotModel):
def __init__(self, fname, idn=0)
def add_gripper(self, gripper, arm_name=None)
Import
from robosuite.models.robots.manipulators.humanoid_upperbody_model import HumanoidUpperBodyModel
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| fname | str | Yes | Path to the MJCF XML file for this robot |
| idn | int or str | No | Unique identification number or string (default: 0) |
| gripper | GripperModel | Yes (add_gripper) | Gripper MJCF model to mount on the arm |
| arm_name | str | No (add_gripper) | Name of arm mount body; defaults to eef_name |
Outputs
| Name | Type | Description |
|---|---|---|
| eef_name | str or dict | Prefix-adjusted end-effector name(s); dict for bimanual robots |
| models | list | List of all sub-models including the robot and attached grippers |
| grippers | OrderedDict | Dictionary of attached gripper models keyed by arm name |
| hand_rotation_offset | dict | Quaternion offsets (xyzw) for right and left hand frames |
| cameras | list | Camera names defined in the robot's worldbody |
Usage Examples
from robosuite.models.robots.manipulators.humanoid_upperbody_model import HumanoidUpperBodyModel
# HumanoidUpperBodyModel is abstract - use a concrete subclass
# Example of a custom upper-body humanoid on a wheeled base:
class MyUpperBodyHumanoid(HumanoidUpperBodyModel):
arms = ["right", "left"]
def __init__(self, idn=0):
super().__init__("path/to/upper_body.xml", idn=idn)
@property
def default_mount(self):
return "WheeledBaseMount" # Must be explicitly defined
@property
def default_gripper(self):
return {"right": "Robotiq85Gripper", "left": "Robotiq85Gripper"}
@property
def arm_type(self):
return "bimanual"
# ... implement other required abstract properties