[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#
ROS2ControlManagerOmniGraph node (provided byisaacsim.ros2.nodes): configures thecontroller_managerfrom USD on the first tick of playback.Ros2ControlManagerPython API: programmaticsetup/teardownof the in-processcontroller_manager.IsaacSimSystemhardware_interface plugin (C++): drivesread/update/writefrom the physics post-step. The URDF is synthesized live from the articulation’s USDDriveAPI.
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,
Bring up a ControllerManager for the articulation at
prim_path.urdf_pathis optional; if None, falls back tocustomLayerData["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_timeis true, provide/clockwith a ROS 2 bridge clock node or another ROS clock source.