What is URDF?
URDF (Unified Robot Description Format) is an XML format that describes a robot as a tree of rigid links connected by joints — the standard robot model format for ROS, Gazebo, RViz and MoveIt.
A URDF file is the "what does this robot look like and how does it move" file. Everything downstream — motion planning, simulation, visualization, collision checking — reads the same URDF.
What's inside a URDF
- Links — the rigid bodies (base, upper arm, gripper finger, wheel...).
- Joints — how two links connect and move relative to each other:
revolute,prismatic,continuous,fixed,floatingorplanar, each with an axis and, for revolute/prismatic, limits. - Visual geometry — what's rendered (usually a mesh).
- Collision geometry — what's used for physics/contact checks (usually simplified).
- Inertial — mass, center of mass and the inertia tensor for each link. See what an inertia tensor is.
A minimal example
<robot name="simple_arm">
<link name="base_link"/>
<link name="arm_link"/>
<joint name="shoulder" type="revolute">
<parent link="base_link"/>
<child link="arm_link"/>
<axis xyz="0 0 1"/>
<limit lower="-1.57" upper="1.57" effort="10" velocity="1"/>
</joint>
</robot>
Where URDF is used
ROS and ROS 2 (motion planning with MoveIt, visualization in RViz), Gazebo and other simulators, and increasingly reinforcement-learning pipelines that import URDF before converting to MJCF (MuJoCo) or USD (Isaac Sim).
Where a URDF comes from
Historically, by hand — measuring or exporting each link's geometry, placing joint frames, and writing the XML directly. Automated tools like Jointly generate a URDF straight from CAD (STEP, mesh, SolidWorks, Onshape), inferring the links, joints, axes, inertia and collision instead of hand-authoring them. See our STEP-to-URDF guide for how that works.
Skip the manual work
Jointly does everything on this page automatically: drop in your CAD (STEP, mesh, SolidWorks or Onshape), and it infers joints, axes, inertia and collision, then exports a simulation-ready URDF, SDF, MJCF or USD. The first conversions are free.
Try Jointly free →