Implementation:Haosulab ManiSkill XLeRobot
| Knowledge Sources | |
|---|---|
| Domains | Robotics, Simulation, Manipulation |
| Last Updated | 2026-02-15 08:00 GMT |
Overview
Concrete tool for simulating the XLeRobot dual-arm mobile manipulation robot in ManiSkill environments.
Description
The Xlerobot (uid: xlerobot) is a dual-arm mobile robot featuring two 5-DOF arms (Rotation, Pitch, Elbow, Wrist_Pitch, Wrist_Roll for each arm), a mobile base with 3 DOF (x, y, rotation), a 2-DOF head (pan, tilt), and 2 independent grippers (Jaw, Jaw_2). The robot has 17 active joints in total. It includes three cameras: a head camera (256x256), and two arm-mounted cameras (128x128 each) for close-up manipulation views. The robot supports both single-arm and dual-arm controller configurations. It includes helper methods for joint mapping between full and current orderings, dual-arm grasping detection, and TCP computation for both arms.
uid: xlerobot
URDF path: {ASSET_DIR}/robots/xlerobot/xlerobot.urdf
Supported control modes: pd_joint_delta_pos, pd_joint_pos, pd_joint_target_delta_pos, pd_joint_vel, pd_joint_pos_vel, pd_joint_delta_pos_vel, pd_joint_delta_pos_stiff_body, plus arm2 variants and dual_arm variants
Usage
Use XLeRobot for dual-arm mobile manipulation tasks that require coordinated bimanual actions, such as lifting large objects, folding, or handover tasks. The mobile base enables navigating to target locations. Single-arm modes are also available for simpler tasks using one arm at a time.
Code Reference
Source Location
- Repository: Haosulab_ManiSkill
- File: mani_skill/agents/robots/xlerobot/xlerobot.py
Signature
@register_agent(asset_download_ids=["xlerobot"])
class Xlerobot(BaseAgent):
uid = "xlerobot"
urdf_path = f"{ASSET_DIR}/robots/xlerobot/xlerobot.urdf"
keyframes = dict(rest=Keyframe(pose=sapien.Pose(), qpos=np.array([...])))
# arm_joint_names: 5 joints for arm 1
# arm2_joint_names: 5 joints for arm 2
# base_joint_names: 3 joints for mobile base
# body_joint_names: 2 joints for head
# gripper_joint_names / gripper2_joint_names: 1 each
Import
from mani_skill.agents.robots.xlerobot.xlerobot import Xlerobot
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| (inherited from BaseAgent) |
Outputs
| Name | Type | Description |
|---|---|---|
| robot agent | Xlerobot | Configured dual-arm mobile robot with arm, gripper, body, base controllers and three cameras |
Usage Examples
Creating Environment with Robot
import gymnasium as gym
import mani_skill.envs
env = gym.make("PickCube-v1", robot_uids="xlerobot")
obs, info = env.reset()