{ "cells": [ { "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 ]" ] }, { "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", "\"humble\n", "\n", "La distribución \"Humble Hawksbill\" para ROS2 salió en el 2022." ] }, { "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": [ "# Iniciemos ROS\n", "\n", "[enlace de descarga](/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.9.8" } }, "nbformat": 4, "nbformat_minor": 5 }