Comprendre les nœuds

Objectif : En savoir plus sur la fonction des nœuds dans ROS 2 et sur les outils permettant d’interagir avec eux.

Niveau du tutoriel : Débutant

Durée : 10 minutes

Arrière-plan

1 Le graphe ROS 2

Au cours des prochains didacticiels, vous découvrirez une série de concepts de base de ROS 2 qui constituent ce que l’on appelle le «graphe ROS (2)».

Le graphe ROS est un réseau d’éléments ROS 2 traitant des données ensemble en même temps. Il englobe tous les exécutables et les connexions entre eux si vous deviez tous les cartographier et les visualiser.

2 nœuds dans ROS 2

Chaque nœud dans ROS doit être responsable d’un seul objectif de module (par exemple, un nœud pour contrôler les moteurs de roue, un nœud pour contrôler un télémètre laser, etc.). Chaque nœud peut envoyer et recevoir des données à d’autres nœuds via des sujets, des services, des actions ou des paramètres.

../../../_images/Nodes-TopicandService.gif

Un système robotique complet est composé de nombreux nœuds travaillant de concert. Dans ROS 2, un seul exécutable (programme C++, programme Python, etc.) peut contenir un ou plusieurs nœuds.

Conditions préalables

Le tutoriel précédent vous montre comment installer le paquet turtlesim utilisé ici.

Comme toujours, n’oubliez pas de sourcer ROS 2 dans chaque nouveau terminal que vous ouvrez.

Tâches

1 course ros2

La commande ros2 run lance un exécutable à partir d’un package.

ros2 run <package_name> <executable_name>

Pour exécuter turtlesim, ouvrez un nouveau terminal et saisissez la commande suivante :

ros2 run turtlesim turtlesim_node

La fenêtre de turtlesim s’ouvrira, comme vous l’avez vu dans le tutoriel précédent.

Ici, le nom du package est turtlesim et le nom de l’exécutable est turtlesim_node.

Cependant, nous ne connaissons toujours pas le nom du nœud. Vous pouvez trouver des noms de nœuds en utilisant ros2 node list

2 liste de nœuds ros2

ros2 node list vous montrera les noms de tous les nœuds en cours d’exécution. Ceci est particulièrement utile lorsque vous souhaitez interagir avec un nœud ou lorsque vous avez un système exécutant de nombreux nœuds et que vous devez en garder une trace.

Ouvrez un nouveau terminal pendant que turtlesim est toujours en cours d’exécution dans l’autre, et entrez la commande suivante :

ros2 node list

Le terminal renverra le nom du nœud :

/turtlesim

Ouvrez un autre nouveau terminal et démarrez le nœud teleop avec la commande :

ros2 run turtlesim turtle_teleop_key

Ici, nous recherchons à nouveau le package turtlesim, cette fois pour l’exécutable nommé turtle_teleop_key.

Retournez au terminal où vous avez exécuté ros2 node list et exécutez-le à nouveau. Vous verrez maintenant les noms de deux nœuds actifs :

/turtlesim
/teleop_turtle

2.1 Remappage

Remapping vous permet de réaffecter les propriétés de nœud par défaut, telles que le nom du nœud, les noms de sujet, les noms de service, etc. valeurs. Dans le dernier tutoriel, vous avez utilisé le remappage sur turtle_teleop_key pour changer la tortue par défaut contrôlée.

Maintenant, réassignons le nom de notre nœud /turtlesim. Dans un nouveau terminal, exécutez la commande suivante :

ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle

Puisque vous appelez à nouveau ros2 run sur turtlesim, une autre fenêtre turtlesim s’ouvrira. Cependant, maintenant, si vous revenez au terminal où vous avez exécuté ros2 node list, et que vous l’exécutez à nouveau, vous verrez trois noms de nœud :

/my_turtle
/turtlesim
/teleop_turtle

3 infos nœud ros2

Maintenant que vous connaissez les noms de vos nœuds, vous pouvez accéder à plus d’informations à leur sujet avec :

ros2 node info <node_name>

Pour examiner votre dernier nœud, my_turtle, exécutez la commande suivante :

ros2 node info /my_turtle

ros2 node info renvoie une liste d’abonnés, d’éditeurs, de services et d’actions (les connexions du graphe ROS) qui interagissent avec ce nœud. La sortie devrait ressembler à ceci :

/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:

Essayez maintenant d’exécuter la même commande sur le nœud /teleop_turtle, et voyez comment ses connexions diffèrent de my_turtle.

Vous en apprendrez plus sur les concepts de connexion de graphe ROS, y compris les types de message, dans les prochains didacticiels.

Résumé

Un nœud est un élément ROS 2 fondamental qui sert un objectif unique et modulaire dans un système robotique.

Dans ce didacticiel, vous avez utilisé des nœuds créés à partir du package turtlesim en exécutant les exécutables turtlesim_node et turtle_teleop_key.

Vous avez appris à utiliser ros2 node list pour découvrir les noms de nœuds actifs et ros2 node info pour effectuer une introspection sur un seul nœud. Ces outils sont essentiels pour comprendre le flux de données dans un système robotique complexe et réel.

Prochaines étapes

Maintenant que vous comprenez les nœuds dans ROS 2, vous pouvez passer au tutoriel topics. Les sujets sont l’un des types de communication qui relie les nœuds.