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