= Qu'est ce qu'un package catkin? = Pour qu'un package puisse être considéré comme un package catkin il doit répondre à quelques exigences: * Le package doit contenir un fichier package.xml conforme à catkin. * Le fichier package.xml fournit les meta-informations sur le package. * Le package doit contenir aussi un fichier [[catkin/CMakeLists.txt|CMakeLists.txt quiappelle catkin]]. * Pour les [[catkin/package.xml#Metapackages|metapackage catkin]] il et nécessaire d'avoir tous les fichiers CMakeLists.txt nécessaires. * Chaque package doit avoir son propre répertoire (Il ne peut y avoir plus d'un package dans chaque dossier) * Cela signifie qu'il n'y a pas de packages imbriqués ni plusieurs packages partagent le même répertoire. Le package le plus simple possible pourrait ressembler à ceci: {{{#!sh my_package/ CMakeLists.txt package.xml }}} = Les packages dans un workspace catkin = Pour travailler avec des packages dans catkin, la méthode recommandée consiste à travailler dans un workspace (espace de travail) catkin, mais il est aussi possible de construire des packages catkin à part (en standalone). Un workspace typique pourrait ressembler à ceci: {{{#!screen workspace_folder/ -- WORKSPACE src/ -- SOURCE SPACE CMakeLists.txt -- 'Toplevel' CMake file, provided by catkin package_1/ CMakeLists.txt -- CMakeLists.txt file for package_1 package.xml -- Package manifest for package_1 ... package_n/ CMakeLists.txt -- CMakeLists.txt file for package_n package.xml -- Package manifest for package_n }}} Avant de continuer avec ce tutoriel vous devez créer un workspace catkin vide en suivant ce tutoriel [[http://wiki.ros.org/catkin/Tutorials/create_a_workspace|Creating a workspace for catkin]] = Création d'un package catkin = Ce tutorial montre comment utiliser le script [[http://wiki.ros.org/catkin/commands/catkin_create_pkg|catkin_create_pkg]] pour créer un nouveau package catkin, et ce que vous pouvez faire avec, une fois créé. D'abord on va se rendre dans le répertoire des fichiers sources du workspace catkin que l'on a créé lors du tutorial [[http://wiki.ros.org/catkin/Tutorials/create_a_workspace|Creating a workspace for catkin]] {{{#!sh # You should have created this in the Creating a Workspace Tutorial cd ~/catkin_ws/src }}} Maintenant, utilisons le script catkin_create_pkg pour créer un nouveau package appelé "beginner_tutorials" qui dépend de std_msgs, roscpp et Rospy: {{{#!sh catkin_create_pkg beginner_tutorials std_msgs rospy roscpp }}} Cela va créer un dossier beginner_tutorials qui contient un package.xml et un CMakeLists.txt , qui ont été partiellement remplis avec les informations que vous avez données à catkin_create_pkg. catkin_create_pkg demande que vous lui donniez un nom de package et éventuellement une liste des packages dont ce package dépend: {{{#!sh # This is an example, do not try to run this # catkin_create_pkg [depend1] [depend2] [depend3] }}} catkin_create_pkg possède également des fonctionnalités plus avancées qui sont décrites dans le [[http://wiki.ros.org/catkin/commands/catkin_create_pkg|catkin/commands/catkin_create_pkg]] . = Dépendances du package = == Dépendances de premier ordre == Lors de l'utilisation de catkin_create_pkg plus tôt, quelques dépendances des packages ont été fournies. Ces dépendances de premier ordre peuvent maintenant être examinées avec l'outil rospack. {{{#!note }}} (9 janvier 2013) Il y a [[http://answers.ros.org/question/51555/beginner-tutorials-segmentation-fault-with-rospack-depends1/?comment=51762#comment-51762|]] avec la commande suivante, vous pouvez passer à la prochaine commande. {{{#!sh rospack depends1 beginner_tutorials }}} {{{#!screen std_msgs rospy roscpp }}} Comme vous pouvez le voir, rospack énumère les mêmes dépendances qui ont été utilisées comme arguments lors de l'exécution catkin_create_pkg. Les dépendances d'un package sont stockées dans le fichier '''package.xml''' :'''''' {{{#!sh roscd beginner_tutorials cat package.xml }}} {{{#!xml ... catkin roscpp rospy std_msgs ... }}} = Dépendances indirectes = Dans de nombreux cas, une dépendance aura aussi ses propres dépendances. Par exemple, Rospy a d'autres dépendances. {{{#!note (9 janvier 2013) Il y a [un bug](https://github.com/ros/rospack/issues/4) signalé et déjà fixé dans [rospack](http://wiki.ros.org/rospack) en groovy, ce qui prend un certain temps jusqu'à ce que le changement se reflète sur votre ordinateur. Si vous voyez [un problème semblable à celui-ci](http://answers.ros.org/question/51555/beginner-tutorials-segmentation-fault-with-rospack-depends1/?comment=51762#comment-51762) avec la commande suivante, vous pouvez passer à la prochaine commande. }}} {{{#!sh rospack depends1 rospy }}} {{{#!screen genpy rosgraph rosgraph_msgs roslib std_msgs }}} Un package peut avoir pas mal de dépendances indirectes. Heureusement rospack peut déterminer de façon récursive toutes les dépendances imbriquées. {{{#!sh rospack depends beginner_tutorials }}} {{{#!screen cpp_common rostime roscpp_traits roscpp_serialization genmsg genpy message_runtime rosconsole std_msgs rosgraph_msgs xmlrpcpp roscpp rosgraph catkin rospack roslib rospy }}} = Personnalisation de votre Package = Dans cette partie du tutoriel on va regarder dans chaque fichier généré par catkin_create_pkg et décrire, ligne par ligne, chaque composante de ces fichiers et comment vous pouvez les personnaliser pour votre package. == Personnalisation du package.xml == Le fichier généré package.xml devrait déjà être dans votre nouveau package. Maintenant allons dans le fichier package.xml et regardons chaque élément. === Balise de description === Première ligne, la balise description : {{{#!xml The beginner_tutorials package }}} Modifier la description comme vous voulez, mais, par convention, la première phrase doit être courte tout en couvrant le champ d'application du package. S'il est difficile de décrire le package en une seule phrase, alors il faudra peut-être la couper. === La balises du responsable === Vient ensuite le maintainer tag : {{{#!xml user }}} Il s'agit d'une balise requise et importante pour le fichier package.xml , car il permet aux autres de savoir qui contacter au sujet du package. Au moins un nom de mainteneur est requis, mais vous pouvez en avoir plus si vous voulez. Le nom du responsable va dans le corps de la balise, mais il y a aussi l'attribut email qui doit être rempli: {{{#!xml Your Name }}} === La balise licence === La balise licence est également requise : {{{#!xml TODO }}} Vous devez choisir une licence et l'indiquer ici. Les licences open source les plus communes sont : BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1 et LGPLv3. Vous pouvez en apprendre plus sur la plupart d'entre elles à l' [[http://opensource.org/licenses/alphabetical|Open Source Initiative]] . Pour ce tutoriel, nous allons utiliser la licence BSD parce que la majorité des autres composants ROS l'utilisent déjà: {{{#!xml BSD }}} === Les balises de dépendances === La prochaine série de balises décrit les dépendances de votre package. Les dépendances sont divisées en 4 catégories : *build_depend, (dépendances pour la construction) *buildtool_depend, (dépendances pour les outils de construction) *run_depend, (dépendances pour l'exécution) *test_depend. (dépendances pour le test) Pour une explication plus détaillée de ces balises consultez la documentation sur les dépendances catkin [[http://wiki.ros.org/catkin/package.xml#Build.2C_Run.2C_and_Test_Dependencies| Catkin Dependencies]] Comme nous avons passé std_msgs, roscpp, et rospy comme arguments à catkin_create_pkg, la déclaration des dépendances ressemblera à ceci: {{{#!xml catkin roscpp rospy std_msgs }}} Toutes les dépendances que l'on avait déclarées à la création de notre package ont été ajoutées pour nous en tant que build_depend, en plus de la déclaration par défaut de buildtool_depend pour catkin (c'est le compilateur on est donc bien obligé de l'avoir. Pour les versions antérieures à la groovy le compilateur se nomme rosmake). Dans ce cas, nous voulons que toutes les dépendances spécifiées soient accessibles au moment de la construction et au moment de l'exécution, nous allons ajouter un tag run_depend pour chacun d'eux ainsi (ndt : il s'avère que pour la groovy les dépendances d'exécution sont déjà présentes) : {{{#!xml catkin roscpp rospy std_msgs roscpp rospy std_msgs }}} === Le package.xml final === Comme vous pouvez le voir le package.xml final, sans commentaires et sans les tags inutilisés, est beaucoup plus concis: {{{#!xml beginner_tutorials 0.1.0 The beginner_tutorials package Your Name BSD http://wiki.ros.org/beginner_tutorials Jane Doe catkin roscpp rospy std_msgs roscpp rospy std_msgs }}} == Personnalisation du CMakeLists.txt == Maintenant que le package.xml , qui contient des informations meta, a été adapté à votre package, vous êtes prêt à passer à la suite des tutoriels. Le fichier CMakeLists.txt créé par catkin_create_pkg sera abordé plus tard dans les didacticiels où vous écrirez du code ROS.