
Learn how ros2 control links an application, a hardware interface, and a controller manager to drive a robot, using a mock component to test command flow.
Assemble a ros2 workspace with a robot_description urdf for a mobile base, run the robot_state_publisher and joint_state_publisher, and examine tf frames like base footprint and base link.
Learn to configure ROS 2 control by creating a controller config and adding a joint state broadcaster to publish joint states from your urdf, wired to the controller_manager.
Learn to build a clean, pure c++ hardware driver for a dynamixel motor, and integrate it with ros2 via a separate hardware interface for reusable ros and non-ros projects.
Configure Dynamixel motors with Dynamixel Wizard 2.0, assign unique IDs (10 and 20), connect via OpenHAB 150, scan devices, and practice velocity and position control under ros2_control.
Test the driver by connecting to hardware, activating velocity and position modes, and validating motor responses in a ROS 2 node for hardware interfaces.
Create a new ros2 hardware package named my_robot_hardware, copy the driver into its include folder, and configure CMake and package.xml to depend on the Dynamixel SDK for ros2_control.
Configure a ROS 2 hardware interface plugin by editing package.xml and CMakeLists.txt, adding RCL, cpp, lifecycle, hardware_interface, plugin_lib, and Dynamixel SDK, then build and export the plugin description file.
Start the ros2_control stack with your hardware interface by loading the plugin in the urdf, then initialize, configure, and activate to drive the robot.
Practice debugging ROS 2 control with a custom hardware interface by enabling logs, printing command and state interfaces, and validating read and write loops to troubleshoot differential drive issues.
extend a mobile base with a robotic arm on top, using ros2 control, via a urdf, publish joint position commands, and configure hardware interfaces and controllers.
Add a ros2_control tag to the urdf for an arm with two joints, using a mock component and configuring position command and state interfaces.
Configure a forward command controller for the robotic arm using ros2_control, alongside the joint state broadcaster and existing controllers, with a simple two-joint setup and position interface.
Learn to combine Gazebo simulations with ros2 control, reusing mobile base and arm controllers through the Gazebo sim system and a Gazebo bridge for seamless hardware abstraction.
Learn how to build a custom controller for the ros2 control stack, replacing the forward command controller, and integrate it with hardware interfaces using a simple update algorithm.
Create a new ROS 2 controller package and header file to implement a plugin-based controller, defining the interface and lifecycle, plus a command subscriber and manager-driven binding to hardware.
Develop a ros2_control controller cpp file, implementing six lifecycle methods, parameter handling for joints and coefficient, and a joints command subscriber to update the interface state.
Build the controller as a plugin loaded by the controller manager at runtime, mirroring the hardware interface. Create the C++ plugin class and its controller plugin.xml.
You have learned ROS 2 and you’re now wondering: how can you make your ROS 2 application talk to your hardware? For this, you will need ros2_control.
And maybe you’ve already started to learn ros2_control but you feel lost?
Don’t worry, this is completely normal, and you found the right course for you. At the end of the course you will be able to adapt your own robot and hardware to ros2_control.
-- Why this course?
I remember when I first started to learn ros2_control. It was a real nightmare. Almost no online resources, bloated demo codes, and the documentation makes you feel that you can only understand ros2_control if you were the one writing the source code.
Thus, it takes a lot of trial and error to just be able to understand the basics. And this is if you’re already a good ROS developer.
I’ve been through that and after years of experience, I have created this course. The goal? To save you countless hours and make you learn ros2_control in the easiest way possible.
Instead of dropping you in a sea of documentation, I will guide you through all the steps, starting from scratch, and with hands-on lessons and projects. Also, since ros2_control means hardware, we will use real hardware for all the projects we do.
Warning: this course is not for ROS 2 beginners, you need to have good ROS 2 and C++ basics to get started.
-- How do I teach?
If you’ve taken other ROS 2 courses from me you know that I’m not here to waste your time.
My teaching method is simple:
Step by step
Going to the point
Learn while doing
Also I strongly focus on the “why” behind what you learn. The goal is not just to make you blindly repeat some steps, but to understand why those steps matter.
And don’t take my word for it - here are some reviews from fellow students/researchers/engineers/teachers who took my ROS 2 courses on Udemy:
“Best course on ROS2 I’ve taken! Other courses (different sites/platforms) made it confusing but this course makes it so clear and easy to understand while letting you try on your own. I am definitely learning a lot in a painless and simple way. I should have gotten this course from the beginning.” - Miguel Martinez G.
“Overall very satisfied. I’ve a strong background in programming, but at a higher level (web mostly) and the elegant, fluent and clean approach of this course has leveraged my introduction to the ROS environment in a short amount of time, without the struggle of going through a lot of documentation” - Devis D.
“This is the best course in ROS2 I’ve ever seen” - Aleksandar K.
“Great course content, straight to the point and very easy to follow” - Kevin M.
-- What will you do and learn in the course?
You will follow a progression line that allows you to learn one thing at a time, and to uncover all the components inside ros2_control in a way that doesn’t make you feel overwhelmed.
We will start from an existing URDF (which I will provide) and:
Set up a ros2_control pipeline using a mock component and existing controllers. You will adapt the URDF to ros2_control, provide controller parameters in a YAML file, and write a launch file to start everything.
Get best practices to write a clean C++ driver for any hardware, and learn how to integrate this driver inside a ROS 2 node.
Write a hardware interface for ros2_control.
Practice more with an additional project, in which you will combine a mobile base and a robotic arm.
Write a custom controller.
Each lesson is built on the previous ones to make learning easier.
I will focus on writing clean and minimal code all along the course, so you can download the code for each part and use it as a template for your own projects.
So, to learn ros2_control and save countless hours, wait no more and enroll in the course today!
You don’t take any risk as you get a 30-day money back guarantee if you’re not fully satisfied - no questions asked.
See you in the course!
Note - this course is not for you if:
You have never worked with ROS 2 before. There is no shortcut here, you first need to learn ROS 2.