LESSON 09 · MOTION

Describe geometry and connect frames

Separate robot geometry from the transform tree.

Environment and verification

Documented target: Ubuntu 24.04 · ROS 2 Jazzy · Gazebo Harmonic where used. Browser labs tested; ROS/Ubuntu/hardware execution not performed here.

What you will understand

  • Read a minimal URDF.
  • Transform a planar point.
  • Understand map/odom/base_link.

Prerequisites: Turn wheel speeds into robot motion and its stated environment.

The idea, made clear.

URDF models links and joints. Visual geometry controls appearance; collision geometry controls contact checking; inertia controls dynamic behavior. A model that looks correct in RViz may still be unsuitable for physics. Xacro helps express repeated or parameterized descriptions without hand-copying each wheel.

TF2 relates coordinate frames at a particular time. A camera observation belongs to its camera frame until transformed. map provides global reference, odom continuous local reference, and base_link the robot body. Global corrections can adjust map→odom while local odometry remains continuous.

Keep a connected tree with one parent per child. Conflicting transform publishers create ambiguity. Fixed mounts may use static transforms; moving joints need joint states and robot_state_publisher. Inspect axes and offsets before trusting navigation.

mapodombase_linksensor frame
An original overview of the information or commissioning sequence.

Try it, step by step.

1

Write a model

Save base.urdf. Single-link visual only, not a complete physics robot.

urdf-tf-rviz-1.urdf
<?xml version="1.0"?>
<robot name="nexviora_base">
  <link name="base_link">
    <visual><geometry><box size="0.30 0.20 0.10"/></geometry></visual>
  </link>
</robot>

Expected: A well-formed single-link description.

2

Inspect a live transform

Requires a robot simulation publishing the named frames.

urdf-tf-rviz-2.txt
ros2 run tf2_ros tf2_echo odom base_link

Expected: Transform updates or an unavailable-frame diagnostic.

3

Transform a point

In the frame lab use translation (1,0), rotation 90° and local point (1,0).

Expected: Parent-frame point approximately (1,1) m.

Explore the interactive lab →

If something goes wrong

RViz shows nothing
Check fixed frame, robot_description and transforms.
Sensor points backwards
Check mount rotations and optical-frame conventions.

Check your understanding

Which should remain locally continuous?

Make it yours

Draw a rover frame tree with LiDAR and camera mounts.

Your learning progress

Optional progress stays in this browser. No account needed.

Go to the source documentation

Commands are educational examples for the stated environment, not a transcript of local ROS execution. Verify actual behavior on your machine.

Look up a term · Version notes · Report an issue