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
image1 image2

🤖 Rappels - Lancement du ROS Master et des services ROS sur le robot :

(tf2) user@host: $ ssh pi@poppy.local
pi@poppy.local password:
...

pi@poppy:~ $ env|grep ROS_MASTER
ROS_MASTER_URI=http://poppy.local:11311
pi@poppy:~ $ roslaunch poppy_controllers control.launch
...

💻 Maintenant dans un terminal sur ton ordinateur, avec l’EVP (tf2) désactivé :

(tf2) user@host: $ env|grep ROS_MASTER
ROS_MASTER_URI=http://poppy.local:11311

🐍 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 :

Tu dpos collecter quelques dizaines d’image pour l’entraînement du réseau de neurones.

Une les images réalisées, il faut mettre 90 % des images dans le dossier <project>/images/train et le reste dans le dossier <project>/images/test.