Estás leyendo la documentación para una versión de desarrollo. Para la última versión publicada, por favor revisa Humble.
Comprender los Nodos
Objetivo: Aprender sobre la función de los nodos en ROS 2 y las herramientas para interactuar con ellos.
Nivel del Tutorial: Principiante
Tiempo: 10 minutos
Contenido
Historial
1 El grafo ROS 2
En los próximos tutoriales, aprenderás sobre una serie de conceptos básicos de ROS 2 que componen lo que se conoce como el “grafo de ROS (2)”.
<<<<<<< HEAD El grafo ROS es una red de elementos de ROS 2, que procesan datos al mismo tiempo. Abarca todos los ejecutables y las conexiones entre ellos, como si tuviera que mapearlos y visualizarlos. ======= The ROS graph is a network of ROS 2 elements processing data together at the same time. It encompasses all executables and the connections between them if you were to map them all out and visualize them. >>>>>>> og
2 Nodos in ROS 2
<<<<<<< HEAD Cada nodo en ROS debe ser responsable de un solo propósito, en forma modular (por ejemplo, un nodo para controlar los motores de las ruedas, un nodo para controlar un telémetro láser, etc.). Cada nodo puede enviar y recibir datos a otros nodos a través de topics, servicios, acciones o parámetros. ======= Each node in ROS should be responsible for a single, modular purpose, e.g. controlling the wheel motors or publishing the sensor data from a laser range-finder. Each node can send and receive data from other nodes via topics, services, actions, or parameters. >>>>>>> og
Un sistema robótico completo se compone de muchos nodos que trabajan en conjunto. En ROS 2, un único ejecutable (programa C++, programa Python, etc.) puede contener uno o más nodos.
Requisitos previos
El tutorial previo mustra como instalar el paquete turtlesim
utilizado a continuación.
<<<<<<< HEAD Como siempre, no olvides hacer un source ROS 2 en cada terminal nueva. ======= As always, don’t forget to source ROS 2 in every new terminal you open. >>>>>>> og
Tareas
1 ros2 run
El comando ros2 run
lanza un ejecutable desde un paquete.
ros2 run <package_name> <executable_name>
Para ejecutar Turtlesim, abre una nueva terminal e introduce el siguiente comando:
ros2 run turtlesim turtlesim_node
Se abrirá la ventana de turtlesim, como se vió en el tutorial previo.
Aquí, el nombre del paquete es turtlesim
y el nombre del ejecutable es turtlesim_node
.
<<<<<<< HEAD
Sin embargo, todavía no sabemos el nombre del nodo.
Puedes encontrar nombres de nodos usando el comando ros2 node list
.
=======
We still don’t know the node name, however.
You can find node names by using ros2 node list
>>>>>>> og
2 ros2 node list
ros2 node list
te mostrará los nombres de todos los nodos que están actualmente en ejecución.
Esto es especialmente útil cuando desea interactuar con un nodo o cuando tiene un sistema que ejecuta muchos nodos y necesitas realizar un seguimiento de ellos.
Abre una nueva terminal mientras turtlesim aún se está ejecutando en la otra, e ingrese el siguiente comando:
ros2 node list
El terminal devolverá el nombre del nodo:
/turtlesim
Abre otra terminal nueva e inicia el nodo teleop con el comando:
ros2 run turtlesim turtle_teleop_key
<<<<<<< HEAD
Aquí estamos buscando de nuevo en el paquete turtlesim, esta vez el ejecutable llamado turtle_teleop_key
.
=======
Here, we are referring to the turtlesim
package again, but this time we target the executable named turtle_teleop_key
.
>>>>>>> og
Regresa a la terminal donde se ejecutó ros2 node list
y vuelve a ejecutarlo.
Ahora verás los nombres de dos nodos activos:
/turtlesim
/teleop_turtle
2.1 Reasignación
<<<<<<< HEAD
La reasignación te permite cambiar propiedades predeterminadas de los nodos, como su nombre, nombre del topic, nombres de servicios, etc., a valores personalizados.
En el último tutorial, utilizaste la reasignación en turtle_teleop_key
para cambiar la tortuga que se controla.
Ahora, vamos a reasignar el nombre de nuestro nodo /turtlesim
.
En una nueva terminal, ejecuta el siguiente comando:
=======
Remapping allows you to reassign default node properties, like node name, topic names, service names, etc., to custom values.
In the last tutorial, you used remapping on turtle_teleop_key
to change the cmd_vel topic and target turtle2.
Now, let’s reassign the name of our /turtlesim
node.
In a new terminal, run the following command:
>>>>>>> og
ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle
<<<<<<< HEAD
Ya que estás llamando a ros2 run
para que se ejecute en turtlesim nuevamente, se abrirá otra ventana de turtlesim.
Sin embargo, ahora, si regresas a la terminal donde ejecutó la lista de nodos ros2 y lo vuelves a ejecutar, verás tres nombres de nodos:
=======
Since you’re calling ros2 run
on turtlesim again, another turtlesim window will open.
However, now if you return to the terminal where you ran ros2 node list
, and run it again, you will see three node names:
>>>>>>> og
/my_turtle
/turtlesim
/teleop_turtle
3 ros2 node info
Ahora que conoces los nombres de tus nodos, puedes acceder a más información sobre ellos con:
ros2 node info <node_name>
Para obtener información del nodo my_turtle
, ejecuta el siguiente comando:
ros2 node info /my_turtle
<<<<<<< HEAD
ros2 node info
devuelve una lista de suscriptores, publicadores, servicios y acciones (las conexiones del grafo de ROS) que interactúan con ese nodo.
La salida debería verse así:
=======
ros2 node info
returns a list of subscribers, publishers, services, and actions. i.e. the ROS graph connections that interact with that node.
The output should look like this:
>>>>>>> og
/my_turtle
Subscribers:
/parameter_events: rcl_interfaces/msg/ParameterEvent
/turtle1/cmd_vel: geometry_msgs/msg/Twist
Publishers:
/parameter_events: rcl_interfaces/msg/ParameterEvent
/rosout: rcl_interfaces/msg/Log
/turtle1/color_sensor: turtlesim/msg/Color
/turtle1/pose: turtlesim/msg/Pose
Service Servers:
/clear: std_srvs/srv/Empty
/kill: turtlesim/srv/Kill
/my_turtle/describe_parameters: rcl_interfaces/srv/DescribeParameters
/my_turtle/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
/my_turtle/get_parameters: rcl_interfaces/srv/GetParameters
/my_turtle/list_parameters: rcl_interfaces/srv/ListParameters
/my_turtle/set_parameters: rcl_interfaces/srv/SetParameters
/my_turtle/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
/reset: std_srvs/srv/Empty
/spawn: turtlesim/srv/Spawn
/turtle1/set_pen: turtlesim/srv/SetPen
/turtle1/teleport_absolute: turtlesim/srv/TeleportAbsolute
/turtle1/teleport_relative: turtlesim/srv/TeleportRelative
Service Clients:
Action Servers:
/turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
Action Clients:
Ahora intenta ejecutar el mismo comando en el nodo /teleop_turtle
y vea cómo las conexiones difieren de my_turtle
.
Aprenderás más sobre los conceptos de conexión de gráficos de ROS, incluidos los tipos de mensajes, en los próximos tutoriales.
Resumen
Un nodo es un elemento fundamental de ROS 2, que es modular y tiene un único propósito en un sistema de robótica.
<<<<<<< HEAD
En este tutorial, utilizaste nodos creados a partir del paquete turtlesim
ejecutando turtlesim_node
y turtle_teleop_key
.
Aprendiste a usar el comando ros2 node list
para descubrir nombres de nodos activos y el comando ros2 node info
para obtener información de un nodo en particular.
Estas herramientas son vitales para comprender el flujo de datos en un sistema robótico complejo del mundo real.
=======
In this tutorial, you utilized nodes created in the turtlesim
package by running the executables turtlesim_node
and turtle_teleop_key
.
You learned how to use ros2 node list
to discover active node names and ros2 node info
to introspect a single node.
These tools are vital to understanding the flow of data in a complex, real-world robot system.
>>>>>>> og
Pasos siguientes
Ahora que comprendes los nodos en ROS 2, puedes continuar con el tutorial de topics. Los topics son uno de los tipos de comunicación que conecta los nodos.
Contenido Relacionado
La página Concepts agrega más detalles al concepto de nodos.