{
"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",
"\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",
""
]
},
{
"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
}