Problem in removing articulation root after assembling manipulator arm and gripper

Isaac-sim Version : 6.0.1

Operating System :

Host machine : Ubuntu 22.04
Docker container : Ubuntu 24

GPU Information

  • Model: RTX A4000
  • Driver Version: 580.159.03

Topic Description

I am unable to delete articulation root in isaac-sim, i tried both GUI and script.

Detailed Description :

I am using isaac-sim 6.0.1 using docker. The docker image has ubuntu 24. Rest all other details given above are of my host machine.

I am trying to simulate ur10e and combine a gripper to it just like in official tutorials for isaac-sim. I had URDF files for ur10e and gripper, i imported them to USD file individually ie now i have 2 USD files - one contains arm and the other contains gripper. They both have only 1 articulation root. Now I created a new scene (in new usd file), and referenced arm and gripper into this, Then used assembler to combine them to a single robot. But I still have 2 articulation roots in the robot - one is at the base of arm and the other on gripper.

So i tried to remove the articulation root from gripper, but it doesnt get removed. I tried both GUI and script methods. I don’t even get any error in doing so.

I saw one solution online(for another problem) that said - remove the roots for their orignal usd files and not in the referencing file. I tried this but it didnt work.

Then i tried to remove articulation root before assembling the robot, that also didn’t work.

I am trying to remove articulation root from gripper because thats what i saw online in forums that any robot should have only a single root.

I am very new to this, so please ignore my mistakes. Thank you.

Steps to Reproduce :

  1. This is the github link to my complete workspace :
    GitHub - Vihaan30g/autonomous-manipulator: Isaac-sim workspace for manipulators. · GitHub

    workspace name : isaac_sim_ws

    path to the robot assembly file : isaac_sim_ws/scenes/pick_place_v1/robot_assembly.usd

    The urdf files are also within this repo at : isaac_sim_ws/ros2_ws/src

  2. Note : i am using the official docker image of isaac-sim-6.0.1

Code used :

from pxr import UsdPhysics
import omni.usd

stage = omni.usd.get_context().get_stage()

prim_path = “/World/robots/robotiq_2f140/Geometry/world/robotiq_base_link/robotiq_140_base_link”
prim = stage.GetPrimAtPath(prim_path)

removing the root

prim.RemoveAPI(UsdPhysics.ArticulationRootAPI)

Error Messages :

The system does not throw any error when i execute code to remove the articulation root.

Screenshots or Videos :

This img shows the articulation roots present :

This image shows the output i get on trying to remove the root :

Hi, thanks for the report.
The issue you’re seeing isn’t specific to articulation roots; it’s a USD instancing issue. When a robot is imported/assembled, the referenced prim is almost always marked Instanceable. That makes everything under it a read-only instance proxy, and any authoring on those child prims — including RemoveAPI(UsdPhysics.ArticulationRootAPI) — is rejected.

Any of the following fixes should work:

  1. GUI: Select the referenced gripper prim, uncheck Instanceable in the Property panel, then remove ArticulationRootAPI from the gripper’s root link.

  2. Script: clear instancing before removing

  from pxr import UsdPhysics, PhysxSchema
  import omni.usd
  stage = omni.usd.get_context().get_stage()  
  stage.GetPrimAtPath("/World/robots/robotiq_2f140").SetInstanceable(False)
  prim = stage.GetPrimAtPath("<gripper_root_link>")
  prim.RemoveAPI(UsdPhysics.ArticulationRootAPI)
  prim.RemoveAPI(PhysxSchema.PhysxArticulationAPI)  # if present

Hello sir,

Thank you for your response.

I tried your method, but it did not work. Maybe I am doing something wrong. The prim which has articulation-root API attached with it is non instanceable already. But then i realized that still there are other prims in the robot that are instanceable, so i unchecked instanceable property for all the prims. Now i again tried, but still i could not remove the articulation-root.
I tried in both the files - one that is the direct import of the gripper from URDF and the other which is the robot assembly.

There is a checkbox to enable or disable the articulation-root (visible in the screenshot under properties), will disabling the root using this checkbox be sufficient (just asking because i am not able to delete it permanently) ?

Hi, I checked your files and you’re right, instanceable is not the cause of the issue. The culprit is NewtonArticulationRootAPI. PhysicsArticulationRootAPI is a built-in (included) API schema of NewtonArticulationRootAPI. Applying NewtonArticulationRootAPI automatically pulls in PhysicsArticulationRootAPI via the schema registry / prim definition, that’s why your RemoveAPI() call didn’t work. Try to remove the NewtonArticulationRootAPI schema with

prim.RemoveAppliedSchema("NewtonArticulationRootAPI")

Then PhysicsArticulationRootAPI will be removed.

Hi, yes this worked.
Thank you soo much.