Can't add articulation root

Hi,

I tried to add an Articulation Controller to a robot arm and got the errors

2024-03-27 21:47:26 [3,194,984ms] [Warning] [omni.isaac.dynamic_control.plugin] Failed to find articulation at '/World/firefighter/root_joint'
2024-03-27 21:47:26 [3,194,984ms] [Error] [omni.isaac.dynamic_control.plugin] DcGetArticulationRootBody: Invalid or expired articulation handle
2024-03-27 21:47:26 [3,194,984ms] [Warning] [omni.physx.tensors.plugin] Failed to find articulation at '/World/firefighter/root_joint'
2024-03-27 21:47:26 [3,194,984ms] [Error] [omni.physx.tensors.plugin] Pattern '/World/firefighter/root_joint' did not match any articulations
...

I wanted to control the joints of this Cobot robot arm, and was following this tutorial: 7.2.10. ROS2 Joint Control: Extension Python Scripting — Omniverse IsaacSim latest documentation.

In the tutorial, they set the articulation root as the robot arm itself (ie. for the panda Xform), but why am I unable to do that in the Cobot arm that I imported (ie. for the firefighter Xform)? I can only set the articulation root in the root_joint. I’ve also attached the usd file for reference.
cobot.usd.zip (27.4 KB)

Even if I set the articulation root as the root_joint and specify it to be this in the ActionGraph, it still gives the error that it can’t find the articulation. Any advice to fix this would be greatly appreciated

Because you are working with manipulators, you can set the ArticulationRoot at /firefighter.
Use usd files from NVDIA to set proper properties.

When I try to add the articulation root at /firefighter, the drop down for the “Add” button, doesn’t give me the articulation root option:

Is there a different way I should add it?

I think that a joint can not set to the articulation root.
In this post, the articulation root is set to the root link.

Is /firefighter/base already set to the articulation root?

If I try to set the /firefighter/base to articulation root, it also doesn’t give me the articulation root option in the “Add” button:

I think the only section of the robot that I can set as the articulation root is the root_joint but then when I press play, the robot free falls and I get the errors:

2024-03-27 21:47:26 [3,194,984ms] [Warning] [omni.isaac.dynamic_control.plugin] Failed to find articulation at '/World/firefighter/root_joint'
2024-03-27 21:47:26 [3,194,984ms] [Error] [omni.isaac.dynamic_control.plugin] DcGetArticulationRootBody: Invalid or expired articulation handle
2024-03-27 21:47:26 [3,194,984ms] [Warning] [omni.physx.tensors.plugin] Failed to find articulation at '/World/firefighter/root_joint'
2024-03-27 21:47:26 [3,194,984ms] [Error] [omni.physx.tensors.plugin] Pattern '/World/firefighter/root_joint' did not match any articulations
...

I wonder if you solved the problem. I do not work with graphs so I am not sure if the workflow is different(how graph handle manipulators). For the ArticulationRoot, you need to delete the ArticulationRoot in the old link and then you can add ArticulationRoot it to /firefighter.


in the stage window - you can filter your prims by Articulation Roots - it will show what are the prims with articulation root API applied to it - Make sure the robot has only one articulation root, and it will be on a link - not on a joint. Use that path in your code when passing an articulation path.

We have implemented a code update that will let you pass the robot base path instead and it will search for the articulation root within it for future releases.

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.