.urdf  →  .usda

URDF to USD

Convert a robot description from URDF to USD in the browser. Nothing is installed and nothing is queued: the file is read, written in the other format, and handed back with a list of anything that could not be carried across.

Convert a file

URDF .urdf USD .usda

Drop your URDF here

Drop the folder too if the model references meshes.

Files are read on our server and deleted after a day. Nothing is published.

What this conversion costs

These are the things USD has no place for. They are reported on the converted file as well, as a comment at the top, so the file itself says what is missing from it.

  • Joint damping and friction. USD keeps those on a drive, which describes a motor rather than a joint, and a converted robot has no drives until you add them.
  • Named materials. Colours survive as displayColor on the geometry; the material name a URDF shares between links does not.
  • Mimic joints. USD has no equivalent, so a gripper whose second finger follows the first arrives with two independent fingers.

A robot in USD is geometry with physics applied to it

There is no robot element to write. What makes a stage a robot is UsdPhysics: an Xform per link with PhysicsRigidBodyAPI and a mass, a shape under it carrying PhysicsCollisionAPI when it collides, and a PhysicsRevoluteJoint or PhysicsPrismaticJoint relating two of them. That is what Isaac Sim opens, and it is what this writes.

The meshes go inside the stage

USD cannot load an STL, an OBJ or a COLLADA file, so a reference to one is a shape that never appears. Every mesh the URDF names is read and written into the .usda itself — once per file, and referenced wherever it repeats — so the stage opens on its own, with no folder beside it. A mesh that cannot be read, or one that would take the stage past a million and a half triangles, stays a reference, and the file says which.

The full inertia tensor is carried, not just the diagonal

USD stores inertia as three principal moments plus the rotation into them. A real robot's links are not aligned with their own principal axes — every link of the A1 has products of inertia — so the tensor is diagonalised and the rotation written as principalAxes. Reading it back reproduces the original tensor to within a rounding; without that step, 39 numbers on the A1 alone would arrive quietly changed.

Metres, Z up, and why that line matters

The stage declares metersPerUnit = 1 and upAxis = "Z". Omniverse defaults to centimetres, so a robot without those two lines opens a hundred times too big and lying on its side — and nothing about the file looks wrong.

The velocity limit goes through PhysX

Core USD has nowhere to say how fast a joint may turn. Isaac reads physxJoint:maxJointVelocity, so the number is written there rather than dropped; a reader that does not know the attribute ignores it, which is what an extension is for.

The two formats

URDF .urdf
the ROS description of a robot: links, joints, geometry and inertia, one rigid tree. A URDF file, line by line
USD .usda
NVIDIA's scene format, where a robot is ordinary geometry with UsdPhysics applied on top — what Isaac Sim opens. OpenUSD for robots

Converting is rarely the whole job. Once you have the USD, the viewer shows what actually came across — collision geometry against visual, joint limits, where the mass sits — and the physics lab answers the question a file cannot: whether the robot stands up when gravity is switched on.

Other directions