1 minute read

Mientras investigaba como lograr usar la cámara Astra en ROS 2 Foxy sin necesidad de ROS Bridge, la semana 6 y 7 estuve profundizando en Dockers. Uno de los objetivos del TFG es conseguir ejecutar una aplicación Sigue-Personas en ROS 2 para luego implementarla como ejercicio de Robótica en la plataforma académica Unibotics

Por lo tanto, estuve haciendo varias pruebas con Dockers:

Imagen Docker con ROS Foxy

Traté en instalar ROS Foxy manualmente en base a una imagen de la distribución ubuntu:20.04

(TODO realizar bien la instalación)

Imagen Docker con Darknet Ros

Usando como base una imagen con ROS Foxy instalado (la mía o la oficial), traté de instalar darknet ros para ROS 2

FROM osrf/ros:foxy-desktop

ARG WORKSPACE=/ros2_ws

# Installing initial packages
RUN apt-get update
RUN apt-get install -y wget apt-utils python3-distutils python3-apt xterm
RUN apt-get install -y ros-$ROS_DISTRO-action-msgs
RUN apt-get install -y ros-$ROS_DISTRO-ament-cmake


# Creating workspace
RUN mkdir -p ${WORKSPACE}/src

# Installing darknet_ros for ROS2
RUN cd ${WORKSPACE}/src && git clone https://github.com/Ar-Ray-code/darknet_ros_fp16.git
RUN cd ${WORKSPACE}/src/darknet_ros_fp16 && git clone --recursive https://github.com/Ar-Ray-code/darknet_ros.git
RUN cd ${WORKSPACE}/src && darknet_ros_fp16/darknet_ros/rm_darknet_CMakeLists.sh
RUN rosdep update && cd ${WORKSPACE} && rosdep install --from-paths src --ignore-src -r -y

# Compiling packages
RUN . /opt/ros/foxy/setup.sh && cd ${WORKSPACE} && colcon build --symlink-install && . ${WORKSPACE}/install/setup.sh

Imagen Docker Pubsub (Conexión entre Dockers)

Hice la prueba de conectar 2 contenedores docker corriendo sobre la misma máquina local donde uno de ellos actuara como publicador y otro como subscriptor. Al correr ROS Foxy la comunicación entre topics a través de los puertos para ROS2 se comparte por defecto tanto con la máquina local como entre contenedores, por tanto el objetivo es usar el topic “/topic” del publicador como bus de conexión.

He creado un paquete py_pubsub con ayuda de la documentación oficial de Ros Foxy que me sirva de prueba para la creación de la imagen. Luego he hecho unos scripts de Shell para luego copiarlos a la imagen y crear enlaces simbólicos en /usr/local/bin

FROM osrf/ros:foxy-desktop

ARG WORKSPACE=/ros2_ws

RUN mkdir ${WORKSPACE}

WORKDIR ${WORKSPACE}

RUN mkdir -p src/py_pubsub

COPY py_pubsub src/py_pubsub
COPY publisher .
COPY subscriber .

RUN ln -s ${WORKSPACE}/publisher /usr/local/bin/publisher
RUN ln -s ${WORKSPACE}/subscriber /usr/local/bin/subscriber

RUN colcon build --symlink-install

Para probar la imagen pubsub de mi repositorio de Dockerhub:

docker pull carlosalpha1/pubsub
# Terminal 1
docker run -it --rm carlosalpha1/pubsub publisher
# Terminal 2
docker run -it --rm carlosalpha1/pubsub listener