{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "6f95a3d4", "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "from IPython.display import IFrame" ] }, { "cell_type": "markdown", "id": "1a8167e7", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Introducción a ROS\n", "\n", "_Robotic Operating System_\n", "\n", "Es un marco de trabajo (_framework_) ubicado en el camino medio entre el hardware y software de los sistemas robóticos.\n", "\n", "[ [https://doi.org/10.1126/scirobotics.abm6074](https://doi.org/10.1126/scirobotics.abm6074) ]" ] }, { "cell_type": "markdown", "id": "1366b5be", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Vista rápida de ROS" ] }, { "cell_type": "code", "execution_count": 2, "id": "05bfb9bc", "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(IFrame(\"https://player.vimeo.com/video/639236696?h=740f412ce5\",width=\"100%\",height=\"400px\"))" ] }, { "cell_type": "markdown", "id": "b381db0b", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "[ROS.org](https://www.ros.org/)" ] }, { "cell_type": "markdown", "id": "844055c5", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## ROS 1\n", "\n", "Existen dos versiones de ROS llamadas ROS2 y ROS1, y en ellas cada año se crea una distribución. [ROS1](https://en.wikipedia.org/wiki/Robot_Operating_System) nació en la universidad de Stanford tiempo antes del 2007. Se desarrollo en la spin-off willow garage hasta el 2013, y de ahí continuo la [OSRF](https://www.openrobotics.org/). \n", "\n", "\"noetic\n", "\n", "La última distribución de ROS1 (_noetic ninjemys_) fue lanzada el 23 de mayo de 2020 y tiene fin de vida en mayo de 2025, ya que solo se va a continuar con ROS2." ] }, { "cell_type": "markdown", "id": "5709729f", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Versiones y distribuciones \n", "\n", "Existen dos versiones de ROS llamadas ROS2 y ROS1, y en ellas cada año se crea una distribución. La última distribución de ROS1 fue lanzada en el 2020, ya que solo se va a continuar con ROS2. \n", "\n", "\n", " \n", " \n", "\n", "\n", " \n", " \n", "\n", "
\"humble\"iron
Mayo 23 de 2022Mayo 23 de 2023
\n", "\n", "La distribución _Humble Hawksbill_ para ROS2 es una distribución LTS (_Long term support_) que estaremos usando." ] }, { "cell_type": "markdown", "id": "167db1e5", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Conceptos Claves en ROS\n", "\n", "- ROS Graph\n", "- Nodo _node_\n", "- Parámetro _param_\n", "- Tema _topic_\n", "- Servicio _service_\n", "- Acción _action_" ] }, { "cell_type": "markdown", "id": "cd11d502", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# ROS Graph\n", "\n", "El ROS Graph es la red de los diferentes elementos que constituyen una applicación robótica. Una representación grafica de la configuración es mostrada a continuación:\n", "\n", "\"Grafo" ] }, { "cell_type": "markdown", "id": "f2c47183", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Usando ROS\n", "\n", "Podemos usar ROS desde Linux (recomendado). La instalación de Linux la podemos hacer \n", "\n", "- En el disco duro del computador (hay que saber lo que se hace, se puede estropear Windows).\n", "- En una USB o disco externo (mi favorita).\n", "- En una máquina virtual. \n", "\n", "o podemos usar ROS\n", "\n", "- Accediendo al sitio [The Construct Sim](https://app.theconstructsim.com/Home)\n", "\n", "Más información sobre los distintos métodos [aquí](/software)" ] }, { "cell_type": "markdown", "id": "211098a6", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Nodos en ROS (_nodes_)\n", "\n", "- `ros2 run`\n", "- `ros2 node list`\n", "- `ros2 node info`" ] }, { "cell_type": "markdown", "id": "a901bb55", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Temas en ROS (_topic_)\n", "\n", "" ] }, { "cell_type": "markdown", "id": "efa002ed", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "# Temas en ROS (_topic_)\n", "\n", "" ] }, { "cell_type": "markdown", "id": "5fdf7746", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "# Temas en ROS (_topic_)\n", "\n", "- `rqt_graph`\n", "- `ros2 topic list`\n", "- `ros2 topic echo`\n", "- `ros2 topic info`\n", "- `ros2 interface show`\n", "- `ros2 topic pub`\n", "- `ros2 topic hz`" ] }, { "cell_type": "markdown", "id": "7b41cfd9", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Servicio en ROS (_service_)\n", "\n", "" ] }, { "cell_type": "markdown", "id": "a56697fb", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "# Servicio en ROS (_service_)\n", "\n", "" ] }, { "cell_type": "markdown", "id": "496438b2", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "# Servicio en ROS (_service_)\n", "\n", "- `ros2 service list`\n", "- `ros2 service type`\n", "- `ros2 service find`\n", "- `ros2 interface show`\n", "- `ros2 service call`" ] }, { "cell_type": "markdown", "id": "afd83e9e", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Parámetros en ROS\n", "\n", "- `ros2 param list`\n", "- `ros2 param get`\n", "- `ros2 param set`\n", "- `ros2 param dump`\n", "- `ros2 param load`" ] }, { "cell_type": "markdown", "id": "59092423", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Acciones en ROS (_action_)\n", "\n", "" ] }, { "cell_type": "markdown", "id": "bd583aa5", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "# Acciones en ROS (_action_)\n", "\n", "- `ros2 node info`\n", "- `ros2 action list`\n", "- `ros2 action info`\n", "- `ros2 interface show`\n", "- `ros2 action send_goal`" ] }, { "cell_type": "markdown", "id": "46b1a8ed", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# RQT Console\n", "\n", "La consola de mensajes para estudiar en detalle lo que ocurre en ROS\n", "\n", "`ros2 run rqt_console rqt_console`" ] }, { "cell_type": "markdown", "id": "7a2acf24", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# ROS Launch\n", "\n", "`ros2 launch turtlesim multisim.launch.py`\n", "\n", "``` python\n", "# turtlesim/launch/multisim.launch.py\n", "\n", "from launch import LaunchDescription\n", "import launch_ros.actions\n", "\n", "def generate_launch_description():\n", " return LaunchDescription([\n", " launch_ros.actions.Node(\n", " namespace= \"turtlesim1\", package='turtlesim', executable='turtlesim_node', output='screen'),\n", " launch_ros.actions.Node(\n", " namespace= \"turtlesim2\", package='turtlesim', executable='turtlesim_node', output='screen'),\n", " ])\n", "```" ] }, { "cell_type": "markdown", "id": "b38841af", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# ROS Bag\n", "\n", "- `ros2 bag record`\n", "- `ros2 bag info`\n", "- `ros2 bag play`" ] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.0" }, "short": "ROS2", "title": "Introducción a ROS", "week": 2 }, "nbformat": 4, "nbformat_minor": 5 }