# Construye y desarrolla un espacio de trabajo de ROS 2


## Resumen

En esta sección, configurarás un espacio de trabajo de ROS 2 utilizando Docker y contenedores de desarrollo, revisarás el diseño del espacio de trabajo, abrirás el espacio de trabajo en Visual Studio Code, y editarás y compilarás proyectos de ROS 2 dentro del contenedor.

---

## Obtén el espacio de trabajo de ROS 2 de ejemplo

Un espacio de trabajo consistente simplifica la gestión de los proyectos de ROS 2 y los artefactos de compilación en diferentes distribuciones.

1. Abre una terminal y clona el repositorio del espacio de trabajo de ejemplo:

   ```console
   $ git clone https://github.com/shakirth-anisha/docker-ros2-workspace.git
   $ cd docker-ros2-workspace
   ```

   En lo sucesivo, los usuarios de Linux pueden usar la carpeta `ws_linux`, y los usuarios de macOS pueden usar `ws_mac`.

2. Verifica la estructura del espacio de trabajo:

   ```text
   ws_linux/
   ├── compose.yml
   ├── Dockerfile
   └── src/
       ├── package1/
       └── package2/

   ws_mac/
   ├── compose.yml
   ├── Dockerfile
   └── src/
       ├── package1/
       └── package2/
   ```

3. Explora el diseño del espacio de trabajo:

- `compose.yml` : Define cómo Docker Compose construye y ejecuta el contenedor de ROS 2, incluyendo montajes, variables de entorno y configuraciones de red.
- `Dockerfile` : Construye la imagen de desarrollo de ROS 2. Utiliza una imagen base oficial de ROS 2, crea un usuario de desarrollo sin privilegios de root (non-root) e instala las dependencias necesarias del sistema y de ROS 2.
- `src` : Contiene todos los paquetes de ROS 2. Este directorio se monta dentro del contenedor como el espacio de trabajo activo.

## Abre y construye el contenedor

1. Ejecuta los siguientes comandos para construir e iniciar el contenedor:

   Para Linux:

   ```console
   $ cd ws_linux
   $ docker compose up -d
   $ docker compose exec ros2 /bin/bash
   ```

   Para macOS:

   ```console
   $ cd ws_mac
   $ docker compose up -d
   $ docker compose exec ros2 /bin/bash
   ```

   Este comando construye la imagen de Docker definida en tu `Dockerfile` e inicia el contenedor en segundo plano.

   > [!NOTE]
   >
   > La construcción de la imagen puede tardar varios minutos durante la primera ejecución
   > ya que la CLI descarga la imagen base de ROS 2 e instala las dependencias requeridas.
   > Los inicios posteriores serán significativamente más rápidos.

2. Una vez que el contenedor se esté ejecutando, ejecuta comandos dentro de él utilizando `exec`:

   ```console
   $ docker compose exec ros2 /bin/bash
   ```

3. Dentro de la terminal del contenedor, verifica el entorno:

```console
$ echo $ROS_VERSION
$ which colcon
```

Todos los comandos deberían ejecutarse con éxito dentro del contenedor.

## Cambiar de distribución de ROS 2

Actualiza la imagen base en tu `Dockerfile`, cambiando de `humble` a otra distribución como `rolling`, `jazzy` o `iron`.

---

## Resumen

En esta sección, aprendiste a crear un espacio de trabajo estructurado, a escribir un Dockerfile con herramientas de desarrollo y a configurar un entorno de Docker Compose. Tu entorno de desarrollo de ROS 2 ya está listo con una configuración consistente y reproducible en cualquier máquina.

## Próximos pasos

En la siguiente sección, ejecutarás un ejemplo completo de extremo a extremo con Turtlesim.

