# How fix the TF tree Articulation Root problem, I tried to find the Articulation Root in the raw USD property tab. But I cannot find it

**URL:** <https://forums.developer.nvidia.com/t/how-fix-the-tf-tree-articulation-root-problem-i-tried-to-find-the-articulation-root-in-the-raw-usd-property-tab-but-i-cannot-find-it/270595>\
**Category:** Isaac Sim\
**Created:** [October 25, 2023, 5:41am UTC](https://forums.developer.nvidia.com/t/how-fix-the-tf-tree-articulation-root-problem-i-tried-to-find-the-articulation-root-in-the-raw-usd-property-tab-but-i-cannot-find-it/270595 "2023-10-25T05:41:13Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![1115326614](https://sea2.discourse-cdn.com/nvidia/user_avatar/forums.developer.nvidia.com/1115326614/32/430656_2.png) [@1115326614](https://forums.developer.nvidia.com/u/1115326614)\
**Post date:** [October 25, 2023, 5:41am UTC](https://forums.developer.nvidia.com/t/how-fix-the-tf-tree-articulation-root-problem-i-tried-to-find-the-articulation-root-in-the-raw-usd-property-tab-but-i-cannot-find-it/270595/1 "2023-10-25T05:41:13Z")

</div>

I followed the tutorial to import the ClearPath jackal with a front laser. After I attached the TF tree publisher in an Action Graph, its tf tree turns out to be this:

 ![wrong_tf_tree](https://global.discourse-cdn.com/nvidia/original/4X/b/e/7/be7eaaabb61795303714a940a058c24294c34146.png)  
which shows its root is mid\_mount but not the base\_link. And I cannot find the Articulation Root section in the raw USD properties tab. How to fix this problem?

---

<div class="post-metadata">

**Author:** ![AlesBorovicka](https://sea2.discourse-cdn.com/nvidia/user_avatar/forums.developer.nvidia.com/alesborovicka/32/21824_2.png) [@AlesBorovicka](https://forums.developer.nvidia.com/u/AlesBorovicka)\
**Post date:** [October 30, 2023, 8:56am UTC](https://forums.developer.nvidia.com/t/how-fix-the-tf-tree-articulation-root-problem-i-tried-to-find-the-articulation-root-in-the-raw-usd-property-tab-but-i-cannot-find-it/270595/2 "2023-10-30T08:56:08Z")

</div>

Hi,  
the documentation for USD articulation root states this:

```auto
Articulations
Earlier we mentioned that we support reduced coordinate joints, which require some additional specification. We decided to do this with a minimal extension of the above maximal joints. Any prim of the USD scene graph hierarchy may be marked with an UsdPhysicsArticulationRootAPI. This informs the simulation that any joints found in the subtree should preferentially be simulated using a reduced coordinate approach. For floating articulations (robotics jargon for something not bolted down, e.g. a wheeled robot or a quadcopter), this API should be used on the root body (typically the central mass the wheels or rotors are attached to), or a direct or indirect parent prim. For fixed articulations (robotics jargon for e.g. a robot arm for welding that is bolted to the floor), this API can be on a direct or indirect parent of the root joint which is connected to the world, or on the joint itself. If there are multiple qualifying bodies or joints under an UsdPhysicsArticulationRootAPI prim, each is made into a separate articulation root.

This should in general make it possible to uniquely identify a distinguished root body or root joint for the articulation. From this root, a tree of bodies and joints is identified that is not to contain loops (which may be closed by joint collections). If loops are found, they may be broken at an arbitrary location. Alternatively, a joint in the loop may use its excludeFromArticulation attribute flag to denote that it wishes to remain a maximal joint, and at this point the loop is then broken.

```

Now to translate this into how its parsed in Omniverse. If you apply the articulation root directly to a body or joint (based on the articulation floating/fixed), than that is directly saying where the articulation root is. However if the articulation root is applied to some top level prim, which is usually the case for IsaacSim robots, then the parsing gets the whole graph and finds the best candidate for the articulation root. For PhysX simulation we pick:  
a) Fixed articulation – thats the base link connected with a fixed joint  
b) Floating articulation – we pick the body with the most childs

So if you want to fully control where the articulation root should be, you would have to move the UsdPhysics.ArticulationRootAPI from the top level to the body itself.

Regards,  
Ales

---

<div class="post-metadata">

**Author:** ![1115326614](https://sea2.discourse-cdn.com/nvidia/user_avatar/forums.developer.nvidia.com/1115326614/32/430656_2.png) [@1115326614](https://forums.developer.nvidia.com/u/1115326614)\
**Post date:** [October 31, 2023, 1:57am UTC](https://forums.developer.nvidia.com/t/how-fix-the-tf-tree-articulation-root-problem-i-tried-to-find-the-articulation-root-in-the-raw-usd-property-tab-but-i-cannot-find-it/270595/3 "2023-10-31T01:57:00Z")

</div>

Thank you for answering me the question. I found that the articulation root is in the physics tab and changing the articulation root solved the problem. But another problem arised when I tried to control the velocity of jackal through the omni Graph with ROS geometry/Twist message, I’ll reproduce the this later.

---

<div class="post-metadata">

**Author:** ![1115326614](https://sea2.discourse-cdn.com/nvidia/user_avatar/forums.developer.nvidia.com/1115326614/32/430656_2.png) [@1115326614](https://forums.developer.nvidia.com/u/1115326614)\
**Post date:** [November 1, 2023, 7:35am UTC](https://forums.developer.nvidia.com/t/how-fix-the-tf-tree-articulation-root-problem-i-tried-to-find-the-articulation-root-in-the-raw-usd-property-tab-but-i-cannot-find-it/270595/4 "2023-11-01T07:35:35Z")

</div>

Ok, here is the another question: When I configure the Omni Graph for my 4 wheeled Jackal AGV in Isaac Sim, the default Articulation Root is the root of the USD(the top level Prim in Isaac Sim, here is World/Jackal) model, but it is wrong in the tf tree. But under this configuration the Omni Graph can subscibe the geometry/Twist msg from ROS and successfully transform the msg to wheel speeds of 4 wheels. But when I set the Articulation Root to base\_link(correctly in URDF), the Omni Graph failed to transform the Twist to wheel speeds. The simulator says  
**OmniGraph Warning “NoneTygpe” Object has no attribute “is\_homogeneous”**  
here is my 4 wheel robot cmd\_vel Graph:

 ![cmd_vel_wrong_with_baselink_as_root](https://global.discourse-cdn.com/nvidia/original/4X/a/c/6/ac6cf82ef48b9e049838a18dd936c18bea88c988.png)  
here is the model hierarchy:  
 ![jackal_conrfig](https://global.discourse-cdn.com/nvidia/original/4X/e/6/1/e611fa125e9323c9be66d09e115f6a2701293f10.png)  
here is the 4 revolute joints of Jackal:  
 ![jackal_revolute_joints](https://global.discourse-cdn.com/nvidia/original/4X/f/d/9/fd909942db33d2d16b5d4a39e5d89a8f40940e65.png)  
How to solve this Problem?

---

<div class="post-metadata">

**Author:** ![AlesBorovicka](https://sea2.discourse-cdn.com/nvidia/user_avatar/forums.developer.nvidia.com/alesborovicka/32/21824_2.png) [@AlesBorovicka](https://forums.developer.nvidia.com/u/AlesBorovicka)\
**Post date:** [November 2, 2023, 11:23am UTC](https://forums.developer.nvidia.com/t/how-fix-the-tf-tree-articulation-root-problem-i-tried-to-find-the-articulation-root-in-the-raw-usd-property-tab-but-i-cannot-find-it/270595/5 "2023-11-02T11:23:24Z")

</div>

Not sure how much I can help here, the missing attribute is\_homogeneous does not come from physics schema. This looks like to be some custom attribute for some reason, no idea where that comes from.  
Maybe the Articulation Controller node needs a path adjustment to the right articulation root of it was moved?

Sorry I might not be able to help here much.  
Ales

---

<div class="post-metadata">

**Author:** ![qwan](https://developer.download.nvidia.com/images/forums/profile-default-devtalk-84.png) [@qwan](https://forums.developer.nvidia.com/u/qwan)\
**Post date:** [November 8, 2023, 4:25pm UTC](https://forums.developer.nvidia.com/t/how-fix-the-tf-tree-articulation-root-problem-i-tried-to-find-the-articulation-root-in-the-raw-usd-property-tab-but-i-cannot-find-it/270595/7 "2023-11-08T16:25:06Z")

</div>

is there a joint connecting your base\_link to your chassis\_link? It looks like all the joints are connected to the chassis\_link. I suspect when you put an articulation root on the parent prim, it’ll go down the prim hierarchy and look for all the joints, but when you place it on a link that’s parallel in hierarchy to the link that has all the joint connections, it might not find the joints.

---

<div class="post-metadata">

**Author:** ![1115326614](https://sea2.discourse-cdn.com/nvidia/user_avatar/forums.developer.nvidia.com/1115326614/32/430656_2.png) [@1115326614](https://forums.developer.nvidia.com/u/1115326614)\
**Post date:** [November 10, 2023, 10:19am UTC](https://forums.developer.nvidia.com/t/how-fix-the-tf-tree-articulation-root-problem-i-tried-to-find-the-articulation-root-in-the-raw-usd-property-tab-but-i-cannot-find-it/270595/8 "2023-11-10T10:19:09Z")

</div>

There has a connection between base\_link and chassis\_link, and you are right that all the joints (except front laser and some links mounted on mid\_mount) has the same parent node: base\_link, this is common in both robotic arm and UGV. I got a reply from another employee that Isaac Sim would automatically pick a node which with the most child nodes as the root of TF tree if you set the Articulation Root as the root Prim of the robot. So it’s a dead game now, if I set the Articulation Root to the “base\_link” the TF would be correct, but I cannot control the motors as it cannot parse the geometry/Twist msg. Once I set the root Prim as the Articulation Root I can control it but the TF is incorrect.

---

<div class="post-metadata">

**Author:** ![qwan](https://developer.download.nvidia.com/images/forums/profile-default-devtalk-84.png) [@qwan](https://forums.developer.nvidia.com/u/qwan)\
**Post date:** [November 10, 2023, 5:12pm UTC](https://forums.developer.nvidia.com/t/how-fix-the-tf-tree-articulation-root-problem-i-tried-to-find-the-articulation-root-in-the-raw-usd-property-tab-but-i-cannot-find-it/270595/9 "2023-11-10T17:12:02Z")

</div>

We did have this problem before, but I thought we fixed it. Which version of Isaac Sim are you using? The latest version should be 2023.1.0. If it still in that one, we’ll file a bug report.

---

<div class="post-metadata">

**Author:** ![qwan](https://developer.download.nvidia.com/images/forums/profile-default-devtalk-84.png) [@qwan](https://forums.developer.nvidia.com/u/qwan)\
**Post date:** [November 16, 2023, 12:36am UTC](https://forums.developer.nvidia.com/t/how-fix-the-tf-tree-articulation-root-problem-i-tried-to-find-the-articulation-root-in-the-raw-usd-property-tab-but-i-cannot-find-it/270595/10 "2023-11-16T00:36:25Z")

</div>

If setting `chassis_link` as the articulation root works, then it might be because your `base_link` doesn’t have any rigid body attached to it. If your `base_link` is just a frame and has no physical object attached, but you must use it for articulation root for TF reasons, then you can potentially get around this by adding a very small and light mesh to the frame, and add a physics-\>rigid body to that prim.

and also make sure the update the articulation root target for the articulation controller every time you change the link that articulation root is attached to.

---

<div class="post-metadata">

**Author:** ![1115326614](https://sea2.discourse-cdn.com/nvidia/user_avatar/forums.developer.nvidia.com/1115326614/32/430656_2.png) [@1115326614](https://forums.developer.nvidia.com/u/1115326614)\
**Post date:** [November 16, 2023, 2:17am UTC](https://forums.developer.nvidia.com/t/how-fix-the-tf-tree-articulation-root-problem-i-tried-to-find-the-articulation-root-in-the-raw-usd-property-tab-but-i-cannot-find-it/270595/11 "2023-11-16T02:17:03Z")

</div>

Ok, I will test this configuration on Isaac Sim 2023 when I have spare time. I’ve been using Isaac Sim 2022 all the time, hope it is just a bug in version 2022.

---

<div class="post-metadata">

**Author:** ![system](https://sea2.discourse-cdn.com/nvidia/user_avatar/forums.developer.nvidia.com/system/32/68080_2.png) [@system](https://forums.developer.nvidia.com/u/system)\
**Post date:** [November 30, 2023, 2:17am UTC](https://forums.developer.nvidia.com/t/how-fix-the-tf-tree-articulation-root-problem-i-tried-to-find-the-articulation-root-in-the-raw-usd-property-tab-but-i-cannot-find-it/270595/12 "2023-11-30T02:17:04Z")

</div>

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