Skip to content

robotics-upo/ros2_marsupial_coordinator

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Coordinador de trayectoria para un sistema robótico marsupial UAV-UGV con cable de alimentación de longitud variable

Índice de contenido

  1. Introducción
  2. Requisitos previos
  3. Experimentos realizados

Introducción

El objetivo de este trabajo es implementar un esquema de control modular que permita a cada miembro del sistema robótico marsupial seguir su trayectoria correspondiente. Posteriormente, se diseña un algoritmo de coordinación durante el seguimiento de trayectorias de forma que ambos vehículos: terrestre y aéreo, sigan el mismo punto correspondiente a su trayectoria, evaluando el progreso de cada vehículo dentro de la misma mediante "índices de waypoints".

Para ello, se hace necesaria la implementación de los siguientes módulos dentro del ecosistema de ROS2:

  • Visualizador en RViz2: representa todos los waypoints junto con las catenarias que forma el cable en cada punto de la trayectoria. Además, resalta en color verde los objetivos perseguidos por cada elemento del sistema en cada instante de tiempo.
  • Generador de referencias: se implementa un Pure Pursuit para cada vehículo dentro del sistema marsupial. Mediante la publicación en tópicos de ROS, se informa al resto de nodos acerca del "índice de waypoint" al que se dirige cada miembro dentro del sistema y de la lookahead distance establecida.
  • Controladores individuales: calculan la dirección a la que deben dirigirse UAV y UGV, estableciendo la velocidad calculada por el módulo Coordinador del sistema. Para el caso del cable (tether) se utiliza un control PID (Proporcional, Integral, Derivativo) que garantiza que la longitud de cable siga en todo momento la longitud de referencia establecida por el Coordinador y verificada por el controlador individual.
  • Coordinador del sistema: calcula las velocidades adecuadas para la sincronización del vehículo terrestre y aéreo durante el seguimiento de la trayectoria.

Todos los módulos anteriores y la manera en la que se relacionan con el sistema se detalla en el siguiente diagrama:

Esquema de coordinación del sistema, junto con entradas y salidas relevantes.

Requisitos previos

Para preparar el entorno de simulación, es necesario disponer de un ordenador con el sistema operativo Linux, y que tenga instalado Docker junto con git en el sistema. Después solo se deben seguir una serie de pasos para disponer el mismo contenedor empleado durante la ejecución de experimentos:

  1. Clonar el repositorio de partida del paquete marsupial_simulator_ros2 , dirigirse a la carpeta principal y construir desde ese directorio la imagen marsupial_image:
docker build -t marsupial_image .
  1. Crear un contenedor marsupial_container con acceso a la GPU, soporte para interfaz X11 y un volumen montado de forma que se comparta la carpeta local $HOME/docker con los paquetes instalados dentro de la ruta en el contenedor /home/upo/marsupial/src. Estas dos rutas pueden cambiarse de la forma que mejor se adapte al usuario:
sudo docker run -it \
  --gpus all \
  --runtime=nvidia \
  --env DISPLAY=$DISPLAY \
  --env NVIDIA_DRIVER_CAPABILITIES=all \
  --env QT_X11_NO_MITSHM=1 \
  --volume /tmp/.X11-unix:/tmp/.X11-unix \
  --volume $HOME/docker:/home/upo/marsupial/src \ 
  --device /dev/dri \
  --name marsupial_container \
  marsupial_image
  1. Abrir un terminal dentro del contenedor:
docker start marsupial_container 
xhost +local:docker 
docker exec -it marsupial_container bash
  1. Instalar algunas dependencias adicionales dentro del contenedor como: pycatenary y matplotlib
pip install pycatenary
pip install matplotlib
  1. Dentro de la carpeta src del contenedor, clonar el paquete coordinador ros2_marsupial_coordinator
cd /home/upo/marsupial/src
git clone https://github.com/roblopcor/ros2_marsupial_coordinator
  1. Ajustar la longitud máxima de la cuerda que aparece por defecto según las características del experimento que se desee realizar. Para ello se modifica dentro del archivo /marsupial_simulator_ros2/models/tether/tether.sdf.jinja la línea 4:
{%- set number_elements = 100 -%}    {#- Initial: 123; set at 203 for 20 m tether, 101 for 10 m , 162 for 16 m -#}
  1. Ejecutar los cambios realizados:
python3 /home/upo/marsupial/src/marsupial_simulator_ros2/scripts/jinja_gen.py /home/upo/marsupial/src/marsupial_simulator_ros2/models/tether/tether.sdf.jinja /home/upo/marsupial/src/marsupial_simulator_ros2/models/tether 

Experimentos realizados

Abrir terminal (en contenedor)

Iniciar el contenedor y conceder permisos si no se ha realizado antes:

docker start marsupial_container
xhost +local:docker
docker exec -it marsupial_container bash

Se cargan las variables de entorno para cada terminal abierto:

source /opt/ros/humble/setup.bash
colcon build 
source install/setup.bash 

Lanzamiento de experimentos

Se ajusta la longitud máxima de la cuerda en 10 m para la realización de los experimentos.

En caso de que el dron no haya sido desplegado en los primeros segundos tras cargar la simulación, se despliega manualmente:

ros2 topic pub /sjtu_drone/takeoff std_msgs/msg/Empty {} --once 

Trayectoria 1 - "optimized_path_teatro_wall_opt_r.yaml" - LH Adaptative – Por exceso de waypoint (ajuste fijo de velocidades)

1º Lanzar entorno de simulación + Pure Pursuit + Visualizador + Despegue Dron

ros2 launch ros2_marsupial_coordinator trajectory_follower_adaptative_LH.launch.py world:=theatre.world pos_x:=7.8 pos_y:=-1.13 pos_z:=0.0 yaml_filename:=optimized_path_teatro_wall_opt_r.yaml 

2º Escoger el método coordinador

ros2 run ros2_marsupial_coordinator coordinator.py 

3º Ejecutar controladores individuales

ros2 launch ros2_marsupial_coordinator controllers.launch.py 
Ver demostración en YouTube

Vídeo 3: optimized_path_teatro_wall_opt_r.yaml - LH adaptativo - max_overshoot=1

Trayectoria 2 - "teatro_mission.yaml" - LH Adaptative – Por exceso de waypoint (ajuste fijo de velocidades)

1º Lanzar entorno de simulación + Pure Pursuit + Visualizador + Despegue Dron

ros2 launch ros2_marsupial_coordinator trajectory_follower_adaptative_LH.launch.py world:=theatre.world pos_x:=-0.5 pos_y:=-1.52 pos_z:=0.0 yaml_filename:=teatro_mission.yaml 

2º Escoger el método coordinador

ros2 run ros2_marsupial_coordinator coordinator.py 

3º Ejecutar controladores individuales

ros2 launch ros2_marsupial_coordinator controllers.launch.py  
Ver demostración en YouTube

Vídeo 4: teatro_mission.yaml - LH adaptativo - max_overshoot=1

Trayectoria 1 - "optimized_path_teatro_wall_opt_r.yaml" - N=0 – LH Fijo - Por tiempo (waypoint de sincronización)

1º Lanzar entorno de simulación + Pure Pursuit + Visualizador + Despegue Dron

ros2 launch ros2_marsupial_coordinator trajectory_follower_fixed_LH.launch.py world:=theatre.world pos_x:=7.8 pos_y:=-1.13 pos_z:=0.0 yaml_filename:=optimized_path_teatro_wall_opt_r.yaml 

2º Escoger el método coordinador

ros2 run ros2_marsupial_coordinator future_coordinator.py --ros-args -p yaml_filename:=optimized_path_teatro_wall_opt_r.yaml -p N:=0 

3º Ejecutar controladores individuales

ros2 launch ros2_marsupial_coordinator controllers.launch.py 
Ver demostración en YouTube

Vídeo 1: optimized_path_teatro_wall_opt_r.yaml - LH Fijo - N=0

Trayectoria 2 - "teatro_mission.yaml" - N=0 – LH Fijo - Por tiempo (waypoint de sincronización)

1º Lanzar entorno de simulación + Pure Pursuit + Visualizador + Despegue Dron

ros2 launch ros2_marsupial_coordinator trajectory_follower_fixed_LH.launch.py world:=theatre.world pos_x:=-0.5 pos_y:=-1.52 pos_z:=0.0 yaml_filename:=teatro_mission.yaml 

2º Escoger el método coordinador

ros2 run ros2_marsupial_coordinator future_coordinator.py --ros-args -p yaml_filename:=teatro_mission.yaml -p N:=0 

3º Ejecutar controladores individuales

ros2 launch ros2_marsupial_coordinator controllers.launch.py
Ver demostración en YouTube

Vídeo 2: teatro_mission.yaml - LH Fijo - N=0

Acknowledgements

Logos

This work was partially supported by the following grants: 1) INSERTION PID2021-127648OB-C31, and 2) RATEC PDC2022-133643-C21 projects, funded by MCIN/AEI/ 10.13039/501100011033 and the "European Union NextGenerationEU / PRTR".

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 87.8%
  • Shell 8.6%
  • PowerShell 1.7%
  • Dockerfile 1.2%
  • CMake 0.7%