
Learn to write ROS2 programs starting from a working ROS1 app and migrate a codebase to ROS2, focusing on core concepts and differences, with a complete project to practice.
Compare ros1 and ros2, and explain why switching to ros2 is preferable for new projects. Build migration skills by using noetic and humble and outlining ros1 to ros2 changes.
Watch all lessons in order and code along to maximize understanding, then finish the final project on your own to solidify the ROS1 to ROS2 migration path.
Set up your ROS2 migration environment by installing Ubuntu 20.04, with an optional Ubuntu 18.04 for ROS Melodic. Choose Visual Studio Code and follow the guided ROS installation steps.
Install Rosta and start existing nodes to see the main differences between Rosewarne and Rosta, and learn about architectural changes to better understand the migration.
Install ROS2 Foxy on Ubuntu 20.04 using binary packages, then set up your environment by sourcing /opt/ros/foxy/setup.bash and updating your bashrc for automatic initialization.
Launch a ros2 node, explore ros2 tools, and compare with ros1 by using ros2 run, ros2 topic, and ros2 interface to publish, subscribe, and inspect messages.
Compare ros1 and ros2, noting ros2’s cross‑platform support and a changed transport layer that enables independent nodes to discover each other without a master. Learn language bindings and multi‑machine communication.
Translate a eurozone application into a Rosta application, rewrite an existing Rosewarne project, and learn to build a Rosta app with packages, nodes, topics, services, barometer's analogizes, and tools.
Install and configure ROS Noetic on Ubuntu to test a ROS1 app, learn to source the setup scripts, manage environments, and avoid mixing distributions.
Explore the ROS1 eurozone app's structure, packages, nodes, topics, and services, and translate it to ROS2 while setting up a workspace and building the code across implementations.
Install colcon as the build tool for ROS2 and prepare your workspace for migration from ROS1 by configuring colcon extensions and sourcing the bash completion script for seamless development.
Create a ros2 workspace with a src directory for packages, then source the global ros installation and the workspace overlay before running a build.
Learn to create a Python package in ROS 2, compare with ROS 1 packaging, and configure dependencies, package.xml, and Python package structure for your workspace.
Create a C++ package for the ros2 app using ros2 pkg create with cmake, add std_msgs and my_robot_msgs dependencies, and organize include and source folders.
Create a Python ros2 node inside a ros2 workspace and Python package. Initialize rclpy, instantiate a node object, log via the node, and run with ros2 run, highlighting ros1 migration.
Create a ROS2 Python node using object-oriented programming, subclassing the node and using super, then use timers and spin for periodic callbacks.
Learn to create a C++ ros2 node by initializing ros communication, using a node handle and shared pointers, and adding a publisher and subscriber; build, install, and run the executable.
Create a class that inherits from a node base, initializes its fields, and uses a timer with a shared pointer bound to a callback to print a number at intervals.
Learn to create ros2 nodes in python and c++ using templates, including a no counter node and a no control node, by inheriting from node and spinning in main.
Learn to implement a Python publisher and subscriber in ROS2, publish on a topic, process messages via a callback, and migrate ROS1 patterns across nodes.
Learn to implement ROS 2 topic publishers and subscribers in C++, migrating from ROS 1. Create publishers and subscriptions, publish messages, and handle callbacks with shared pointers in node-based workflow.
Create custom interfaces for ROS 2 by building a robot interfaces package, configuring rosidl for message and service generation, and using the generated interfaces in C++ and Python projects.
Create a ROS2 Python service in a node, implement a callback that processes the request and returns a boolean response, and test it to reset a counter.
Learn to write a ROS2 C++ service, implementing a counter service with a request and response callback, configuring dependencies, and building and running node to handle and return counter values.
Explore remappings in ROS2 to rename nodes, topics, and services at runtime, using command line arguments to apply the remap across the running system.
Explore how ros2 handles parameters: unlike ros1's global parameter server, parameters live inside each node and are declared, retrieved, and set at node startup.
Learn how to declare ROS2 parameters in Python and C++, see that parameters live in nodes, and set values at runtime via the command line, including booleans, integers, strings.
Declare parameters at the start, set values at runtime, and retrieve them from the node using self.get_parameter; publish with a timer based on the frequency.
Learn how to retrieve and use parameters in C++ within ROS2, including default values, typing with parameter objects, and converting a runtime frequency into a timer interval in milliseconds.
Create a Python-based ROS2 launch file to start multiple nodes, configure parameters, remap topics, and migrate from ROS1 launch workflow.
Navigate a cross-bridge that lets ROS1 and ROS2 work together. Implement a transition phase to migrate large projects by running ROS1 and ROS2 packages directly from your ROS application.
Learn to enable Rosewarne Bridge with your custom messages by compiling the bridge from source, using provided code, and setting up workspaces for ROS1–ROS2 message compatibility.
Install and build the ROS 2 bridge for custom messages by configuring cross and bridge workspaces, sourcing ROS installations, and noting CMH false and long build times.
Publish and subscribe across ros1 and ros2 using the ros bridge, by sourcing the bridge workspace, building custom messages, and testing with a shared topic.
Map and align custom messages for the ros bridge by editing a mapping rules file to ensure package and message name consistency across ros1 and ros2.
Build and test a cross to bridge mapping between ros1 and ros2, handling custom interfaces and messages, then verify topics, services, and remapping during migration.
Migrate a ROS1 project to ROS2 by porting Python and C++ packages to Noetic, configuring launch files, and validating with a turtle simulation.
Learn the step-by-step process to migrate a ros1 project to noetic, covering step zero for python 3 readiness, seed preparation, system interfaces, and a final launch file.
Port the ROS projects from Melodic to Noetic by creating a workspace, cleaning up the project, and updating Python to 3, then build, launch, and verify compatibility.
Open a new workspace, unzip the seed project, and build the ros bridge from source to bind ros1-ros2 messages, including custom and dersim messages, using the provided seed.
Learn to port a target publisher node from ROS1 to ROS2 in Python, create the package with dependencies, and run the new coordinates publisher in a ROS2 workspace.
Port the turtle controller node from ROS1 to ROS2 using Python, building a publisher and subscriber turtle control node with target coordinates and a timer-driven loop.
Create a launch file to run the migrated ROS2 project, configure its package and dependencies, and define a simple launch description with a total control node and a target publisher.
Complete the migration by recreating the C++ project with provided code, then enhance the app with launch pad parameters and remapping as you migrate ROS1 projects to Noetic and ROS2.
Plan your next steps by migrating existing ROS1 projects to ROS2 using the Rosewarne Bridge package, and continue practicing core ROS concepts like nodes, topics, services, parameters, and launch.
At the end of this course - starting from your ROS1 knowledge - you will be able to create complete ROS2 applications, and migrate a ROS1 code base in ROS2.
! IMPORTANT: If you’re a complete beginner and have no ROS1 knowledge at all, please don’t take this course. You must know how to work with core concepts (nodes, services, parameters, launch files) to understand the course.
! UPDATE - PLEASE READ: the ros1_bridge + migration part is not so relevant anymore, as the ros1_bridge project was not really completed, and it looks a bit abandoned (unfortunately, no alternative). I'm still leaving the course open for enrollments, because the first 4 sections are still very useful.
-- Why this course?
Well, if you already know ROS1, you might want to start learning ROS2, but not from scratch.
Or if you have to work with a ROS1 project, you might be looking into a way to port it to ROS2.
I myself was a ROS1 developer before learning ROS2. What I was looking for was simply some documentation of how I could quickly get up to speed with ROS2, as I already knew ROS1. I didn’t find any good resources, so I had to go through all of the beginner documentation for ROS2. After doing all that, I’m now using ROS2 and I can see the differences. In this course I won’t start from the very beginning of each ROS concept, since you already know them. I’ll just focus on the most important points that will allow you to write ROS2 applications in no time, thanks to your pre-existing ROS1 knowledge.
And I understand the need to know what to do with an existing ROS1 project, now that ROS2 is starting to get bigger and more stable. So, again, what I’ll teach you is what I personally do with my own projects. I don’t “invent” a method, I create it from real practical needs I have and other people have.
-- How do I teach?
My method is quite simple:
Step by step
Going to the point
Practice over theory, though a little bit of theory doesn’t hurt when combined with practice
My experience with Robot Operating System is very practical. I actually used it to build a robotic arm that is now on the market. So I had no other choice than being practical and going to the point. And that’s the way I want to teach you.
-- What will you do in the course?
This course is divided into 2 main parts.
1. First, you’re going to learn how to write ROS2 programs, using your ROS1 experience. We’ll start from an existing ROS1 application, and step by step, we’ll go through every core concept and see how to translate the app in ROS2. Note that we won’t dive into advanced functionalities, we’ll stick to the ROS2 core functionalities.
2. Then, it’s migration time! If you already have some basics in ROS2, you might go quickly with the first part, and then focus on this migration part.
I will explain to you:
When to switch to ROS2.
Which ROS1 and ROS2 distribution to use now and in the near future.
I will give you a step-by-step process to migrate your ROS1 code base in ROS2. Also you’ll see how to run a ROS1 application along with a ROS2 application, communicating between them thanks to the ros1_bridge package.
And finally: a complete project for you to practice on migrating a code base and writing ROS2 code. I’ll give you a project I made with Turtlesim in ROS1, and you’ll migrate it to ROS2.
Note: once again, for this 2nd part of the course, unfortunately the content starts to get outdated, as the ros1_bridge development didn't go through, and there is no alternative to that. The first part is still relevant.
This course is not for you if:
You don’t have any knowledge in ROS1
You’re already an expert in both ROS1 and ROS2.
You’re just getting started with programming and Linux.