Robot Operating System

De Wiki LOGre
Aller à : navigation, rechercher


Suite à la Conférence ROS, donnée par Mo le 9 novembre 2016, plusieurs membres semblent intéressés pour se plonger dans ce framework qui peut faciliter la vie aux développeurs de robots ; cette page a pour but de recenser des infos et documentations sur le sujet.

Généralités

Robot Operating System, ou plus simplement ROS, est un framework (ou méta-système) dédié à la robotique, ou dit autrement, un ensemble d'outils et de librairies permettant de contrôler très facilement ds robots. Des drivers aux algorithmes de haut niveau, ROS contient tout ce qu'il faut pour votre projet ! Et c'est du logiciel libre :o)

De plus, ROS est très utilisé dans le monde de la recherche robotique, et, de fait, bénéficie de nombreux travaux universitaires ou privés dans le domaine.

Dans ce qui suit, on utilisera la terminologie anglaise.

Concepts

Packages

Les packages sont les entités principales d'un logiciels basé sur ROS. Un package peut contenir des exécutables, des librairies dépendant de ROS, des fichiers de configuration etc... Mais il ne doit pas contenir d'autres packages (on utilise pour ça des metapackages). Les packages peuvent être facilement ré-utilisés et partagés.

Distribution

Les distributions sont des collections de packages et/ou de metapackages versionnés que vous pouvez installer. Elles jouent un rôle similaires aux distributions linux : elles simplifient la vie pour l'installation et la maintenance des softwares ROS.

Nodes

Ce sont les process qui font le boulot. Par exemple, le node d'un robot publie les données odométriques, un autre node publie les données du scanner laser, etc.

Un node ROS est écrit à l'aide de la librairie cliente ROS (comme roscpp ou rospy).

Parameter server

Il permet de stocker les données ou paramètres de manière centralisée.

Messages

Les nodes communiquent les uns avec les autres via des messages. Ce sont de simples structures de données comprenant des champs typés (entiers, flottant, booléens, etc).

Les définitions des messages sont stockées dans le dossier msg d'un package, et utilisent l'extension .msg.

Topics

Un Topic est un nom utilisé pour identifier le contenu d'un message. Un node intéressé par un certain type de données souscrit au topic approprié. En général, les publieurs et souscripteurs n'ont pas connaissance les uns des autres. L'idée est de découpler la production d'information et son utilisation.

Services

Le modèle de publication/souscription est un paradigme de communication très flexible, mais son mode unidirectionnel many-to-many n'est pas approprié pour des interactions de type requête/réponse, qui sont souvent nécessaires dans les systèmes distribués.

Le mode requête/réponse se fait via des services, qui sont définis par une paire de structures de messages: l'une pour la requête, l'autre pour la réponse. Un node publieur offre un service sous un nom donné, et un client utilise ce service en envoyant un message de requête puis en attendant la réponse. Les librairies clientes de ROS présentent cette interaction au développeur comme un remote procedure call.

Les définitions des services sont stockées dans le dossier srv et utilisent l'extension .srv.

Bags

Ils permettent de sauver et rejouer des messages.

Master

C'est principalement un service d'enregistrement. Sans lui, les nodes ne pourraient pas s'identifier les uns les autres.

Le master agit comme un service : il stocke les informations d'abonnement aux topics et services par les nodes ; ces derniers communiquent avec le master pour l'informer de leurs abonnements. Ils reçoivent également les informations d'abonnement des autres nodes, et établissent alors les connexions appropriées. le master informera également les nodes des changements qui peuvent survenir dans les abonnements, ce qui permet aux nodes existants de créer dynamiquement des connexions avec les nouveaux nodes exécutés.

Les nodes communiquent entre eux directement : le master ne fournit qu'une table d'enregistrement, comme un serveur DNS. Les nodes qui s'abonnent à un topic reçoivent alors les infos de connexions aux nodes qui publient sur ce topic, et établissent eux-mêmes cette connexion suivant un protocole défini, le plus courant étant TCPROS, qui utilisent les socket TCP/IP.

La figure suivant montre comment les topics et services fonctionnent entre nodes et master :


ROS basic concepts.png


Il faut donc un et un seul node master en exécution pour utiliser ROS !

Concepts de haut niveau

tf

Robot model

filters

plugins

En pratique

Arborescence type d'un workspace catkin

catkin_ws/
├── build/
├── CMakeLists.txt -> /opt/ros/kinetic/share/catkin/cmake/toplevel.cmake
├── devel/
└── src/
    ├── package_1/
    ├── package_2/
    ├── ...
    └── package_n/

Arborescence type d'un package

package_1/
├── action/
├── CMakeLists.txt
├── cmake/
├── documents/
├── gazebo/
├── images/
├── launch/ - fichiers de lancement (permet de démarrer plusieurs nodes)
├── manifest.xml
├── materials/
│   └── textures/
├── meshes/ - objets 3D
├── msg/ - définitions des messages
├── package.xml
├── resource/
├── robots/
├── scripts/ - scripts Python/bash
├── srv/ - définitions des services
└── urdf/ - robot description files

Principaux packages

tf, opencv, openni, cloud point,...

TODO

AVR et Arduino

Outils principaux

Catkin

Catkin est le système de construction de packages pour ROS. C'est une évolution de rosbuild, le système précédent, et simplifie pas mal de choses. Il s'appuie sur cmake et des scripts python.

TODO

Commandes

  • relatives aux packages :
    • rospack find/depends/list/export/plugins
    • roscreate-pkg
    • rosmake
    • rosdep
    • rxdeps
    • roscd
    • rosed
    • roscp
    • rosd
    • rosls
  • relatives aux nodes :
    • rosnode info/kill/list/machine/ping/cleanup
    • rosrun
  • relatives aux topics :
    • rostopic bw/echo/find/hz/info/list/pub/type
  • relatives aux messages :
    • rosmsg show/list/package/packages/users/md5
  • relatives aux services :
    • rosservice call/find/info/list/type/uri
  • relatives aux bags :
    • rosbag
    • rxbag (deprecated)
    • rqt_bag
  • relatives au parameter server :
    • rosparam list/get/set/delete/dump/load

Debug et introspection

  • nodes :
    • rosconsole
    • rxconsole (deprecated)
    • rqt_console
    • rxplot (deprecated)
    • rqt_plot
    • rxgraph (deprecated)
    • rqt_graph

Documentation

Tutoriaux

Résumé

À garder sous le coude (même si basé sur la distribution Indigo)...

https://github.com/ros/cheatsheet/releases/download/0.0.1/ROScheatsheet_catkin.pdf

Liens

Contrôleurs compatibles ROS

Liste de contrôleurs (ou petits projets incluant un contrôleur) compatibles ROS :

Projets utilisant ROS