Isaac Sim Version
☑ 4.2.0
Operating System
☑ Ubuntu 20.04
Detailed Description
We found that when we import URDF, the articulation root is different from the official USD assets. This causes issues when I use the ROS1 publisher.
Steps to Reproduce
The usd, if you want to run directly.
ur5_joint_control.usd.zip (4.2 KB)
To make it easier to reproduce the issue, we used the URDF of the UR5 robot.
ur5_description.zip (3.4 MB)
- Creat USD
Move the ur5 in the stage to be at the same hierarchy level as World.
And set ur5 as Default Prim
Save as ur5.usd
3.Open ur5.usd.
Add Graph by Script Editor.
import omni.graph.core as og
GRAPH_PATH = "/ActionGraph"
try:
og.Controller.delete(GRAPH_PATH)
except:
pass
og.Controller.edit(
{"graph_path": "/ActionGraph", "evaluator_name": "execution"},
{
og.Controller.Keys.CREATE_NODES: [
("OnPlaybackTick", "omni.graph.action.OnPlaybackTick"),
("PublishJointState", "omni.isaac.ros_bridge.ROS1PublishJointState"),
("SubscribeJointState", "omni.isaac.ros_bridge.ROS1SubscribeJointState"),
("ArticulationController", "omni.isaac.core_nodes.IsaacArticulationController"),
("ReadSimTime", "omni.isaac.core_nodes.IsaacReadSimulationTime"),
],
og.Controller.Keys.CONNECT: [
("OnPlaybackTick.outputs:tick", "PublishJointState.inputs:execIn"),
("OnPlaybackTick.outputs:tick", "SubscribeJointState.inputs:execIn"),
("OnPlaybackTick.outputs:tick", "ArticulationController.inputs:execIn"),
("ReadSimTime.outputs:simulationTime", "PublishJointState.inputs:timeStamp"),
("SubscribeJointState.outputs:jointNames", "ArticulationController.inputs:jointNames"),
("SubscribeJointState.outputs:positionCommand", "ArticulationController.inputs:positionCommand"),
("SubscribeJointState.outputs:velocityCommand", "ArticulationController.inputs:velocityCommand"),
("SubscribeJointState.outputs:effortCommand", "ArticulationController.inputs:effortCommand"),
],
og.Controller.Keys.SET_VALUES: [
("ArticulationController.inputs:robotPath", "/ur5/root_joint"),
("PublishJointState.inputs:targetPrim", "/ur5/root_joint"),
],
},
)
Then we get Graph like this.
4. Play it, And Error INFO
2025-05-07 08:40:24 [3,654,157ms] [Error] [omni.graph.core.plugin]
/ActionGraph/PublishJointState: [/ActionGraph] Prim is not an articulation
Additional Information
Use Offical USD Assets
We found the official USD assets (Isaac/Robots/UniversalRobots/ur5e/ur5e.usd
). Although they also have a root_joint
, their Articulation Root is bound to the root prim. And they do not have a World
or Environment
Prim.
We did the same steps as before except urdf import, and it succeeded when using the official assets.
Is this issue caused by the URDF importer? If want to import own URDF and control it using the ROS1 Bridge, how to solve this problem?
We remove the Articulation Root of ‘root_joint’, and add Articulation Root to ‘base_link’.
The ROS1Bridge works successfully, but joint1 is not following well。