Programmation de la machine Puzzle Bot

Gestion des actions de la machine principale (Programmation en C++)

Plan du programme

Cette partie de la machine a été réalisée via platformio auquel a été ajouté la bibliothèque Accelstepper (gestion des moteurs pas à pas)

Le programme est divisé en 5 types de fichier :

  • Programme principale (main.c) pour l’execution de toutes les instructions
  • Gestion des mouvements de la machine (zone de déplacement,zone de placement des pièces) via motion.h
  • Gestion de la saisie et du placement ainsi que la rotation des pièces par l’intermédiaire de actionneur.h
  • Réception et traitement des données reçues par la caméra en utilisant Déplacement_Caméra.h et Lecture.h
  • Définition des pins via PuzzleBoardDef.h

Plan du programme

Plan du programme

(programme disponible dans le dossier project sur le GitHub)

Déplacements

La partie lié au mouvement de la base mobile, gérée par l’intermédiaire de motion.h, permet le placement de la machine dans l’espace lors de l’initialisation, de la récupération des pièces et de l’emboitement du puzzle

Algorigramme pour le déplacement de la machine

Algorigramme Déplacement machine

Saisie et dépot des pièces de puzzle

Cette section du programme permet la gestion des actionneurs de la machine (Servomoteurs et Pompe) afin de pouvoir saisir, déposer ainsi que tourner les pièces si nécessaire

Algorigramme pour la saisie et le dépôt des pièces sur le plateau

Algorigramme saisie et dépot pièce machine

Traitement d’image et détection de marker avec OpenCV (programmation python)

Calcul de la matrice de distorsion de la camera

Avant de pouvoir detecter les marker, il faut calibrer la caméra. Plusieur étapes sont nécessaire pour calculer la matrice de distorsion afin de calibrer la caméra.

Il faut tout d’abord prendre plusieurs photos d’un damier avec la caméra (10 à 15 photos). les photos doivent être prises sous plusieurs angles différents. Une fois les photos prises, il faut lancer un programme qui calcul, à partir des images prises, la matrice de distorsion. cette matrice permet d’

Détection de Marker AruCo (Programme principale)

Concept et reflexion

Pour la partie vision du projet, le programme est réalisé en python avec plusieurs bibliothèque dont OpenCV avec la partie Aruco. Au départ, le but était de récupérer la distance entre les marker. Le problème avec cette méthode est le fait que l’on ne récupère que le rayon où se situe la pièce, ce qui ne n’indique aucunement son emplacement exacte par rapport au point d’origine (le marker 5). Par la suite nous sommes partis sur un système de coordonnées. En effe, le programme récupère (grâce à la caméra) les coordonnées ainsi que l’angle des marker attachés aux pièces de puzzle à partir d’un marker de repère.

Un autre problème rencontré lors de la conception fût avec le marker 5. Ce marker était cencé être placé sur la tête de la machine. Or cette partie étant trop haute, la caméra ne detecte plus le marker. La solution trouvé fut de placer le marker à l’opposé de la machine et de traité les calucul dans le programme.

Fonctionnement

Le programme commence par pendre une photo du plateau avec les pièces de puzzle. Un filtre noir et blanc est appliqué à la photo grâce à la bibliothèque OpenCV.

La biblioyhèque Aruco d’OpenCV nous permet d’utiliser les variables Tvec et Rvec de chaques marker. La variable Tvec (translation vector) contient les coordonnées d’un marker par rapport à un autre. Concernant Rvec (rotation vector), elle contient l’angle de rotation d’un marker par rapport à un autre. Une fois les coordonnées en x et y ainsi que l’angle de rotation des marker obtenus, ces données sont ensuite ajoutées à une liste (sous cette forme: liste[x,y,angle marker 1, x,y,angle marker2, x,y,angle marker3, x,y,angle marker4]). La liste est ensuite envoyer sur un port com vers la carte Arduino. Le calcul des coordonnées ainsi que des angles prend en compte la matrice de distorsion afin d’avoir des mesures correctes.

Pour finir la liste est envoyer sur un port communication vers la carte arduino.

Ci-dessous un algorigramme simplifiant la compréhension du fonctionnement du programme Algorigramme Détection de Marker Algorigramme du programme pour la detection de marker


This site uses Just the Docs, a documentation theme for Jekyll.