The ros2_control framework is a real-time control framework designed for general robotics applications that is gaining increasing attention for both research and industrial purposes.
This comprehensive tutorial teaches the basic concepts of controlling a robot using ros2_control and EtherCAT.
Full documentation is available at: https://icube-robotics.github.io/ecat_ros2_workshop/
- ros2_control Overview
- Write a URDF description of a SCARA manipulator
- Launch and interact with the SCARA robot
- Write a custom hardware interface
- Write a custom controller
- Set up Gazebo simulation
- Control EtherCAT motor drives
Required setup: Ubuntu 24.04 LTS and ROS2 Jazzy
-
Install ROS2 Jazzy (installation guide)
-
Source your ROS2 environment:
source /opt/ros/jazzy/setup.bash -
Install colcon:
sudo apt install python3-colcon-common-extensions
-
Create and build workspace:
mkdir -p ~/ros2_ws/src cd ~/ros2_ws git clone https://github.com/ICube-Robotics/ecat_ros2_workshop.git src/ecat_ros2_workshop rosdep install --ignore-src --from-paths . -y -r colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release --symlink-install source install/setup.bash
For a containerized environment, see the Docker setup guide.
docker build --tag ecat_ros2_workshop:jazzy --file .docker/Dockerfile .
docker run ecat_ros2_workshop:jazzy ros2 launch scara_bringup scara.launch.pyecat_ros2_workshop/
├── scara_description/ # URDF and robot description files
├── scara_hardware/ # Custom hardware interface implementation
├── scara_controllers/ # Custom controller implementation
├── scara_bringup/ # Launch files and configurations
├── scara_nodes/ # Additional ROS2 nodes
├── docs/ # MkDocs documentation source
└── resources/ # Tutorial resources and images
Contributions are welcome! Please feel free to submit a Pull Request.
For bugs and feature requests, please open an issue on GitHub.
This project is open source. See the LICENSE file for details.
University of Strasbourg, France
Manuel Yguel - [email protected] | @yguel
Maciej Bednarczyk - [email protected] | @mcbed
For more information, see the full contacts page.


