Adding articulation to imported URDF file

I got the YuMi description file from here.
I can import the urdf file and save it as USD. But the problem is I can not add articulation to joints. There is only one option available: “articulation force” not root.

Just keeping the record for others who may face the same issue:
I want to share my experience importing a new urdf robot file and re-producing the “Follow Target” example with the new robot (in this case, Yumi).
1: No clear documentation exists for doing such a task from scratch. Current documents and tutorials lack many details to achieve a solid result.
2: After days of trying different methods, I ended up modifying omni.isaac.examples/…/…/…/dynamic_control folder and updating codes inside it so I can run both “joint_controller.py” and “read_articualtion.py”. Finally, both of these could run without any error, and the YuMi’s USD file seems fine. I could move all joints and read the joint’s values from them.
3: Based on those examples, I was expected to re-produce the Follow Target example with the new platform. But problems and endless errors just started to show up. I have updated all scripts in the “exts” folder that were related to the Franka platform. No success. The latest error was something about omni.isaac.dynamic_control.plugin DcFindArticulationDof: Invalid or expired articualtion handle. I have updated all joint information and yaml files everywhere in exts folder to match the new platform. After weeks of wasting time on this I finally found a script on Isaac_sim-20aa.a.a/api/omni.isaac.dynamic_control/franka_articulation.py. With the mentioned scipt I found the problem which was lack of articulation definition in the usd file. Even on the Isaac asset folder under robots/franka there are two franka usd files the “franka _alt_fingers.usd” is the one that has articualtion information and works fine the mentioned script.
3: Now, I should add articulation to the robot joints. The documentation seems ok, but in a real-world application, I don’t know why the option is not available in the physics sub-menu. I couldn’t find an answer to that yet. And I am stuck at this point. Any help or insight would be appreciated!

1 Like

@rgasoto

1 Like

Hello! Thanks for your interest in Isaac Sim!

The robots are defined as physics articulations, here’s the documentation on how to set up the articulation: Articulations — Omniverse Create documentation

The URDF importer already sets up the robots as articulations, and once you add the articulation root to the robot base, there should be no further action to do on the robot joints in the USD.

Regarding the code, it would help if you provided us with the stack trace of the error, so we can further inverstigate or give you guidance.

Much appreciated

Hi, Thank you.
I have tried the solution you’ve mentioned but with no success. To avoid any complexity, let’s perform a simple test. If I rename the “franka-alt-fingers.usd” in the assets file under Isaac/Robots/Franka, then running the simplest test file with “./python.sh standalone_examples/api/omni.isaac.dynamic_control/franka_articulation.py” will fail for me. I have updated the “asset_path” at line 27. This is the simplest test since the file name is the only changed parameter.

Hi, @rgasoto @ltorabi, I am facing the same problem.

Having the robot imported from URDF to USD Using the Isaac Sim importer is not enough to add the robot to the scene. Here is the error:

2022-08-09 05:04:19 [2,226,940ms] [Warning] [omni.isaac.dynamic_control.plugin] Failed to find articulation at '/World/xArm_Robot'
2022-08-09 05:04:19 [2,226,940ms] [Error] [omni.isaac.dynamic_control.plugin] DcGetArticulationRootBody: Invalid or expired articulation handle
2022-08-09 05:04:19 [2,226,940ms] [Info] [omni.isaac.core.articulations.articulation_view] initializing view for xarm_robot
2022-08-09 05:04:19 [2,226,941ms] [Warning] [omni.physx.tensors.plugin] Failed to find articulation at '/World/xArm_Robot'
2022-08-09 05:04:19 [2,226,941ms] [Error] [omni.physx.tensors.plugin] Pattern '/World/xArm_Robot' did not match any articulations

2022-08-09 05:04:19 [2,226,942ms] [Error] [asyncio] [/home/mohamed/.local/share/ov/pkg/isaac_sim-2022.1.0/kit/python/lib/python3.7/asyncio/base_events.py:1619] Task exception was never retrieved
future: <Task finished coro=<BaseSampleExtension._on_load_world.<locals>._on_load_world_async() done, defined at /home/mohamed/.local/share/ov/pkg/isaac_sim-2022.1.0/exts/omni.isaac.examples/omni/isaac/examples/base_sample/base_sample_extension.py:145> exception=AttributeError("'NoneType' object has no attribute 'is_homogeneous'")>
Traceback (most recent call last):
  File "/home/mohamed/.local/share/ov/pkg/isaac_sim-2022.1.0/exts/omni.isaac.examples/omni/isaac/examples/base_sample/base_sample_extension.py", line 146, in _on_load_world_async
    await self._sample.load_world_async()
  File "/home/mohamed/.local/share/ov/pkg/isaac_sim-2022.1.0/exts/omni.isaac.examples/omni/isaac/examples/base_sample/base_sample.py", line 47, in load_world_async
    await self._world.reset_async()
  File "/home/mohamed/.local/share/ov/pkg/isaac_sim-2022.1.0/exts/omni.isaac.core/omni/isaac/core/world/world.py", line 314, in reset_async
    self._scene._finalize(self.physics_sim_view)
  File "/home/mohamed/.local/share/ov/pkg/isaac_sim-2022.1.0/exts/omni.isaac.core/omni/isaac/core/scenes/scene.py", line 237, in _finalize
    robot.initialize(physics_sim_view)
  File "/home/mohamed/.local/share/ov/pkg/isaac_sim-2022.1.0/exts/omni.isaac.core/omni/isaac/core/articulations/articulation.py", line 179, in initialize
    self._articulation_view.initialize(physics_sim_view=physics_sim_view)
  File "/home/mohamed/.local/share/ov/pkg/isaac_sim-2022.1.0/exts/omni.isaac.core/omni/isaac/core/articulations/articulation_view.py", line 118, in initialize
    assert self._physics_view.is_homogeneous
  File "/home/mohamed/.local/share/ov/pkg/isaac_sim-2022.1.0/kit/extsPhysics/omni.physics.tensors-1.4.12-5.1/omni/physics/tensors/impl/api.py", line 120, in is_homogeneous
    return self._backend.is_homogeneous
AttributeError: 'NoneType' object has no attribute 'is_homogeneous'

I have a simple question. What should I do after having the USD of my robot to get the articulation correctly setup?

Edit: I found that I was making a mistake. After importing the urdf, we already have a USD for the robot model that we can load into the simulation using the python script. What I did wrong was that I saved the USD again after the importing, which corrupted the USD file as it ended up having the robot saved in the world under an unneeded parent, like /World/robot/robot. This caused an issue when loading the articulations.

Thank you!

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