Contents
Utilisation de roscreate
Pour créer un package, la commande roscreate-pkg permet de créer un nouveau package au format ROS.
Tous les packages ROS sont constitués d'un certain nombre de fichiers, toujours sur le même modèle : manifests, CMakeLists.txt, mainpage.dox, et Makefiles. La commande roscreate-pkg simplifie les nombreuses étapes du processus laborieux de création à la main d'un package, et évite les erreurs courantes que l'on aurait eues en éditant à la main les fichiers de build et les manifestes correspondants.
Pour créer un nouveau package dans le répertoire courant, on peut taper:
# roscreate-pkg [package_name]
Mais on peut aussi préciser les dépendances de ce package par la commande:
# roscreate-pkg [package_name] [depend1] [depend2] [depend3]
Creation d'un nouveau package ROS
Maintenant nous allons nous rendre dans notre 'home' ou notre répertoire projet, pour créer un package beginner_tutorials que nous ferons dépendre de std_msgs, roscpp, and rospy, qui sont des packages ROS courants.
Pour se rendre dans le dossier ~/fuerte_workspace/sandbox on peut faire:
$ cd ~/fuerte_workspace/sandbox
Mais, pour les versions ROS Fuerte ou ultérieures, vous pouvez plus simplement faire:
$ roscd $ cd sandbox
A partir de là, créez votre package:
$ roscreate-pkg beginner_tutorials std_msgs rospy roscpp
Vous obtiendrez une sortie ressemblant à ceci :
Creating package directory ~/fuerte_workspace/sandbox/beginner_tutorials Creating include directory ~/fuerte_workspace/sandbox/beginner_tutorials/include/beginner_tutorials Creating cpp source directory ~/ros/ros_tutorials/beginner_tutorials/src Creating python source directory ~/fuerte_workspace/sandbox/beginner_tutorials/src/beginner_tutorials Creating package file ~/fuerte_workspace/sandbox/beginner_tutorials/Makefile Creating package file ~/fuerte_workspace/sandbox/beginner_tutorials/manifest.xml Creating package file ~/fuerte_workspace/sandbox/beginner_tutorials/CMakeLists.txt Creating package file ~/fuerte_workspace/sandbox/beginner_tutorials/mainpage.dox Please edit beginner_tutorials/manifest.xml and mainpage.dox to finish creating your package
Vous voudrez sûrement passer un moment à regarder plus attentivement le fichier beginner_tutorials/manifest.xml. Les fichiers manifests jouent un rôle important pour ROS car ils définissent comment les packages sont construits, lancés et documentés.
Vérifions que ROS trouve bien notre nouveau package. Il est souvent utile d'appeler rospack profile après toute modification au 'path' pour s'assurer que les nouveaux chemins des répertoires sont bien trouvés:
$ rospack profile $ rospack find beginner_tutorials
YOUR_PACKAGE_PATH/beginner_tutorials
En cas d'erreur, cela implique que ROS ne parvient pas à trouver le nouveau package, ce qui provient probablement d'un problème avec la variable ROS_PACKAGE_PATH. Reportez-vous bien aux instructions d'installation de ROS, que celle-ci ait été faite depuis un repository SVN ou à partir d’exécutables binaires déjà compilés pour vous.
Dans le cas où votre nouveau package de trouve à un emplacement situé en dehors des chemins déjà déclarés pour des packages existants, il faudra amender votre adapter d'environnement ROS_PACKAGE_PATH pour y ajouter le nouveau chemin.
Ensuite, essayez de sourcer à nouveau votre setup.sh dans votre dossier fuerte_workspace.
Essayons d'aller dans le dossier du package.
$ roscd beginner_tutorials $ pwd
YOUR_PACKAGE_PATH/beginner_tutorials
Dépendances de premier ordre du package
Lorsque nous avons appelé roscreate-pkg précédemment, nous avons précisé quelques dépendances de packages. On peut refaire une passe sur ces dépendances de premier ordre avec l'outil rospack .
(9 Jan 2013) Il y a un bug reporté et déjà corrigé dans rospack en version groovy; cette correction peut prendre un certain temps à se propager dans les packages. Si vous observer un problème similaire à celui-ci avec la commande suivante, vous pouvez sauter à la commande qui suit.
$ rospack depends1 beginner_tutorials
std_msgs rospy roscpp
Comme vous pouvez le constater, rospack rend éxactement la même liste de dépendances que celle que nous avions fournie avec roscreate-pkg. Ces dépendances sont enregistrées au niveau du fichiher manifest du package. Allez jeter un œil à ce fichier manifest.
$ roscd beginner_tutorials $ cat manifest.xml
<package> ... <depend package="std_msgs"/> <depend package="rospy"/> <depend package="roscpp"/> </package>
Dépendances indirectes du package
Dans la plupart des cas, chaque dépendance aura aussi d'autres dépendances. Par exemple, rospy a d'autres dépendances.
(9 Jan 2013) Il y a un bug reporté et déjà corrigé dans rospack en version groovy; cette correction peut prendre un certain temps à se propager dans les packages. Si vous observer un problème similaire à celui-ci avec la commande suivante, vous pouvez sauter à la commande qui suit.
$ rospack depends1 rospy
roslib roslang
Un même package peut ainsi avoir un certain nmbre de dépendances indirectes. Par chance, rospack permet de déterminer de façon récursive toutes les dépendances filles.
$ rospack depends beginner_tutorials
rospack roslib std_msgs rosgraph_msgs rosbuild roslang rospy cpp_common roscpp_traits rostime roscpp_serialization xmlrpcpp rosconsole roscpp
Note: en version Fuerte, la liste est bien plus courte:
std_msgs roslang rospy roscpp
Librairies des clients ROS
On peut se demander ce que sont ces dépendances rospy et roscpp dans l'exmple précédent. Ces librairies rospy et roscppsont en fait les Client Libraries. Ces librairies client permettent aux différents langages de programmation à communiquer dans ROS. rospy est la librairie client pour Python. roscpp est la librairie client pour le C++.
En résumé
Revenos sur quelques commandes que nous avons utilisées ici:
- roscreate-pkg = ros+create-pkg : crée tous les fichiers nécessaires pour créer un package ROS
- rospack = ros+pack(age) : fournit les informations relatives à un package ROS
- rosstack = ros+stack : fournit les informations relatives à une stack ROS