[Documentation] [TitleIndex] [WordIndex

Note: This tutorial assumes that you have completed the previous tutorials: Construire un package ROS.
(!) Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags.

Comprendre les 'nodes' ROS

Description: Ce tutoriel introduit les concepts de ROS graph et l'utilisation des outils en ligne de commande roscore, rosnode, et rosrun.

Tutorial Level: BEGINNER

Next Tutorial: Comprendre les topics ROS

Prérequis

Pour ce tutoriel, nous allons devoir utiliser un simulateur 'léger', veuillez l'installer avec la commande suivante:

$ sudo apt-get install ros-<distro>-ros-tutorials

Remplacer '<distro>' par le nom de votre distribution ROS (e.g. hydro, groovy, electric, fuerte etc.)

Revue rapide des concepts de Graph sous ROS

Nodes

Un node n'est rien de plus qu'un exécutable dans un paquet ROS. Les nodes ROS utilisent une bibliothèque 'client' ROS afin de communiquer avec les autres nodes. Un node peut publier ou souscrire à un Topic. Un node peut également fournir ou utiliser un Service.

Bibliothèques Client

Les bibliothèques client ROS permettent à des nodes écrits dans des langages de programmation différents, de communiquer:

roscore

roscore est la première chose que vous devriez lancer lorsque vous désirez utiliser ROS.

Exécutez:

$ roscore

Vous devriez voir apparaître quelque chose similaire à ceci:

Si roscore ne s'initialise pas, vous avez sans doute un problème de configuration réseau: Network Setup - Single Machine Configuration

SI roscore ne s'initialise pas et renvoie un message à propos de permissions insuffisantes,alors le répertoire ~/.ros appartient probablement à root.

Vous pouvez modifier les permissions/propriétés de ce répertoire avec la commande suivante:

$ sudo chown -R <your_username> ~/.ros

Utiliser rosnode

Ouvrons une nouvelle fenêtre terminal, et commençons à utiliser rosnode pour visualiser ce que fait roscore...

Note: lorsque vous ouvrez un nouveau terminal, vos paramètres d'environnement sont réinitialisés et le fichier~/.bashrc est exécuté avec la commande 'source'. Si vous rencontrez des problèmes lors de l'utilisation de commandes telles que 'rosnode', vous devrez probablement ajouter quelques variables d'environnement supplémentaires dans votre fichier '~/.bashrc' ou 'sourcer' celles-ci manuellement (via la commande source suivi du fichier de configuration, générallement un fichier 'setup.*sh')

la commande rosnode affiche les informations à propos des nodes ROS en cours de fonctionnement. la commande rosnode list affiche ces nodes actifs:

$ rosnode list

Cela signifie qu'il y a actuellement un seul node actif: rosout. Ce node est en permanence actif et collecte et enregistre les sorties de debogage des autres nodes.

La commande rosnode info renvoie les informations concernant le node indiqué en paramètre.

$ rosnode info /rosout

La commande ci-dessus nous donne quelques informations supplémentaires à propos du node rosout, telles que le fait qu'il 'publie' /rosout_agg.

Voyons quelques autres nodes. Nous allons pour cela utiliser la commande rosrun pour lancer d'autres nodes.

Utilisation de rosrun

rosrun va vous permettre d'utiliser le nom du package afin de lancer directement un node présent dans un package (sans qu'il soit nécessaire de connaître le chemin du package en question).

Utilisation:

$ rosrun [package_name] [node_name]

Nous allons donc pouvoir lancer le node 'turtlesim_node' inclut dans le package turtlesim.

Dans un nouveau terminal:

$ rosrun turtlesim turtlesim_node

Vous devriez désormais voir apparaître à l'écran la fenêtre turtlesim:

NOTE: Votre tortue peut avoir un look différent dans votre propre fenêtre. Ne vous en faites pas, il y a beaucoup de races différentes de tortues, la vôtre sera une surprise!

Dans un nouveau terminal, entrez la commande suivante:

$ rosnode list

Vous devriez obtenir un résultat similaire à:

L'une des caractéristiques importante de ROS est que vous pouvez réassignez les Noms via la ligne de commande.

Fermez la fenêtre turtlesim afin de stopper le node (ou retourner sur la fenêtre terminal où vous avez lancé la commande rosrun turtlesim, et utilisez la commande ctrl-C). Relançons maintenant ce node, mais cette fois en utilisant le Remapping Argument pour modifier le nom du node:

$ rosrun turtlesim turtlesim_node __name:=my_turtle

SI nous revenons sur la commande rosnode list:

$ rosnode list

Note: Si vous avez toujours le node /turtlesim dans la liste des nodes actifs, cela peut signifier que vous avez fermé le node via le terminal en utilisant la commande ctrl-C au lieu de fermer la fenêtre, ou que la variable d'environnement $ROS_HOSTNAME n'est pas définie, comme décrit ici: Network Setup - Single Machine Configuration. Vous pouvez tenter de nettoyer la liste des nodes actifs en utilisant la commande suivante: $ rosnode cleanup

Nous avons donc notre node /my_turtle. Utilisons maintenant une nouvelle commande rosnode ping, afin de vérifier que le node est réellement actif:

$ rosnode ping my_turtle

Compte rendu

Ce qui a été couvert dans ce tutoriel:

Vous comprenez désormais comment fonctionnent les nodes sous ROS, voyons maintenant comment les topics ROS fonctionnent. Ne vous génez pas pour presser Ctrl-C afin de stopper turtlesim_node.


2019-10-19 12:42