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.
Durée approximative : 30 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.
🤖 Rappels - Lancement du ROS Master et des services ROS sur le robot :
- allumer le robot Poppy Ergo Jr,
- se connecter à la carte RPi du robot :
ssh poppy@poppy.local
(mdp:poppy
) - ✅ vérifier que
ROS_MASTER_URI
du robot pointe bien vershttp://localhost:11311
(tf2) user@host: $ ssh pi@poppy.local
poppy@poppy.local password:
...
poppy@poppy:~ $ env|grep ROS_MASTER
ROS_MASTER_URI=http://localhost: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 de nouveau la valeur de
ROS_MASTER_URI
…
- édite le fichier
-
Lance le ROS Master et les services ROS utiles avec la commande :
poppy@poppy:~ $ roslaunch poppy_controllers control.launch
...
💻 Maintenant dans un autre terminal sur ton ordinateur, avec l’EVP (tf2)
activé :
- ✅ vérifie que
ROS_MASTER_URI
de ton ordinateur pointe bien vershttp://poppy.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 de nouveau la valeur de
ROS_MASTER_URI
…
- édite le fichier
🐍 Tu peux utiliser le programme tod_tf2/get_image_from_robot.py
pour enregistrer les images des cubes dans des fichiers nommées imagesxxx.png
(xxx
= 001
, 002
…).
Un appui sur une touche clavier fait passer d’une image à l’autre, 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()
⚠️ Il faut désactiver l’EVP tf2 pour lancer le programme get_image_from_robot.py
dans l’environnement Python par défaut (celui qui a servi à installer ROS) :
- 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 environ 90 % des images dans le dossier <project>/images/train
et le reste dans le dossier <project>/images/test
.