{
"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",
"
\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",
" Mayo 23 de 2022 | \n",
" Mayo 23 de 2023 | \n",
"
\n",
"
\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",
"
"
]
},
{
"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
}