Jump to content

Connect SuperML | Leeroopedia MCP: Equip your AI agents with best practices, code verification, and debugging knowledge. Powered by Leeroo — building Organizational Superintelligence. Contact us at founders@leeroo.com.

Implementation:Facebookresearch Habitat lab StaticManipulator

From Leeroopedia
Knowledge Sources
Domains Embodied_AI, Robot_Control
Last Updated 2026-02-15 00:00 GMT

Overview

StaticManipulator represents a robot with a fixed base and a controllable arm, extending the Manipulator class to provide a complete fixed-base manipulation agent.

Description

StaticManipulator extends Manipulator to create a robot that has a fixed (non-mobile) base with a controllable arm and gripper. Unlike MobileManipulator, it does not inherit from ArticulatedAgentBase because it has no mobile base to control.

The module defines two components:

  • StaticManipulatorParams -- An @attr.s data class that configures the static manipulator with:
    • Arm and gripper joint IDs
    • Initial joint parameters for arm and gripper
    • End-effector offsets, links, and constraints
    • Gripper open/closed states and detection epsilon
    • Arm motor position gain, velocity gain, and max impulse
    • Optional end-effector count (defaults to 1)
  • StaticManipulator -- The robot class that delegates all lifecycle methods (reconfigure, update, reset) directly to the parent Manipulator class. This provides a clean, minimal wrapper that ensures fixed-base robots follow the same interface as mobile ones.

Usage

Use StaticManipulator for fixed-base manipulation scenarios where the robot does not need to navigate, such as tabletop manipulation tasks. It is useful for simulating robotic arms that are bolted to a surface.

Code Reference

Source Location

Signature

@attr.s(auto_attribs=True, slots=True)
class StaticManipulatorParams:
    arm_joints: List[int]
    gripper_joints: List[int]
    arm_init_params: Optional[np.ndarray]
    gripper_init_params: Optional[np.ndarray]
    ee_offset: List[mn.Vector3]
    ee_links: List[int]
    ee_constraint: np.ndarray
    gripper_closed_state: np.ndarray
    gripper_open_state: np.ndarray
    gripper_state_eps: float
    arm_mtr_pos_gain: float
    arm_mtr_vel_gain: float
    arm_mtr_max_impulse: float
    ee_count: Optional[int] = 1

class StaticManipulator(Manipulator):
    def __init__(
        self,
        params: StaticManipulatorParams,
        urdf_path: str,
        sim: Simulator,
        limit_robo_joints: bool = True,
        fixed_base: bool = True,
        auto_update_sensor_transform=False,
    ):

Import

from habitat.articulated_agents.static_manipulator import (
    StaticManipulator,
    StaticManipulatorParams,
)

I/O Contract

Inputs

Name Type Required Description
params StaticManipulatorParams Yes Configuration parameters for the static manipulator
urdf_path str Yes Path to the robot's URDF file
sim Simulator Yes The Habitat-Sim simulator instance
limit_robo_joints bool No (default=True) Whether to enforce joint limits
fixed_base bool No (default=True) Whether the robot's base is fixed
auto_update_sensor_transform bool No (default=False) Whether to auto-update sensor transforms

Outputs

Name Type Description
sim_obj ManagedBulletArticulatedObject The underlying simulation object (inherited from Manipulator)

Usage Examples

Basic Usage

import magnum as mn
import numpy as np
from habitat.articulated_agents.static_manipulator import (
    StaticManipulator,
    StaticManipulatorParams,
)

# Define parameters for a fixed-base robot arm
params = StaticManipulatorParams(
    arm_joints=[0, 1, 2, 3, 4, 5, 6],
    gripper_joints=[7, 8],
    arm_init_params=np.zeros(7),
    gripper_init_params=np.array([0.04, 0.04]),
    ee_offset=[mn.Vector3(0.08, 0, 0)],
    ee_links=[6],
    ee_constraint=np.zeros((1, 2, 7)),
    gripper_closed_state=np.array([0.0, 0.0]),
    gripper_open_state=np.array([0.04, 0.04]),
    gripper_state_eps=0.001,
    arm_mtr_pos_gain=0.3,
    arm_mtr_vel_gain=0.3,
    arm_mtr_max_impulse=10.0,
)

# Create, configure, and use the static manipulator
robot = StaticManipulator(
    params=params,
    urdf_path="data/robots/panda_arm.urdf",
    sim=sim,
    fixed_base=True,
)
robot.reconfigure()
robot.reset()

Related Pages

Page Connections

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