
Master the basics of ROS from scratch with a step-by-step, beginner-friendly course that covers installing ROS on Ubuntu and building ROS nodes, topics, services, messages, parameters, and launch files.
Discover how ROS, the Robot Operating System, standardizes robotic software, enables modular nodes and reusable libraries, and clarifies when to use it for complex, multi-sensor, communication-heavy robotics.
Practice code along with the instructor, use command line tools, and tackle challenges; complete activities before solutions, revisit concepts, and participate in the Q&A to master ROS basics.
Set up your development environment by installing ROS on Ubuntu, selecting a ROS version, and running ROS for the first time, using a virtual machine if needed.
Choose your ROS distribution wisely, noting Noetic as the last official ROS 1 release and that ROS 2 was redeveloped from scratch.
Install Ubuntu 20.04 in a VirtualBox virtual machine on Windows, configure memory, CPU, and storage, install guest additions, enable full screen and clipboard sharing, then prepare a ROS-ready Ubuntu environment.
Install ROS Noetic on Ubuntu 20.04 by configuring sources, keys, and apt, choosing desktop-full or ros-base, then set up the environment in bashrc and start your first ROS program.
Launch your first ROS master with roscore, ensure the environment is set in bashrc, and understand that the master provides naming and registration services for all nodes.
Get ready to start programming with ROS; the installation is complete and future setup won’t take long. Launch a ROS master with roscore to proceed.
Learn to write and run your first ROS program by creating a workspace, building ROS packages and a ROS node in Python, then C++, and using common command line tools.
Learn to create a catkin workspace, understand catkin as the official ros build system, initialize the workspace with src and catkin_make, and source devel/setup.bash to enable ros in new sessions.
Create a ROS package to organize code into reusable blocks, specify dependencies like roscpp, rospy, and std_msgs, and generate build files with catkin make for testing and execution.
Define a ROS node as a computation process within a package-based robot application, where nodes communicate via topics, services, and parameters to form a fault-tolerant graph.
Create your first python ros node in a catkin package, initialize with rospy, log info, and run a ten hertz loop until shutdown after starting roscore.
Create your first C++ ros node with roscpp, initialize with ros::init, use a node handle and ten hertz ros::Rate, then build with catkin_make.
Start and manage ros nodes from the package using rosrun, and inspect them with rosnode list, rosnode info, and rosnode ping after launching roscore and the ros master.
Visualize the ros graph with rqt_graph by running rosrun rqt_graph Graph and observing rosout and rqt_gui_py_node. See how two nodes can exist without communicating.
Experiment on nodes with turtlesim teaches you to set up the ROS master, run turtlesim and teleop nodes, and inspect node communication using rosnode and rqt_graph.
Discover how ROS nodes are independent processes in a graph that communicate via tools, reducing code complexity and enabling catkin workspaces, packages, and nodes in Python and C++.
Explore ROS topics and communication features, learn what a topic is and when to use it, create a topic with Python and C++, and debug ROS topics.
Explore how Ros topics enable data streams between nodes, with publishers and subscribers exchanging messages of a common type via the Ros master.
Learn to create a Python publisher inside a catkin workspace to publish string messages on the robot news radio topic at a set rate.
Create a Python subscriber in ROS to listen to the robot news radio topic, initialize the smartphone node, and implement a callback that logs received messages.
Create a C++ publisher node in ROS that publishes string messages on the robot news radio topic at 3 hertz, paired with a subscriber in another node.
Create a c++ ros subscriber node that listens to the Robot News Radio topic with a queue size of 1000 and prints messages using rosinfo in a smartphone node.
Learn how anonymous nodes let you launch multiple publishers and subscribers on the same topic across Python and C++ in ros.
Visualize the ROS graph with rqt_graph to see which nodes publish or subscribe to the robot news radio topic, and use it to debug topic flows.
Launch the turtlesim node with rosrun, control movement via teleop turtle, inspect topics and rostopic info, publish geometry message twist via rostopic pub, and visualize data with rqt graph.
Publish integers on the number topic and build a counter node that subscribes to number, tallies values, and publishes the count on the number_count topic using int64 messages.
Publish and subscribe with ROS in Python by building a number publisher and a counter node that subscribes to the number topic and publishes to number_count.
Learn how to communicate between ROS nodes with topics, creating publishers and subscribers in Python or C++, ensuring matching message types, and organizing code into modular node components.
Explore ROS services as a client-server solution for asking questions and triggering actions, and learn how to implement them in Python and C++ and how to debug them.
Learn how ros services create a synchronous client-server workflow with a request and a response, enabling actions like led power and weather lookups across multiple clients.
Create a python service server in a ROS for Beginners course to compute sums: implement the add_two_ints service, handle requests, and test with rosservice, roscore, and rosrun.
Create a Python service client in ROS using rospy to wait for the add_two_ints service, call it, and handle the response and errors.
Create a complete c++ ros service server and client, advertise a two-integer add service, implement a callback, handle requests and responses, and test with catkin build and ros run.
Learn to debug ros services with command line tools, including ros service list, info, and call; launch roscore and inspect service servers and nodes.
Practices ros services with turtlesim by running roscore and turtlesim, calling services like reset and teleport relative or absolute, and observing immediate turtle movements across nodes.
Build a ros service server to reset the counter in the number counter node using the standard service set boolean, interfacing with the number topic and the number count topic.
Add a reset counter service using ROS standard SetBool with std_srvs to reset a global counter in the number counter node, including Python and C++ solutions.
Learn how ROS services enable node communication by creating a service server, advertising the service, and calling it from a client to compute a value or perform a quick action.
Learn to build complex robot applications by wiring ROS nodes inside packages to communicate via topics and services, and create custom message and service files.
Understand ROS message and service definitions, how topics differ from services, and how the Catkin build generates code from these definitions, with examples from std, geometry, and sensor messages.
Create a ROS message package, add roscpp, rospy, and std_msgs dependencies, define hardware status in msg folder with int64 temperature, boolean are motors up, and string debugging to enable headers.
Publish the hardware status of your robot with a ros node using the my robot messages package. Create hardware_status_publisher.py to publish on the my_robot hardware_status topic.
Create a custom ros srv to compute disk area, with a float64 radius request and a float64 area response. Update the CMakeLists and build with catkin_make to generate server code.
Learn to use ros topic, ros msg, and ros srv command line tools to list, show, and debug topics, messages, and services, including their definitions.
Create a ROS service with a new definition to control a led and return boolean, while simulating a battery cycling full to empty and printing the led state each second.
Define a set led service and implement a led panel and battery node in ros, using Python and C++ to manage a three-led array and service calls.
Create message and service definitions, build them, and use them in your own code. Recognize that Ros messages contain all the information sent over topics and services.
Explore ROS parameters and launch files, learn why they are useful, and practice creating and using your own parameters and launch files to build robot applications.
Launch the ROS master to create the parameter server, a global dictionary of parameters accessible from node, where you can read, modify, and create booleans, integers, doubles, strings, and lists.
Experiment with parameters using the rosparam command line tools, starting roscore, and learning to set, get, and list parameters like robot name, sensors read frequency, and simulation mode.
Learn how to read and set ros parameters from the parameter server in Python using rospy, configuring a number publisher's frequency and value without changing code.
Learn how to use ros parameters in c++ by reading with node handle get_param and writing with set_param, controlling number to publish and publish frequency without rebuilding.
Launch files streamline starting complex ROS apps by defining parameters and nodes in one file, enabling prefixes, conditionals, and combining multiple launches for varied startup modes.
Create a launch file to start all parameters and nodes, using a dedicated launch package and roslaunch to start the number publisher and the number counter.
Master ros parameters and launch files to share global variables across nodes and start the ros master and nodes with one command line, enabling development and debugging of robot applications.
Record and replay ros topics using rosbag to test robot behavior under specific conditions, then analyze results and test new code on your robot.
Explore writing ros code with object oriented programming in python and c++, using a class-based number counter node with publishers, subscribers, and a service server.
Compare a non-class and a class-based ROS number counter in C++, showing how the node handle creates publishers, subscribers, and a service server within a constructor.
create and manage multiple catkin workspaces to isolate robot projects, then source each workspace’s setup.bash in the correct order to switch between environments.
You learned to install ROS on Ubuntu, understand and use topics, services, messages, parameters, launch files, and command line tools in Python and C++.
Identify a personal ROS project to build a robot application, using simulations to explore mobile robots, robotic arms, and drones, and share ideas in the course Q&A.
Explore essential ROS resources to extend your learning, including the ROS wiki for tutorials, ROS Answers for troubleshooting, and ROS Discourse for community announcements and project showcases.
(Updated with ROS Noetic - This course is now valid for ROS Kinetic, ROS Melodic, and ROS Noetic)
Learning ROS is hard, and you know it. But why should it be that way?
There is a lack of structured resources for beginners. You can find some explanations and programming tutorials online about Robot Operating System, but they won’t really tell you which path to follow when you begin, where to go, what to focus on, etc.
That’s why I’ve created this course, that I wish I had when I begun. So you can learn ROS much faster than I did.
The goal of this course is to remove the big learning curve that you face when you start to learn ROS by yourself. I will show you, step by step, what you need to know to get started and master ROS basics.
This course is:
Structured in a way that is easy to follow for a beginner
Going through all ROS core concepts that you need, step by step
Going to the point. No useless and over-complicated stuff that you won’t use anyway.
Full of practice and challenges to make you progress faster
Now, why should you choose my course?
In the past I have developed a complete ROS software for an entire 6 axis robotic arm. I’m telling you that because by developing this robot, I learned (the hard way) what I really needed to know to build things that actually work.
My experience with ROS is not only about university work or a weekend hobby: I actually co-founded a business with a robot powered by ROS. By doing so, I had to focus on going to the point, finding what is useful, and what is not.
So today, with the practical vision that I’ve developed, I know exactly what you need to learn at the beginning if you want to get serious about building robotic applications.
What is this course about?
This course will guide you, step by step, through all the ROS core functionalities. We’ll focus on ROS basics, communication tools, and also on how to build a scalable application with Robot Operating System.
For each section, I will explain one concept in a way that is easy to understand, and then you will practice with me by writing, building, and running some code. I will show you what you need to pay attention to, what you need to focus on, and how to avoid common mistakes.
And, more importantly, I will give you some activities and challenges to make you practice on the concepts that you’ve just seen.
Note that all the code written in this course will be both in Python and C++, so you can decide to learn ROS with those 2 languages, or only one of them.
So.. Start your learning today and build awesome robotic applications with ROS !
After installing ROS on a Ubuntu OS, you will learn the following ROS key concepts :
Nodes
Topics
Services
Msg and Srv definitions
Parameters
Launch Files
And much more!
By mastering those concepts, you will be 100% ready to start any other robotic application and build complete software from scratch using Robot Operating System.
You will also learn how to :
Debug your program
Use command-line tools for each key concept
Build your application
Correctly set up and manage your project structure
And as I want to make you develop great (not just good, because “good” is not good enough) and scalable robotic applications, I will share with you the best practices that I’ve learned from my own experience.
UPDATE:
Note: this course targets the first version of ROS, or "ROS1". This is not a ROS2 course.
- Should you learn ROS1 or ROS2?
As of today, you should learn ROS2. ROS1 is not supported anymore and won't receive new official updates.
Now, having said that, lots of companies are still using ROS1 on legacy projects, and you might need to work with a ROS1 codebase at some point. If that's the case, then this course will help you.
Note that if you already know ROS1 or ROS2, switching to the other version won't be that hard, as most of the concepts are identical.