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.

image2

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

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

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

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

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

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

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.