.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
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.
Reading the URDF
Writing the USD
Look at the file first
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 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.
- USD .usda
- NVIDIA's scene format, where a robot is ordinary geometry with UsdPhysics applied on top — what Isaac Sim opens.
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.