Obtenir les images avec le robot
Acquis d'apprentissage visés :
- Savoir obtenir avec ROS les images d'une caméra placée sur un robot.
Type d'activité : ⚙️ [tâche]
Durée approximative : 60 minutes
Obtenir les images avec la caméra d’un noeud ROS
Les images à traiter sont obtenues en utilisant le service ROS /get_image
proposé par le robot Poppy Ergo Jr.
image001.png | image002.png |
---|---|
![]() |
![]() |
🤖 Rappels - Lancement du ROS Master et des services ROS sur le robot :
- allumer le robot Poppy Ergo Jr,
- se connecter sur la carte RPi du robot :
ssh poppy@poppy.local
(mdp:poppy
) - ✅ vérifier que
ROS_MASTER_URI
pointe bien verspoppy.local:11311
(tf2) user@host: $ ssh pi@poppy.local
poppy@poppy.local password:
...
poppy@poppy:~ $ env|grep ROS_MASTER
ROS_MASTER_URI=http://poppy.local:11311
-
si
ROS_MASTER_URI
ne pointe pas sur la bonne cible :- édite le fichier
~/.bashrc
du robot, - mets la bonne valeur, sauvegarde,
- puis tape
source ~\.bashrc
, - et vérifie la valeur de
ROS_MASTER_URI
…
- édite le fichier
-
Lance le ROS Master et les services ROS sur le robot avec la commande :
poppy@poppy:~ $ roslaunch poppy_controllers control.launch
...
💻 Maintenant dans un terminal sur ton ordinateur, avec l’EVP (tf2)
désactivé :
- ✅ vérifie que
ROS_MASTER_URI
pointe bien verspoppy.local:11311
(tf2) user@host: $ env|grep ROS_MASTER
ROS_MASTER_URI=http://poppy.local:11311
- si
ROS_MASTER_URI
ne pointe pas sur la bonne cible :- édite le fichier
~/.bashrc
de ton ordinateur, - mets la bonne valeur, sauvegarde,
- puis tape
source ~\.bashrc
- et vérifie la valeur de
ROS_MASTER_URI
…
- édite le fichier
🐍 Tu peux utiliser le programme Python get_image_from_robot.py
du dossier tod_tf2
pour enregistrer les images des cubes dans des fichiers nommées imagesxxx.png
(xxx
= 001
, 002
…).
Un appui sur une touche clavier permet de passer d’une image à l’autre, un appui sur la touche Q
permet de quitter le programme :
import cv2, rospy
from poppy_controllers.srv import GetImage
from cv_bridge import CvBridge
i=1
while True:
get_image = rospy.ServiceProxy("get_image", GetImage)
response = get_image()
bridge = CvBridge()
image = bridge.imgmsg_to_cv2(response.image)
cv2.imwrite(f"image{i:03d}.png", image)
cv2.imshow("Poppy camera", image)
key = cv2.waitKey(0)
if key==ord('q') or key==ord("Q"): break
cv2.destroyAllWindows()
i += 1
cv2.destroyAllWindows()
📍 En cas de conflit grave “ROS / EVP tf2 / PyQT” en utilisant le programme get_image_from_robot.py
tu peux désactiver temporairement l’EVP tf2 :
- soit en lançant un nouveau terminal,
- soit en tapant la commande
conda deactivate
Tu dois collecter quelques dizaines d’image pour l’entraînement du réseau de neurones.
Une fois les images collectées, il faut mettre 90 % des images dans le dossier <project>/images/train
et le reste dans le dossier <project>/images/test
.