[Documentation] [TitleIndex] [WordIndex

Note: This tutorial assumes that you have completed the previous tutorials: Comprendre les nodes ROS.
(!) Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags.

Comprendre les Topics ROS

Description: Ce tutoriel introduit les concepts de Topics sous ROS ainsi que l'utilisation des outils en ligne de commande rostopic et rqt_plot.

Tutorial Level: BEGINNER

Next Tutorial: Comprendre les Services & paramètres ROS

Setup

roscore

Commençons par vérifier que Roscore fonctionne, dans un nouveau terminal:

$ roscore

Si vous aviez laissé roscore en fonction à la fin du tutoriel précédent, vous devriez obtenir le message d'erreur suivant:

C'est tout à fait normal. Nous n'avons besoin que d'une seule instance de roscore en service.

turtlesim

Nous allons une nouvelle fois utiliser Turtlesim dans ce tutoriel. Dans un nouveau terminal, entrez:

$ rosrun turtlesim turtlesim_node

turtle keyboard teleoperation

Nous allons également avoir besoin de quelque chose pour diriger notre tortue. Dans un nouveau terminal:

$ rosrun turtlesim turtle_teleop_key

Désormais, vous pouvez utiliser les touches fléchées du clavier pour diriger la tortue. Si ce n'est pas le cas, n'oubliez pas de sélectionner la fenêtre de terminal où le node turtle_teleop_key s'exécute afin que les appuis sur les touches soient effectivement reçus.

Maintenant que vous êtes capables de diriger votre tortue, voyons ce qu'il se passe en coulisses.

Les Topics ROS

Les nodes turtlesim_node et turtle_teleop_key communiquent entre eux à travers un Topic ROS. turtle_teleop_key publie les actions sur les touches du clavier via ce topic, tandis que le node turtlesim souscris à ce même topic afin de recevoir ces actions. Utilisons rqt_graph qui montrera les nodes et topics actuellement actifs.

Note: Si vous utilisez (encore) la distribution electric ou antérieure, rqt n'est pas disponible. Utilisez rxgraph à la place.

Utilisation de rqt_graph

rqt_graph va créer un graphique dynamique représentant l'état du système. rqt_graph est inclus dans le package rqt. Si vous ne l'avez pas encore installé, lancez les commandes suivantes:

En remplaçant évidemment <distro> par le nom de la distribution que vous avez installé (hydro, indigo, jade, etc.)

Dans un nouveau terminal:

$ rosrun rqt_graph rqt_graph

Vous devriez obtenir l'ouverture de la fenêtre suivante:

rqt_graph_turtle_key.png

Si vous déplacez votre souris au dessus de /turtle1/command_velocity, cela devrait mettre en relief les nodes ROS (ici en vert & bleu), et les topics (en rouge). Comme vous pouvez le voir, les nodes turtlesim_node et turtle_teleop_key communiquent à travers le topic nommé turtle1/command_velocity.

rqt_graph_turtle_key2.png

Introduction à l'utilitaire rostopic

L'utilitaire rostopic permet d'obtenir des informations concernant les topics ROS.

Utilisez l'option help pour lister les sous-commandes de rostopic:

$ rostopic -h

Utilisons quelques-unes de ces sous-commandes pour inspecter le fonctionnement de turtlesim.

Utilisation de rostopic echo

rostopic echo permet d'afficher les données publiées par un Topic.

Utilisation:

rostopic echo [topic]

Voyons les données du topic command velocity publiées par le node turtle_teleop_key.

Pour ROS Hydro et ultérieurs, cette donnée est publiée via le topic /turtle1/cmd_vel. Dans un nouveau terminal, lancer la commande:

$ rostopic echo /turtle1/cmd_vel

Pour ROS Groovy et précédents, cette donnée est publiée via le topic /turtle1/command_velocity. Dans un nouveau terminal, lancer la commande:

$ rostopic echo /turtle1/command_velocity

Vous ne verrez probablement rien parce qu'aucune donnée n'est actuellement publiée dans le topic. Faisons publier quelques données par turtle_teleop_key en appuyant sur les touches fléchées.

Souvenez vous: si la tortue ne bouge pas à l'écran, sélectionnez le terminal dans lequel 'tourne' turtle_teleop_key.

Pour ROS Hydro et ultérieurs, vous devriez désormais voir quelque chose de similaire à ci-dessous, lorsque vous appuyez sur la touche 'flèche haut' du clavier:

linear:
  x: 2.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0
---
linear:
  x: 2.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0
---

Pour ROS Groovy et précédents, vous devriez voir quelque chose de similaire à ci dessous:

---
linear: 2.0
angular: 0.0
---
linear: 2.0
angular: 0.0
---
linear: 2.0
angular: 0.0
---
linear: 2.0
angular: 0.0
---
linear: 2.0
angular: 0.0

Maintenant, retournons jeter un oeil sous rqt_graph. cliquer sur le bouton 'refresh' (coin supérieur gauche de la fenêtre) pour visualisez le nouveau node. Comme vous pouvez le voir, rostopic echo, ici en rouge, a également souscrit au topic turtle1/command_velocity (ou pour les distribs hydro & ultérieures, turtle1/cmd_vel)

rqt_graph_echo.png

Utilisation de rostopic list

la commande rostopic list renvoie une list de tous les topics actuellement souscrits & publiés.

Voyons maintenant ce que la sous commande list prend en arguments. Dans un nouveau terminal, lancer:

$ rostopic list -h

Si l'on utilise rostopic list avec l'option verbose:

$ rostopic list -v

Cela va afficher une liste 'bavarde' des topics publiant et souscrivants ainsi que leurs types.

ROS Messages

La communication entre topics s'effectue par l'envoi de messages ROS entre les différents nodes.

Si l'on considère la communication entre le publisher (turtle_teleop_key) et le subscriber (turtlesim_node), ceux-ci doivent envoyer et recevoir le même type de message. Cela signifie en fait que le type de topic est défini par le type de messages qu'il utilise. Le type de message à envoyer vers un topic particulier peut être déterminé en utilisant la commande rostopic type.

Utilisation de la commande rostopic type

rostopic type renvoie le type de message de chaque topic publié.

Utilisation:

rostopic type [topic]

Pour ROS Hydro et suivants,

Pour ROS Groovy et précédents,

Maintenant que nous savons quel type de messages turtlesim attend, nous pouvons commencer à publier (envoyer) des ordres à notre tortue.

rostopic la suite

Nous avons vu la composition des messages ROS, voyons maintenant l'utilisation des messages avec rostopic.

Utilisation de rostopic pub

rostopic pub publie les données vers un topic actif.

Fonctionnement:

rostopic pub [topic] [msg_type] [args]

Pour ROS Hydro et ultérieurs, exemple:

$ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

Pour ROS Groovy et antérieurs, exemple:

$ rostopic pub -1 /turtle1/command_velocity turtlesim/Velocity  -- 2.0  1.8

Cette commande va envoyer un message unique vers turtlesim, lui ordonnant de se déplacer selon une vitesse linéaire de 2.0 et une vitesse angulaire de 1.8.

Cet exemplet est un peu complexe, voyons chaque argument de la commande en détail.

Pour ROS Hydro et ultérieurs,

Pour ROS Groovy et antérieurs,

You may have noticed that the turtle has stopped moving; this is because the turtle requires a steady stream of commands at 1 Hz to keep moving. We can publish a steady stream of commands using rostopic pub -r command:

For ROS Hydro and later,

For ROS Groovy and earlier,

This publishes the velocity commands at a rate of 1 Hz on the velocity topic.

We can also look at what is happening in rqt_graph, The rostopic pub node (here in red) is communicating with the rostopic echo node (here in green):

rqt_graph_pub.png

As you can see the turtle is running in a continuous circle. In a new terminal, we can use rostopic echo to see the data published by our turtlesim:

Using rostopic hz

rostopic hz reports the rate at which data is published.

Usage:

rostopic hz [topic]

Let's see how fast the turtlesim_node is publishing /turtle1/pose:

$ rostopic hz /turtle1/pose

You will see:

Now we can tell that the turtlesim is publishing data about our turtle at the rate of 60 Hz. We can also use rostopic type in conjunction with rosmsg show to get in depth information about a topic:

For ROS Hydro and later,

For ROS Groovy and earlier,

Now that we've examined the topics using rostopic let's use another tool to look at the data published by our turtlesim:

Using rqt_plot

Note: If you're using electric or earlier, rqt is not available. Use rxplot instead.

rqt_plot displays a scrolling time plot of the data published on topics. Here we'll use rqt_plot to plot the data being published on the /turtle1/pose topic. First, start rqt_plot by typing

$ rosrun rqt_plot rqt_plot

in a new terminal. In the new window that should pop up, a text box in the upper left corner gives you the ability to add any topic to the plot. Typing /turtle1/pose/x will highlight the plus button, previously disabled. Press it and repeat the same procedure with the topic /turtle1/pose/y. You will now see the turtle's x-y location plotted in the graph.

rqt_plot.png

Pressing the minus button shows a menu that allows you to hide the specified topic from the plot. Hiding both the topics you just added and adding /turtle1/pose/theta will result in the plot shown in the next figure.

rqt_plot2.png

That's it for this section, use Ctrl-C to kill the rostopic terminals but keep your turtlesim running.

Now that you understand how ROS topics work, let's look at how services and parameters work.

Video Tutorial

The following video presents a small tutorial using turtlesim on ROS nodes and ROS topics.


2019-10-19 12:42