Met Error when importing UR5e robot in IsaacLab

Note: For any Isaac Lab topics, please submit your topic to its GitHub repo (GitHub - isaac-sim/IsaacLab: Unified framework for robot learning built on NVIDIA Isaac Sim) 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

[√] 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):

Operating System

[√] Ubuntu 22.04
Ubuntu 20.04
Windows 11
Windows 10
Other (please specify):

GPU Information

  • Model:
  • Driver Version:

Topic Description

Detailed Description

Hello, I m trying import a UR5e robot in IsaacLab and make my UR5e_CFG follow the UR10_CFG, then I want to run the UR5eReachEnvCFG follow the UR10ReachEnvCFG, but when I run the train.py, I met the following errors:

2025-05-15 04:36:02 [13,632ms] [Error] [omni.physx.plugin] PhysicsUSD: CreateJoint - no bodies defined at body0 and body1, joint prim: /World/envs/env_0/Robot/root_joint
2025-05-15 04:36:02 [13,645ms] [Warning] [omni.physx.tensors.plugin] Failed to find articulation at '/World/envs/env_0/Robot/root_joint'
2025-05-15 04:36:02 [13,645ms] [Error] [omni.physx.tensors.plugin] Pattern '/World/envs/env_*/Robot/root_joint' did not match any rigid bodies

2025-05-15 04:36:02 [13,645ms] [Error] [omni.physx.tensors.plugin] Provided pattern list did not match any articulations

Traceback (most recent call last):
  File "/root/hgh/IsaacLab/source/isaaclab/isaaclab/assets/asset_base.py", line 94, in <lambda>
    lambda event, obj=weakref.proxy(self): obj._initialize_callback(event),
  File "/root/hgh/IsaacLab/source/isaaclab/isaaclab/assets/asset_base.py", line 265, in _initialize_callback
    self._initialize_impl()
  File "/root/hgh/IsaacLab/source/isaaclab/isaaclab/assets/articulation/articulation.py", line 1180, in _initialize_impl
    raise RuntimeError(f"Failed to create articulation at: {self.cfg.prim_path}. Please check PhysX logs.")
RuntimeError: Failed to create articulation at: /World/envs/env_.*/Robot. Please check PhysX logs.

It seems lik the root_joint in ur5e.usd lost some body define.
I checked the joint of ur10_instanceable.usd, I find it’s joints names are below:


I’m not sure whether its the source of my problem, did sb meet similary problem?

Another reason I suspect is my ur5e.usd doesnot have the link between tha table, because it mentioned the root_joint, the robot in ReachEnvCfg is on a table, my ur5e is just convert from a single ur5e.urdf.

Below is some my codes.

 UR5e_CFG = ArticulationCfg(
     spawn=sim_utils.UsdFileCfg(
         usd_path=ur5e_usd_path,
         rigid_props=sim_utils.RigidBodyPropertiesCfg(
             disable_gravity=False,
             max_depenetration_velocity=5.0,
         ),
         activate_contact_sensors=False,
     ),
     init_state=ArticulationCfg.InitialStateCfg(
         joint_pos={
             "shoulder_pan_joint": 0.0,
             "shoulder_lift_joint": -1.57,
             "elbow_joint": 1.57,
             "wrist_1_joint": 0.0,
             "wrist_2_joint": 0.0,
             "wrist_3_joint": 0.0,
         },
     ),
     actuators={
         "arm": ImplicitActuatorCfg(
             # joint_names_expr=[".*"],
             joint_names_expr=["shoulder_*", "elbow_*", "wrist_*"],
             velocity_limit=180.0,
             effort_limit=150.0,
             stiffness=600.0,
             damping=30.0,
         ),
     },
 )

...
 class UR5eReachEnvCfg(ReachEnvCfg):
     def __post_init__(self):
         # post init of parent
         super().__post_init__()

         # >>>>>>>>>>>>>>>>>>>>>>>>>>>> debug
         self.scene.num_envs = 1
         # <<<<<<<<<<<<<<<<<<<<<<<<<<<<

         # switch robot to ur5e
         self.scene.robot = UR5e_CFG.replace(prim_path="{ENV_REGEX_NS}/Robot")
         # override events
         self.events.reset_robot_joints.params["position_range"] = (0.75, 1.25)
         # override rewards
         self.rewards.end_effector_position_tracking.params["asset_cfg"].body_names = ["ee_link"]
         self.rewards.end_effector_position_tracking_fine_grained.params["asset_cfg"].body_names = ["ee_link"]
         self.rewards.end_effector_orientation_tracking.params["asset_cfg"].body_names = ["ee_link"]
         # override actions
         self.actions.arm_action = mdp.JointPositionActionCfg(
             asset_name="robot", joint_names=[".*"], scale=0.5, use_default_offset=True
         )
         # override command generator body
         # end-effector is along x-direction
         self.commands.ee_pose.body_name = "ee_link"
         self.commands.ee_pose.ranges.pitch = (math.pi / 2, math.pi / 2)


 @configclass
 class UR5eReachEnvCfg_PLAY(UR5eReachEnvCfg):
     def __post_init__(self):
         # post init of parent
         super().__post_init__()
         # make a smaller scene for play
         self.scene.num_envs = 50
         self.scene.env_spacing = 2.5
         # disable randomization for play
         self.observations.policy.enable_corruption = False

Hi,
Had the same issue, incredibly frustrating, every part of IsaacSim almost feels like deliberate sabotage somedays.

But the issue is that they defined a “world” link as the base for the UR5e USD, while others like UR5 use the standard “base_link”, as is the convention. So your root_joint tries and fails to look for the base_link. Just change it to world.

Thank you for your interest in Isaac Lab. To ensure efficient support and collaboration, please submit your topic to its GitHub repo following the instructions provided on Isaac Lab’s Contributing Guidelines regarding discussions, submitting issues, feature requests, and contributing to the project.

We appreciate your understanding and look forward to assisting you.