diff --git a/README.md b/README.md index c7d99e8..68b9057 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,35 @@ # Software de Control Autónomo de Embarcaciones de la Universidad de San Andrés -## Levantar el projecto - para iniciar el projecto se recomibenda levantarlo de forma local utlizando Node Js Y Ros 2 Humble. Como sistema opertaivo se enfatiza el uso de Linux Ubuntu ya que facilitara su uso o desarrollo +## Levantar el proyecto de forma local +Para iniciar el proyecto se recomienda levantarlo de forma local utlizando [Node Js](https://nodejs.org/en) (IMPORTANTE tiene que ser la versión 20.13.1), [Ros 2 Humble](https://docs.ros.org/en/humble) y [micro-ROS](https://micro.ros.org/). - Node Js: https://nodejs.org/en +Como sistema operativo se enfatiza el uso de Linux Ubuntu 22.04 ya que facilitará su uso y/o desarrollo. + +Además, para que quede prestablecido Ros2, en una terminal ejecutar para abrir el archivo de configuración: - Ros 2: https://docs.ros.org/en/humble +``` +gedit ~/.bashrc +``` + +Ir al final y en líneas nuevas insertar y guardar el documento: +``` +source /opt/ros/humble/setup.bash +source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash +``` + +Para más detalles sobre el procedimiento consultar este [tutorial](https://www.youtube.com/watch?v=Gg25GfA456o). - Apesar de esto se esta de desarrollando una alternativa con Docker - Debe Ejecutar los sigueintes comandos: - ``` - docker build -t Nautilus . +Para correr el proyecto leer el [README](./openmct/README.md) en \openmct. + +## Levantar el proyecto desde un contenedor de Docker +Para correr el proyecto desde un contenedor de Docker se debe tener instalado y corriendo el servicio de [Docker](https://docs.docker.com/get-docker/) y ejecutar los siguientes comandos desde la terminal en el path correspondiente a este proyecto: +``` +docker build -t Nautilus . ``` -Cuando Finalize debe ejecutar: +> *Advertencia*: El build puede tardar varios minutos la primera vez que se corre. Se recomienda tener una buena conexión a internet, la imagen pesa más de 4gb. +Cuando finalice debe ejecutar: +``` +docker run -p 8080:8080 Nautilus ``` - docker run -p 8080:8080 Nautilus -``` \ No newline at end of file diff --git a/dockerfile b/dockerfile deleted file mode 100644 index 4fbd748..0000000 --- a/dockerfile +++ /dev/null @@ -1,39 +0,0 @@ -FROM ubuntu:latest - -ENV DEBIAN_FRONTEND=noninteractive -RUN apt update -y && \ - apt upgrade -y && \ - apt install -y curl && \ - curl -fsSL https://deb.nodesource.com/setup_14.x | bash - && \ - apt-get install -y nodejs - - -RUN apt-get install -y locales && locale-gen en_US.UTF-8 && update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 -ENV LANG=en_US.UTF-8 - - RUN apt-get install -y software-properties-common && add-apt-repository universe - - RUN apt update -y && apt install -y curl && curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg - - RUN echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | tee /etc/apt/sources.list.d/ros2.list > /dev/null - - RUN apt update -y && apt upgrade -y - - RUN apt install ros-humble-desktop -y - -RUN /bin/bash -c "source /opt/ros/humble/setup.bash" - - - -COPY . . - -# Change the working directory to 'openmct' -WORKDIR /openmct - -RUN /bin/bash -c "source /opt/ros/humble/setup.bash && npm install" -# Expose port 3000 -EXPOSE 3000 - -CMD /bin/bash -c "source /opt/ros/humble/setup.bash && npm start" - -## RUN /bin/bash -c "source /opt/ros/humble/setup.bash && ros2 run demo_nodes_cpp talker" \ No newline at end of file diff --git a/dockerfile.example b/dockerfile.example new file mode 100644 index 0000000..4171827 --- /dev/null +++ b/dockerfile.example @@ -0,0 +1,38 @@ +FROM ubuntu:22.04 + +ENV DEBIAN_FRONTEND=noninteractive +RUN apt update -y && \ + apt upgrade -y && \ + apt install -y curl && \ + curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \ + apt-get install -y nodejs + + +RUN apt-get install -y locales && locale-gen en_US.UTF-8 && update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 +ENV LANG=en_US.UTF-8 + +RUN apt-get update && apt-get install -y --fix-missing software-properties-common && add-apt-repository universe + +RUN apt update -y && apt install -y curl && curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg + +RUN echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | tee /etc/apt/sources.list.d/ros2.list > /dev/null + +RUN apt update -y && apt upgrade -y + +RUN apt-get install -y systemd udev + +RUN apt update -y && apt install ros-humble-desktop -y + + +RUN /bin/bash -c "source /opt/ros/humble/setup.bash" + +COPY . . + +# Change the working directory to 'openmct' +WORKDIR /openmct + +RUN /bin/bash -c "source /opt/ros/humble/setup.bash && npm install" +# Expose port 3000 +EXPOSE 3000 + +CMD /bin/bash -c "source /opt/ros/humble/setup.bash && npm start" \ No newline at end of file diff --git a/dockerfile.speaker b/dockerfile.speaker new file mode 100644 index 0000000..416358d --- /dev/null +++ b/dockerfile.speaker @@ -0,0 +1,68 @@ +FROM ubuntu:22.04 + +ENV DEBIAN_FRONTEND=noninteractive +RUN apt update -y && \ + apt upgrade -y && \ + apt install -y curl && \ + curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \ + apt-get install -y nodejs + + +RUN apt-get install -y locales && locale-gen en_US.UTF-8 && update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 +ENV LANG=en_US.UTF-8 + +RUN apt-get update && apt-get install -y --fix-missing software-properties-common && add-apt-repository universe + +RUN apt update -y && apt install -y curl && curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg + +RUN echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | tee /etc/apt/sources.list.d/ros2.list > /dev/null + +RUN apt update -y && apt upgrade -y + +RUN apt-get install -y systemd udev + +RUN apt update -y && apt install ros-humble-desktop -y + +ENV ROS_DISTRO=humble + +RUN apt-get update && apt-get install -y git + +RUN apt-get update && apt-get install -y python3-rosdep + +RUN rosdep init + +RUN /bin/bash -c "\ + source /opt/ros/$ROS_DISTRO/setup.bash && \ + mkdir -p microros_ws/src && \ + cd microros_ws && \ + git clone -b $ROS_DISTRO https://github.com/micro-ROS/micro_ros_setup.git src/micro_ros_setup && \ + rosdep update && \ + rosdep install --from-paths src --ignore-src -y && \ + colcon build && \ + . install/local_setup.bash && \ + ros2 run micro_ros_setup create_firmware_ws.sh host" + +RUN /bin/bash -c "source /opt/ros/$ROS_DISTRO/setup.bash && ros2 run micro_ros_setup create_firmware_ws.sh host" + +RUN /bin/bash -c "source /opt/ros/$ROS_DISTRO/setup.bash && ros2 run micro_ros_setup build_firmware.sh && source install/local_setup.bash" + +RUN /bin/bash -c "source /opt/ros/$ROS_DISTRO/setup.bash && ros2 run micro_ros_setup create_agent_ws.sh" + +RUN /bin/bash -c "source /opt/ros/$ROS_DISTRO/setup.bash && ros2 run micro_ros_setup build_agent.sh && source install/local_setup.bash" + +RUN /bin/bash -c "source /opt/ros/$ROS_DISTRO/setup.bash && colcon build" + +RUN /bin/bash -c "\ + source /opt/ros/$ROS_DISTRO/setup.bash && \ + cd install/ && \ + source setup.bash && \ + source local_setup.bash && \ + cd .. && \ + ros2 run micro_ros_setup build_firmware.sh && \ + ros2 run micro_ros_setup create_agent_ws.sh && \ + ros2 run micro_ros_setup build_agent.sh" + +# Expose port 3000 +EXPOSE 3000 + +CMD /bin/bash -c "source /opt/ros/$ROS_DISTRO/setup.bash && source install/local_setup.bash && ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/ttyUSB0" \ No newline at end of file diff --git a/dockerfile.subscriber b/dockerfile.subscriber new file mode 100644 index 0000000..095212f --- /dev/null +++ b/dockerfile.subscriber @@ -0,0 +1,60 @@ +FROM ubuntu:22.04 + +ENV DEBIAN_FRONTEND=noninteractive +RUN apt update -y && \ + apt upgrade -y && \ + apt install -y curl && \ + curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \ + apt-get install -y nodejs + + +RUN apt-get install -y locales && locale-gen en_US.UTF-8 && update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 +ENV LANG=en_US.UTF-8 + +RUN apt-get update && apt-get install -y --fix-missing software-properties-common && add-apt-repository universe + +RUN apt update -y && apt install -y curl && curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg + +RUN echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | tee /etc/apt/sources.list.d/ros2.list > /dev/null + +RUN apt update -y && apt upgrade -y + +RUN apt-get install -y systemd udev + +RUN apt update -y && apt install ros-humble-desktop -y + +RUN /bin/bash -c "source /opt/ros/humble/setup.bash" + +RUN apt-get update && apt-get install -y git + +RUN mkdir -p ~/ros2_humble/src && \ + cd ~/ros2_humble && \ + apt-get install -y python3-vcstool && \ + vcs import --input https://raw.githubusercontent.com/ros2/ros2/humble/ros2.repos src + +RUN apt-get update && apt-get install -y python3-rosdep python3-pip && pip3 install asyncio websockets + +RUN mkdir -p /ros_ws/src + +WORKDIR /ros_ws + +ENV ROS_DISTRO=humble + +COPY ./my_robot_controller /ros_ws/src/my_robot_controller + +RUN apt-get update && apt-get install -y python3-colcon-common-extensions + +RUN /bin/bash -c "\ + source /opt/ros/$ROS_DISTRO/setup.bash && \ + cd /ros_ws && \ + rosdep init && \ + rosdep update && \ + rosdep install --from-paths src --ignore-src -r -y && \ + colcon build --cmake-clean-cache && \ + colcon build --symlink-install && \ + . install/setup.bash" + +EXPOSE 3000 + +ENV NODE_NAME coordenates_subscriber +ENTRYPOINT ["/bin/bash", "-c", "source /ros_ws/install/setup.bash && source /ros_ws/install/local_setup.bash && ros2 run my_robot_controller $NODE_NAME"] \ No newline at end of file diff --git a/openmct/README.md b/openmct/README.md index a78f421..68943b8 100644 --- a/openmct/README.md +++ b/openmct/README.md @@ -3,33 +3,65 @@ ## Introduccion: En búsqueda de avances punteros en tecnología marítima, la Universidad de San Andrés presenta con orgullo su Software de Control Autónomo de Embarcaciones. Desarrollado por un equipo de investigadores y ingenieros dedicados, este software representa un gran avance en el ámbito de la navegación marítima autónoma. -### Funcionamiento -el Software funciona a traves de varios ejes principlaes, primero utiliza commo base OpenMCT Link: https://nasa.github.io/openmct/ Sumado a esto utiliza distintos nodos de Ros2 HUmble NodeJs para crear servidores en tiempo real e historicos +## Funcionamiento: +El software funciona a través de varios ejes principales, primero utiliza como base [OpenMCT](https://nasa.github.io/openmct/). Sumado a esto usa distintos nodos de Ros2 HUmble y NodeJs para crear servidores en tiempo real e históricos. En este README se da por sentado información que se explica más detalladamente en este [tutorial](https://www.youtube.com/watch?v=Gg25GfA456o). -### Desarrollo: -A la hora de desarrrollar hay algunas cosas que se deben en tener en cuenta de como es funcionamiento dee la aplicacion -#### Distribucion de carpetas +## Desarrollo: +A la hora de desarrrollar hay algunas cosas que se deben tener en cuenta: +### Distribucion de carpetas: +/example-server: En esta carpeta es donde se va todo lo relacionado con el server side, ya sea websocket puerto, etc. -/example-server: En esta carpeta es donde se va todo lo relacionado con el server side, ya sea websocket puerto,etc +/assets: En Assets se guarda todo lo cosmetico para la pagina ya sean sonidos, imágenes, gif o cualquier otro archivo adicional que no tenga otra función que decorativa. -/assets: En Assets se huardo todo lo cosmetico para la pagina ya sean sonidos imagesnes gif o cualquier otro archivo adicional que no tenga otra fucnion que ser decorativo +/plugins: Todos los plugins que se desarrollen de forma externa deben ser guardados en esta carpeta, cada plugin debe tenr una funcion principal útil de importar. -/plugins: Todos los plugins que se desarrollen de forma externa deben ser guardados en esta carpeta, cada plugin debe tenr una funcion principal que va a ser util para importarlo - -/styles: Dentro de esta de carpeta se deben guardar todas las clases de den estilos al la visual - -#### Levantar el Projecto - -Una vez clonado el projecto debemos hacer lo siguiente. +/styles: Dentro de esta de carpeta se guardan todas las clases que den estilos a la visual. +## Correr el servidor de ejemplo: +Una vez clonado el projecto y luego de haber completado los pasos explicados en el [README](../README.md) principal, en el path de openmct ejecutar los comandos: ``` npm install npm start ``` -#### Importar plugin -el plugin se debe importar desde la carpeta /plugins y ejecutar la funcion principal del archivo +## Prueba de conexión por USB al microcontrolador: +Si es la primera ejecución tanto para el speaker como para el subscriber, en el workspace correspondiente de cada uno (aclarado más abajo) se debe ejecutar: +``` +colcon build +``` +### Correr el nodo speaker: +Dentro de nuestro workspace de Micro ROS (~/microros_ws) creado en el procedimiento explicado en el [README](../README.md) principal ejecutar: +Si es la primera ejecución (además del colcon build): +``` +cd install/ +source setup.bash +source local_setup.bash +cd .. +ros2 run micro_ros_setup build_firmware.sh +ros2 run micro_ros_setup create_agent_ws.sh +ros2 run micro_ros_setup build_agent.sh +``` +Luego siempre: +``` +source install/local_setup.bash +ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/ttyUSB0 +``` +Una forma de ver que anda sin utilizar un nodo subscriber es ejecutar en otra terminal: +``` +rqt_graph +``` + +### Correr el nodo subscriber: +En otra terminal en paralelo, dentro de nuestro workspace de ROS2 (~/ros2_ws) creado en el procedimiento explicado en el [README](../README.md) principal ejecutar: +``` +cd install/ +source setup.bash +source local_setup.bash +cd .. +ros2 run my_robot_controller subscriber +``` -##### Recursos utiles +## Recursos Útiles: +Repositorio OpenMCT: https://github.com/nasa/openmct/blob/master/API.md -Repositorio OpenMCT: https://github.com/nasa/openmct/blob/master/API.md \ No newline at end of file +Tutorial ROS2 Humble: https://www.youtube.com/watch?v=Gg25GfA456o