Bird
Raised Fist0
ROSframework~10 mins

Building a mobile robot URDF in ROS - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Concept Flow - Building a mobile robot URDF
Define robot base link
Add wheels as child links
Specify joints connecting base and wheels
Set joint types and limits
Add sensors or other parts
Validate URDF structure
Use in ROS simulation or control
Start by defining the robot base, then add wheels and joints step-by-step, finishing with validation and use.
Execution Sample
ROS
<robot name="mobile_robot">
  <link name="base_link"/>
  <link name="wheel_left"/>
  <joint name="joint_left" type="continuous">
    <parent link="base_link"/>
    <child link="wheel_left"/>
  </joint>
</robot>
Defines a simple robot with a base and one wheel connected by a continuous joint.
Execution Table
StepURDF Element ProcessedActionResulting Robot Model State
1<robot>Start robot definitionRobot named 'mobile_robot' created
2<link name="base_link"/>Add base linkBase link added to robot
3<link name="wheel_left"/>Add left wheel linkLeft wheel link added
4<joint name="joint_left" type="continuous">Start joint definitionJoint 'joint_left' started
5<parent link="base_link"/>Set joint parentJoint parent set to 'base_link'
6<child link="wheel_left"/>Set joint childJoint child set to 'wheel_left'
7</joint>Close jointJoint 'joint_left' completed and linked
8</robot>Close robotRobot URDF complete with base and one wheel joint
💡 All URDF elements processed, robot model fully defined
Variable Tracker
Robot Model PartStartAfter Step 2After Step 3After Step 7Final
LinksNone['base_link']['base_link', 'wheel_left']['base_link', 'wheel_left']['base_link', 'wheel_left']
JointsNoneNoneNone['joint_left']['joint_left']
Key Moments - 2 Insights
Why do we need to define both parent and child links in a joint?
Each joint connects two parts: the parent link is the fixed part, and the child link moves relative to it. See execution_table steps 5 and 6 where parent and child are set.
What happens if we forget to close the joint tag?
The URDF parser will not recognize the joint as complete, causing errors. Step 7 shows closing the joint tag to finalize it.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what links exist after step 3?
AOnly 'base_link'
B'base_link' and 'wheel_left'
CNo links yet
DOnly 'wheel_left'
💡 Hint
Check the 'Links' row in variable_tracker after step 3
At which step is the joint 'joint_left' fully defined and linked?
AStep 7
BStep 5
CStep 4
DStep 3
💡 Hint
Look for the step where the joint is closed in execution_table
If we add a second wheel link, how would the variable_tracker change after step 3?
ANo change until joint is added
BJoints would include the new wheel
CLinks would include 'base_link', 'wheel_left', and the new wheel
DLinks would only have 'base_link'
💡 Hint
Adding a link updates the 'Links' list immediately as seen in variable_tracker
Concept Snapshot
URDF defines robot parts as links and connects them with joints.
Start with a base link, add wheels as links.
Define joints with parent and child links.
Close tags properly to complete the model.
Use URDF in ROS for simulation and control.
Full Transcript
Building a mobile robot URDF involves defining the robot's base link first, then adding wheel links. Each wheel is connected to the base by a joint, which specifies the parent and child links. The joint type, such as continuous, defines how the parts move. The URDF file must be properly structured with opening and closing tags. This structure allows ROS to understand the robot's physical layout for simulation or control. The execution table shows each step of adding links and joints, while the variable tracker records the robot parts present after each step. Key moments include understanding the parent-child relationship in joints and the importance of closing tags. The visual quiz tests knowledge of the robot model state at different steps. This step-by-step approach helps beginners see how a robot model is built in URDF.

Practice

(1/5)
1. What does a URDF file primarily describe in ROS for a mobile robot?
easy
A. The robot's parts (links) and how they connect (joints)
B. The robot's sensor data processing algorithms
C. The robot's network communication protocols
D. The robot's battery charging schedule

Solution

  1. Step 1: Understand URDF purpose

    A URDF (Unified Robot Description Format) file describes the physical structure of a robot, including its parts and connections.
  2. Step 2: Identify mobile robot components

    Mobile robots have links (like base and wheels) connected by joints, which URDF models.
  3. Final Answer:

    The robot's parts (links) and how they connect (joints) -> Option A
  4. Quick Check:

    URDF = robot parts and joints [OK]
Hint: URDF = robot structure, not software or data [OK]
Common Mistakes:
  • Confusing URDF with software algorithms
  • Thinking URDF handles communication
  • Assuming URDF manages battery or sensors
2. Which of the following is the correct syntax to define a link named base_link in a URDF file?
easy
A.
B.
C.
D.

Solution

  1. Step 1: Recognize URDF link syntax

    In URDF, links are defined with the <link> tag and a name attribute.
  2. Step 2: Check option correctness

    <link name="base_link"/> uses <link name="base_link"/>, which is correct syntax. Other options use wrong tags or attributes.
  3. Final Answer:

    <link name="base_link"/> -> Option A
  4. Quick Check:

    Link tag uses name attribute [OK]
Hint: Links use syntax in URDF [OK]
Common Mistakes:
  • Using <joint> instead of <link> for links
  • Using id instead of name attribute
  • Using non-existent tags like <base>
3. Given this URDF snippet for a wheel joint:
<joint name="wheel_joint" type="continuous">
  <parent link="base_link"/>
  <child link="wheel_link"/>
</joint>

What does the type="continuous" mean for this joint?
medium
A. The joint rotates but only up to 90 degrees
B. The joint is fixed and cannot move
C. The joint moves only in a straight line
D. The joint can rotate infinitely without limits

Solution

  1. Step 1: Understand joint types in URDF

    URDF joint types include fixed, revolute, continuous, prismatic, etc. Continuous means unlimited rotation.
  2. Step 2: Interpret continuous joint meaning

    Continuous joints rotate endlessly, suitable for wheels that spin freely.
  3. Final Answer:

    The joint can rotate infinitely without limits -> Option D
  4. Quick Check:

    continuous joint = infinite rotation [OK]
Hint: Continuous joint means unlimited rotation [OK]
Common Mistakes:
  • Confusing continuous with fixed joint
  • Thinking continuous means linear movement
  • Assuming rotation limits apply
4. You wrote this URDF joint definition but your robot's wheel does not move:
<joint name="wheel_joint" type="revolute">
  <parent link="base_link"/>
  <child link="wheel_link"/>
</joint>

What is the likely problem?
medium
A. The joint type should be fixed for wheels
B. Missing <limit> tag specifying joint rotation limits
C. The parent and child links are reversed
D. The joint name cannot contain underscores

Solution

  1. Step 1: Check joint type and limits

    Revolute joints require <limit> tags to define rotation range; missing limits can cause no movement.
  2. Step 2: Verify other options

    Fixed joints do not move, so B is wrong. Parent/child order is correct. Underscores are allowed in names.
  3. Final Answer:

    Missing <limit> tag specifying joint rotation limits -> Option B
  4. Quick Check:

    Revolute joints need limits to move [OK]
Hint: Revolute joints need <limit> tags to move [OK]
Common Mistakes:
  • Omitting <limit> tag for revolute joints
  • Using fixed joint for moving parts
  • Swapping parent and child links
  • Thinking joint names can't have underscores
5. You want to build a mobile robot URDF with a base and two wheels. Which joint types and connections correctly model the wheels that spin freely?
hard
A. Use connecting wheel_link to base_link for both wheels
B. Use connecting base_link to wheel_link for both wheels
C. Use connecting base_link to wheel_link for both wheels
D. Use without <limit> tags connecting wheel_link to base_link

Solution

  1. Step 1: Identify wheel joint requirements

    Wheels spin freely, so joints must allow infinite rotation, which is continuous type.
  2. Step 2: Check connection direction and joint type

    Parent link is base_link, child is wheel_link. Continuous joint type is correct for free spinning wheels.
  3. Step 3: Eliminate incorrect options

    Fixed joints don't move. Prismatic joints slide linearly, not rotate. Revolute without limits won't move properly.
  4. Final Answer:

    Use <joint type="continuous"> connecting base_link to wheel_link for both wheels -> Option C
  5. Quick Check:

    Continuous joints + correct parent-child = wheels spin [OK]
Hint: Wheels need continuous joints from base to wheel [OK]
Common Mistakes:
  • Using fixed joints for wheels
  • Using prismatic joints for rotation
  • Omitting limits on revolute joints
  • Reversing parent and child links