URDF vs SDF vs MJCF vs USD — robot description formats compared

A side-by-side comparison of the four robot description formats: structure, kinematic loops, sensors, units, ecosystem, and when to use each — with the conversion paths between them.

By Rahul Rajelli · updated 2026-07-10 · RSS

Four formats describe robots in 2026, and none is going away: URDF (the ROS lingua franca), SDF (Gazebo's richer native format), MJCF (MuJoCo's physics-first XML), and USD (NVIDIA Isaac's scene format, borrowed from film VFX). Choosing wrong costs a rewrite; converting carelessly costs correctness. Here's the honest comparison.

The comparison table

URDFSDFMJCFUSD
Origin / stewardROS (Open Robotics)Gazebo (Open Robotics)MuJoCo (Google DeepMind)Pixar → AOUSD; robotics via NVIDIA
StructureFlat link/joint list, tree onlyModel-frame poses, nested modelsNested body treeLayered scene graph
Kinematic loops✕ Impossible✓ Allowed✓ Via equality constraints✓ Via physics schemas
Sensors in-format✕ (extensions only)✓ First-class✓ First-class✓ Via schemas
World/environment✕ Robot only✓ Worlds, physics, lights✓ Full scene✓ Full scene, composable layers
Angle unitsRadiansRadiansDegrees by default (radian via compiler flag)Schema-dependent
Box sizesFull extentsFull extentsHalf-extentsSchema-dependent
Best forROS stacks, MoveIt, interoperabilityGazebo simulation, multi-robot worldsFast dynamics, RL research, contact-rich tasksIsaac Sim, GPU-parallel RL, photorealistic rendering
WeaknessExpressiveness ceilingWeak support outside GazeboSmall ecosystem outside RLComplexity; young robotics tooling

How to choose

The conversion landscape (and its traps)

In practice teams author once and convert — and the conversions are where silent errors breed:

ConversionStatusThe trap
URDF → SDFBuilt into Gazebo, reliableFew — this is the well-trodden direction
SDF → URDFChronically unsolved in community toolingSDF link poses are model-frame; URDF frames come from joint origins — naive tag-copying misplaces every link. This converter does the transform composition correctly
URDF → MJCFScripts exist; most are "limited subset"Half-extents, degree default, joint-in-child-body restructuring, dropped off-diagonal inertia. This converter handles all four and is compile-verified against MuJoCo 3.10
URDF → USDIsaac Sim importer (GUI/scripts)Tooling locked to the Isaac environment
CAD (STEP) → anyPlugin-per-CAD-package, or geometry pipelineUnits, mesh density, and inertia — computed from geometry here

The uncomfortable truth

There is no universal format and no lossless round-trip. URDF can't express what SDF can; MJCF's physics annotations have no URDF equivalent; USD's layering has no analogue anywhere else. The practical strategy is: author in the richest format your primary tool needs, convert outward with tools that report what they drop — silent lossy conversion is how a robot works in one simulator and mysteriously fails in the next. Every converter on this site lists its dropped constructs as explicit warnings for exactly that reason.