Les services sont une autre méthode de communication pour les nœuds (les nodes).
Les services sont basés sur un modèle d'appel/réponse (client / serveur) alors que les topics sont sur un modèle de publieur et abonné (publisher / subscriber).

Alors que les topics permettent aux nœuds de s’abonner à des flux de données et de recevoir des mises à jour en continu, les services ne fournissent des données que lorsqu’ils sont explicitement appelés par un client.

Un service ROS2 est donc constitué de deux éléments :

  • un serveur (service server) qui attend les requêtes ;
  • un client (service client) qui envoie une demande et attend une réponse.

Le fonctionnement est comparable à :

  • un navigateur web qui demande une page à un serveur ;
  • ou un programme qui demande une mesure ponctuelle à un capteur.

Les services sont particulièrement adaptés :

  • aux commandes ponctuelles ;
  • aux demandes de configuration ;
  • aux calculs à la demande ;
  • aux actions immédiates.

Exemples typiques :

  • demander la position actuelle d’un robot ;
  • remettre un compteur à zéro ;
  • activer ou désactiver un moteur ;
  • demander une photographie à une caméra ;
  • effectuer un calcul.

En revanche, les services ne sont pas adaptés aux données continues comme :

  • les images vidéo ;
  • les mesures lidar ;
  • les vitesses moteur ;
  • les flux de capteurs.

Dans ces cas, on utilise plutôt les topics.

../../../_images/Service-SingleServiceClient.gif

../../../_images/Service-MultipleServiceClient.gif

  • Pour lister les services: ros2 service list
    ou avec plus d'informations ros2 service type <service_name>
    pour voir le type de tous les services actifs ros2 service list -t 

rqt est un utilitaire très important pour observer les nodes, les topics et les services