Logo du projet Astre Logo de l'école IMT Atlantique
Bienvenue sur le site du projet ASTRE (Autonomous System for TRash Elimination)
Ce projet s'inscrit dans le cadre d'un module d'apprentissage dénommé MGP 320 : "Projet de développement" de l'école IMT Atlantique.
Réalisé par trois étudiant d'IMT Atlantique en formation par apprentissage (Romain NICOLAS, Maxime COUSIN, Guillaume VILLENA), Le projet ASTRE vise à travailler sur une solution qui allie vision par ordinateur et robotique dans l’objectif de créer un bras robotisé autonome capable de détecter, suivre et capturer un objet. Ce projet s’inscrit dans un contexte de récupération des débris spatiaux. En sortant du cadre spatial, ce projet peut s’appliquer à de nombreux autres domaines qui touchent à la vision par ordinateur pour le tri d’objet comme dans les centres de tri par exemple.
</div> </div> </div>
Fin ? [COVID19]

Comme vous le savez sûrement, la COVID-19 paralyse la France et l’Europe actuellement. De ce fait, l’ensemble de l’équipe projet a dû rentrer chez elle.

Malheureusement le projet est au point mort étant du fait que chacun des membres est confiné. Nous vous tiendrons au courant de l’évolution dans les prochaines semaines, s’il y en a.

Menuiserie & Machine Vision : mise en place de l'environnement de simulation

Maintenant que notre bras est opérationnel, nous devons réaliser un environnement contrôlé afin de pouvoir répéter nos tests et expériences de façon contrôlé. Nous devons maitriser l’ensemble des paramètres.

C’est dans cette optique que nous avons réalisé un fond blanc qui nous permettra de bien distinguer la cible/le débris à attraper (dans notre cas une boule noire d’un diamètre de 6 cm). Après avoir acheté des tasseaux et un tissu blanc, nous avons imprimés les équerres et fabriqué le support. Une fois construit, il ne restait plus qu’à tendre le tissu.

Une fois le fond blanc construit, nous avons commencé à positionner les caméras afin de couvrir le maximum de champ de vue possible. Les deux webcams permettront de détecter le débris. Nous traduirons la position du débris comme un point dans l’espace et en déterminerons une trajectoire (après plusieurs captures).

Le fonctionnement global a été décrit juste avant. Néanmoins quelques explications supplémentaires sont nécessaire pour comprendre comment les deux caméras fonctionne ensembles pour trouver la position de l’objet dans l’espace. Chacune des caméras prend simultanément une image du même objet dans un repère différent, mais ayant au moins un des axes commun. Par exemple les plans XZ et YX Sur chacune des images, la détection du centre de l’objet est appliquée. On obtiendra alors deux positions dans chacun des plans en x, z et en y, x. Etant donnée qu’une des deux coordonnées est commune, il est alors possible de calculer une position sur trois coordonnées facilement. Lorsque correctement calibré, un objet possèdera exactement la même coordonnée sur l’un des axes commun (ici z). Ainsi nous avons la coordonnée de l’objet dans l’espace 3D. Si on répète quelques fois le processus on obtient alors une suite de position dans le temps qui peuvent permettre de déterminer une trajectoire approximative.


Le fonctionne est résumé sur les illustrations suivantes :

Ce qui nous donne le shéma complet suivant :

Code : Développement d'un détecteur de contour avec openCV

Afin de pouvoir rendre “intelligent” notre bras, nous devons lui donner la vue. L’objectif est de pouvoir, via des caméras, détecter les cibles (débris), d’extraire de l’image une coordonné de l’objet et de calculer la trajectoire de l’objet. Pour ce faire, nous allons utiliser des ressources disponibles sur dans la bibliothèque d’outils Open CV afin de réaliser la détection de contour.

Une fois que le contour est obtenu, la forme de l’objet est approximée par un rectangle, qui permet ensuite de calculer facilement un point correspondant au centre de l’objet. Ce centre sera ainsi “facilement” trackable. Dans l’image ci-dessous, le point vert correspond au centre calculé à la suite de la détection du contour et de l’aproximation par rectangle.

Code : Implémentation de la manette

Le robot étant maintenant totalement opérationnel. Nous venons de réaliser les différents programmes (python et Arduino) afin d’implémenter la possibilité d’utiliser une manette comme contrôleur principal du bras robot (en attendant de placer et faire fonctionner la vision par ordinateur).

Les essais sont concluants.

Nous réaliserons le jour de notre soutenance une démonstration “d’agilité” et de précision du robot afin d’en démontrer les performances.

 

Assemblage : système de levage à poulie

Une fois imprimé en moins de 48 heures :D, nous avons pu intégrer notre nouveau système sur notre bras et valider son fonctionnement. Impressionnant n’est-ce pas ? À noter, une légère découpe a dû être créée pour laisser passer les câbles (cf. photo 3).

Modélisation : système de levage à poulie

Une fois la corde achetée (car tout le reste est modélisable et imprimable en 3D :), nous avons établis les différentes contraintes du système de levage :

  1. Le système doit être capable de lever le bras peut importe l'angle du bras :
    • Résistance mécanique du système
    • Pas de contrainte de taille 
    • Ne doit pas déséquilibrer le bras dans sa globalité 
  2. Le système doit pouvoir s’intégrer dans la base du dôme afin de profiter des systèmes d’assemblage déjà existant

Nous avons alors réalisé les schémas suivants :

Et avons modélisé l’assemblage de pièces suivant :

 

Retour sur la planche à dessin !

“Comment actionner la base de notre bras ?” Cette question aura eu finalement 5 réponses et 5 systèmes diamétralement différents. Du système d’artillerie permettant de gérer l’élévation à un simple système de poulies, ces 5 solutions sont présentées ci-dessous :

  • Le premier système consistait à utiliser une vis sans-fin et un écrou afin de modifier l’angle d’inclinaison du bras. 
  • La deuxième méthode consistait à rajouter des leviers sur l’axe de pivot du bras et augmenter la surface de contact avec les moteurs.
  • La troisième méthode consistait à faire un système de poulie afin de réaliser un système de levage. 
  • La quatrième méthode consistait à utiliser un système d’engrenage monté sur l’axe de pivot du bras ainsi qu’une visse sans fin pour faire tourner l’engrenage.
  • La cinquième méthode consistait à utiliser un système ce rapprochant des roues de train à vapeur afin de transmettre le mouvement du moteur à une roue connecter à l’axe de pivot du bras via une bielle.

Après avoir réfléchis à toutes nos méthodes, nous sommes allés dans un magasin de bricolage afin de tester toutes nos solutions et trouver de nouvelle idée avec l’ensemble des pièces présente dans les rayons. Après plus de 3 heures d’essai et de recherche, nous nous sommes arrêtés à la solution N°3. La méthode de levage par un système de poulie est la solution la plus intégrable dans notre robot. Elle ne nécessite pas de modification lourde du robot et offre le plus grand angle et une réalisation simple.

Assemblage : au point mort ...

Sortie de route lors de la dernière ligne droite de l’assemblage… Les “cardans” qui devaient transmettre le mouvement des moteurs au bras n’ont pas assez de surface de contact avec l’axe qui supporte le bras. Nous ne sommes donc pas capable avec notre système de transmettre le mouvement du moteur au bras.

Nous devons donc penser à un nouveau système afin de faire bouger notre bras !

Électronique: carte d'alimentation

En plus de notre première carte d’alimentation, nous avons dû concevoir une seconde carte d’alimentation afin de supporter la consommation du Raspberry pi qui nécessite au moins 5 V/3 A. Nous avons réalisé la carte visible ci-dessous.

Même si cette carte fonctionne, nous supposons un problème de répartition de la charge entre les trois régulateurs. Théoriquement, nous devrions en sortie 5 V/9 A (ce qui est largement suffisant pour le Raspberry pi). Mais dans les faits, un seul des trois régulateur chauffe très fortement (d’où la présence d’un ventilateur et de radiateurs). Des investigations sont en cours.

Assemblage: La pince

La pince, est la pièce nécessitant le plus de précision à l’assemble. Cette dernière est composée de :

  • 3 doigts
  • 3 leviers agissants sur les doigts
  • 1 étoile qui assure la transmission du mouvement aux leviers
  • 1 vis sans fin
  • 1 cage composée de 5 pièces :
    • le support moteur
    • l’attache avec le bras
    • 3 tiges faisant la liaison entre le support moteur et l’attache

Tous ces éléments assemblé, nous obtenons une belle pièce de 500 g (À ce stade, nous ne sommes pas certains que les servos moteurs des parties inférieures soient capables de supporter une telle pièce...).