Guide d'installation et configuration ROS
Guide d'installation et configuration ROS
Nom de la filière
Année
1.1Roscore........................................................................................................ 42
1.2simulation de tortue..................................................................................... 42
1.3téléopération du clavier de la tortue............................................................42
[Link] ROS......................................................................................................... 43
2.1 Utilisation de rqt_graph............................................................................... 43
2.2 Présentation de Rostopic.............................................................................44
2.3 Utilisation de l'écho rostopique...................................................................45
2.4 Utilisation de la liste rostopique..................................................................47
[Link] ROS................................................................................................... 48
3.1 Utilisation du type rostopique.....................................................................48
4. rostopic suite..................................................................................................... 50
4.1 Utilisation de la pub rostopique...................................................................50
4.2 Utilisation du Hz rostopique........................................................................54
5. Utilisation de rqt_plot....................................................................................... 55
6. Tutoriel vidéo................................................................................................... 57
Comprendre les services et les paramètres ROS..............................................58
[Link] ROS..................................................................................................... 58
2. Utilisation de rosservice................................................................................... 58
2.1 liste rosservice............................................................................................ 58
2.2 type de service Ros..................................................................................... 59
2.3 appel rosservice.......................................................................................... 59
3. Utilisation du rosparam.................................................................................... 61
3.1 liste de rosparam........................................................................................ 62
3.2 Rosparam set et Rosparam get...................................................................62
3.3 décharge et chargement de Rosparam.......................................................64
4. Démonstration vidéo........................................................................................ 65
Utilisation de rqt_console et roslaunch..............................................................66
[Link]érequis rqt et package turtlesim....................................................................66
2. Utilisation de rqt_console et rqt_logger_level...................................................66
2.1 Note rapide sur les niveaux d'enregistrement............................................69
2.2 Utilisation de Roslaunch..............................................................................70
2.3 Le fichier de lancement............................................................................... 70
2.4 Le fichier de lancement expliqué................................................................71
2.5 roslaunching................................................................................................ 71
3. Démonstration vidéo........................................................................................ 73
Objectifs du cours
Séquencement du cours
[Link] ROS
Avant de commencer ces tutoriels, veuillez terminer l'installation comme décrit dans
les instructions d'installation de ROS .
Remarque : Si vous avez installé ROS depuis un gestionnaire de paquets comme apt , ces
paquets ne seront pas accessibles en écriture et ne pourront pas être modifiés par vous,
l'utilisateur. Lorsque vous travaillez avec des paquets ROS depuis les sources ou que vous en
créez un, vous devez toujours travailler dans un répertoire auquel vous avez accès, comme
votre dossier personnel.
2. Gérer votre environnement
Lors de l'installation de ROS, vous serez invité à sourcer l'un des nombreux fichiers
setup.*sh, voire à ajouter ce « sourcer » à votre script de démarrage. Ceci est nécessaire car
ROS repose sur la notion de combinaison d'espaces via l'environnement shell. Cela facilite le
développement avec différentes versions de ROS ou différents ensembles de paquets.
Si vous rencontrez des difficultés pour trouver ou utiliser vos paquets ROS, assurez-vous que
votre environnement est correctement configuré. Un bon moyen de le vérifier est de vérifier
que les variables d'environnement comme ROS_ROOT et ROS_PACKAGE_PATH sont
définies :
Si ce n'est pas le cas, vous devrez peut-être « sourcer » certains fichiers setup.*sh.
Les fichiers de configuration de l'environnement sont générés pour vous, mais peuvent
provenir de différents endroits :
Les packages ROS installés avec les gestionnaires de packages fournissent des fichiers
setup.*sh
Les espaces de travail rosbuild fournissent des fichiers setup.*sh à l'aide d'outils tels
que rosws
Les fichiers Setup.*sh sont créés en tant que sous-produit de la construction ou de
l'installation de packages catkin
Remarque : Tout au long des tutoriels, vous verrez des références à rosbuild et catkin . Ce
sont les deux méthodes disponibles pour organiser et compiler votre code ROS. rosbuild
n'est plus recommandé ni maintenu, mais conservé pour l'héritage. catkin est la
méthode recommandée pour organiser votre code. Il utilise des conventions CMake plus
standard et offre plus de flexibilité, notamment pour les personnes souhaitant intégrer
des bases de code externes ou publier leur logiciel. Pour une description complète,
consultez catkin ou rosbuild .
Si vous venez d'installer ROS depuis apt sur Ubuntu, vous aurez des fichiers
setup.*sh dans ' /opt/ros/<distro>/ ', et vous pourrez les sourcer comme ceci :
$ source /opt/ros/<distribution>/[Link]
$ source /opt/ros/kinetic/[Link]
Vous devrez exécuter cette commande à chaque nouveau shell ouvert pour accéder aux
commandes ROS, sauf si vous ajoutez cette ligne à votre fichier .bashrc. Ce processus vous
permet d'installer plusieurs distributions ROS (par exemple, Indigo et Kinetic) sur le même
ordinateur et de passer de l'une à l'autre.
Sur d'autres plateformes, vous trouverez ces fichiers setup.*sh partout où vous avez installé
ROS.
3. Créer un espace de travail ROS
Catkin
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/
$ catkin_make
La commande catkin_make est un outil pratique pour travailler avec les espaces de travail
catkin . Sa première exécution dans votre espace de travail crée un lien [Link] dans
votre dossier « src ».
Utilisateurs de Python 3 dans ROS Melodic et versions antérieures : remarque, si vous compilez
ROS à partir des sources pour obtenir la compatibilité avec Python 3 et que vous avez configuré votre
système de manière appropriée (c'est-à-dire que vous avez installé les versions Python 3 de tous les
packages ROS Python requis, tels que catkin ), la première commande catkin_make dans un espace
de travail catkin propre doit être :
$ catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3
$ source devel/[Link]
Pour vous assurer que votre espace de travail est correctement superposé par le script d'installation,
Pour vous assurer que votre espace de travail est correctement superposé par le
script d'installation, assurez-vous que la variable
d'environnement ROS_PACKAGE_PATH inclut le répertoire dans lequel vous vous
trouvez.
$ echo $ROS_PACKAGE_PATH
/home/votreutilisateur/catkin_ws/src:/opt/ros/kinetic/share
Rosbuild 7
Lorsque vous travaillez avec du code source ROS, il est souvent utile de disposer d'un espace
de travail. Pour les tutoriels ROS suivants, vous aurez besoin d'un espace dédié à la création
de piles et de packages ROS.
rosws est un outil qui fournit une interface uniforme avec différents systèmes de gestion de
versions tels que SVN, Git et Mercurial, et permet de gérer tous les paquets installés dans
une surcouche ROS. Un tutoriel complet sur rosws est disponible ici .
3.1 Créer un nouvel espace de travail
La commande suivante crée un nouvel espace de travail dans ~/fuerte_workspace qui étend
l'ensemble des packages installés dans /opt/ros/fuerte :
Remarque : rosws fait partie du paquet rosinstall , qui n'est pas installé par défaut. La
commande suivante le télécharge via le gestionnaire de paquets Ubuntu :
mkdir ~/fuerte_workspace/sandbox
rosws définit ~/fuerte_workspace/sandbox
Chaque fois que les entrées de l'espace de travail changent, il est nécessaire de
réapprovisionner ~/fuerte_workspace/[Link] pour s'assurer que
le ROS_PACKAGE_PATH mis à jour est utilisé.
source ~/fuerte_workspace/[Link]
Pour confirmer que le chemin de votre package a été défini, faites écho à la variable
ROS_PACKAGE_PATH.
$ echo $ROS_PACKAGE_PATH
/home/votre_nom_d'utilisateur/fuerte_workspace/sandbox:/opt/ros/fuerte/share:/opt/
ros/fuerte/stacks
Maintenant que votre environnement est configuré, continuez avec le didacticiel sur le
système de fichiers ROS .
4. Démonstration vidéo
Regardez la vidéo ci-dessous pour avoir plus d'explications sur l'espace de travail
personnalisé et la création de packages avec un guide étape par étape.
[Link]
[Link]érequis
Pour ce tutoriel, nous allons inspecter un package dans ros-tutorials, veuillez l'installer en
utilisant
Remplacez '<distro>' (y compris le '<>') par le nom de votre distribution ROS (par exemple
indigo, kinetic, lunar, etc.)
2. Aperçu rapide des concepts du système de fichiers
Paquets : Les paquets constituent l'unité d'organisation logicielle du code ROS.
Chaque paquet peut contenir des bibliothèques, des exécutables, des scripts ou
d'autres artefacts.
Manifestes ( [Link] ) : Un manifeste est la description d'un paquet . Il sert à
définir les dépendances entre les paquets et à collecter des métadonnées sur
le paquet , comme la version, le mainteneur, la licence, etc.
Afficher la note sur les piles
3. Outils du système de fichiers
Le code est réparti sur de nombreux packages ROS. Naviguer avec des outils en ligne de
commande comme ls et cd peut s'avérer fastidieux, c'est pourquoi ROS fournit des outils
pour vous aider.
3.1 Utilisation de rospack
rospack vous permet d'obtenir des informations sur les paquets. Dans ce tutoriel, nous
aborderons uniquement l' option find , qui renvoie le chemin d'accès au paquet.
Usage:
Exemple:
reviendrait :
VOTRE_CHEMIN_D'INSTALLATION/share/roscpp
Si vous avez installé ROS Kinetic depuis apt sur Ubuntu Linux, vous verrez exactement :
/opt/ros/kinetic/share/roscpp
$ roscd <paquet-ou-pile>[/subdir]
Pour vérifier que nous sommes passés au répertoire du package roscpp, exécutez cet
exemple :
$ roscd roscpp
$ mot de passe
VOTRE_CHEMIN_D'INSTALLATION/share/roscpp
Vous pouvez voir que YOUR_INSTALL_PATH/share/roscpp est le même chemin que celui
donné par rospack find dans l'exemple précédent.
Notez que roscd , comme les autres outils ROS, ne trouve que les paquets ROS présents dans
les répertoires listés dans votre ROS_PACKAGE_PATH . Pour afficher le contenu de
votre ROS_PACKAGE_PATH , saisissez :
$ echo $ROS_PACKAGE_PATH
Votre ROS_PACKAGE_PATH doit contenir la liste des répertoires contenant vos paquets ROS,
séparés par deux points. Un ROS_PACKAGE_PATH typique pourrait ressembler à ceci :
/opt/ros/kinetic/base/install/share
De la même manière que pour les autres chemins d'environnement, vous pouvez ajouter des
répertoires supplémentaires à votre ROS_PACKAGE_PATH , chaque chemin étant séparé par
deux points : '.
3.2.1 Sous-répertoires
roscd peut également se déplacer vers un sous-répertoire d'un package ou d'une pile.
Essayer:
$ roscd roscpp/cmake
$ mot de passe
VOTRE_CHEMIN_D'INSTALLATION/share/roscpp/cmake
journal $ roscd
$ rosls <paquet-ou-pile>[/subdir]
Exemple:
$ rosls roscpp_tutoriels
reviendrait :
Après avoir appuyé sur la touche TAB , la ligne de commande devrait remplir le reste :
$ roscd roscpp_tutoriels/
Cela fonctionne car roscpp_tutorials est actuellement le seul package ROS qui commence
par roscpp_tut .
Après avoir appuyé sur la touche TAB , la ligne de commande devrait se remplir autant que
possible :
$ roscd tortue
Cependant, dans ce cas, plusieurs paquets commencent par turtle . Essayez de taper TAB à
nouveau. Cela devrait afficher tous les paquets ROS commençant par turtle :
$ roscd tortue
Comme il n'y a qu'un seul paquet qui commence par turtles , vous devriez voir :
$ roscd turtlesim/
Si vous souhaitez voir une liste de tous les packages actuellement installés, vous pouvez
également utiliser la saisie semi-automatique par tabulation :
$ rosls <<< appuyez maintenant deux fois sur la touche TAB >>>
4 .Revoir
Vous avez peut-être remarqué un modèle dans la dénomination des outils ROS :
Avec Chaton
[Link]'est-ce qui constitue un paquet de chatons ?
Pour qu'un paquet soit considéré comme un paquet de chatons, il doit répondre à quelques
exigences :
Le package doit contenir un fichier [Link] compatible catkin .
o Ce fichier [Link] fournit des méta-informations sur le package.
Le package doit contenir un [Link] qui utilise catkin .
o S'il s'agit d'un métapaquet catkin, il doit contenir le fichier [Link]
standard approprié.
Chaque package doit avoir son propre dossier
o Cela signifie qu'il n'y a pas de packages imbriqués ni de packages multiples
partageant le même répertoire.
Le package le plus simple possible pourrait avoir une structure qui ressemble à ceci :
mon_paquet/
[Link]
[Link]
Avant de continuer avec ce tutoriel, créez un espace de travail chaton vide en suivant
le tutoriel Création d'un espace de travail pour chaton .
[Link]éation d'un package catkin
Ce tutoriel vous montrera comment utiliser le script catkin_create_pkg pour créer un
nouveau package catkin et ce que vous pouvez en faire après sa création.
Tout d'abord, modifiez le répertoire de l'espace source de l'espace de travail catkin que vous
avez créé dans le didacticiel Création d'un espace de travail pour catkin :
# Vous auriez dû créer ceci dans le didacticiel de création d'un espace de travail
$ cd ~/catkin_ws/src
catkin_create_pkg possède également des fonctionnalités plus avancées qui sont décrites
dans catkin/commands/catkin_create_pkg .
[Link]éation d'un espace de travail Catkin et recherche du
fichier d'installation
Vous devez maintenant créer les packages dans l'espace de travail catkin :
$ cd ~/catkin_ws
$ catkin_make
Une fois l'espace de travail construit, il a créé une structure similaire dans le sous-
dossier devel comme vous le trouvez habituellement sous /opt/ros/$ROSDISTRO_NAME .
Pour ajouter l'espace de travail à votre environnement ROS, vous devez générer le fichier
d'installation généré :
$ . ~/catkin_ws/devel/[Link]
5 . dépendances du paquet
5.1 Dépendances de premier ordre
Lors de l'utilisation de catkin_create_pkg précédemment, quelques dépendances de package
étaient fournies. Ces dépendances de premier ordre peuvent désormais être examinées
avec l' outil rospack .
roscpp
rosé
messages_std
Comme vous pouvez le voir, rospack répertorie les mêmes dépendances qui ont été utilisées
comme arguments lors de l'exécution de catkin_create_pkg . Ces dépendances pour un
package sont stockées dans le fichier [Link] :
<package format="2">
...
<buildtool_depend>chaton</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>messages_std</build_depend>
...
</package>
genpy
roscpp
rosgraphe
rosgraph_msgs
roslib
messages_std
7 <!-- Une balise de maintenance requise, plusieurs autorisées, une personne par balise --
>
8 <!-- Exemple : -->
9 <!-- <maintainer email="[Link]@[Link]">Jane Doe</maintainer> -->
10 <maintainer email="user@[Link]">utilisateur</maintainer>
Cette balise est obligatoire et importante pour le fichier [Link] , car elle permet de
savoir qui contacter au sujet du paquet. Au moins un mainteneur est requis, mais vous
pouvez en avoir plusieurs si vous le souhaitez. Le nom du mainteneur est indiqué dans le
corps de la balise, mais un attribut d'adresse e-mail doit également être renseigné :
Afficher/masquer les numéros de lignes
12 <!-- Une balise de licence requise, plusieurs autorisées, une licence par balise -->
13 <!-- Chaînes de licence couramment utilisées : -->
14 <!-- BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
15 <license>À FAIRE</license>
Choisissez une licence et indiquez-la ici. Parmi les licences open source courantes, on trouve
BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1 et LGPLv3. Vous trouverez des
informations sur plusieurs d'entre elles sur l' Open Source Initiative . Pour ce tutoriel, nous
utiliserons la licence BSD, car les autres composants principaux de ROS l'utilisent déjà :
Afficher/masquer les numéros de lignes
8 <licence>BSD</licence>
6.1.4 balises de dépendances
L'ensemble de balises suivant décrit les dépendances de votre paquet. Ces dépendances
sont divisées en build_depend , buildtool_depend , exec_depend et test_depend . Pour une
explication plus détaillée de ces balises, consultez la documentation relative aux
dépendances Catkin . Puisque nous avons passé std_msgs , roscpp et rospy comme
arguments à catkin_create_pkg , les dépendances se présenteront comme suit :
Afficher/masquer les numéros de lignes
27 <!-- Les balises *_depend sont utilisées pour spécifier les dépendances -->
28 <!-- Les dépendances peuvent être des packages catkin ou des dépendances système --
>
29 <!-- Exemples : -->
30 <!-- Utilisez build_depend pour les packages dont vous avez besoin au moment de la
compilation : -->
31 <!-- <build_depend>genmsg</build_depend> -->
32 <!-- Utilisez buildtool_depend pour les packages d'outils de construction : -->
33 <!-- <buildtool_depend>chaton</buildtool_depend> -->
34 <!-- Utilisez exec_depend pour les packages dont vous avez besoin lors de l'exécution :
-->
35 <!-- <exec_depend>python-yaml</exec_depend> -->
36 <!-- Utilisez test_depend pour les packages dont vous avez besoin uniquement pour les
tests : -->
37 <!-- <test_depend>gtest</test_depend> -->
38 <buildtool_depend>chaton</buildtool_depend>
39 <build_depend>roscpp</build_depend>
40 <build_depend>rospy</build_depend>
41 <build_depend>messages_std</build_depend>
Toutes les dépendances listées ont été ajoutées comme dépendances de build , en plus de la
dépendance par défaut de buildtool_depend sur catkin. Dans ce cas, nous souhaitons que
toutes les dépendances spécifiées soient disponibles à la compilation et à l'exécution ; nous
allons donc ajouter une balise exec_depend pour chacune d'elles :
Afficher/masquer les numéros de lignes
12 <buildtool_depend>chaton</buildtool_depend>
13
14 <build_depend>roscpp</build_depend>
15 <build_depend>rospy</build_depend>
16 <build_depend>std_msgs</build_depend>
17
18 <exec_depend>roscpp</exec_depend>
19 <exec_depend>rospy</exec_depend>
20 <exec_depend>msgs_std</exec_depend>
6.1.5 Package [Link]
Comme vous pouvez le voir, le [Link] final , sans commentaires ni balises inutilisées,
est beaucoup plus concis :
Afficher/masquer les numéros de lignes
1 <?xml version="1.0"?>
2 <package format="2">
3 <name>tutoriels pour débutants</name>
4 <version>0.1.0</version>
5 <description>Le package de tutoriels pour débutants</description>
6
7 <maintainer email="you@[Link]">Votre nom</maintainer>
8 <licence>BSD</licence>
9 <url type="website">[Link]
10 <author email="you@[Link]">Jane Doe</author>
11
12 <buildtool_depend>chaton</buildtool_depend>
13
14 <build_depend>roscpp</build_depend>
15 <build_depend>rospy</build_depend>
16 <build_depend>std_msgs</build_depend>
17
18 <exec_depend>roscpp</exec_depend>
19 <exec_depend>rospy</exec_depend>
20 <exec_depend>std_msgs</exec_depend>
21
22 </package>
6.2 Personnalisation du fichier [Link]
Maintenant que le fichier [Link] , contenant les méta-informations, a été adapté à
votre package, vous êtes prêt à passer aux tutoriels. Le fichier [Link] créé
par catkin_create_pkg sera abordé dans les tutoriels ultérieurs sur la création de code ROS.
Maintenant que vous avez créé un nouveau package ROS, construisons notre package ROS .
Démonstration vidéo
Regardez la vidéo ci-dessous pour avoir plus d'explications sur l'espace de travail
personnalisé et la création de packages avec un guide étape par étape.
[Link]
Avec Rosbuild
[Link] de Roscreate
Avant de créer un paquet, voyons comment fonctionne l'outil en ligne de
commande roscreate-pkg . Celui-ci crée un nouveau paquet ROS . Tous les paquets ROS sont
constitués de nombreux fichiers similaires : manifests , [Link] , [Link] et
Makefiles. roscreate-pkg élimine de nombreuses tâches fastidieuses liées à la création
manuelle d'un nouveau paquet, ainsi que les erreurs courantes liées à la saisie manuelle des
fichiers de build et des manifestes.
Pour créer un nouveau package dans le répertoire actuel :
# roscreate-pkg [nom_du_paquet]
$ cd ~/fuerte_workspace/sandbox
Alternativement, si vous utilisez Fuerte ou une version ultérieure, vous pouvez simplement
faire :
$ roscd
$ cd bac à sable
profil $ rospack
$ rospack trouver des tutoriels pour débutants
VOTRE_CHEMIN_DE_PAQUET/tutoriels_débutants
Si cela échoue, cela signifie que ROS ne trouve pas votre nouveau paquet, ce qui pourrait
être dû à votre ROS_PACKAGE_PATH . Veuillez consulter les instructions d'installation pour
une configuration depuis SVN ou depuis les binaires, selon la méthode d'installation de ROS.
Si vous avez créé ou ajouté un paquet hors des chemins de paquets existants, vous devrez
modifier votre variable d'environnement ROS_PACKAGE_PATH pour inclure ce nouvel
emplacement. Essayez de réapprovisionner votre fichier [Link] dans votre
fuerte_workspace.
Essayez de vous déplacer vers le répertoire du package.
VOTRE_CHEMIN_DE_PAQUET/tutoriels_débutants
messages_std
rosé
roscpp
Comme vous pouvez le voir, rospack répertorie les mêmes dépendances qui ont été utilisées
comme arguments lors de l'exécution de roscreate-pkg . Ces dépendances d'un package sont
stockées dans le fichier manifeste . Consultez-le.
<paquet>
...
<depend package="std_msgs"/>
<dépend du package="rospy"/>
<depend package="roscpp"/>
</package>
roslib
roslang
rospack
roslib
messages_std
rosgraph_msgs
rosbuild
roslang
rosé
cpp_common
traits_roscpp
Rostime
roscpp_sérialisation
xmlrpcpp
Rosconsole
roscpp
messages_std
roslang
rosé
roscpp
Maintenant que vous avez créé un nouveau package ROS, construisons notre package ROS .
7 .Démonstration vidéo
Regardez la vidéo ci-dessous pour avoir plus d'explications sur l'espace de travail
personnalisé et la création de packages avec un guide étape par étape.
[Link]
Avec chaton
[Link] de construction
Tant que toutes les dépendances système de votre package sont installées, nous pouvons
maintenant créer votre nouveau package.
Remarque : si vous avez installé ROS à l’aide d’apt ou d’un autre gestionnaire de paquets,
vous devriez déjà disposer de toutes vos dépendances.
Avant de continuer, n'oubliez pas de télécharger les sources de votre fichier de configuration
d'environnement si ce n'est pas déjà fait. Sous Ubuntu, cela ressemblerait à ceci :
# source /opt/ros/%VOTRE_DISTRO_ROS%/[Link]
$ source /opt/ros/kinetic/[Link] # Pour Kinetic par exemple
Pour les personnes qui ne connaissent pas le flux de travail standard de CMake, celui-ci se
décompose comme suit :
Remarque : si vous exécutez les commandes ci-dessous, cela ne fonctionnera pas, car ce
n’est qu’un exemple du fonctionnement général de CMake.
Ce processus est exécuté pour chaque projet CMake. En revanche, les projets catkin peuvent
être construits ensemble dans des espaces de travail. La construction de zéro à plusieurs
paquets catkin dans un espace de travail suit le flux de travail suivant :
Les commandes ci-dessus compileront tous les projets catkin présents dans le dossier src .
Ceci suit les recommandations de REP128 . Si votre code source se trouve ailleurs, par
exemple dans my_src , vous appellerez catkin_make comme suit :
Remarque : si vous exécutez les commandes ci-dessous, cela ne fonctionnera pas, car le
répertoire my_src n'existe pas.
$ cd ~/catkin_ws/
$ ls src
tutoriels_débutants/ [Link]@
$ catkin_make
Vous devriez voir beaucoup de résultats de cmake , puis de make , qui devraient ressembler
à ceci :
Notez que catkin_make affiche d'abord les chemins utilisés pour chaque « espace ». Ces
espaces sont décrits dans la REP128 et dans la documentation relative aux espaces de travail
catkin sur le wiki : catkin/workspaces . Il est important de noter qu'en raison de ces valeurs
par défaut, plusieurs dossiers ont été créés dans votre espace de travail catkin. Examinez-les
avec ls :
$ ls
construire
développer
source
Le dossier build est l'emplacement par défaut de l' espace de compilation et c'est là
que cmake et make sont appelés pour configurer et compiler vos paquets. Le
dossier devel est l'emplacement par défaut de l' espace de compilation , où se trouvent vos
exécutables et bibliothèques avant l'installation des paquets.
Maintenant que vous avez créé votre package ROS, parlons davantage des nœuds ROS .
Avec rosbuild
[Link] de construction
Une fois toutes les dépendances système installées, nous pouvons construire notre package
que nous venons de créer.
1.1 Utilisation de Rosmake
rosmake est similaire à la commande make , mais avec des fonctionnalités ROS spécifiques.
Lorsque vous saisissez rosmake beginner_tutorials , le paquet beginner_tutorials est
construit , ainsi que tous les paquets dont il dépend, dans l'ordre correct. Puisque nous
avons listé rospy, roscpp et std_msgs comme dépendances lors de la création de notre
paquet ROS, ces paquets (et leurs dépendances, etc.) seront également construits
par rosmake .
Usage:
rosmake [paquet]
Essayer:
$ rosmake tutoriels_débutants
Sur Fuerte, comme les dépendances sont grandement réduites, cela ne prend presque pas
de temps et produit :
2. Revoir
Listons simplement certaines des commandes que nous avons utilisées jusqu'à présent :
Maintenant que vous avez créé votre package ROS, parlons davantage des nœuds ROS .
[Link]érequis
Pour ce tutoriel, nous utiliserons un simulateur léger, pour l'installer, exécutez la commande
suivante :
Remplacez '<distro>' par le nom de votre distribution ROS (par exemple indigo, jade, kinetic,
noetic)
2. Aperçu rapide des concepts graphiques
Nœuds : Un nœud est un exécutable qui utilise ROS pour communiquer avec d'autres
nœuds.
Messages : type de données ROS utilisé lors de l'abonnement ou de la publication sur
une rubrique.
Sujets : les nœuds peuvent publier des messages sur un sujet ainsi que s'abonner à un
sujet pour recevoir des messages.
Maître : Service de noms pour ROS (c'est-à-dire qu'il aide les nœuds à se trouver)
rosout : équivalent ROS de stdout/stderr
roscore : Master + rosout + serveur de paramètres (le serveur de paramètres sera
introduit plus tard)
3. Nœuds
Un nœud n'est en réalité qu'un fichier exécutable au sein d'un package ROS. Les nœuds ROS
utilisent une bibliothèque cliente ROS pour communiquer avec d'autres nœuds. Ils peuvent
publier ou s'abonner à un sujet. Ils peuvent également fournir ou utiliser un service.
[Link]èques clientes
Les bibliothèques clientes ROS permettent aux nœuds écrits dans différents langages de
programmation de communiquer :
5. Roscore
roscore est la première chose que vous devez exécuter lorsque vous utilisez ROS.
Veuillez exécuter :
$ roscore
RÉSUMÉ
======
PARAMÈTRES
* /rosversion
* /rosdistro
NŒUDS
[Link] de Rosnode
Ouvrez un nouveau terminal et utilisons rosnode pour voir ce que l'exécution de roscore a
fait...N'oubliez pas de garder le terminal précédent ouvert soit en ouvrant un nouvel onglet,
soit simplement en le réduisant.
Remarque : À l'ouverture d'un nouveau terminal, votre environnement est réinitialisé et
votre fichier ~/.bashrc est sourcer. Si vous rencontrez des difficultés pour exécuter des
commandes comme rosnode , vous devrez peut-être ajouter des fichiers de configuration
d'environnement à votre fichier ~/.bashrc ou les sourcer manuellement.
Rosnode affiche des informations sur les nœuds ROS en cours d'exécution. La
commande rosnode list répertorie ces nœuds actifs :
liste $ rosnode
Vous verrez :
/rosout
Cela nous a montré qu'un seul nœud est en cours d'exécution : rosout . Ce nœud est
toujours en cours d'exécution, car il collecte et enregistre les résultats de débogage des
nœuds.
La commande rosnode info renvoie des informations sur un nœud spécifique.
Cela nous a donné quelques informations supplémentaires sur rosout , comme le fait qu'il
publie /rosout_agg .
------------------------------------------------------------------------
Nœud [/rosout]
Publications:
* /rosout_agg [rosgraph_msgs/Log]
Abonnements :
* /rosout [type inconnu]
Services:
* /rosout/get_loggers
* /rosout/set_logger_level
Voyons maintenant d'autres nœuds. Pour cela, nous allons utiliser rosrun pour créer un
autre nœud.
7. Utilisation de rosrun
rosrun vous permet d'utiliser le nom du package pour exécuter directement un nœud dans
un package (sans avoir à connaître le chemin du package).
Usage:
REMARQUE : La tortue peut avoir un aspect différent dans votre simulation de tortues. Pas
d'inquiétude : il existe de nombreuses espèces de tortues et la vôtre est une surprise !
Dans un nouveau terminal :
liste $ rosnode
/rosout
/turtlesim
L’une des fonctionnalités puissantes de ROS est que vous pouvez réaffecter des noms à
partir de la ligne de commande.
Fermez la fenêtre turtlesim pour arrêter le nœud (ou revenez au terminal rosrun turtlesim et
utilisez Ctrl-C ). Relançons-le, mais cette fois, en utilisant un argument de remappage pour
modifier le nom du nœud :
liste $ rosnode
Remarque : Si /turtlesim apparaît toujours dans la liste, cela peut signifier que vous avez
arrêté le nœud dans le terminal avec 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 dans Configuration
réseau - Configuration d'une seule machine . Vous pouvez essayer de nettoyer la liste
rosnode avec : $ nettoyage rosnode
Nous voyons notre nouveau nœud /my_turtle . Utilisons une
autre commande rosnode , ping , pour vérifier son bon fonctionnement :
8. Revoir
Ce qui a été couvert :
9.Démonstration vidéo
Regardez la vidéo ci-dessous pour avoir plus d'explications sur la communication des nœuds
Python et un guide étape par étape.
[Link]
[Link]
1.1Roscore
Commençons par nous assurer que Roscore est en cours d'exécution, dans un nouveau
terminal :
$ roscore
Si vous avez laissé Roscore fonctionner depuis le dernier tutoriel, vous pouvez obtenir le
message d'erreur :
roscore ne peut pas s'exécuter car un autre roscore/master est déjà en cours
d'exécution.
Veuillez tuer les autres processus roscore/master avant de relancer
Vous pouvez maintenant utiliser les touches fléchées du clavier pour piloter la tortue. Si vous
ne pouvez pas piloter la tortue, sélectionnez la fenêtre de terminal de la commande
turtle_teleop_key pour vous assurer que les touches que vous saisissez sont enregistrées.
Maintenant que vous pouvez conduire votre tortue, regardons ce qui se passe dans les
coulisses.
[Link] ROS
Les nœuds turtlesim_node et turtle_teleop_key communiquent entre eux via
un sujet ROS . turtle_teleop_key publie les frappes clavier sur un sujet, tandis que turtlesim
s'abonne au même sujet pour les recevoir. Utilisons rqt_graph pour afficher les nœuds et les
sujets en cours d'exécution.
Remarque : Si vous utilisez une version électrique ou antérieure, rqt n'est pas disponible.
Utilisez plutôt rxgraph .
2.1 Utilisation de rqt_graph
en remplaçant <distro> par le nom de votre distribution ROS (par exemple indigo, jade,
kinetic, lunar...)
Dans un nouveau terminal :
En plaçant la souris sur /turtle1/command_velocity , les nœuds ROS (ici en bleu et vert) et
les sujets (ici en rouge) seront mis en surbrillance. Comme vous pouvez le constater, les
nœuds turtlesim_node et turtle_teleop_key communiquent sur le sujet
nommé /turtle1/command_velocity .
$ rostopique -h
Ou en appuyant sur la touche Tab après que Rostopic imprime les sous-commandes
possibles :
$ rostopique
bw echo find hz info liste type pub
Pour ROS Groovy et versions antérieures, ces données sont publiées dans la
rubrique /turtle1/command_velocity . Dans un nouveau terminal, exécutez :
Vous ne verrez probablement rien se produire, car aucune donnée n'est publiée sur le sujet.
Demandons à turtle_teleop_key de publier des données en appuyant sur les touches
fléchées. Si la tortue ne bouge pas, vous devez sélectionner à nouveau le
terminal turtle_teleop_key .
Pour ROS Hydro et versions ultérieures, vous devriez maintenant voir ce qui suit lorsque vous
appuyez sur la touche haut :
linéaire:
x: 2.0
y: 0,0
z: 0,0
angulaire:
x: 0,0
y: 0,0
z: 0,0
---
linéaire:
x: 2.0
y: 0,0
z: 0,0
angulaire:
x: 0,0
y: 0,0
z: 0,0
---
Pour ROS Groovy et les versions antérieures, vous devriez maintenant voir ce qui suit lorsque
vous appuyez sur la touche haut :
---
linéaire : 2,0
angulaire : 0,0
---
linéaire : 2,0
angulaire : 0,0
---
linéaire : 2,0
angulaire : 0,0
---
linéaire : 2,0
angulaire : 0,0
---
linéaire : 2,0
angulaire : 0,0
$ liste rostopique -h
Options:
-h, --help affiche ce message d'aide et quitte
-b FICHIER DE SAC, --bag=FICHIER DE SAC
lister les sujets dans le fichier .bag
-v, --verbose répertorie tous les détails sur chaque sujet
-p liste uniquement les éditeurs
-s liste uniquement les abonnés
$ liste rostopique -v
Cela affiche une liste détaillée des sujets sur lesquels publier et auxquels s'abonner ainsi que
leur type.
Pour ROS Hydro et versions ultérieures,
Sujets publiés :
* /turtle1/color_sensor [turtlesim/Color] 1 éditeur
* /turtle1/cmd_vel [geometry_msgs/Twist] 1 éditeur
* /rosout [rosgraph_msgs/Log] 2 éditeurs
* /rosout_agg [rosgraph_msgs/Log] 1 éditeur
* /turtle1/pose [turtlesim/Pose] 1 éditeur
Sujets abonnés :
* /turtle1/cmd_vel [geometry_msgs/Twist] 1 abonné
* /rosout [rosgraph_msgs/Log] 1 abonné
Sujets publiés :
* /turtle1/color_sensor [turtlesim/Color] 1 éditeur
* /turtle1/command_velocity [turtlesim/Velocity] 1 éditeur
* /rosout [roslib/Log] 2 éditeurs
* /rosout_agg [roslib/Log] 1 éditeur
* /turtle1/pose [turtlesim/Pose] 1 éditeur
Sujets abonnés :
* /turtle1/command_velocity [turtlesim/Velocity] 1 abonné
* /rosout [roslib/Log] 1 abonné
[Link] ROS
La communication sur les sujets s'effectue par l'envoi de messages ROS entre les nœuds.
Pour que l'éditeur ( turtle_teleop_key ) et l'abonné ( turtlesim_node ) puissent
communiquer, ils doivent envoyer et recevoir le même type de message. Cela signifie
qu'un type de sujet est défini par le type de message publié sur celui-ci. Le type de message
envoyé sur un sujet peut être déterminé grâce au type rostopic .
3.1 Utilisation du type rostopique
Le type rostopic renvoie le type de message de tout sujet en cours de publication.
Usage:
Essayer:
géométrie_msgs/Twist
o geometry_msgs/Vector3 linéaire
o float64 x
o float64 y
o float64 z
o geometry_msgs/Vector3 angulaire
o float64 x
o float64 y
o float64 z
Essayer:
tortuesim/Vitesse
o float32 linéaire
o float32 angulaire
Maintenant que nous savons quel type de message turtlesim attend, nous pouvons publier
des commandes sur notre tortue.
4. rostopic suite
Maintenant que nous avons appris à connaître les messages ROS , utilisons rostopic avec les
messages.
4.1 Utilisation de la pub rostopique
Rostopic Pub publie des données sur un sujet actuellement annoncé.
Usage:
$ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
Il s’agit d’un exemple assez compliqué, examinons donc chaque argument en détail.
Pour ROS Hydro et versions ultérieures,
Cette commande publiera des messages sur un sujet donné :
pub rostopique
Cette option (tiret-un) oblige Rostopic à publier un seul message puis à quitter :
-1
Cette option (double tiret) indique à l'analyseur d'options qu'aucun des arguments
suivants n'est une option. Elle est obligatoire lorsque vos arguments sont précédés
d'un tiret - , comme les nombres négatifs.
--
Cette option (tiret-un) oblige Rostopic à publier un seul message puis à quitter :
-1
Cette option (double tiret) indique à l'analyseur d'options qu'aucun des arguments
suivants n'est une option. Elle est obligatoire lorsque vos arguments sont précédés
d'un tiret - , comme les nombres négatifs.
--
Vous avez peut-être remarqué que la tortue s'est immobilisée ; cela est dû au fait qu'elle a
besoin d'un flux constant de commandes à 1 Hz pour se déplacer. Nous pouvons publier un
flux constant de commandes avec la commande rostopic pub -r :
Pour ROS Hydro et versions ultérieures,
Ceci publie les commandes de vitesse à une fréquence de 1 Hz sur le sujet de vitesse.
Nous pouvons également observer ce qui se passe dans rqt_graph . Cliquez sur le bouton
d'actualisation en haut à gauche. Le nœud rostopic pub (ici en rouge) communique avec le
nœud rostopic echo (ici en vert) :
Comme vous pouvez le constater, la tortue décrit un cercle continu. Dans un nouveau
terminal , nous pouvons utiliser l'écho rostopique pour visualiser les données publiées par
notre simulation de tortue :
Hz rostopique [sujet]
$ rostopic hz /tortue1/pose
Vous verrez :
abonné à [/turtle1/pose]
taux moyen : 59,354
min : 0,005 s max : 0,027 s écart type : 0,00284 s fenêtre : 58
taux moyen : 59,459
min : 0,005 s max : 0,027 s écart type : 0,00271 s fenêtre : 118
taux moyen : 59.539
min : 0,004 s max : 0,030 s écart type : 0,00339 s fenêtre : 177
taux moyen : 59.492
min : 0,004 s max : 0,030 s écart type : 0,00380 s fenêtre : 237
taux moyen : 59.463
min : 0,004 s max : 0,030 s écart type : 0,00380 s fenêtre : 290
Nous pouvons maintenant constater que la simulation de tortue publie des données sur
notre tortue à une fréquence de 60 Hz. Nous pouvons également utiliser le type rostopic en
conjonction avec rosmsg show pour obtenir des informations détaillées sur un sujet :
Pour ROS Hydro et versions ultérieures,
Maintenant que nous avons examiné les sujets à l'aide de Rostopic , utilisons un autre outil
pour examiner les données publiées par notre turtlesim :
5. Utilisation de rqt_plot
Remarque : Si vous utilisez Electric ou une version antérieure, rqt n'est pas disponible.
Utilisez plutôt rxplot .
rqt_plot affiche un graphique temporel défilant des données publiées sur les sujets. Nous
allons ici utiliser rqt_plot pour tracer les données publiées sur le sujet /turtle1/pose .
Commencez par lancer rqt_plot en saisissant
Dans un nouveau terminal. Dans la nouvelle fenêtre qui devrait apparaître, une zone de
texte en haut à gauche vous permet d'ajouter n'importe quel sujet au graphique.
Tapez /turtle1/pose/x pour mettre en surbrillance le bouton « + », précédemment désactivé.
Appuyez dessus et répétez la même procédure avec le sujet /turtle1/pose/y . La position xy
de la tortue apparaît alors sur le graphique.
Appuyer sur le bouton « moins » affiche un menu permettant de masquer le sujet spécifié du
graphique. Masquer les sujets que vous venez d'ajouter et
ajouter /turtle1/pose/theta produira le graphique illustré dans la figure suivante.
C'est tout pour cette section, utilisez Ctrl-C pour tuer les terminaux rostopiques mais gardez
votre turtlesim en cours d'exécution.
Maintenant que vous comprenez comment fonctionnent les rubriques ROS, examinons
comment fonctionnent les services et les paramètres .
6. Tutoriel vidéo
La vidéo suivante présente un petit tutoriel utilisant turtlesim sur les nœuds ROS et les sujets
ROS
[Link]
[Link] ROS
Les services constituent un autre moyen de communication entre les nœuds. Ils permettent
aux nœuds d'envoyer une requête et de recevoir une réponse .
2. Utilisation de rosservice
rosservice peut facilement se connecter au framework client/service de ROS avec des
services. rosservice dispose de nombreuses commandes qui peuvent être utilisées sur les
services, comme indiqué ci-dessous :
Usage:
liste $ rosservice
/clair
/tuer
/réinitialiser
/rosout/get_loggers
/rosout/définir_le_niveau_du_journal
/frayer
/teleop_turtle/get_loggers
/teleop_turtle/set_logger_level
/tortue1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/get_loggers
/turtlesim/set_logger_level
std_srvs/Vide
Ce service est vide, ce qui signifie qu'il ne prend aucun argument lors de l'appel (c'est-à-dire
qu'il n'envoie aucune donnée lors d'une requête et ne reçoit aucune donnée lors
d'une réponse ). Appelons ce service via rosservice call :
2.3 appel rosservice
Usage:
Ici, nous appellerons sans arguments car le service est de type vide :
Regardons le cas où le service a des arguments en regardant les informations pour le spawn
du service :
float32 x
float32 y
float32 thêta
nom de chaîne
---
nom de chaîne
Ce service nous permet de faire apparaître une nouvelle tortue à un endroit et avec une
orientation donnés. Le champ « nom » est facultatif ; nous pouvons donc laisser turtlesim en
créer un pour nous.
nom : tortue2
3. Utilisation du rosparam
rosparam vous permet de stocker et de manipuler des données sur le serveur de
paramètres ROS . Ce serveur peut stocker des entiers, des nombres à virgule flottante, des
booléens, des dictionnaires et des listes. rosparam utilise le langage de balisage YAML pour
la syntaxe. Dans les cas simples, YAML est très naturel : 1 est un entier, 1,0 est un nombre à
virgule flottante , 1 est une chaîne, true est un booléen, [1, 2, 3] est une liste d'entiers et {a:
b, c: d} est un dictionnaire. rosparam propose de nombreuses commandes utilisables sur les
paramètres, comme illustré ci-dessous :
Usage:
liste $ rosparam
Ici, nous pouvons voir que le nœud turtlesim a trois paramètres sur le serveur de paramètres
pour la couleur d'arrière-plan :
/rosdistro
/roslaunch/uris/host_nxt__43407
/rosversion
/run_id
/turtlesim/background_b
/turtlesim/background_g
/turtlesim/background_r
Cela modifie la valeur du paramètre, nous devons maintenant appeler le service clear pour
que le changement de paramètre prenne effet :
Examinons maintenant les valeurs des autres paramètres du serveur de paramètres.
Obtenons la valeur du canal d'arrière-plan vert :
86
Nous pouvons également utiliser rosparam get / pour nous montrer le contenu de
l'ensemble du serveur de paramètres.
$ rosparam obtenir /
rosdistro : 'noétique
'
roslaunch:
uris:
hôte_nxt__43407 : [Link]
rosversion : « 1.15.5 »
'
run_id : 7ef687d8-9ab7-11ea-b692-fcaa1494dbf9
tortuesim:
background_b: 255
background_g: 86
background_r: 69
Vous pouvez enregistrer ces informations dans un fichier afin de pouvoir les recharger
ultérieurement. C'est facile avec rosparam :
3.3 décharge et chargement de Rosparam
Usage:
Vous pouvez même charger ces fichiers yaml dans de nouveaux espaces de noms, par
exemple copy_turtle :
255
Maintenant que vous comprenez comment fonctionnent les services et paramètres ROS,
essayons d'utiliser rqt_console et roslaunch
4. Démonstration vidéo
Regardez la vidéo ci-dessous pour comprendre comment utiliser les services de différentes
manières dans les projets ROS.
[Link]
Remplacez <distro> par le nom de votre distribution ROS (par exemple indigo, jade, kinetic,
lunar...).
REMARQUE : Vous avez peut-être déjà compilé rqt et turtlesim pour l'un des tutoriels
précédents. En cas de doute, les réinstaller ne posera aucun problème.
2. Utilisation de rqt_console et rqt_logger_level
rqt_console s'attache au framework de journalisation de ROS pour afficher la sortie des
nœuds. rqt_logger_level nous permet de modifier le niveau de verbosité (DEBUG, WARN,
INFO et ERROR) des nœuds pendant leur exécution.
Regardons maintenant la sortie de TurtleSim dans rqt_console et changeons les niveaux
d'enregistrement dans rqt_logger_level lors de l'utilisation de TurtleSim. Avant de démarrer
TurtleSim, démarrez rqt_console et rqt_logger_level dans deux nouveaux terminaux :
Étant donné que le niveau de journalisation par défaut est INFO, vous verrez toutes les
informations que Turtlesim publie au démarrage, ce qui devrait ressembler à :
Modifions maintenant le niveau du journal sur Avertir en actualisant les nœuds dans la
fenêtre rqt_logger_level et en sélectionnant Avertir comme indiqué ci-dessous :
Maintenant, dirigeons notre tortue vers le mur et voyons ce qui s'affiche dans notre
rqt_console :
Pour ROS Hydro et versions ultérieures,
Fatal
Erreur
Avertir
Informations
Déboguer
Appuyons sur Ctrl-C sur notre simulation de tortue et utilisons roslaunch pour faire
apparaître plusieurs nœuds de simulation de tortue et un nœud d'imitation pour amener
une simulation de tortue à imiter une autre :
2.2 Utilisation de Roslaunch
roslaunch démarre les nœuds tels que définis dans un fichier de lancement.
Usage:
$ cd ~/catkin_ws
$ source devel/[Link]
$ roscd tutoriels pour débutants
$ mkdir lancement
$ cd lancement
8 < nœud pkg = " turtlesim " nom = " sim " type = " turtlesim_node " />
9 </ groupe >
10
11 < node pkg = " turtlesim " name = " mimic " type = " mimic " >
12 < remapper de = " entrée " à = " turtlesim1/turtle1 " />
13 < remapper de = " sortie " vers = " turtlesim2/turtle1 " />
14 </ nœud >
15
16 </ lancement >
2.4 Le fichier de lancement expliqué
Maintenant, décomposons le XML de lancement.
Afficher/masquer les numéros de lignes
11 < node pkg = " turtlesim " name = " mimic " type = " mimic " >
12 < remapper de = " entrée " à = " turtlesim1/turtle1 " />
13 < remapper de = " sortie " vers = " turtlesim2/turtle1 " />
14 </ nœud >
Nous démarrons ici le nœud mimique avec les sujets « input » et « output » renommés
« turtlesim1 » et « turtlesim2 ». Ce changement de nom permettra à turtlesim2 d'imiter
turtlesim1.
Afficher/masquer les numéros de lignes
Vous verrez les deux turtlesims commencer à bouger même si la commande de publication
n'est envoyée qu'à turtlesim1.
$ rqt
Ou simplement :
$ rqt_graph
Maintenant que vous avez utilisé rqt_console et roslaunch avec succès, découvrons les
options d'édition pour ROS . Vous pouvez utiliser Ctrl-C pour toutes vos simulations de
tortues, car vous n'en aurez pas besoin pour les prochains tutoriels.
3. Démonstration vidéo
Regardez la vidéo ci-dessous pour avoir une compréhension plus approfondie des fichiers de
lancement.
[Link]