Jump to content

Connect Leeroopedia MCP: Equip your AI agents to search best practices, build plans, verify code, diagnose failures, and look up hyperparameter defaults.

Implementation:Haosulab ManiSkill PassiveController

From Leeroopedia
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

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,
)

Related Pages

Page Connections

Double-click a node to navigate. Hold to expand connections.
Principle
Implementation
Heuristic
Environment