Enregistrement et lecture de données
Objectif : Enregistrer les données publiées sur un sujet afin de pouvoir les relire et les examiner à tout moment.
Niveau du tutoriel : Débutant
Durée : 10 minutes
Contenu
Arrière-plan
ros2 bag
est un outil en ligne de commande pour enregistrer les données publiées sur les sujets de votre système. Il accumule les données transmises sur un nombre quelconque de sujets et les enregistre dans une base de données. Vous pouvez ensuite rejouer les données pour reproduire les résultats de vos tests et expériences. L’enregistrement de sujets est également un excellent moyen de partager votre travail et de permettre aux autres de le recréer.
Conditions préalables
Vous devriez avoir ros2 bag
installé dans le cadre de votre configuration habituelle de ROS 2.
Si vous avez installé depuis Debians sur Linux et que votre système ne reconnaît pas la commande, installez-la comme suit :
sudo apt-get install ros-rolling-ros2bag \
ros-rolling-rosbag2-storage-default-plugins
Ce didacticiel aborde les concepts abordés dans les didacticiels précédents, tels que nodes et topics. Il utilise également le package turtlesim.
Comme toujours, n’oubliez pas de sourcer ROS 2 dans chaque nouveau terminal que vous ouvrez.
Tâches
1 Configuration
Vous enregistrerez votre entrée au clavier dans le système turtlesim
pour sauvegarder et rejouer plus tard, alors commencez par démarrer les nœuds /turtlesim
et /teleop_turtle
.
Ouvrez un nouveau terminal et exécutez :
ros2 run turtlesim turtlesim_node
Ouvrez un autre terminal et exécutez :
ros2 run turtlesim turtle_teleop_key
Créons également un nouveau répertoire pour stocker nos enregistrements sauvegardés, tout comme bonne pratique :
mkdir bag_files
cd bag_files
2 Choisissez un sujet
ros2 bag
ne peut enregistrer que les données des sujets publiés. Pour voir une liste des sujets de votre système, ouvrez un nouveau terminal et exécutez la commande :
ros2 topic list
Qui reviendra :
/parameter_events
/rosout
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
Dans le tutoriel des sujets, vous avez appris que le nœud /turtle_teleop
publie des commandes sur le sujet /turtle1/cmd_vel
pour faire bouger la tortue dans turtlesim.
Pour voir les données publiées par /turtle1/cmd_vel
, exécutez la commande :
ros2 topic echo /turtle1/cmd_vel
Rien ne s’affichera au début car aucune donnée n’est publiée par le téléop. Retournez au terminal où vous avez exécuté le téléop et sélectionnez-le pour qu’il soit actif. Utilisez les touches fléchées pour déplacer la tortue et vous verrez les données publiées sur le terminal exécutant ros2 topic echo
.
linear:
x: 2.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0
---
record de sac 3 ros2
Pour enregistrer les données publiées dans un sujet, utilisez la syntaxe de commande :
ros2 bag record <topic_name>
Avant d’exécuter cette commande sur le sujet de votre choix, ouvrez un nouveau terminal et déplacez-vous dans le répertoire bag_files
que vous avez créé précédemment, car le fichier rosbag sera enregistré dans le répertoire où vous l’exécutez.
Exécutez la commande :
ros2 bag record /turtle1/cmd_vel
Vous verrez les messages suivants dans le terminal (la date et l’heure seront différentes) :
[INFO] [rosbag2_storage]: Opened database 'rosbag2_2019_10_11-05_18_45'.
[INFO] [rosbag2_transport]: Listening for topics...
[INFO] [rosbag2_transport]: Subscribed to topic '/turtle1/cmd_vel'
[INFO] [rosbag2_transport]: All requested topics are subscribed. Stopping discovery...
Maintenant, ros2 bag
enregistre les données publiées sur le sujet /turtle1/cmd_vel
. Retournez au terminal téléop et déplacez à nouveau la tortue. Les mouvements n’ont pas d’importance, mais essayez de créer un motif reconnaissable pour voir quand vous rejouerez les données plus tard.

Appuyez sur Ctrl+C
pour arrêter l’enregistrement.
Les données seront accumulées dans un fichier bag avec un nom dans le modèle de rosbag2_year_month_day-hour_minute_second
3.1 Record multiple topics
Vous pouvez également enregistrer plusieurs sujets, ainsi que changer le nom du fichier dans lequel ros2 bag
enregistre.
Exécutez la commande suivante :
ros2 bag record -o subset /turtle1/cmd_vel /turtle1/pose
L’option -o
vous permet de choisir un nom unique pour votre fichier bag. La chaîne suivante, dans ce cas subset
, est le nom du fichier.
Pour enregistrer plus d’un sujet à la fois, listez simplement chaque sujet séparé par un espace.
Vous verrez le message suivant, confirmant que les deux sujets sont en cours d’enregistrement.
[INFO] [rosbag2_storage]: Opened database 'subset'.
[INFO] [rosbag2_transport]: Listening for topics...
[INFO] [rosbag2_transport]: Subscribed to topic '/turtle1/cmd_vel'
[INFO] [rosbag2_transport]: Subscribed to topic '/turtle1/pose'
[INFO] [rosbag2_transport]: All requested topics are subscribed. Stopping discovery...
Vous pouvez déplacer la tortue et appuyer sur Ctrl+C
lorsque vous avez terminé.
Note
Il existe une autre option que vous pouvez ajouter à la commande, -a
, qui enregistre tous les sujets de votre système.
Informations sur le sac 4 ros2
Vous pouvez voir les détails de votre enregistrement en exécutant :
ros2 bag info <bag_file_name>
L’exécution de cette commande sur le fichier bag subset
renverra une liste d’informations sur le fichier :
ros2 bag info subset
Files: subset.db3
Bag size: 228.5 KiB
Storage id: sqlite3
Duration: 48.47s
Start: Oct 11 2019 06:09:09.12 (1570799349.12)
End Oct 11 2019 06:09:57.60 (1570799397.60)
Messages: 3013
Topic information: Topic: /turtle1/cmd_vel | Type: geometry_msgs/msg/Twist | Count: 9 | Serialization Format: cdr
Topic: /turtle1/pose | Type: turtlesim/msg/Pose | Count: 3004 | Serialization Format: cdr
Pour afficher les messages individuels, vous devez ouvrir la base de données, dans ce cas sqlite3, pour l’examiner, ce qui dépasse le cadre de ROS 2.
5 ros2 jeu de sac
Avant de rejouer le fichier sac, entrez Ctrl+C
dans le terminal où le teleop est en cours d’exécution. Assurez-vous ensuite que votre fenêtre turtlesim est visible afin que vous puissiez voir le fichier bag en action.
Entrez la commande :
ros2 bag play subset
Le terminal renverra le message :
[INFO] [rosbag2_storage]: Opened database 'subset'.
Votre tortue suivra le même chemin que vous avez entré lors de l’enregistrement (mais pas exactement à 100 % ; turtlesim est sensible aux petits changements dans la synchronisation du système).

Parce que le fichier subset
a enregistré le sujet /turtle1/pose
, la commande ros2 bag play
ne se fermera pas tant que vous aurez turtlesim en cours d’exécution, même si vous ne bougez pas.
En effet, tant que le nœud /turtlesim
est actif, il publie des données sur le sujet /turtle1/pose
à intervalles réguliers. Vous avez peut-être remarqué dans l’exemple de résultat ros2 bag info
ci-dessus que l’information Count
du sujet /turtle1/cmd_vel
n’était que de 9 ; c’est le nombre de fois que nous avons appuyé sur les touches fléchées pendant l’enregistrement.
Notez que /turtle1/pose
a une valeur Count
supérieure à 3000 ; pendant que nous enregistrions, des données ont été publiées sur ce sujet 3000 fois.
Pour avoir une idée de la fréquence de publication des données de position, vous pouvez exécuter la commande :
ros2 topic hz /turtle1/pose
Résumé
Vous pouvez enregistrer les données transmises sur les sujets de votre système ROS 2 à l’aide de la commande ros2 bag
. Que vous partagiez votre travail avec d’autres ou que vous introspectiez vos propres expériences, c’est un excellent outil à connaître.
Prochaines étapes
Vous avez terminé les didacticiels « Débutant : Outils CLI » ! L’étape suivante consiste à aborder les didacticiels « Débutant : Bibliothèques clientes », en commençant par Créer un espace de travail.