Apuntes de Robot Operating System (ROS)
¿Qué es ROS?
- ROS2 vs ROS1
- ROS1 vs ROS2 Practical Overview from Robotics Backend
- Robot Operating System 2: Design, architecture, and uses in the wild
Robot Operating System (ROS) es un framework para programar robots, nos da facilidades para programar tareas de diferentes tipos como navegación (usando el stack de navegación de ROS), manipulación (usando moveit), percepción (usando por ejemplo PCL)
Conceptos básicos de ROS
- Nodos
-
Son los procesos básicos en ROS, cada nodo representa un proceso independiente dentro del ROS stack. Los nodos pueden comunicarse entre si de tres maneras:
-
ROS topics (publisher/subscriber) posibilitan a un nodo a publicar mensajes para que los lean otros nodos que se suscriban al topic
-
ROS services (request/response) posibilita que un nodo cliente lance peticiones (request) a otro nodo servidor solicitando un servicio. Una vez que se completa la tarea el nodo servidor responde (response) enviando el resultado de la petición.
-
ROS actions (action/feedback/result) Con este método un nodo cliente puede enviar una petición de acción a otro nodo servidor. Mientras el servidor está ejecutando la acción envía información continuamente al cliente del progreso de la acción. Una vez completada la tarea, el servidor envia el resultado al cliente, este sería el producto final de la acción. Las “acciones” se parecen a los servicios, la diferencia es la realimentación continua que el servidor da al cliente mientras ejecuta la acción.
-
- ___Parameter Server _
-
En este servidor podemos almacenar parámetros globales que todos los nodos pueden consultar.
ROS1 y ROS2
ROS Noetic es la última versión de ROS 1, y está destinada a ser la última versión de ROS 1. ROS Noetic utiliza ya Python 3 y está basada en Ubuntu 20.04. Hay un montón de literatura, tutoriales y ejemplos basados en ROS1 pero creo que lo mejor es centrarse directamente en ROS2.
ROS2 es la nueva versión de ROS. La motivación principal de ROS2 es ser un sistema operativo orientado a ser usado en el mundo real y no un sistema operativo de investigación y desarrollo como era ROS1, sus objetivos declarados son:
- Seguridad
-
Tiene que ser seguro y usar la encriptación adecuada siempre que sea necesario.
- Sistemas Embebidos
-
ROS2 tiene que poder ejecutarse en sistemas embebidos.
- Diversidad de red
-
Es necesario que pueda conectarse y comunicarse usando todo tipo de redes desde LAN a redes satelitales, para adecuarse a cualquier entorno en el que se usen robots.
- Computación en Tiempo Real
-
Tiene que ser capaz de llevar a cabo RTC de forma fiable, dado que esta es crucial para la robótica.
- Orientado al producto
-
Tiene que cumplir con los estándares industriales para usarlo en productos comerciales
ROS2 implica cambiar muchas cosas:
- Usa DDS como protocolo de red para todas las comunicaciones.
- Prescinde del ROS Master que actuaba como coordinador de nodos en ROS1. Usa funcionalidades del protocolo DDS para que los nodos se descubran.
- Es más robusto frente a problemas de comunicación que ROS1, también gracias a la funcionalidad de DDS
- ROS2 es multiplataforma, corre de forma nativa en Linux, Windows y MacOS
- Los nodos de ROS2 pueden correr en un mismo proceso y su ciclo de vida es gestionable
- Las bibliotecas de ROS2 comparten una implementación común (escrita en C)
- Incluye un bridge (ROS1 bridge) para facilitar la comunicación con, y migración de, antiguos sistemas.
Tutoriales de ROS2
- https://docs.ros.org/en/humble/Tutorials.html Los tutos oficiales
- https://ubuntu.com/tutorials/getting-started-with-ros-2#1-overview
- https://www.tutorialspoint.com/market/course/ros2_for_beginners_ros_foxy/index.jsp (de pago en tutorialspoint)
- https://www.udemy.com/course/ros2-for-beginners/?couponCode=FEB_2023 de pago en Udemy
- https://www.youtube.com/watch?v=0aPbWsyENA8 Lista en youtube aparentemente del mismo autor
- https://www.youtube.com/watch?v=Gg25GfA456o Un curso condensado del mismo autor
El tutorial oficial
- Empezar con las instrucciones de instalación
- Seguir con los tutoriales
Probando ROS2 con Docker
Probar ROS1 con Docker
- Docker and Ros by Robotic Sea Bass
- Getting Started with ROS and Docker de la wiki de ROS
- Gráficos en Docker de la wiki de ROS
- Install ROS Noetic with Docker
Gracias a Docker podemos usar ROS fácilmente en cualquier linux (aunque no sea Ubuntu)
Lanzar un completo ROS Noetic en Docker es tan simple como:
|
|
Imágenes Docker de ROS disponibles:
- noetic-ros-core
-
Esta imagen nos permite usar paquetes básicos de ROS: podremos publicar y suscribirnos a nodos ROS, invocar servicios ROS y lazar ficheros ROS.
- noetic-ros-base
-
Basada en la anterior. Añade algunos paquetes esenciales como: actionlib, dynamic reconfigure, nodelets y pluginlib.
- noetic-robot
-
Basada en noetic-ros-base añade los metapaquetes
robot
yviz
, así como la mayor parte de los paquetes utilizados en los tutoriales oficiales. Esta sería la imagen mínima para hacer los tutoriales. También sería la imagen ideal para instalar en un robot. - noetic-perception
-
Esta imagen incluye PCL, la biblioteca
perception_pcl
y bibliotecas relacionadas con el procesamiento de imágenes como:image_common
image_pipeline
image_transport_plugins
laser_pipeline
00
- noetic-desktop
-
Es similar a la anterior (noetic-robot) pero no está basada en ella.
- noetic-desktop-full
-
Basada en la anterior pero además añade paquetes de percepción y simulación, tales como
Gazebo
yPCL
.
Experimento
|
|
Dentro del contenedor actualizamos
|
|
Un dockerfile:
|
|
|
|