####################################
##FILL ME IN
####################################
## links to any required tutorials
## note.0= [[fr/ROS/Tutorials/BuildingPackages|Construire un package ROS]]
## descriptive title for the tutorial
## title = Comprendre les 'nodes' ROS
## multi-line description to be displayed in search
## description = Ce tutoriel introduit les concepts de ROS graph et l'utilisation des outils en ligne de commande [[roscore]], [[rosnode]], et [[rosrun]].
## the next tutorial description
## next =
## links to next tutorial
## next.0.link= [[fr/ROS/Tutorials/UnderstandingTopics|Comprendre les topics ROS]]
## what level user is this tutorial for
## level= BeginnerCategory
####################################
<<IncludeCSTemplate(TutorialCSHeaderTemplate)>>

<<TOC(4)>>

=== 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 est un exécutable qui utilise ROS afin de communiquer avec d'autres nodes.
 * [[Messages]]:  Un type de donnée ROS, utilisé lors de la souscription ou publication vers un topic.
 * [[Topics]]: Les Nodes peuvent ''publier des ''messages vers un topic mais également ''souscrire'' à un topic afin de recevoir les messages émis par celui-ci.
 * [[Master]]: Name service for ROS (i.e. helps nodes find each other)
 * [[rosout]]: l'équivalent sous ROS des stdout/stderr
 * [[roscore]]: Master + rosout + parameter server (parameter server will be introduced later)

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

 * rospy = bibliothèque client python
 * roscpp = bibliothèque client c++

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

 . {{{
... logging to ~/.ros/log/9cf88ce4-b14d-11df-8a75-00251148e8cf/roslaunch-machine_name-13039.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://machine_name:33919/
ros_comm version 1.4.7

SUMMARY
========

PARAMETERS
 * /rosversion
 * /rosdistro

NODES

auto-starting new master
process[master]: started with pid [13054]
ROS_MASTER_URI=http://machine_name:11311/

setting /run_id to 9cf88ce4-b14d-11df-8a75-00251148e8cf
process[rosout-1]: started with pid [13067]
started core service [/rosout]
}}}

Si `roscore` ne s'initialise pas, vous avez sans doute un problème de configuration réseau: [[http://www.ros.org/wiki/ROS/NetworkSetup#Single_machine_configuration|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`...

{{{#!wiki blue/solid
'''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
}}}
 . Vous devriez obtenir le résultat suivant (au minimum):

 . {{{
/rosout
}}}

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`.

 . {{{
------------------------------------------------------------------------
Node [/rosout]
Publications:
 * /rosout_agg [rosgraph_msgs/Log]

Subscriptions:
 * /rosout [unknown type]

Services:
 * /rosout/set_logger_level
 * /rosout/get_loggers

contacting node http://machine_name:54614/ ...
Pid: 5092
}}}

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:

 . {{attachment:turtlesim.png}}

'''NOTE:''' Votre tortue peut avoir un look différent dans votre propre fenêtre. Ne vous en faites pas, il y a [[Distributions#Current_Distribution_Releases|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 à:

 . {{{
/rosout
/turtlesim
}}}

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 Arguments|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
}}}
 . Vous devriez désormais voir quelque chose de similaire à ceci:

 . {{{
/rosout
/my_turtle
}}}

{{{#!wiki blue/solid
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: [[http://www.ros.org/wiki/ROS/NetworkSetup#Single_machine_configuration|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
}}}
 . {{{
rosnode: node is [/my_turtle]
pinging /my_turtle with a timeout of 3.0s
xmlrpc reply from http://aqy:42235/     time=1.152992ms
xmlrpc reply from http://aqy:42235/     time=1.120090ms
xmlrpc reply from http://aqy:42235/     time=1.700878ms
xmlrpc reply from http://aqy:42235/     time=1.127958ms
}}}

=== Compte rendu ===
Ce qui a été couvert dans ce tutoriel:

 * roscore = ros+core : master (fourni un serveur de nom pour ROS) + rosout (stdout/stderr) + parameter server (le parameter server sera étudié dans un prochain tuto)
 * rosnode = ros+node : outil ROS permettant d'obtenir des informations sur un node.
 * rosrun = ros+run : lance un node depuis un package.

Vous comprenez désormais comment fonctionnent les nodes sous ROS, voyons maintenant [[fr/ROS/Tutorials/UnderstandingTopics|comment les topics ROS fonctionnent]].  Ne vous génez pas pour presser `Ctrl-C` afin de stopper turtlesim_node.

## AUTOGENERATED DO NOT DELETE
## TutorialCategory
## ROSTutorialCategory
## TutorialTurtlesim