Auteurs : Clément Durand et Hugo Bastien
Journée de prise en main de l'environnement ROS2
lien du tuto de la doc (Humble)
Il est possible de faire communiquer un publisher et un subscriber autour d'un même sujet. Le publisher envoie le message et le subscriber le lis :) On utlise les méthodes create_publisher et create_subscription de la classe Node :
self.publisher = self.create_publisher(type, "topic", queue_len)
self.subscription = self.create_subscription(type, "topic", callback_function, queue_len)
Dès que le subscriber détecte une entrée, la fonction callback se joue.
Il suffit d'utiliser la méthode create_timer :
self.timer = self.create_timer(timer_period, self.timer_callback)
le timer joue la fonction callback à chaque période.
lien du tuto de la doc (Humble)
ROS autorise la définition de types de message personnalisés en spécifiant leur structure dans un fichier .msg. Une bonne pratique est de définir un package pour définir les messages qui sera en dépendances des autres packages qui consommeront les messages.
ros2_ws/
└── src/
└── my_message_package/
├── package.xml
├── CMakeLists.txt
├── msg/
│ └── Custom.msg
└── ...
└── my_package/
├── package.xml
├── setup.py
├── src/
│ └── publisher.py
│ └── subscriber.py
└── ...
/!\ttention : la présence d'un CMakeLists.txt dans my_package rend la lecture du setup.py optionelle, il faut donc la spécifier sinon le build risque de ne pas fonctionner. Il faut ajouter l'instruction suivante :
install(PROGRAMS
src/publisher.py
src/subscriber.py
DESTINATION lib/${PROJECT_NAME}
)
/!\ttention #2 : il faut ajouter une entête aux fichiers pour spécifier le language utiliser au moment du build : pour python #!/usr/bin/env python3
En python, on utilise simplement la libraire sys pour récuperer la valeur de argv (voir la fonction main du node client).
lien du tuto de la doc (Humble)
la structure et l'architecture ressemble à celle du message custom, on remplace 'msg' par 'srv' :
ros2_ws/
└── src/
└── my_server_package/
├── package.xml
├── CMakeLists.txt
├── srv/
│ └── Custom.srv
└── ...
└── my_package/
├── package.xml
├── setup.py
├── src/
│ └── client.py
│ └── server.py
└── ...
Nous avons fait le choix de placer les spécifications de notre serveur et de notre message dans le même package auxiliaire.