Implementation:Haosulab ManiSkill ROBELValveBuilder
| Knowledge Sources | |
|---|---|
| Domains | Robotics, Simulation, Articulated Object Building |
| Last Updated | 2026-02-15 08:00 GMT |
Overview
Concrete tool for procedurally building a ROBEL benchmark-style valve articulation with configurable spoke angles and dimensions.
Description
The robel.py module provides the build_robel_valve() function, which programmatically constructs a ROBEL-style valve articulation for dexterous manipulation tasks. The valve consists of:
1. Mount link -- A static base with a box collision shape and a cylindrical bearing. 2. Valve link -- A rotating component with multiple capsule-shaped spokes arranged at specified angles, connected to the mount via a revolute joint.
The valve geometry follows the original ROBEL benchmark dimensions (in meters):
- Capsule height: 0.039854m, length: 0.061706m (scalable), radius: 0.0195m (scalable)
- Bottom box: 0.04m x 0.04m x 0.03m
- Bearing: radius 0.007m, height 0.032m
The first spoke is colored red for visual identification; remaining spokes are white. Each spoke uses a custom PhysxMaterial with friction coefficients (static: 1, dynamic: 0.8).
The revolute joint has infinite rotation limits, friction of 0.02, and damping of 2.
Usage
Called by the RotateValve task environments to build the valve object in the scene. The valve_angles parameter defines the angular positions of spokes (in radians, 0 to 2pi).
Code Reference
Source Location
- Repository: Haosulab_ManiSkill
- File: mani_skill/utils/building/articulations/robel.py
Signature
def build_robel_valve(
scene: ManiSkillScene,
valve_angles: Sequence[float],
name: str,
radius_scale: float = 1.0,
capsule_radius_scale: float = 1.0,
scene_idxs=None,
) -> tuple[Articulation, float]: ...
Import
from mani_skill.utils.building.articulations.robel import build_robel_valve
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| scene | ManiSkillScene | Yes | The scene to build the valve in |
| valve_angles | Sequence[float] | Yes | Angles (radians, 0 to 2pi) for each valve spoke |
| name | str | Yes | Name for the articulation |
| radius_scale | float | No | Scale factor for capsule length (default: 1.0) |
| capsule_radius_scale | float | No | Scale factor for capsule radius (default: 1.0) |
| scene_idxs | list[int] | No | Sub-scene indices to build in |
Outputs
| Name | Type | Description |
|---|---|---|
| valve | Articulation | The built valve articulation (fixed root link) |
| capsule_length | float | The actual capsule length used (after scaling) |
Usage Examples
Basic Usage
import numpy as np
from mani_skill.utils.building.articulations.robel import build_robel_valve
# Build a 3-spoke valve
valve, capsule_length = build_robel_valve(
scene=env.scene,
valve_angles=[0, 2*np.pi/3, 4*np.pi/3],
name="valve",
)