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
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.