diff --git a/.docker/Dockerfile b/.docker/Dockerfile
index aa2d315..5df86ac 100644
--- a/.docker/Dockerfile
+++ b/.docker/Dockerfile
@@ -1,11 +1,11 @@
ARG ROS_DISTRO="jazzy"
FROM ros:${ROS_DISTRO}
-COPY . /ros2_dev/scara_tutorial_ros2
+COPY . /ros2_dev/ecat_ros2_workshop
RUN apt update && apt upgrade -y
RUN cd ros2_dev && \
apt update && \
- cd scara_tutorial_ros2 && \
+ cd ecat_ros2_workshop && \
. /opt/ros/${ROS_DISTRO}/setup.sh && \
rosdep install --ignore-src --from-paths . -y -r && \
colcon build --symlink-install
diff --git a/.docker/Dockerfile_novnc b/.docker/Dockerfile_novnc
index 30aeedb..57d9db8 100644
--- a/.docker/Dockerfile_novnc
+++ b/.docker/Dockerfile_novnc
@@ -1,5 +1,5 @@
ARG ROS_DISTRO="jazzy"
-FROM scara_tutorial_ros2:${ROS_DISTRO}
+FROM ecat_ros2_workshop:${ROS_DISTRO}
RUN apt update
RUN DEBIAN_FRONTEND=noninteractive apt-get install -qqy \
diff --git a/.docker/README.md b/.docker/README.md
index 8f8b043..1d20471 100644
--- a/.docker/README.md
+++ b/.docker/README.md
@@ -4,26 +4,26 @@ Provides a basic preconfigured docker container for tutorial purposes.
To use it, make sure you have [Docker](https://docs.docker.com/get-docker/) installed, then build and run the image :
```shell
-$ docker build --tag scara_tutorial_ros2:jazzy --file .docker/Dockerfile .
-$ docker run scara_tutorial_ros2:jazzy ros2 launch scara_bringup scara.launch.py
+$ docker build --tag ecat_ros2_workshop:jazzy --file .docker/Dockerfile .
+$ docker run ecat_ros2_workshop:jazzy ros2 launch scara_bringup scara.launch.py
```
### Run with GUI
To run the docker image with GUI, use the [rocker tool](https://github.com/osrf/rocker):
```shell
$ sudo apt install python3-rocker
-$ rocker --net=host --x11 --devices /dev/dri --user scara_tutorial_ros2:jazzy ros2 launch scara_bringup scara.launch.py
+$ rocker --net=host --x11 --devices /dev/dri --user ecat_ros2_workshop:jazzy ros2 launch scara_bringup scara.launch.py
```
### Run with noVNC
-To run the docker image with noVNC, make sure that `scara_tutorial_ros2:jazzy` is built then build and run the novnc docker :
+To run the docker image with noVNC, make sure that `ecat_ros2_workshop:jazzy` is built then build and run the novnc docker :
```shell
-$ docker build --tag scara_tutorial_ros2:jazzy_novnc --file .docker/Dockerfile_novnc .
-$ docker run --rm -p 6080:6080 -it scara_tutorial_ros2:jazzy_novnc
+$ docker build --tag ecat_ros2_workshop:jazzy_novnc --file .docker/Dockerfile_novnc .
+$ docker run --rm -p 6080:6080 -it ecat_ros2_workshop:jazzy_novnc
```
Then open your browser and navigate to `http://localhost:6080/vnc.html` to access the desktop environment. Inside the noVNC session, you can open a terminal and run:
```shell
-$ cd ros2_dev/scara_tutorial_ros2/
+$ cd ros2_dev/ecat_ros2_workshop/
$ source install/setup.bash
$ ros2 launch scara_bringup scara.launch.py
```
@@ -33,12 +33,12 @@ $ ros2 launch scara_bringup scara.launch.py
### Run with bash
To interact with the environment, run docker using:
```shell
-$ docker run -it scara_tutorial_ros2:jazzy
+$ docker run -it ecat_ros2_workshop:jazzy
```
and inside docker run:
```shell
-$ cd ros2_dev/scara_tutorial_ros2/
+$ cd ros2_dev/ecat_ros2_workshop/
$ source install/setup.bash
$ ros2 launch scara_bringup scara.launch.py
```
-The `scara_tutorial_ros2` nodes should now be running.
\ No newline at end of file
+The `ecat_ros2_workshop` nodes should now be running.
\ No newline at end of file
diff --git a/.docker/ros_entrypoint.sh b/.docker/ros_entrypoint.sh
index 1fe5d7b..9fe3f2f 100644
--- a/.docker/ros_entrypoint.sh
+++ b/.docker/ros_entrypoint.sh
@@ -4,5 +4,5 @@ set -e
# setup ros environment
# export ROS_LOCALHOST_ONLY=1
source "/opt/ros/$ROS_DISTRO/setup.bash"
-source "/ros2_dev/scara_tutorial_ros2/install/setup.bash"
+source "/ros2_dev/ecat_ros2_workshop/install/setup.bash"
exec "$@"
\ No newline at end of file
diff --git a/.docker/ros_entrypoint_novnc.sh b/.docker/ros_entrypoint_novnc.sh
index fb4e09d..039a60b 100644
--- a/.docker/ros_entrypoint_novnc.sh
+++ b/.docker/ros_entrypoint_novnc.sh
@@ -15,5 +15,5 @@ set -e
# setup ros environment
# export ROS_LOCALHOST_ONLY=1
source "/opt/ros/$ROS_DISTRO/setup.bash"
-source "/ros2_dev/scara_tutorial_ros2/install/setup.bash"
+source "/ros2_dev/ecat_ros2_workshop/install/setup.bash"
exec "$@"
\ No newline at end of file
diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml
new file mode 100644
index 0000000..a728d76
--- /dev/null
+++ b/.github/workflows/deploy-docs.yml
@@ -0,0 +1,59 @@
+name: Documentation
+
+# Controls when the workflow will run
+on:
+ # Triggers the workflow on push events but only for the main branch
+ push:
+ branches: [ main ]
+
+ # Triggers the workflow on pull request events
+ pull_request:
+ branches: [ main ]
+
+ # Allows you to run this workflow manually from the Actions tab
+ workflow_dispatch:
+
+# A workflow run is made up of one or more jobs that can run sequentially or in parallel
+jobs:
+ # This workflow contains a single job called "build_documentation"
+ build_documentation:
+ # The type of runner that the job will run on
+ runs-on: ubuntu-latest
+
+ # Steps represent a sequence of tasks that will be executed as part of the job
+ steps:
+ # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+ - uses: actions/checkout@v4
+
+ - name: Setup Python
+ uses: actions/setup-python@v5
+ with:
+ python-version: '3.x'
+
+ - name: Install dependencies
+ run: |
+ pip install --upgrade pip
+ pip install -r docs/requirements.txt
+
+ - name: Build documentation
+ run: |
+ mkdocs build --config-file docs/mkdocs.yml
+
+ - name: Create commit
+ if: github.event_name == 'push' && github.ref == 'refs/heads/main'
+ run: |
+ git clone https://github.com/ICube-Robotics/ecat_ros2_workshop.git --branch gh-pages --single-branch gh-pages
+ cp -r docs/site/* gh-pages/
+ cd gh-pages
+ git config --local user.email "action@github.com"
+ git config --local user.name "GitHub Action"
+ git add .
+ git commit -m "Update documentation" -a || true
+
+ - name: Push changes
+ if: github.event_name == 'push' && github.ref == 'refs/heads/main'
+ uses: ad-m/github-push-action@master
+ with:
+ branch: gh-pages
+ directory: gh-pages
+ github_token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/README.md b/README.md
index 372bd04..b39ae60 100644
--- a/README.md
+++ b/README.md
@@ -1,50 +1,112 @@
-# Scara tutorial ROS2
-The [ros2_control](https://control.ros.org) framework is a realtime control framework designed for general robotics applications that gains more and more attention both for research and industrial purposes. An overview of the ros2_control framework can be found [here](resources/r2c_overview.md).
-
-This tutorial is made to understand the basic concepts of controlling a robot using ros2_control. In particular, it describes how to :
-- [Write a URDF description of a simple SCARA manipulator](resources/urdf_tutorial.md)
-- [Launch and interact with the SCARA robot](resources/launch_tutorial.md)
-- [Write a custom hardware interface for the SCARA robot](resources/hardware_tutorial.md)
-- [Write a custom controller for the SCARA robot](resources/controller_tutorial.md)
-- [Set up the SCARA manipulator to run with ros2_control and Gazebo](resources/gazebo_tutorial.md)
-
-
-
-## Getting Started
-***Required setup : Ubuntu 24.04 LTS and ROS2 Jazzy***
-
-1. Install `ros2` packages. The current development is based on `ros2 jazzy`. Installation steps are described [here](https://docs.ros.org/en/jazzy/Installation.html).
-2. Source your `ros2` environment:
- ```shell
- source /opt/ros/jazzy/setup.bash
- ```
- **NOTE**: The ros2 environment needs to be sourced in every used terminal. If only one distribution of ros2 is used, it can be added to the `~/.bashrc` file.
-3. Install `colcon` and its extensions :
- ```shell
- sudo apt install python3-colcon-common-extensions
- ```
-3. Create a new ros2 workspace:
- ```shell
- mkdir ~/ros2_ws/src
- ```
-4. Pull relevant packages, install dependencies, compile, and source the workspace by using:
- ```shell
- cd ~/ros2_ws
- git clone https://github.com/ICube-Robotics/scara_tutorial_ros2.git src/scara_tutorial_ros2
- rosdep install --ignore-src --from-paths . -y -r
- colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release --symlink-install
- source install/setup.bash
- ```
-
-## Docker Setup (Alternative)
-For a containerized setup, see the [Docker README](.docker/README.md) for instructions on building and running the tutorial in a Docker container with ROS2 Jazzy.
-
-## Acknowledgments
-This tutorial is partially inspired from [pac48](https://github.com/pac48/ros2_control_demos/tree/full-example-tutorial)'s tutorial and the official [ros2_control website](https://control.ros.org).
-
-## Contacts ##
-
-
-[ICube Laboratory](https://icube.unistra.fr), [University of Strasbourg](https://www.unistra.fr/), France
-
-__Maciej Bednarczyk:__ [mcbed.robotics@gmail.com](mailto:mcbed.robotics@gmail.com), @github: [mcbed](https://github.com/mcbed)
\ No newline at end of file
+# SCARA ROS2 EtherCAT Workshop
+
+[](https://icube-robotics.github.io/ecat_ros2_workshop/)
+[](https://docs.ros.org/en/jazzy/)
+[](LICENSE)
+
+The [ros2_control](https://control.ros.org) 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.
+
+## π Documentation
+
+**Full documentation is available at: [https://icube-robotics.github.io/ecat_ros2_workshop/](https://icube-robotics.github.io/ecat_ros2_workshop/)**
+
+## π Tutorial Contents
+
+- [ros2_control Overview](https://icube-robotics.github.io/ecat_ros2_workshop/tutorials/r2c_overview/)
+- [Write a URDF description of a SCARA manipulator](https://icube-robotics.github.io/ecat_ros2_workshop/tutorials/urdf_tutorial/)
+- [Launch and interact with the SCARA robot](https://icube-robotics.github.io/ecat_ros2_workshop/tutorials/launch_tutorial/)
+- [Write a custom hardware interface](https://icube-robotics.github.io/ecat_ros2_workshop/tutorials/hardware_tutorial/)
+- [Write a custom controller](https://icube-robotics.github.io/ecat_ros2_workshop/tutorials/controller_tutorial/)
+- [Set up Gazebo simulation](https://icube-robotics.github.io/ecat_ros2_workshop/tutorials/gazebo_tutorial/)
+- [Control EtherCAT motor drives](https://icube-robotics.github.io/ecat_ros2_workshop/tutorials/ethercat_tutorial/)
+
+
+
+
+## π Quick Start
+
+**_Required setup: Ubuntu 24.04 LTS and ROS2 Jazzy_**
+
+### Installation
+
+1. Install ROS2 Jazzy ([installation guide](https://icube-robotics.github.io/ecat_ros2_workshop/getting-started/installation/))
+
+2. Source your ROS2 environment:
+ ```bash
+ source /opt/ros/jazzy/setup.bash
+ ```
+
+3. Install colcon:
+ ```bash
+ sudo apt install python3-colcon-common-extensions
+ ```
+
+4. Create and build workspace:
+ ```bash
+ 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
+ ```
+
+### Docker Setup (Alternative)
+
+For a containerized environment, see the [Docker setup guide](https://icube-robotics.github.io/ecat_ros2_workshop/getting-started/docker/).
+
+```bash
+docker build --tag ecat_ros2_workshop:jazzy --file .docker/Dockerfile .
+docker run ecat_ros2_workshop:jazzy ros2 launch scara_bringup scara.launch.py
+```
+
+## π¦ Repository Structure
+
+```
+ecat_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
+```
+
+## π€ Contributing
+
+Contributions are welcome! Please feel free to submit a Pull Request.
+
+For bugs and feature requests, please open an issue on [GitHub](https://github.com/ICube-Robotics/ecat_ros2_workshop/issues).
+
+## π License
+
+This project is open source. See the [LICENSE](LICENSE) file for details.
+
+
+## π₯ Contacts & Maintainers
+
+### [ICube Laboratory](https://icube.unistra.fr)
+[University of Strasbourg](https://www.unistra.fr/), France
+
+**Manuel Yguel** - [yguel@unistra.fr](mailto:yguel@unistra.fr) | [@yguel](https://github.com/yguel)
+
+### [Asterion Robotics](https://asterion-robotics.com)
+
+**Maciej Bednarczyk** - [m.bednarczyk@asterion-robotics.com](mailto:m.bednarczyk@asterion-robotics.com) | [@mcbed](https://github.com/mcbed)
+
+For more information, see the [full contacts page](https://icube-robotics.github.io/ecat_ros2_workshop/about/contacts/).
+
+---
+
+
+
+[](https://icube.unistra.fr)
+
+[](https://asterion-robotics.com)
+
+**Made with β€οΈ by ICube Laboratory and Asterion Robotics**
+
+
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 0000000..5341b7a
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,122 @@
+# Documentation Development
+
+This directory contains the source files for the MkDocs-based documentation site.
+
+## Local Development
+
+### Prerequisites
+
+Install the required Python packages:
+
+```bash
+pip install -r requirements.txt
+```
+
+### Preview the Documentation
+
+To preview the documentation locally:
+
+```bash
+mkdocs serve
+```
+
+Then open your browser to `http://127.0.0.1:8000/`
+
+The site will automatically reload when you make changes to the documentation files.
+
+### Build the Site
+
+To build the static site:
+
+```bash
+mkdocs build
+```
+
+The built site will be in the `site/` directory.
+
+## Structure
+
+```
+docs/
+βββ index.md # Home page
+βββ getting-started/
+β βββ installation.md # Installation guide
+β βββ docker.md # Docker setup
+βββ tutorials/
+β βββ r2c_overview.md # ros2_control overview
+β βββ urdf_tutorial.md # URDF description
+β βββ launch_tutorial.md # Launch & interaction
+β βββ hardware_tutorial.md # Hardware interface
+β βββ controller_tutorial.md # Controller development
+β βββ gazebo_tutorial.md # Gazebo simulation
+β βββ ethercat_tutorial.md # EtherCAT integration
+βββ about/
+β βββ contacts.md # Contact information
+βββ images/ # Image assets
+```
+
+## Adding Content
+
+### Adding a New Page
+
+1. Create a new Markdown file in the appropriate directory
+2. Add the page to the navigation in `mkdocs.yml`
+3. Preview your changes with `mkdocs serve`
+
+### Adding Images
+
+Place images in `docs/images/` and reference them using relative paths:
+
+```markdown
+
+```
+
+### Using Admonitions
+
+```markdown
+!!! note "Optional Title"
+ This is a note admonition.
+
+!!! tip
+ This is a tip.
+
+!!! warning
+ This is a warning.
+
+!!! info
+ This is an info box.
+```
+
+### Code Blocks
+
+Use fenced code blocks with language specification:
+
+````markdown
+```python
+def hello_world():
+ print("Hello, World!")
+```
+````
+
+## Deployment
+
+The documentation is automatically deployed to GitHub Pages when changes are pushed to the `main` branch.
+
+The deployment is handled by the GitHub Actions workflow in `.github/workflows/deploy-docs.yml`.
+
+## Theme
+
+The documentation uses the [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/) theme with:
+
+- Dark/light mode toggle
+- Blue primary and accent colors
+- Navigation tabs and sections
+- Search functionality
+- Code syntax highlighting
+- Responsive design
+
+## Useful Links
+
+- [MkDocs Documentation](https://www.mkdocs.org/)
+- [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/)
+- [Markdown Guide](https://www.markdownguide.org/)
diff --git a/docs/about/contacts.md b/docs/about/contacts.md
new file mode 100644
index 0000000..1fdbf3c
--- /dev/null
+++ b/docs/about/contacts.md
@@ -0,0 +1,123 @@
+# Contacts
+
+## Maintainers
+
+This project is maintained by the ICube Laboratory at the University of Strasbourg and Asterion Robotics.
+
+---
+
+## ICube Laboratory
+
+
+
+[{ width="300" }](https://asterion-robotics.com)
+
+**[Asterion Robotics](https://asterion-robotics.com)**
+Industrial Robotics Solutions
+
+Asterion Robotics provides cutting-edge robotics solutions for industrial applications, with a focus on advanced control systems and EtherCAT integration.
+
+### Team Member
+
+**Maciej Bednarczyk**
+
+- **Email**: [m.bednarczyk@asterion-robotics.com](mailto:m.bednarczyk@asterion-robotics.com)
+- **GitHub**: [@mcbed](https://github.com/mcbed)
+- **Role**: Robotics Engineer
+
+
+
+---
+
+## Contributing
+
+We welcome contributions to this workshop! If you'd like to contribute:
+
+1. **Fork the repository** on [GitHub](https://github.com/ICube-Robotics/ecat_ros2_workshop)
+2. **Create a feature branch**: `git checkout -b feature/my-feature`
+3. **Commit your changes**: `git commit -am 'Add my feature'`
+4. **Push to the branch**: `git push origin feature/my-feature`
+5. **Submit a pull request**
+
+### Reporting Issues
+
+Found a bug or have a suggestion? Please open an issue on our [GitHub repository](https://github.com/ICube-Robotics/ecat_ros2_workshop/issues).
+
+When reporting issues, please include:
+
+- Your operating system and ROS2 version
+- Steps to reproduce the issue
+- Expected vs actual behavior
+- Any relevant error messages or logs
+
+---
+
+## Support
+
+### Getting Help
+
+If you need help with the workshop:
+
+1. **Check the documentation** - Most common questions are answered in the tutorials
+2. **Search existing issues** on [GitHub](https://github.com/ICube-Robotics/ecat_ros2_workshop/issues)
+3. **Ask on ROS Discourse** - [discourse.ros.org](https://discourse.ros.org/)
+4. **Contact the maintainers** using the emails above
+
+### Community
+
+Join the ROS2 community:
+
+- **ROS Discourse**: [discourse.ros.org](https://discourse.ros.org/)
+- **ROS Answers**: [answers.ros.org](https://answers.ros.org/)
+- **ros2_control GitHub**: [github.com/ros-controls](https://github.com/ros-controls)
+
+---
+
+## Acknowledgments
+
+This workshop is based on the excellent work of the ROS2 and ros2_control communities. We'd like to thank:
+
+- The [ros2_control](https://control.ros.org) team for the framework
+- The [ethercat_driver_ros2](https://github.com/ICube-Robotics/ethercat_driver_ros2) contributors
+- The ROS2 community for continuous support and feedback
+
+---
+
+## License
+
+This project is open source. Check the [LICENSE](https://github.com/ICube-Robotics/ecat_ros2_workshop/blob/main/LICENSE) file in the repository for details.
+
+---
+
+
+
+
+### Questions?
+
+Feel free to reach out to any of the maintainers above!
+
+
+
diff --git a/docs/getting-started/docker.md b/docs/getting-started/docker.md
new file mode 100644
index 0000000..72c6204
--- /dev/null
+++ b/docs/getting-started/docker.md
@@ -0,0 +1,281 @@
+# Docker Setup
+
+Docker provides an isolated, pre-configured environment for running the SCARA ROS2 EtherCAT Workshop without modifying your host system.
+
+## Prerequisites
+
+!!! info "Requirements"
+ - [Docker](https://docs.docker.com/get-docker/) installed on your system
+ - At least 8 GB of disk space
+ - (Optional) [rocker](https://github.com/osrf/rocker) for GUI support
+
+## Quick Start
+
+### Basic Docker Setup
+
+1. **Clone the repository** (if you haven't already):
+
+```bash
+git clone https://github.com/ICube-Robotics/ecat_ros2_workshop.git
+cd ecat_ros2_workshop
+```
+
+2. **Build the Docker image**:
+
+```bash
+docker build --tag ecat_ros2_workshop:jazzy --file .docker/Dockerfile .
+```
+
+!!! note "Build Time"
+ The first build may take 10-20 minutes depending on your internet connection and system performance.
+
+3. **Run the container**:
+
+```bash
+docker run ecat_ros2_workshop:jazzy ros2 launch scara_bringup scara.launch.py
+```
+
+## Running with GUI
+
+### Option 1: Using Rocker (Recommended)
+
+[Rocker](https://github.com/osrf/rocker) provides seamless X11 forwarding and device access.
+
+1. **Install rocker**:
+
+```bash
+sudo apt update
+sudo apt install python3-rocker
+```
+
+2. **Run with GUI support**:
+
+```bash
+rocker --net=host --x11 --devices /dev/dri --user ecat_ros2_workshop:jazzy ros2 launch scara_bringup scara.launch.py
+```
+
+!!! info "Rocker Options"
+ - `--net=host`: Uses host networking for ROS2 communication
+ - `--x11`: Enables X11 forwarding for GUI applications
+ - `--devices /dev/dri`: Mounts Direct Rendering Infrastructure for hardware-accelerated graphics (Intel GPUs)
+ - `--user`: Runs as non-root user for better security
+
+### Option 2: Using noVNC (Web-Based)
+
+noVNC provides a web-based VNC client accessible through your browser - no X11 configuration needed!
+
+1. **Build the noVNC image**:
+
+```bash
+# First ensure the base image is built
+docker build --tag ecat_ros2_workshop:jazzy --file .docker/Dockerfile .
+
+# Build the noVNC image
+docker build --tag ecat_ros2_workshop:jazzy_novnc --file .docker/Dockerfile_novnc .
+```
+
+2. **Run the noVNC container**:
+
+```bash
+docker run --rm -p 6080:6080 -it ecat_ros2_workshop:jazzy_novnc
+```
+
+3. **Access the desktop**:
+
+Open your web browser and navigate to:
+```
+http://localhost:6080/vnc.html
+```
+
+4. **Inside the noVNC session**, open a terminal and run:
+
+```bash
+cd ros2_dev/ecat_ros2_workshop/
+source install/setup.bash
+ros2 launch scara_bringup scara.launch.py
+```
+
+!!! tip "Browser Compatibility"
+ noVNC works best with modern browsers (Chrome, Firefox, Edge). For optimal performance, use a desktop browser rather than mobile.
+
+## Interactive Shell
+
+To explore and interact with the environment:
+
+```bash
+docker run -it ecat_ros2_workshop:jazzy
+```
+
+Inside the container:
+
+```bash
+cd ros2_dev/ecat_ros2_workshop/
+source install/setup.bash
+
+# Now you can run any ROS2 commands
+ros2 launch scara_bringup scara.launch.py
+ros2 topic list
+ros2 control list_controllers
+```
+
+## Development Workflow
+
+### Mounting Local Code
+
+To develop code on your host and run it in the container:
+
+```bash
+docker run -it \
+ -v $(pwd):/workspace \
+ -w /workspace \
+ ecat_ros2_workshop:jazzy \
+ bash
+```
+
+Inside the container:
+
+```bash
+# Rebuild after changes
+colcon build
+source install/setup.bash
+ros2 launch scara_bringup scara.launch.py
+```
+
+### Persistent Container
+
+Create a named container to preserve your changes:
+
+```bash
+# Create and start the container
+docker run -it --name scara_dev ecat_ros2_workshop:jazzy bash
+
+# Later, restart and attach to the same container
+docker start scara_dev
+docker attach scara_dev
+```
+
+## Hardware Acceleration
+
+### NVIDIA GPU Support
+
+For NVIDIA GPU support, use the NVIDIA Container Toolkit:
+
+```bash
+# Install NVIDIA Container Toolkit
+distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
+curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
+curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
+ sudo tee /etc/apt/sources.list.d/nvidia-docker.list
+
+sudo apt update
+sudo apt install -y nvidia-container-toolkit
+sudo systemctl restart docker
+
+# Run with GPU support
+docker run --gpus all -it ecat_ros2_workshop:jazzy
+```
+
+### Intel Integrated Graphics
+
+For Intel integrated graphics (already included in rocker command):
+
+```bash
+rocker --devices /dev/dri ecat_ros2_workshop:jazzy
+```
+
+## Docker Compose (Advanced)
+
+For more complex setups, create a `docker-compose.yml`:
+
+```yaml
+version: '3.8'
+
+services:
+ scara_workshop:
+ image: ecat_ros2_workshop:jazzy
+ container_name: scara_workshop
+ stdin_open: true
+ tty: true
+ network_mode: host
+ environment:
+ - DISPLAY=${DISPLAY}
+ - QT_X11_NO_MITSHM=1
+ volumes:
+ - /tmp/.X11-unix:/tmp/.X11-unix:rw
+ - ./:/workspace
+ devices:
+ - /dev/dri:/dev/dri
+ command: bash
+```
+
+Run with:
+
+```bash
+xhost +local:docker
+docker-compose up
+```
+
+## Troubleshooting
+
+### Display Issues
+
+If you encounter display errors with rocker:
+
+```bash
+# Allow Docker to connect to X server
+xhost +local:docker
+
+# Run rocker again
+rocker --x11 ecat_ros2_workshop:jazzy
+```
+
+### Network Issues
+
+If ROS2 nodes can't communicate:
+
+```bash
+# Use host networking
+docker run --net=host -it ecat_ros2_workshop:jazzy
+```
+
+### Permission Denied
+
+If you get permission errors:
+
+```bash
+# Add your user to docker group
+sudo usermod -aG docker $USER
+
+# Log out and back in for changes to take effect
+```
+
+### Container Size
+
+To check Docker disk usage:
+
+```bash
+docker system df
+
+# Clean up unused containers and images
+docker system prune -a
+```
+
+## Comparison: Docker Methods
+
+| Method | Pros | Cons | Best For |
+|--------|------|------|----------|
+| **Basic** | Simple, fast | No GUI | Headless testing |
+| **Rocker** | Native performance, hardware acceleration | Requires X11 setup | Local development |
+| **noVNC** | Works anywhere, no X11 needed | Slight latency | Remote access, web-based |
+
+## Next Steps
+
+Now that you have Docker set up:
+
+- Continue with the [ros2_control Overview](../tutorials/r2c_overview.md)
+- Try running the tutorials inside Docker
+- Explore the [URDF Tutorial](../tutorials/urdf_tutorial.md)
+
+---
+
+**Tip**: Docker is great for trying things out, but for serious development, consider a [native installation](installation.md) for better performance.
diff --git a/docs/getting-started/installation.md b/docs/getting-started/installation.md
new file mode 100644
index 0000000..fa31551
--- /dev/null
+++ b/docs/getting-started/installation.md
@@ -0,0 +1,188 @@
+# Installation Guide
+
+This guide will walk you through setting up the SCARA ROS2 EtherCAT Workshop on your system.
+
+## System Requirements
+
+!!! info "Required Setup"
+ - **Operating System**: Ubuntu 24.04 LTS
+ - **ROS Distribution**: ROS2 Jazzy
+ - **Disk Space**: ~5 GB free space
+ - **Memory**: 4 GB RAM minimum (8 GB recommended)
+
+## Step-by-Step Installation
+
+### 1. Install ROS2 Jazzy
+
+Follow the official ROS2 installation instructions for Ubuntu 24.04:
+
+```bash
+# Add ROS2 apt repository
+sudo apt install software-properties-common
+sudo add-apt-repository universe
+sudo apt update && sudo apt install curl -y
+
+sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
+
+echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
+
+# Install ROS2 Jazzy Desktop
+sudo apt update
+sudo apt install ros-jazzy-desktop -y
+```
+
+For detailed instructions, visit the [official ROS2 documentation](https://docs.ros.org/en/jazzy/Installation.html).
+
+### 2. Source ROS2 Environment
+
+After installation, source your ROS2 environment:
+
+```bash
+source /opt/ros/jazzy/setup.bash
+```
+
+!!! tip "Auto-sourcing"
+ If you're only using ROS2 Jazzy, add the source command to your `~/.bashrc` file:
+ ```bash
+ echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc
+ ```
+
+### 3. Install Colcon
+
+Colcon is the build tool for ROS2 workspaces:
+
+```bash
+sudo apt install python3-colcon-common-extensions
+```
+
+### 4. Create a ROS2 Workspace
+
+Create a workspace directory for the tutorial:
+
+```bash
+mkdir -p ~/ros2_ws/src
+cd ~/ros2_ws
+```
+
+### 5. Clone the Repository
+
+Clone the workshop repository into your workspace:
+
+```bash
+cd ~/ros2_ws/src
+git clone https://github.com/ICube-Robotics/ecat_ros2_workshop.git
+```
+
+### 6. Install Dependencies
+
+Use `rosdep` to install all required dependencies:
+
+```bash
+cd ~/ros2_ws
+sudo apt update
+rosdep update
+rosdep install --from-paths src --ignore-src -y -r
+```
+
+!!! note
+ If this is your first time using `rosdep`, you may need to initialize it:
+ ```bash
+ sudo rosdep init
+ rosdep update
+ ```
+
+### 7. Build the Workspace
+
+Build the workspace using colcon:
+
+```bash
+cd ~/ros2_ws
+colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release --symlink-install
+```
+
+!!! tip "Build Options"
+ - `--cmake-args -DCMAKE_BUILD_TYPE=Release`: Optimizes the build for performance
+ - `--symlink-install`: Creates symbolic links instead of copying files (useful during development)
+
+### 8. Source the Workspace
+
+After building, source the workspace:
+
+```bash
+source ~/ros2_ws/install/setup.bash
+```
+
+!!! tip "Auto-sourcing Workspace"
+ Add this to your `~/.bashrc` for automatic sourcing:
+ ```bash
+ echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc
+ ```
+
+## Verify Installation
+
+Test that everything is installed correctly:
+
+```bash
+# Check if packages are available
+ros2 pkg list | grep scara
+
+# Launch the SCARA robot (should open RViz2)
+ros2 launch scara_bringup scara.launch.py
+```
+
+If RViz2 opens with the SCARA robot displayed, your installation is successful! π
+
+## Troubleshooting
+
+### Common Issues
+
+#### Missing Dependencies
+
+If you encounter missing dependencies during build:
+
+```bash
+cd ~/ros2_ws
+rosdep install --from-paths src --ignore-src -y -r --rosdistro jazzy
+```
+
+#### Build Errors
+
+If the build fails, try cleaning the workspace and rebuilding:
+
+```bash
+cd ~/ros2_ws
+rm -rf build install log
+colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release --symlink-install
+```
+
+#### RViz2 Not Opening
+
+If RViz2 doesn't open or displays errors:
+
+```bash
+# Install RViz2 if missing
+sudo apt install ros-jazzy-rviz2
+
+# Check OpenGL support
+glxinfo | grep "OpenGL"
+```
+
+### Getting Help
+
+If you're still experiencing issues:
+
+1. Check the [GitHub Issues](https://github.com/ICube-Robotics/ecat_ros2_workshop/issues)
+2. Review the [ROS2 troubleshooting guide](https://docs.ros.org/en/jazzy/Troubleshooting.html)
+3. Contact the maintainers (see [Contacts](../about/contacts.md))
+
+## Next Steps
+
+Now that your environment is set up, you can:
+
+- Try the [Docker setup](docker.md) as an alternative installation method
+- Start with the [ros2_control Overview](../tutorials/r2c_overview.md)
+- Jump into the [URDF Tutorial](../tutorials/urdf_tutorial.md)
+
+---
+
+Ready to start? [Begin with the ros2_control Overview :material-arrow-right:](../tutorials/r2c_overview.md){ .md-button .md-button--primary }
diff --git a/docs/images/r2c_architecture.png b/docs/images/r2c_architecture.png
new file mode 100644
index 0000000..b701226
Binary files /dev/null and b/docs/images/r2c_architecture.png differ
diff --git a/docs/images/r2c_cm.png b/docs/images/r2c_cm.png
new file mode 100644
index 0000000..aa71063
Binary files /dev/null and b/docs/images/r2c_cm.png differ
diff --git a/docs/images/r2c_overview.png b/docs/images/r2c_overview.png
new file mode 100644
index 0000000..aee4eb4
Binary files /dev/null and b/docs/images/r2c_overview.png differ
diff --git a/docs/images/scara_gazebo.png b/docs/images/scara_gazebo.png
new file mode 100644
index 0000000..05619b4
Binary files /dev/null and b/docs/images/scara_gazebo.png differ
diff --git a/docs/images/scara_model.png b/docs/images/scara_model.png
new file mode 100644
index 0000000..bbccb98
Binary files /dev/null and b/docs/images/scara_model.png differ
diff --git a/docs/images/scara_rviz.png b/docs/images/scara_rviz.png
new file mode 100644
index 0000000..971e9ee
Binary files /dev/null and b/docs/images/scara_rviz.png differ
diff --git a/docs/images/scara_rviz_empty.png b/docs/images/scara_rviz_empty.png
new file mode 100644
index 0000000..c48aa98
Binary files /dev/null and b/docs/images/scara_rviz_empty.png differ
diff --git a/docs/images/scara_tf.png b/docs/images/scara_tf.png
new file mode 100644
index 0000000..4e2015e
Binary files /dev/null and b/docs/images/scara_tf.png differ
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 0000000..98ee465
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1,134 @@
+# SCARA ROS2 EtherCAT Workshop
+
+Welcome to the **SCARA ROS2 EtherCAT Workshop**! This comprehensive tutorial will guide you through the fundamentals of controlling robotic systems using the [ros2_control](https://control.ros.org) framework and EtherCAT communication.
+
+
+
+## Overview
+
+The [ros2_control](https://control.ros.org) framework is a real-time control framework designed for general robotics applications that is gaining increasing attention in both research and industrial contexts. This tutorial is designed to help you understand the basic concepts of controlling a robot using ros2_control and EtherCAT.
+
+## What You'll Learn
+
+This workshop covers the following topics:
+
+
+
+- :material-cube-outline: **URDF Description**
+
+ ---
+
+ Learn how to write a complete URDF description for a simple SCARA manipulator, including geometry, dynamics, and ros2_control interfaces.
+
+ [:octicons-arrow-right-24: URDF Tutorial](tutorials/urdf_tutorial.md)
+
+- :material-rocket-launch: **Launch & Interact**
+
+ ---
+
+ Discover how to launch your robot system and interact with controllers through the Controller Manager.
+
+ [:octicons-arrow-right-24: Launch Tutorial](tutorials/launch_tutorial.md)
+
+- :material-chip: **Hardware Interface**
+
+ ---
+
+ Develop custom hardware interfaces to communicate with your robot's physical hardware or simulation.
+
+ [:octicons-arrow-right-24: Hardware Tutorial](tutorials/hardware_tutorial.md)
+
+- :material-cog: **Controller Development**
+
+ ---
+
+ Write custom controllers tailored to your specific application requirements.
+
+ [:octicons-arrow-right-24: Controller Tutorial](tutorials/controller_tutorial.md)
+
+- :material-cube-scan: **Gazebo Simulation**
+
+ ---
+
+ Set up your SCARA manipulator to run with ros2_control and Gazebo for realistic physics simulation.
+
+ [:octicons-arrow-right-24: Gazebo Tutorial](tutorials/gazebo_tutorial.md)
+
+- :material-ethernet: **EtherCAT Integration**
+
+ ---
+
+ Configure and control CIA 402 compliant EtherCAT motor drives using the ethercat_driver_ros2 stack.
+
+ [:octicons-arrow-right-24: EtherCAT Tutorial](tutorials/ethercat_tutorial.md)
+
+
+
+## Prerequisites
+
+!!! info "System Requirements"
+ - **Operating System**: Ubuntu 24.04 LTS
+ - **ROS Distribution**: ROS2 Jazzy
+ - **Basic Knowledge**: Familiarity with ROS2, C++, and Python
+
+## Quick Start
+
+Ready to get started? Follow our installation guide:
+
+[Get Started :material-arrow-right:](getting-started/installation.md){ .md-button .md-button--primary }
+
+## The SCARA Robot
+
+Throughout this tutorial, we'll work with a SCARA (Selective Compliance Assembly Robot Arm) manipulator. This robot type is commonly used in industrial applications for pick-and-place operations, assembly tasks, and more.
+
+### Robot Structure
+
+The SCARA robot consists of:
+
+- **3 Degrees of Freedom**: Two revolute joints for horizontal movement and one prismatic joint for vertical movement
+- **Joint 1 & 2**: Revolute joints controlling the arm position in the XY plane
+- **Joint 3**: Prismatic joint controlling the vertical (Z-axis) position
+
+## ros2_control Framework
+
+Before diving into the tutorials, it's helpful to understand the ros2_control framework architecture:
+
+- **Controller Manager**: Orchestrates the control loop and manages controller lifecycle
+- **Hardware Interface**: Abstracts physical hardware or simulation
+- **Controllers**: Implement control algorithms for your robot
+- **Resource Manager**: Manages hardware resources and interfaces
+
+For a detailed overview, see the [ros2_control Overview](tutorials/r2c_overview.md).
+
+## Support & Contribution
+
+!!! question "Need Help?"
+ If you encounter any issues or have questions:
+
+ - Check the tutorial documentation
+ - Open an issue on [GitHub](https://github.com/ICube-Robotics/ecat_ros2_workshop/issues)
+ - Contact the maintainers (see [Contacts](about/contacts.md))
+
+## License
+
+This project is open source. Check the repository for license information.
+
+---
+
+
+
+
+### ICube Laboratory
+[{ width="200" }](https://icube.unistra.fr)
+
+[University of Strasbourg](https://www.unistra.fr/), France
+