Gestion des dépendances avec rosdep

Objectif : Gérer les dépendances externes à l’aide de rosdep.

Niveau du didacticiel : Intermédiaire

Durée : 5 minutes

Auteur : Steve Macenski

Ce tutoriel explique comment gérer les dépendances externes à l’aide de rosdep.

Qu’est-ce que le rosdep ?

rosdep est l’utilitaire de gestion des dépendances de ROS qui peut fonctionner avec les packages ROS et les bibliothèques externes. rosdep est un utilitaire de ligne de commande permettant d’identifier et d’installer des dépendances pour construire ou installer un paquet. Il peut être ou est invoqué lorsque :

  • Construire un espace de travail et avoir besoin de dépendances appropriées pour créer les packages à l’intérieur

  • Installez des packages (par exemple, sudo apt install ros-rolling-demo-nodes-cpp) pour vérifier les dépendances nécessaires à son exécution

  • et plus!

Il a la capacité de travailler sur un seul package ou sur un répertoire de packages (par exemple, un espace de travail).

Un peu sur les fichiers package.xml

Le fichier package.xml d’un paquet contient un ensemble de dépendances. Les dépendances de ce fichier sont généralement appelées « clés rosdep ». Ceux-ci sont représentés dans les balises <depend>, <test_depend>, <exec_depend>, <build_depend> et <build_export_depend>. Ils précisent dans quelle situation chacune des dépendances est requise.

  • Pour les dépendances utilisées uniquement pour tester le code (par exemple, gtest), utilisez test_depend.

  • Pour les dépendances utilisées uniquement dans la construction du code, utilisez build_depend.

  • Pour les dépendances nécessaires aux en-têtes que le code exporte, utilisez build_export_depend.

  • Pour les dépendances utilisées uniquement lors de l’exécution du code, utilisez exec_depend.

  • À des fins mixtes, utilisez depend, qui couvre les dépendances de temps de construction, d’exportation et d’exécution.

Ces dépendances sont renseignées manuellement dans le fichier package.xml par les créateurs du package et doivent être une liste exhaustive de toutes les bibliothèques et packages non intégrés dont il a besoin.

Comment fonctionne le rosdep ?

rosdep vérifiera les fichiers package.xml dans son chemin ou pour un paquet spécifique et trouvera les clés rosdep stockées à l’intérieur. Ces clés sont ensuite croisées avec un index central pour trouver le package ROS ou la bibliothèque de logiciels appropriée dans divers gestionnaires de packages. Enfin, une fois les packages trouvés, ils sont installés et prêts à fonctionner !

L’index central est connu sous le nom de rosdistro, qui peut être trouvé ici. Nous allons explorer cela plus en détail dans la section suivante.

Comment savoir quelles clés mettre dans mon package.xml ?

Excellente question, je suis content que vous l’ayez posée !

Pour les packages ROS (par exemple, nav2_bt_navigator), vous pouvez simplement placer le nom du package. Vous pouvez trouver une liste de tous les packages ROS publiés dans rosdistro à <distro>/distribution.yaml pour votre distribution ROS donnée.

Pour les dépendances système non-ROS, nous devrons trouver les clés d’une bibliothèque particulière. En général, il existe deux fichiers intéressants : rosdep/base.yaml et rosdep/python.yaml. base.yaml contient en général les dépendances du système apt. python.yaml contient en général les dépendances python pip.

Pour trouver une clé, recherchez votre bibliothèque dans ce fichier (de préférence ctrl+F, c’est long) et trouvez le nom dans yaml qui la contient. C’est la clé à mettre dans un fichier package.xml.

Par exemple, imaginez qu’un paquet ait une dépendance sur doxygen parce que c’est un excellent logiciel qui se soucie de la qualité de la documentation (indice indice). Nous chercherions base.yaml pour doxygen et tomberions sur :

doxygen:
  arch: [doxygen]
  debian: [doxygen]
  fedora: [doxygen]
  freebsd: [doxygen]
  gentoo: [app-doc/doxygen]
  macports: [doxygen]
  nixos: [doxygen]
  openembedded: [doxygen@meta-oe]
  opensuse: [doxygen]
  rhel: [doxygen]
  ubuntu: [doxygen]

Cela signifie que notre clé rosdep est doxygen, qui résoudrait ces différents noms dans les gestionnaires de packages de différents systèmes d’exploitation pour l’installation.

Et si ma bibliothèque n’est pas dans rosdistro ?

Si votre bibliothèque n’est pas dans rosdistro, vous pouvez découvrir la grandeur du développement de logiciels open source : vous pouvez l’ajouter vous-même ! Les demandes d’extraction pour rosdistro sont généralement fusionnées en une semaine.

Des instructions détaillées peuvent être trouvées ici pour savoir comment contribuer de nouvelles clés rosdep. Si, pour une raison quelconque, ceux-ci ne peuvent pas être contribués ouvertement, il est possible de bifurquer rosdistro et de conserver un index alternatif à utiliser.

Comment utiliser l’outil rosdep ?

Maintenant que nous avons une certaine compréhension de rosdep, package.xml et rosdistro, nous sommes prêts à utiliser l’utilitaire lui-même ! Tout d’abord, si c’est la première fois que vous utilisez rosdep, il doit être initialisé via :

sudo rosdep init
rosdep update

Cela initialisera rosdep et update mettra à jour l’index rosdistro mis en cache localement. C’est une bonne idée de mettre à jour rosdep à l’occasion pour obtenir le dernier index.

Enfin, nous pouvons exécuter rosdep install pour installer les dépendances. En règle générale, cela est exécuté sur un espace de travail avec de nombreux packages en un seul appel pour installer toutes les dépendances. Un appel pour cela apparaîtrait comme suit, s’il se trouve à la racine de l’espace de travail avec le répertoire src contenant le code source.

rosdep install --from-paths src -y --ignore-src

Décomposer cela :

  • --from-paths src spécifie le chemin pour vérifier les fichiers package.xml pour résoudre les clés pour

  • -y signifie par défaut oui à toutes les invites du gestionnaire de paquets pour installer sans invites

  • --ignore-src signifie ignorer les dépendances d’installation, même si une clé rosdep existe, si le paquet lui-même se trouve également dans l’espace de travail.

Des arguments et des options supplémentaires sont disponibles. Utilisez rosdep -h pour les voir.