ROS 1

Pense-bête pour ROS 1

ROS 1 est un middleware open-source, très utilisé en robotique. Sa prise en main nécessite de la pratique et repose uniquement sur le wiki. Je trouve cependant que les informations suivantes sont assez peu mises en avant au vu de leur apport pour le développement.

Se simplifier la vie

  • Utiliser zsh (bash amélioré permettant notamment de naviguer entre les résultats de l’autocomplétion, de réaliser des complétions automatiques à l’aide de l’historique,…). Après avoir installé zsh, il faut le définir comme interpréteur par défaut du système avec chsh en lui entrant /usr/bin/zsh (cela s’applique pour l’utilisateur l’appelant => comportement différents entre “chsh” et “sudo chsh”). Une re-connexion ou un re-démarrage de l’ordinateur sera nécessaire.

  • Utiliser oh-my-zsh en complément de zsh, il s’installe très facilement à l’aide de la commande invoquant curl ou wget dans le readme du projet. Ce paquet permet d’utiliser des thèmes ayant des fonctionnalités partiquehttps://doc.ubuntu-fr.org/terminators (telle que l’intégration git, affichant le nom de la branche et si le dépôt est à à jour…). J’ai une légère préférence pour le thème “agnoster” et son apparence de type powerline.

  • Sourcer le workspace à l’ouverture du terminal (ajouter la ligne source <ros_workspace_folder>/devel/setup.zsh au fichier .zshrc - cela peut s’applique aussi pour bash avec source <ros_workspace_folder>/devel/setup.zsh dans le .bashrc).

  • Créer un/des alias permettant de compiler et sourcer facilement le workspace de n’importe où en ajoutant les entrées suivantes dans le bashrc et/ou zshrc (j’ai choisi des touches doublées pour pas se poser de questions et ces dernières sont proches de mes doigts : rr et tt - Attention à bien mettre des chemins absolus afin de pouvoir appeler les commandes de n’importe où et de changer les commandes pour bash, les extensions “.zsh” doivent devenir “.bash”) :
    • alias tt="cd ~/<ros_workspace_folder> && catkin_make && source ~/<ros_workspace_folder>/devel/setup.zsh"
    • alias rr="source ~/<ros_workspace_folder>/devel/setup.zsh"
  • Utiliser terminator, qui permet d’ouvrir plusieurs terminaux dans la même fenêtre en la découpant verticalement ou horizontalement. Cet outil prend tout son intérêt en travaillant avec ROS !

  • Abuser de la tabulation (surtout avec zsh), cette dernière peut permettre jusqu’à la complétion de services ou topics (lors d’un appel ou d’une publication via le terminal : rosservice call ... ou rostopic pub ...)

L’incontournable

  • Les variables environnementales ROS_MASTER_URI et ROS_IP. Ces variables permettent de localiser un roscore sur un réseau local. Cela permet donc de distribuer une architecture logicielle sur un réseau (grand intérêt du middleware), afin notamment de superviser un programme à distance, de le débugger ou encore de distribuer des programmes gourmands sur une autre machine. Il suffit de taper : export ROS_MASTER_URI=http://<ip_roscore>:11311 et export ROS_IP=$(hostname -I) et de lancer les noeuds ou launchfiles via un roslaunch (qui détectera le roscore automatiquement). Un diagnostique rapide du fonctionnement peut être réalisé en lançant rqt, car il requiert un roscore pour fonctionner. Donc s’il se lance correctement on a une preuve que cela fonctionne. Attention à bien vérifier que le pare-feux permet cet échange (pour les utilisateurs de “gufw” par exemple). Une fois que l’on veut re-travailler avec un roscore local, il suffit de supprimer la variable ROS_IP et de remettre ROS_MASTER_URI à la bonne valeur : unset ROS_IP et export ROS_MASTER_URI=http://localhost:11311.

Diagnostiquer de potentiels problèmes

  • De temps en temps, il faut supprimer les dossiers “build” et “devel” qui sont dans le workspace, afin de re-compiler le/les projets de zéro et diagnostiquer des problèmes potentiels.

  • La commande roswtf permet de diagnostiquer de potentiels problèmes lorsque l’étape précédente est validée. Cette commande vérifie la cohérence des paquets (mauvaises dépendances,…) et se lance sur un launchfile.

  • Le test d’un launchfile peut-être complété par la commande suivante : [rosrun roslaunch roslaunch-check].

Les packets à connaître absolument

  • rqt : je ne pense pas que cela soit nécessaire de le présenter, cependant si ce dernier est mal connu, il faut le pratiquer un peu car c’est l’outil incontournable de ROS !

  • robot-upstart : permet de générer automatiquement un service (compatible systemd) démarrant le programme au démarage de la machine http://docs.ros.org/jade/api/robot_upstart/html/.

  • timed-roslaunch : permet de temporiser le démarage d’un roslaunch.

  • smach : permet de développer des machines à états (en Python) et de les visualiser facilement à l’aide de l’outil smach-viewer. Les tutoriels sont essentiels afin de bien en comprendre le fonctionnement.

Les fichiers de configuration

  • Sous Python, le format YAML est très utilisé avec ROS. C’est essentiel lorsque les paramètres sont tellement nombreux que ce n’est pas pratique de les appeler tous dans le launchfile. Ils doivent être placés dans le dossier config/ dudit paquet.

  • Sous C++, j’ai eu beaucoup de problèmes avec YAML et je n’ai pas vraiment creusé.

Tutos

Written on November 21, 2018