Vision robotique

De Wiki TGE CSTwiki
Aller à la navigation Aller à la recherche

Présentation du projet

Le projet de vision robotique utilise la librairie open cv en python pour détecter des cibles dans une image.
le terme « vision robotique » signifie qu'un robot prend des décisions basées sur une image captée.
Au cégep nous utilisons des verres rouges sur fond gris (table tournante) comme cible.
Comme les verres ont tous la même couleur, il est simple de les identifier dans l'image en utilisant la fonction de détection de couleur de open cv.
Pour réaliser ce projet, nous avons besoin d'un ordinateur en linux avec webcam intégrée.
Ce projet a été développé par Raphaël Bouchard en 2025. le code d'exemple a été écrit par celui-ci au cégep de Sorel Tracy.
Aperçu du résultat
























Éditer la programmation Python

1. ouvrir le bloc note


2. Enregistrer le projet et le nommer avec un nom terminant en .py

Le fichier sera donc enregistré en document contenant du code python
 

3. Copier le code d'exemple et le coller dans le bloc-notes


import numpy as np
import cv2
import time



camera = cv2.VideoCapture(0)    # 0 = cam ordi / 2 = cam usb

while (1):
 
 ret, image = camera.read()
 image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) 
 rose_min = np.array([160, 80, 60], np.uint8)        # en HSV
 rose_max = np.array([179, 255, 255], np.uint8) 
 orange_min = np.array([0,80, 60], np.uint8)        # en HSV
 orange_max = np.array([15, 255, 255], np.uint8) 
 masque_orange = cv2.inRange(image_hsv, orange_min, orange_max)
 masque_rose = cv2.inRange(image_hsv, rose_min, rose_max)
 masque_rouge = masque_rose | masque_orange
 kernal = np.ones((5, 5), "uint8")
 masque_rouge = cv2.dilate(masque_rouge, kernal)
 
 
 contour, hierarchy = cv2.findContours(masque_rouge, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)       # cv2.RETR_EXTERNAL   ou   cv2.RETR_TREE
 

 num_cible = 1
 for pic, contour in enumerate (contour):
     aire = cv2.contourArea(contour)
     if (aire > 5000):
              
        x, y, l, h = cv2.boundingRect(contour)
        x_image = x
        y_image = y   
        milieu =(x_image + (l // 2)), (y_image + (h //2 ))   
        verre = cv2.circle(image, (milieu), (l // 2), (0, 255, 0), 5)
        cv2.circle(image, (milieu) , 5, (255, 0, 0), -1)                     #point au milieu des rond      
        num_cible_str = str(num_cible)
        cv2.putText(image, (num_cible_str), (x_image, y_image),cv2.FONT_HERSHEY_SIMPLEX, 2.5,(255, 0, 0),6)     
        num_cible =  (num_cible + 1)

 cv2.imshow("camera", image)

        
 if cv2.waitKey(10) & 0xFF == ord('q'):
   camera.release()
   cv2.destroyAllWindows()
   break



Lancer le programme

1. S'assurer d'avoir enregistré les modifications en faisant ctrl + S
2. Lancer le Terminal
3. entrer la commande suivante: python3 exemple.py
*Remplacer exemple par le nom du fichier bloc-notes choisis a l'étape 2 de la section programmation python.
4. Pour arrêter le programme et fermer l'image, appuyez sur la touche Q de votre clavier.
Si cela ne fonctionne pas, vous pouvez forcer le programme à s'arrêter en faisans ctrl + C dans le terminal.



Dépannage

Il est probable que en collant le code dans votre bloc-notes il ne se colle pas comme il le devrait.
En programmation python, L'indentation est très importante.
L'indentation c'est les espaces avant le début d'une ligne.
Chaque ligne doit débuter à la même place que la dernière.
si vous avez une erreur il se peut que vous devrez ajouter ou enlever un espace au début d'une ligne.
Attention, dans certains cas (dans une boucle while, for, if, etc.) il est normal que le code a l'intérieur de la boucle soit indenté.



fonctionnement du programme

Voici un logigramme expliquant les grandes étapes du programme:

lien entre le code et le logigrame:


1.


2.


3.


4.


5.


6.


7.


8.



Application du projet au cégep
La détection de couleur dans une image en direct peut servir a faire des projets de robotique au cégep.
Bien que la prog ci-dessus seule ne peut rien faire, c'est la base de plusieurs projets.
Nous pouvons par exemple, trier des cibles par couleur, calculer la position d'une cible, etc.
Avec une bonne maitrise de la programmation en texte vous pouvez utiliser ce projet avec les robots 6 axes ou les tables de positionnement.



Ce qui a déjà été réalisé

1:

En 2025, ce projet a été utilisé avec les robots ABB 6 axes.
Une webcam était installée sur la tête du robot afin de lui permettre de voir son environnement.
Le système de vision permettait de détecter un verre rouge placé n’importe où sur la table.
Le programme en Python analysait l’image captée par la caméra, calculait la position du verre et transmettait ces coordonnées au robot.
Le robot pouvait ensuite se déplacer automatiquement pour prendre le verre.


2:

Un deuxième projet a été réalisé à partir de ce programme, avec une approche plus simple.
Trois zones fixes étaient dessinées sur une feuille collée sur la table.
Des verres de différentes couleurs (vert, rouge et bleu) étaient placés dans ces zones.
Le système permettait de demander au robot une couleur précise.
Par exemple, si des verres de différentes couleurs sont placés dans chaque zone,
Le robot ira uniquement chercher le verre de la couleur demandée, sans toucher aux zones avec des verres de la mauvaise couleur.
Ce projet est plus simple que le premier, car il ne nécessite pas de calcul de position dans le programme Python. Les zones sont définies à l’avance sous :forme de robtargets fixes directement dans le robot.