Dev containers para el desarrollo en ROS

 En Comunicaciones y computación en la nube, Innovación tecnológica y sistemas inteligentes

Esta entrada está disponible también en los siguientes idiomas: Euskara

En las últimas semanas, como parte de una nueva iniciativa en la que se pretende impulsar la colaboración entre las distintas áreas de especialización de Tknika, desde el área de Comunicaciones y Computación en la nube se ha estado trabajando en ofrecer al equipo de Robótica Autónoma un entorno de desarrollo basado en Dev Containers. ¿Pero qué es un Dev container (contenedor de desarrollo)?

La tecnología de contenedores (sobre todo desde el nacimiento de Docker) ha supuesto una revolución a la hora de desplegar software, ya que ahora los desarrolladores tienen la opción de poner sus programas en producción sin tener que preocuparse del sistema operativo en el que se van a ejecutar y de las herramientas preinstaladas. El programador incluye su código y sus dependencias en una “caja” y puede transportar esta caja de una máquina a otra con la seguridad de que se va a ejecutar correctamente en cada una de ellas.

Así pues, si la tecnología de contenedores se ha vuelto una herramienta muy popular a la hora de desplegar programas, ¿no podemos trasladar los mismos conceptos al desarrollo del software? La idea de un contenedor de desarrollo es crear un entorno aislado y portátil que se use para desarrollar código de forma eficiente, reproducible y escalable. Esto permite que las herramientas de compilación, las librerías específicas y los frameworks de programación queden embebidos dentro de una unidad independiente del sistema operativo y que puede ser fácilmente transportable a otro ordenador. ¿Y qué relación puede tener esto con el sistema educativo?

Implementar estas ideas en el aula permite que, por ejemplo, los alumnos pierdan el menor tiempo posible configurando su espacio de trabajo, porque el profesor habrá definido previamente qué herramientas y librerías son necesarias para su resolución. Cambiar de un ejercicio a otro también será mucho más sencillo y menos sensible a errores, porque los alumnos no tendrán que reconfigurar sus herramientas, todo se encontrará empaquetado dentro del contenedor, no en su sistema operativo principal.

Para lograr este objetivo, desde nuestro equipo de trabajo se ha creado un repositorio plantilla en GitHub con las siguientes características:

  • Una imagen docker basada en Ubuntu 20.04 y ROS noetic.
  • La definición del dev container con el usuario, las variables de entorno y las extensiones de VS Code recomendadas.
  • Un VS Code personalizado con algunos botones para facilitar el desarrollo en ROS: simplificación del lanzamiento del núcleo de ROS (ROS Core), compilación del espacio de trabajo, creación de un paquete ROS y subscripción a un topic.
  • Un botón en el readme desde el que el usuario, con un simple click, es capaz (teniendo VS Code instalado localmente) de abrir directamente el proyecto para ponerse a trabajar.

Y todo ello, teniendo en cuenta que el código está alojado en GitHub, con soporte nativo para realizar un control de versiones a través de git. De esta forma, intentamos introducir conceptos que se trabajan en el mundo de la informática en un entorno más relacionado con la electrónica.

Gracias a este desarrollo, cualquier usuario (ya sea profesor o alumno) que desee hacer una pequeña prueba en ROS sólo tiene que seguir los siguientes pasos:

  • (Tener VS Code instalado previamente y disponer de una cuenta de GitHub)
  • Crear su propio repositorio en GitHub a través del botón «Use this template»
  • Esperar 30 segundos a que el repositorio esté creado y correctamente configurado
  • Pulsar el botón «Remote – Containers: Open»
  • Esperar a que VS Code se configure adecuadamente (la primera vez el proceso puede llegar a durar 2-3 minutos, dependiendo de la conexión a internet y la potencia del ordenador, pero los siguientes despliegues serán en cuestión de segundos)
  • Crear un nodo ROS a través del botón «Create package»
  • Desarrollar el código del nodo
  • Comprobar que todo funciona correctamente y subir la implementación a GitHub haciendo uso de git

El siguiente vídeo muestra, en tiempo real y desde cero, lo sencillo que es iniciar el espacio de trabajo, ejecutar un nodo ROS muy sencillo y publicar los cambios en un repositorio de GitHub:

Por último, cabe destacar que, aunque esta plantilla es para un desarrollo básico en ROS, puede ser fácilmente modificada para incluir más herramientas: un simulador como Gazebo, librerías para una cámara de visión artificial…

Desde el departamento de Comunicaciones y Computación en la nube seguiremos colaborando con el resto de áreas de especialización de Tknika y, si estáis interesados en aprender sobre las tecnologías que se han empleado para llevar a cabo este proyecto, estad atentos a la web de Tknika para inscribiros en futuras formaciones.