Voyager dans le temps (Python)
Objectif : En savoir plus sur les fonctionnalités avancées de voyage dans le temps de tf2.
Niveau du didacticiel : Intermédiaire
Durée : 10 minutes
Contenu
Arrière-plan
Dans le didacticiel précédent, nous avons abordé les bases de tf2 et du temps. Ce tutoriel nous emmènera un peu plus loin et exposera une astuce puissante de tf2 : le voyage dans le temps. En bref, l’une des principales caractéristiques de la bibliothèque tf2 est qu’elle est capable de transformer des données dans le temps ainsi que dans l’espace.
Cette fonctionnalité de voyage dans le temps tf2 peut être utile pour diverses tâches, comme surveiller la pose du robot pendant une longue période ou construire un robot suiveur qui suivra les « pas » du leader. Nous allons utiliser cette fonctionnalité de voyage dans le temps pour rechercher des transformations dans le temps et programmer turtle2
pour suivre 5 secondes derrière carrot1
.
Voyage dans le temps
Tout d’abord, revenons à l’endroit où nous nous sommes arrêtés dans le didacticiel précédent Utiliser le temps. Accédez à votre package learning_tf2_py
.
Maintenant, au lieu de faire aller la deuxième tortue là où se trouve la carotte, nous allons faire aller la deuxième tortue là où se trouvait la première carotte il y a 5 secondes. Modifiez l’appel lookup_transform()
dans le fichier turtle_tf2_listener.py
pour
when = self.get_clock().now() - rclpy.time.Duration(seconds=5.0)
trans = self.tf_buffer.lookup_transform(
to_frame_rel,
from_frame_rel,
when,
timeout=rclpy.duration.Duration(seconds=0.05))
Maintenant, si vous exécutez ceci, pendant les 5 premières secondes, la deuxième tortue ne saurait pas où aller car nous n’avons pas encore d’historique de 5 secondes des poses de la carotte. Mais que se passe-t-il après ces 5 secondes ? Essayons simplement :
ros2 launch learning_tf2_py turtle_tf2_fixed_frame_demo.launch.py

Vous devriez maintenant remarquer que votre tortue se déplace de manière incontrôlable comme dans cette capture d’écran. Essayons de comprendre la raison derrière ce comportement.
Dans notre code, nous avons posé la question suivante à tf2 : « Quelle était la pose de
carrot1
il y a 5 secondes, par rapport àturtle2
il y a 5 secondes ? ». Cela signifie que nous contrôlons la deuxième tortue en fonction de l’endroit où elle se trouvait il y a 5 secondes ainsi que de l’endroit où se trouvait la première carotte il y a 5 secondes.Cependant, ce que nous voulons vraiment demander est : « Quelle était la pose de
carotte1
il y a 5 secondes, par rapport à la position actuelle de latortue2
? ».
API avancée pour lookup_transform()
Pour poser au tf2 cette question particulière, nous utiliserons une API avancée qui nous donne le pouvoir de dire explicitement quand acquérir les transformations spécifiées. Cela se fait en appelant la méthode lookup_transform_full()
avec des paramètres supplémentaires. Votre code ressemblerait maintenant à ceci :
when = self.get_clock().now() - rclpy.time.Duration(seconds=5.0)
trans = self.tf_buffer.lookup_transform_full(
target_frame=to_frame_rel,
target_time=rclpy.time.Time(),
source_frame=from_frame_rel,
source_time=when,
fixed_frame='world',
timeout=rclpy.duration.Duration(seconds=0.05))
L’API avancée pour lookup_transform_full()
prend six arguments :
Cadre cible
Le temps de se transformer en
Cadre source
L’heure à laquelle la trame source sera évaluée
Cadre qui ne change pas dans le temps, dans ce cas le cadre
monde
Temps d’attente pour que le cadre cible soit disponible
Pour résumer, tf2 fait ce qui suit en arrière-plan. Dans le passé, il calculait la transformation de la carotte1
au monde
. Dans le cadre du monde
, le temps tf2 voyage du passé au présent. Et à l’heure actuelle, tf2 calcule la transformation du world
à la turtle2
.
Vérification des résultats
Recommençons la simulation, cette fois avec l’API avancée de voyage dans le temps :
ros2 launch learning_tf2_py turtle_tf2_fixed_frame_demo.launch.py

Et oui, la deuxième tortue est dirigée là où se trouvait la première carotte il y a 5 secondes !
Résumé
Dans ce tutoriel, vous avez vu l’une des fonctionnalités avancées de tf2. Vous avez appris que tf2 peut transformer des données dans le temps et appris comment le faire avec l’exemple turtlesim. tf2 vous a permis de remonter dans le temps et de faire des transformations de trame entre les anciennes et actuelles poses de tortues en utilisant l’API avancée lookup_transform_full()
.