ProySistRobCoop
Sistemas Robóticos Cooperativos
Implementación de un motor de ALLIANCE
Integrantes
Tutor
- Gonzalo Tejera - gtejera@fing.edu.uy
Estudiantes
- Maximiliano Videla - maximiliano.videla@fing.edu.uy
- José Lombardi - jose.lombardi@fing.edu.uy
Descripción general del proyecto
La robótica ha experimentado una evolución notable desde sus inicios, transformándose en una disciplina que no solamente se ocupa de la automatización de tareas, sino que también aborda complejos problemas de cooperación y coordinación entre múltiples agentes. En la actualidad, el punto de vista de la robótica colectiva y cooperativa es, en muchos casos, indispensable, permitiendo a los robots trabajar en conjunto para lograr objetivos que serían inalcanzables para uno solo. Este enfoque ha dado lugar a arquitecturas de control sofisticadas, que permiten a los robots comunicarse y coordinarse de manera eficiente.
Una de las arquitecturas más destacadas en este contexto es Alliance1, que se centra en la cooperación y la resiliencia en entornos dinámicos. Esta arquitectura está diseñada para garantizar que los sistemas multi-robot se mantengan operativos incluso en caso de fallos, aumentando así la robustez del sistema y la fiabilidad con la que completan las misiones. A medida que la robótica avanza, la integración de tecnologías como la inteligencia artificial y el aprendizaje automático promete ampliar aún más las capacidades de los sistemas colectivos, transformándolos en más adaptables y eficientes.
Este análisis se centrará en la arquitectura de control Alliance propuesta por Lynne E. Parker en 1995, partiendo de la evolución de la robótica, su estado actual y las perspectivas futuras. Se hará especial énfasis en la robótica colectiva y cooperativa, así como en las arquitecturas de control que faciliten la colaboración entre múltiples agentes. Se detallará el particular enfoque de la arquitectura Alliance, sus ventajas y características.
Trabajos relacionados o antecedentes
El proyecto se enmarca en la investigación previa sobre robótica multi-robot y arquitecturas de comportamiento. Los antecedentes estudiados incluyen:
- Contribución al diseño de sistemas multi-robots utilizando ALLIANCE (2004): Tesis de maestría de Gonzalo Tejera López. Se centró en el estudio de ALLIANCE y L-ALLIANCE, proponiendo modificaciones y nuevas heurísticas para mejorar la \textbf{asignación de tareas} y el rendimiento del equipo de robots. 2
- Multi-robot exploration under non-ideal communication conditions (2019): Tesis de Facundo Benavides. Aborda la exploración multi-robot en entornos con restricciones de comunicación. Propone una estrategia multiobjetivo auto-adaptativa y la asignación de roles de explorador y retransmisor para mantener la conectividad entre los diferentes nodos del equipo. 3
- ALLIANCE sobre Torocó: arquitecturas cooperativas basadas en comportamientos (2021): Tesis de grado de Mauro Mottine. Implementa y prueba la arquitectura ALLIANCE sobre la plataforma Torocó, destacando las ventajas de las arquitecturas basadas en comportamientos en términos de \textbf{flexibilidad y adaptabilidad}. 4
La arquitectura
Alliance se define como una arquitectura de control tolerante a fallos, para equipos de robots heterogéneos. Estos equipos llevan a cabo misiones compuestas por tareas independientes y poco acopladas. Cada uno de los robots posee su propio sistema de toma de decisiones, lo cual les permite en todo momento seleccionar de forma adecuada las acciones en función de los requisitos de la misión en curso, de acuerdo con las condiciones del entorno, y de acuerdo al estado interno de cada robot.
Alliance es una arquitectura completamente distribuida basada en comportamientos que incorpora el uso de motivaciones para la selección de tareas, utilizando funciones como la impaciencia (impatience) y la aquiescencia (acquiescence), valores que cada robot va calculando para poder lograr seleccionar la acción más adecuada en cada momento.
Dado que los equipos de robots cooperativos trabajan en entornos dinámicos e impredecibles, Alliance [1] permite a los miembros del grupo responder de forma robusta y confiable a cambios en el entorno y a cambios en la conformación del equipo, tanto por fallas mecánicas como también a nuevas habilidades aprendidas, nuevos miembros del equipo y también a bajas de los mismos.
La arquitectura planteada tiene una serie de supuestos que deben cumplirse para su correcto funcionamiento, estos son:
- cada robot puede detectar el efecto de sus acciones con una probabilidad mayor a 0
- un robot puede detectar la acción de los demás robots por algún medio que esté disponible, con una probabilidad mayor a 0, por ejemplo mediante broadcast
- los robots utilizan un mismo lenguaje
- los robots no mienten y tampoco tienen intenciones contrarias a la misión, al menos intencionalmente
- el medio de comunicación no está garantizado durante toda la misión
- los robots no poseen sensores y actuadores perfectos y pueden fallar en cualquier momento
- si un robot falla es posible que no logre comunicar su falla al resto del equipo
- no se dispone de un sistema centralizado que posea información del entorno.
Cada robot posee un conjunto de comportamientos de bajo y alto nivel, que van desde acciones primitivas (ej. evitar obstáculos) hasta tareas más complejas (exploración). Estas tareas están organizadas en ``behavior sets'' o conjuntos de comportamientos, donde solamente uno está activo a la vez, resolviendo conflictos entre tareas simultáneas y permitiendo a los robots cumplir distintos objetivos de manera eficiente.
Caso de estudio: Granja de manzanas
Introducción
El problema de la optimización de la recolección de manzanas en una granja ofrece un nivel de dificultad interesante en el que se puede aplicar un equipo de robots que cooperan para resolverlo. En particular, este tipo de problemas tiene \glspl{ambiente_observable}, \glspl{ambiente_estocastico}, \glspl{ambiente_secuencial}, \glspl{ambiente_dinamico} y \glspl{ambiente_continuo}. Estas son características de complejidad que son suficientes como para hacer del problema interesante para ser abordado en un proyecto de grado como el presente.
Planteo del problema
El caso de estudio plantea el problema de optimizar la recolección de manzanas en una granja mediante el uso de un conjunto de robots que operan coordinándose y colaborando entre sí. Los robots tienen la capacidad de transportar una cierta cantidad de manzanas desde el punto de recolección hasta ciertas bases predefinidas. La forma del robot es similar a la de un tráiler que puede ser con o sin barandas. La forma de transportarlas es a priori irrelevante para el problema, es decir, las manzanas pueden volcarse y transportarse a granel en el tráiler o ser transportadas en los mismos canastos que utilizan los recolectores sobre el tráiler. Los manzanos (árboles de manzanas) están dispuestos en filas. En cada fila, los árboles están a una cierta distancia fija cada uno del siguiente. Entre filas hay un espacio que forma un sendero donde pueden circular tanto los robots como los recolectores. No se especifica si los recolectores son humanos u otros robots; es irrelevante para el problema, ya que los robots deben desplazarse evitando colisiones con: árboles, otros robots, recolectores (sean humanos o no). Los puntos de recolección se ubican cada uno al lado de algún árbol, ya que se supone que es ahí el lugar donde un recolector llenó su canasto con manzanas. Las bases en las que los robots llenos vaciarán su carga se encuentran en los bordes de la granja o en las esquinas de ésta, o en las cabeceras de las sendas.
Entonces, los pasos del proceso son:
- Cada recolector junta manzanas de los árboles en un canasto. En determinado momento su canasto se llena y emite una señal que llega al equipo de robots transportadores. En términos del proyecto, se genera una nueva tarea de recolección.
- Los robots que tienen disponibilidad deben definir cuál de ellos toma cada tarea.
- Los robots visitan uno o más puntos de recolección y se cargan con las manzanas de los recolectores.
- Los robots que estén lo suficientemente llenos pueden elegir una tarea de retorno a base para descargar.
Documentación
Estado del arte
Este documento forma parte de proyecto de grado y sirve como primer acercamiento a la temática desarrollada luego en el transcurso del proyecto.
Informe
En el informe entregado, se expone el desarrollo completo del proyecto, abarcando tanto los aspectos conceptuales como la implementación y validación del sistema. El trabajo se organiza en varios capítulos, 8 más precisamente, que siguen una secuencia lógica desde la fundamentación teórica hasta la evaluación experimental. En los primeros 3 capítulos se introduce el problema planteado, luego se expone el marco teórico y muestran antecedentes previos a este proyecto. El capítulo 4 hace una definición formal al problema a resolver, se describen y definen todas las funciones necesarias para resolver los problemas. El capítulo 5 y el capítulo 6 explican como se implementa el motor de Alliance, se muestran diagramas de clases y diagramas de flujo como para comprender de mejor manera el desarrollo del motor. Además se plantea un caso de estudio, se aborda el problema, y se explica la solución propuesta. El capítulo 7 expone los resultados obtenidos luego de realizar pruebas y comprobar que el motor implementado funciona como es de esperarse. El capítulo 8 tiene las conclusiones obtenidas y se proponen mejoras y trabajos a futuro.
Código fuente
El código implementado es open source y puede descargarse desde nuestro repositorio
Manual de Usuario
Para descargar y ejecutar el código del proyecto, siga estos pasos:
Requisitos Previos
- Sistema operativo: Ubuntu Linux (preferentemente Ubuntu 22.04).
- Software: Git, Python 3.8+, Pip.
- Instalación de ROS 2 Humble Hawksbill 5.
- Asegurar que los comandos
ros2ycolconestén disponibles.
Guía de Configuración
-
Crear el Workspace de ROS 2:
mkdir -p ~/ros2_ws/src -
Clonar el Repositorio (Modo Simulación):
git clone git@gitlab.fing.edu.uy:proysistrobcoop/ProySistRobCoop.git cp -Rp alliance* ~/ros2_ws/src cp -Rp cocoro* ~/ros2_ws/src -
Compilar y Configurar el Entorno:
cd ~/ros2_ws colcon build source install/local_setup.bash
Ejecución (Modo Simulación con CoppeliaSim)
Abra tres terminales separadas:
-
Lanzar Tareas:
ros2 launch alliance gen_tareas_n_tareas.launch.py num_tareas:=10 -
Ejecutar Motor:
ros2 launch alliance 3RobotNoVRep.launch.xml -
Ejecutar Simulador:
(Cargue la escena correspondiente dentro de CoppeliaSim para iniciar la simulación).
cd CoppeliaSimEdu ./coppeliasim
-
Parker, L. E. (1995, 2). Alliance: An architecture for fault tolerant multi-robot cooperation (Inf. T´ec.). Oak Ridge National Laboratory. https://www.osti.gov/biblio/34318 ↩
-
Tejera López, G. (2004.). Contribución al diseño de sistemas multi robots utilizando ALLIANCE. Tesis de maestría. Universidad de la República (Uruguay). Facultad de Ingeniería. Instituto de Computación – PEDECIBA. https://www.colibri.udelar.edu.uy/jspui/handle/20.500.12008/2933 ↩
-
Benavides Olivera, F. (2019.). Multi-robot exploration under non-ideal communication conditions. Tesis de doctorado. Universidad de Toulouse (Francia). Institut Supérieur de l'Aéronautique et de l'Espace (ISAE). Cotutela internacional: PEDECIBA, Universidad de la República (Uruguay). https://www.colibri.udelar.edu.uy/jspui/handle/20.500.12008/21780 ↩
-
Mottini, M. (2021.). ALLIANCE sobre Torocó : arquitecturas cooperativas basadas en comportamientos. Tesis de grado. Universidad de la República (Uruguay). Facultad de Ingeniería. https://www.colibri.udelar.edu.uy/jspui/handle/20.500.12008/29194 ↩
-
ROS 2 Humble Hawksbill — Guía de instalación. Documentación oficial. https://docs.ros.org/en/humble/Installation.html ↩