Implementation:Haosulab ManiSkill UnitreeH1WithHands
| Knowledge Sources | |
|---|---|
| Domains | Robotics, Simulation, Humanoid_Control |
| Last Updated | 2026-02-15 08:00 GMT |
Overview
Concrete tool for simulating the Unitree H1 humanoid robot with dexterous hands (upper body only) in ManiSkill environments.
Description
The UnitreeH1WithHandsUpperBodyOnly is an upper-body-only variant of the H1 humanoid with dexterous hands. It has a free root link and disables self-collisions. The body joints include 8 upper-body joints (shoulder pitch/roll/yaw and elbow for both arms), plus 6 arm/hand joints (left_hand_joint, right_hand_joint, and 4 right thumb joints: proximal yaw/pitch, intermediate, distal). The full H1 with hands (including legs) is currently commented out due to a simulation bug with all fingers. Controller configurations separate body joints from arm/hand joints, both using pd_joint_pos and pd_joint_delta_pos modes with gravity compensation disabled.
uid: unitree_h1_with_hands_upper_body_only
URDF path: {ASSET_DIR}/robots/unitree_h1/urdf/h1_with_hand.urdf
Supported control modes: pd_joint_pos, pd_joint_delta_pos
Usage
Use UnitreeH1WithHands for upper-body manipulation tasks that require dexterous hand control on a humanoid platform. The combination of arm reach and finger dexterity enables complex manipulation scenarios. Note that the full-body variant with hands is currently not available due to simulation constraints.
Code Reference
Source Location
- Repository: Haosulab_ManiSkill
- File: mani_skill/agents/robots/unitree_h1/h1_dextrous_hand.py
Signature
@register_agent()
class UnitreeH1WithHandsUpperBodyOnly(BaseAgent):
uid = "unitree_h1_with_hands_upper_body_only"
urdf_path = f"{ASSET_DIR}/robots/unitree_h1/urdf/h1_with_hand.urdf"
fix_root_link = False
load_multiple_collisions = True
disable_self_collisions = True
body_joints = ["left_shoulder_pitch_joint", ..., "right_elbow_joint"] # 8 joints
arm_hand_joints = ["left_hand_joint", "right_hand_joint",
"R_thumb_proximal_yaw_joint", ..., "R_thumb_distal_joint"] # 6 joints
keyframes = dict(standing=Keyframe(pose=sapien.Pose(p=[0, 0, 0.975]), qpos=np.array([...])))
Import
from mani_skill.agents.robots.unitree_h1.h1_dextrous_hand import UnitreeH1WithHandsUpperBodyOnly
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| (inherited from BaseAgent) |
Outputs
| Name | Type | Description |
|---|---|---|
| robot agent | UnitreeH1WithHandsUpperBodyOnly | Configured upper-body humanoid with shoulder/elbow joints and dexterous hand control |
Usage Examples
Creating Environment with Robot
import gymnasium as gym
import mani_skill.envs
env = gym.make("PickCube-v1", robot_uids="unitree_h1_with_hands_upper_body_only")
obs, info = env.reset()