Foreword#

This manual is part of the TU Delft’s RO47003 “Robot Software Practicals lab course, edition 2024-2025. In this course, you will familiarize yourself with Linux, and with ROS: the Robot Operating System. ROS is used in a large number of projects within the TU Delft Cognitive Robotics (CoR) department, and it is therefore important that you understand its concepts and learn how to work with it.

Updating the course: from ROS 1 to ROS 2#

In past editions of the course, the ROS lab assignment focused on ROS 1, and we used the excellent free book A Gentle Introduction to ROS by Jason M. O’Kane as the learning material. Our lab manual then was based on exercises to accompany that book.

However, starting from the academic year 2024-2025, we are updating the course to teach ROS 2 instead of ROS 1. ROS 2 has now been around for many years, but for a long time during its development it was still too incomplete and unstable; ROS 1 remained the recommended version for both academic and company projects. The last four years we observed more and more projects moved to ROS 2, and in May 2025 the last official ROS 1 release, called ROS Noetic will go end-of-life (see the official overview of ROS 1 releases ). Future official ROS releases will all be based on ROS 2.

Therefore, we have now created this new manual for ROS 2. A benefit of this new manual is that we can keep modifying it as needed, based on student feedback, and keep improving on it during the coming years. Unlike Jason M. O’Kane’s book, the new manual will separate the part on “using ROS” from the part of “programming for ROS”.

Rather than developing all teaching material you find here from scratch, we are reusing many excellent online resources that have been created by the ROS 2 community:

We thank all contributors to these excellent resources for their work. Our goal in this manual is to provide an integrated learning experience for ROS 2, explaining ROS concepts from both a conceptual and a practical side. For this integration, we have adjusted the content where necessary and added explanations or exercises where necessary. We also do not include all tutorials or chapters from the book, but instead made a selection of topics related to the learning objectives and the hand-in assignment of our course.