Implementation:Haosulab ManiSkill PassiveController
| Knowledge Sources | |
|---|---|
| Domains | Robotics, Simulation |
| Last Updated | 2026-02-15 08:00 GMT |
Overview
Concrete controller that applies no active control to its joints, allowing them to move freely under physics with only damping and friction.
Description
PassiveController extends BaseController to provide a no-op controller for joints that should not be actively driven by the agent. It has a zero-dimensional action space (empty Box), and both set_action() and before_simulation_step() are no-ops. The set_drive_property() method configures joints with zero stiffness but applies damping, force limits, and friction from the PassiveControllerConfig. The controller sets sets_target_qpos = False and sets_target_qvel = False.
Usage
Use PassiveControllerConfig in a composite controller setup for joints that should not be actively controlled by the agent, such as gripper fingers that respond passively to contact forces or joints driven by other mechanisms. It is commonly paired with active controllers in a CombinedController.
Code Reference
Source Location
- Repository: Haosulab_ManiSkill
- File: mani_skill/agents/controllers/passive_controller.py
- Lines: 1-46
Signature
class PassiveController(BaseController):
config: "PassiveControllerConfig"
sets_target_qpos = False
sets_target_qvel = False
@dataclass
class PassiveControllerConfig(ControllerConfig):
damping: Union[float, Sequence[float]]
force_limit: Union[float, Sequence[float]] = 1e10
friction: Union[float, Sequence[float]] = 0.0
controller_cls = PassiveController
Import
from mani_skill.agents.controllers.passive_controller import PassiveController, PassiveControllerConfig
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| damping | float or Sequence[float] | Yes | Damping coefficient(s) for the passive joints. Can be a single float broadcast to all joints or per-joint values. |
| force_limit | float or Sequence[float] | No | Force limit for joints. Defaults to 1e10. |
| friction | float or Sequence[float] | No | Friction coefficient for joints. Defaults to 0.0. |
| joint_names | list[str] | Yes | Names of joints to be passively controlled (inherited from ControllerConfig). |
Outputs
| Name | Type | Description |
|---|---|---|
| single_action_space | spaces.Box | A zero-dimensional Box space (empty). |
| set_action() | None | No-op; does not modify joint targets. |
Usage Examples
Basic Usage
from mani_skill.agents.controllers.passive_controller import PassiveControllerConfig
# Use in a composite controller for gripper joints that are not actively controlled
gripper_config = PassiveControllerConfig(
joint_names=["finger_joint_left", "finger_joint_right"],
damping=10.0,
friction=0.5,
)