ROS2ControlManager setup failed

Important: Isaac Sim support

Note: For Isaac Sim support, the community is gradually transitioning from this forum to the Isaac Sim GitHub repository so that questions and issues can be tracked, searched, and resolved more efficiently in one place. Whenever possible, please create a GitHub Discussion or Issue there instead of starting a new forum topic.

Note: For any Isaac Lab topics, please submit your topic to its GitHub repo ( GitHub - isaac-sim/IsaacLab: Unified framework for robot learning with multi-physics/renderer support · GitHub ) following the instructions provided on Isaac Lab’s Contributing Guidelines ( Contribution Guidelines — Isaac Lab Documentation ).

Please provide all relevant details below before submitting your post. This will help the community provide more accurate and timely assistance. After submitting, you can check the appropriate boxes. Remember, you can always edit your post later to include additional information if needed.

Isaac Sim Version

6.0.1
6.0.0
5.1.0
5.0.0
4.5.0
4.2.0
4.1.0
4.0.0
4.5.0
2023.1.1
2023.1.0-hotfix.1
Other (please specify):6.1

Operating System

Ubuntu 24.04
Ubuntu 22.04
Ubuntu 20.04
Windows 11
Windows 10
Other (please specify):

GPU Information

  • Model: rtx 3090
  • Driver Version:595

Topic Description

Detailed Description

Subject: OgnROS2ControlManager failed: ControllerManager init failed for ‘/empty_1/arise_full’ (Isaac Sim 6.1)

I am getting the following error when trying to run OgnROS2ControlManager in Isaac Sim 6.1:

[Error] [isaacsim.ros2.nodes.ogn.python.nodes.OgnROS2ControlManager] ROS2ControlManager setup failed for ‘/empty_1/arise_full’: setup_cm: ControllerManager init failed for ‘/empty_1/arise_full’. Check the controller YAML and the synthesized URDF.

The USD stage was originally generated from an exported URDF. I have double-checked the joint names between the USD/synthesized URDF and my ros2_controllers.yaml file , they match exactly. All controllable revolute and prismatic joints have Angular or Linear Drives applied with proper gains, and ArticulationRootAPI is present on the root prim (/empty_1/arise_full). Following Isaac Sim 6.1 specifications, I did not include any manual <ros2_control> or blocks in the source URDF or USD, relying on the extension’s synthesized URDF injection. I also verified that the YAML file path on the node is valid and well-formatted.

What could be causing setup_cm / ControllerManager to fail initialization in this setup, and how can I further debug OgnROS2ControlManager?

2026-09-22 10:56:00 [Error] [isaacsim.ros2.nodes.ogn.python.nodes.OgnROS2ControlManager] ROS2ControlManager setup failed for ‘/empty_1/arise_full’: setup_cm: ControllerManager init failed for ‘/empty_1/arise_full’. Check the controller YAML and the synthesized URDF.

Hi, for the error you saw, the real cause should be in a [ros2.control] ... line that appears in the log right above the one you pasted.

How to debug further

  1. Dump the synthesized URDF and inspect it. The URDF is generated live from USD, so you never see it by default. Run this in the Script Editor with the stage loaded:
  import omni.usd
  from isaacsim.ros2.control.urdf_synth import build_full_urdf
  stage = omni.usd.get_context().get_stage()
  xml = build_full_urdf(stage, "/empty_1/arise_full")
  open("/tmp/arise_full_synth.urdf", "w").write(xml)

Things to check in it:

  • It has a <ros2_control> block with isaacsim_ros2_control/IsaacSimSystem and prim_path pointing at the articulation root. That may not be /empty_1/arise_full itself; the synthesizer walks down to the prim that has ArticulationRootAPI.
  • Every revolute/prismatic joint you expect is listed. Only those two joint types get entries (urdf_synth.py:117), so fixed or D6 joints are skipped.
  • It validates: run check_urdf /tmp/arise_full_synth.urdf. It should have a single root and no dangling links.
  1. Check the controller YAML against that URDF. This is the most common real cause:
  • Joint names in each controller’s joints: list must exactly match the USD joint prim names. The synthesizer uses prim.GetName(), not URDF names from any original file.
  • The top-level key must match the node’s fully qualified name. With a namespace ns, that’s /ns/controller_manager: (or use the /**: wildcard), and each controller’s params go under its own name.
  • controller_manager: ros__parameters: update_rate: is set, and every controller type is installed for your ROS distro, e.g.
    joint_trajectory_controller/JointTrajectoryController.
  • The controllers’ command_interfaces must be one of position / velocity / effort. Mimic joints export no command interfaces, so a controller that commands a mimic joint will fail.
  1. Rule out environment issues.
  • If use_sim_time is on (the default), something must publish /clock. Add a ROS2 Publish Clock node to the graph.
  1. Compare against a known-good setup. source/standalone_examples/api/isaacsim.ros2.control/ur10_ros2_control_demo.py and its YAML are a working reference. Diffing your YAML structure against it catches most namespace and key mistakes.

Hi, we hope the above suggestions helpful to your issue. I am going to close this. If you still need help, feel free to open new topics.