[isaacsim.ros2.control] Isaac Sim ROS 2 Control#

Version: 0.1.6

Overview#

The isaacsim.ros2.control extension hosts a standard ros2_control controller_manager in-process inside Isaac Sim and exposes a USD articulation as a hardware_interface::SystemInterface (IsaacSimSystem). This lets ROS 2 developers drive Isaac Sim robots with standard ros2_control controllers (for example through MoveIt) without running an external ros2_control_node.

Key Components#

  • ROS2ControlManager OmniGraph node (provided by isaacsim.ros2.nodes): configures the controller_manager from USD on the first tick of playback.

  • Ros2ControlManager Python API: programmatic setup / teardown of the in-process controller_manager.

  • IsaacSimSystem hardware_interface plugin (C++): drives read / update / write from the physics post-step. The URDF is synthesized live from the articulation’s USD DriveAPI.

It supports position, velocity, and effort command interfaces; force-torque and IMU sensor broadcasters; mimic joints; and multi-robot namespaces. It runs on PhysX and Newton, on ROS 2 Humble and Jazzy. Other ROS 2 distributions are rejected because ros2_control uses distribution-specific C++ libraries and cannot safely use the Jazzy fallback provided by isaacsim.ros2.core for its C API.

Python Usage#

from isaacsim.ros2.control import Ros2ControlManager

# Bring up a ControllerManager for a USD articulation (after pressing Play).
Ros2ControlManager.setup("/World/Robot", "/path/to/controllers.yaml", namespace="robot")

# Tear it down when finished.
Ros2ControlManager.teardown("/World/Robot")

setup raises RuntimeError if a controller_manager is already registered for the prim or if initialization fails. With the default use_sim_time=True, provide /clock with a ROS 2 bridge clock node or another ROS clock source.

For an end-to-end walkthrough, see the ROS 2 Control tutorial.

Enable Extension#

The extension can be enabled (if not already) in one of the following ways:

Define the next entry as an application argument from a terminal.

APP_SCRIPT.(sh|bat) --enable isaacsim.ros2.control

Define the next entry under [dependencies] in an experience (.kit) file or an extension configuration (extension.toml) file.

[dependencies]
"isaacsim.ros2.control" = {}

Open the Window > Extensions menu in a running application instance and search for isaacsim.ros2.control. Then, toggle the enable control button if it is not already active.

Python API#

class Ros2ControlManager#

In-process ros2_control ControllerManager for a USD articulation.

static setup(
prim_path: str,
controller_config: str,
urdf_path: str | None = None,
namespace: str = '',
publish_robot_description: bool = True,
*,
use_sim_time: bool = True,
) int#

Bring up a ControllerManager for the articulation at prim_path.

urdf_path is optional; if None, falls back to customLayerData["isaac:sourceUrdf"] on the root layer (set by the URDF importer). Used only as a sensor / hardware-param overlay; the kinematic URDF is always live-exported from USD.

When use_sim_time is true, provide /clock with a ROS 2 bridge clock node or another ROS clock source.

static teardown(prim_path: str) None#

Tear down the ControllerManager for the articulation at prim_path.

static teardown_all() None#

Tear down all ControllerManagers.