URDF Cheat Sheet — every element and attribute on one page

A complete, printable reference for URDF: every standard element (link, joint, inertial, visual, collision, geometry, material) and attribute, joint types, and the defaults parsers actually use — for when you need the syntax, not the tutorial.

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

A dense syntax reference, not a tutorial — for the concept-level explanation see What is URDF?. Print this page (browser print stylesheet strips the header/footer) or bookmark it.

<robot> — root element

Attribute/childRequiredNotes
name (attr)YesRobot identifier
<link>≥1One per rigid body
<joint>≥0 (n−1 for n links)Connects exactly two links; must form a tree
<material>NoTop-level named color/texture, referenced by name from <visual>
<transmission>NoROS-control actuator↔joint mapping (ROS-specific, not read by most non-ROS consumers)
<gazebo>NoGazebo-only extension block (plugins, sensors) — ignored by URDF-only consumers

<link>

Child elementPurposeKey sub-attributes
<inertial>Mass properties for physics<origin xyz rpy> (COM offset), <mass value>, <inertia ixx iyy izz ixy ixz iyz> (about the COM, in the link frame)
<visual>What renders<origin>, <geometry>, <material> (inline or by-name reference)
<collision>What physics/collision uses<origin>, <geometry> — often a simplified proxy of the visual mesh

A link with no <inertial> is valid (common for the root link, sensor mounts, or purely visual links) but many physics engines drop or destabilize links with zero/missing mass — see the inertia article.

<geometry> shapes

ElementAttributes
<box>size="x y z" (full extents, not half — the common bug)
<cylinder>radius, length (axis along local Z)
<sphere>radius
<mesh>filename (STL/DAE/OBJ, often package:// — ROS-workspace-relative, breaks outside ROS), optional scale="x y z"

<joint>

Attribute/childRequiredNotes
name, type (attrs)YesSee joint types below
<parent link="">YesMust reference an existing link name
<child link="">YesThe child's frame origin IS this joint's frame
<origin xyz="" rpy="">No (defaults to identity)Fixed transform from parent frame to joint frame, applied before any joint motion
<axis xyz="">revolute/continuous/prismatic onlyRotation/translation axis, expressed in the joint (=child) frame; defaults to 1 0 0 in some parsers
<limit lower upper effort velocity>Required for revolute/prismaticRadians (revolute) or metres (prismatic); effort in N·m or N, velocity in rad/s or m/s
<dynamics damping friction>NoJoint damping (N·m·s/rad) and static friction (N·m)
<mimic joint="" multiplier="" offset="">NoThis joint's value = multiplier × other_joint + offset (e.g. gripper fingers); not universally supported
<calibration>, <safety_controller>NoROS-control specific, rarely needed outside real hardware drivers

Joint types (exactly six — no more)

TypeDOFNeeds <limit>?
revolute1 (rotation, bounded)Yes
continuous1 (rotation, unbounded — wheels)No lower/upper, but effort/velocity still expected by most parsers
prismatic1 (translation, bounded)Yes
fixed0 (welded)No
floating6 (free body)No
planar3 (2 translation + 1 rotation, in a plane)No — rarely implemented by consumers

No ball, universal, or gear joints — URDF is single-axis-per-joint only. See the format comparison for what to reach for instead.

<material>

FormSyntax
Top-level named<material name="blue"><color rgba="0 0 1 1"/></material>, referenced elsewhere as <material name="blue"/>
Inline in <visual><material><color rgba="r g b a"/></material> or <texture filename=""/>

Units and conventions (all fixed by spec)

Validate your syntax against real parser behavior (not just XML well-formedness) with the free URDF validator, or see it rendered in the 3D viewer.