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...).

Première mise en route !

Après maintenant 6 semaines de modélisation, d’impression et d’assemblage, nous testons pour la première fois l’électronique de notre robot. Même s’il ne s’agit que de tester que tout soit correctement alimenté (bonne tension et bon ampérage), ce test est primordial. De plus nous testons notre système “barrel jack” qui doit permettre au robot d’être alimenté tout en laissant la rotation (360°) possible.  Nous avons bien fait de réaliser ce test car nous avons relevé un dysfonctionnement ! En effet, notre robot ne c’est pas allumé du premier coup… Ironie du sort, notre multimètre nous a est tombé en panne la veille… Nous avons donc dû déboguer avec “les moyens du bord” (une LED et une résistance qui nous ont permis de mettre en évidence la présence d’une tension dans le système).

Notre système d’alimentation est le suivant :

  • Une alimentation externe convertie le 220v en 12v. La sortie de l’alimentation est alors directement connecté sur le “barrel jack”.
  • Le “barrel Jack” est ensuite connecté sur notre carte d’alimentation (faite maison) qui convertie le 12 V en plusieurs tensions (5 V, 3.3 V...).
  • Le “barrel Jack” est aussi connecté en parallèle à l’Arduino afin d’alimenter l’électronique de puissance nécessaire aux actionneurs.

Lorsque nous avons branché l’alimentation externe, la carte d’alimentation qui comporte des LEDs témoins ne se sont pas allumé ainsi que les autres cartes… La phase de débogage a commencé ! Afin d’être plus clair, la “LED” permet de décrire le montage “résistance + LED” que nous avons réalisé sur une breadboard. Nous avons connecté le moins (commun au système) de notre alimentation sur notre breadboard. Et nous avons utilisé une sonde afin de fermer le circuit à différent endroit du bras pour allumer la “LED” et cartographier la panne.

Cependant, peut importe le point de touche, la “LED” s’est toujours allumé !! (cela signifie que nous avons en permanence une tension dans notre circuit – Mais pourquoi rien ne s’allume ?!)

Une hypothèse nous est venu à l’esprit : Et si notre fil de masse commun était en défaut et ne permettait pas de fermer le circuit ? Cela expliquerait ainsi la raison pour laquelle la LED s’allumait tout le temps lors de notre précédant test. En effet en utilisant la masse de l’alimentation externe, le circuit était toujours fermé et donc un courant pouvait circuler. En fermant le circuit avec un autre fil de masse (sur une de nos cartes), nous avons vérifié notre hypothèse.

Il s’agissait maintenant de trouver le lieu de la “rupture” du fil de masse (mauvaise soudure, fil déconnecté, ...). Pour cela nous avons cherché à tester la continuité de notre fil de masse. Nous avons pour cela inversé la polarité (en ayant au préalablement pris le soin de déconnecter l’ensemble des cartes en terminaison du circuit) et cartographié une nouvelle fois le circuit. Nous nous sommes alors rendu compte que la source du problème provenait du “barrel jack”. Le fil de masse n’avait pas été soudé sur la bonne broche du connecteur…

Une opération (chirurgicale) a alors été entreprise afin de souder le fil. Problème : il est impossible à ce stade du projet d’y accéder facilement…

Une fois sur la table d’opération, nous avons commencé à souder la broche vers un nouveau fil de masse.

Une fois remonté on vérifie que tout fonctionne :)

 

 

 

Electronique: carte de distribution

Afin de diminuer les longueurs de câble et faciliter le débogage plus tard, nous avons réalisé une carte qui permet d’interfacer et distribuer les différents actionneurs avec la carte de contrôle.

Intégration: Arduino et Raspberry pi

Notre bras doit être piloté via deux cartes : un Arduino pour la partie contrôle des actionneur et un Raspberry pi (3B) pour l’acquisition et le traitement des images.

Nous avons prévu deux emplacements dans le bas du dôme afin d’y loger les deux cartes.

Assemblage: jamais 2 sans 3

Une fois n’est pas coutume, nous n’avons pas pris en compte les problématiques de montage lors de la conception. En effet, les servos moteur ont une connectique dépassant du corps qui nécessite une ouverture.

De plus, une fois intégré dans leur emplacement respectif, il n’était plus possible d’assembler la suite des pièces (manque d’espace).

 

Assemblage : mauvaise surprise (la suite)

Il est facile de se tromper entre son index et son majeur lorsque l’on tape une valeur : nous en avons fait les frais. En effet, “4.3 cm” est devenu “3.4 cm” ce qui pose problème à l’assemblage…

Cependant, avec un peu d’ingéniosité, d’un fer à souder et de patience, il est possible de corriger toutes ces erreurs.

 

Assemblage : mauvaise surprise...

Lors du processus de montage, nous nous sommes aperçu que nous avions mal estimé la hauteur de l’axe du servo avec celle du bras. Résultat : ce n’est pas aligné, nous devons donc trouver une solution à ce “petit problème”

La première solution consistait à créer une cage dans laquelle, le servo moteur serait rehaussé et emprisonné afin de corriger le problème d’alignement.

Cependant la cage est beaucoup trop grosse, comparé à la place disponible sur le plateau supérieur du bras. Ce problème de place créer aussi un problème de déséquilibre qu’il faut corriger. Voici la version 2 de la correction.

 

Moteurs et actionneurs

Grâce à Dennis (la tempête) nous avons pu avancer les différents programmes qui permettront de contrôler les moteurs et actionneurs du robot.

Assemblage du dôme

On avance dans les impressions, le dôme est maintenant terminé ! Composé de huit pièces, le dôme est la colonne vertébrale du robot. En effet, il permet de distribuer l’alimentation, les commandes, et le mouvement au reste du bras.

Le dôme est découpé en deux éléments principaux, eux-mêmes composés de quatre pièces. La partie basse supporte les moteurs et les futures cartes de contrôle (Raspberry pi et Arduino méga). Le dôme tournant sur lui-même, nous avons conçu un système lui permettant de tourner sur lui-même sans emmêler les câbles d’alimentation.

La partie basse montée, nous avons assemblé la partie supérieure du dôme qui contient une rainure permettant de guider les billes du futur roulement. Les quatre pièces sont maintenues en place avec des barres d’acier de 8 mm. La partie supérieure et liée à la partie inférieure à l’aide de quatre vis M3 (comme pour le moyeu d’un volant de voiture).

 

Une fois le tout lié, nous avons rajouté les câbles qui permettront de piloter le bras.

Une fois le tout monté nous avons lié la base avec le dôme.

Des tests de rotation manuels ont été réalisés, pour valider le fonctionnement général de la base et du dôme ensemble. Nous nous sommes rendu compte que le dôme avait tendance à se déplacer autour du centre. Les conséquences directes sont un roulement plus difficile ainsi qu’un possible blocage du dôme. Dans une moindre mesure la perte de bille du roulement est possible. Pour contrer ces effets, nous avons modélisé et imprimé des “petits triangles” qui sont placés tout autour pour contenir le dôme.

Il nous reste maintenant que l’impression et assemblage du bras ainsi que quelques pièces de la pince.

 

Fin de la modélisation 3D

Après maintenant 5 semaines de modélisation, nous venons d’achever la modélisation de notre bras robot ! La version 1 de notre bras a une taille totale d’environ 80 centimètres :)

Assemblage de la Base

Cette opération qui devait être “simple” (coller quatre pièces ensemble) a été plus complexe que prévu. En effet, les pièces imprimées se sont légèrement déformé durant l’impression, ce qui créer de léger décalage.

Nous avons donc dû procéder à de légère “modification” pour un assemblage parfait.

 

Le plastique utilisé étant du PLA, il est facile de le faire fondre pour apporter des modifications post impression. L’idée ici étant de raboter certaines des pièces. Nous avons chauffé la lame d’une scie à métaux pour obtenir une coupe nette sans forcer.

 

Après correction, les pièces sont encollées deux à deux afin d’avoir deux blocs formant la base.

Finalement nous obtenons la base pratiquement finie qui n’attend plus que le Dôme.

 

Premiere Impression 3D : la base (3/4 et 4/4)

La base, après 5 jours d’impression consécutif est ENFIN imprimé ! Prochaine étape, fixer les quatre parties entres elles et les ajuster pour un alignement parfait. L’alignement des pièces étant important pour le roulement à billes.

Modélisation du robot : la pince (2/2)

La pince est maintenant terminée. Le but de celle-ci est de pouvoir attraper les futurs cibles (évidemment). Celle-ci s’inspire d’un modèle déjà existant qui est visible ici

Ci-dessous une capture du modèle réalisé : 

Impression des engrenages du Dôme

Le Dôme doit tourner sur lui-même pour atteindre toutes les cibles dans toutes les directions. Nous avons retenu un système dit “de tourelle de char” reposant sur deux moteurs et un système d’engrenage. Le Dôme est posé sur la Base et repose sur des billes d’acier contenues dans un guide circulaire (une sorte de grand roulement à billes). Les moteurs situés dans le dôme, actionnent des pignons, qui s’opposeront à la base fixé sur le plateau. Ce qui permettra au Dôme de tourner sur lui-même.

Les moteurs seront surmontés de pignons qui sont présentés ci-dessous

 

 

Premiere Impression 3D : la base (2/4)

Pas de répit pour l’imprimante 3D ! Aussitôt le premier quart fini que le deuxième quart a été lancé ! Nous avons maintenant une moitié de base complétée !

Premiere Impression 3D : la base (1/4)

Deuxième jour d’impression 3D. Hier tout n’a pas fonctionné comme prévu. Mais aujourd’hui tout va pour le mieux ! À la fin de la journée nous avons enfin eu le premier quart de la base.

Quelques images pour illustrer :

     

     

Temps d’impression de la pièce : environ 11 heures.

La machine est maintenant lancée ! Plus que trois autres morceaux ! 

Premiere Impression 3D : la base (0.5/4)

Les impressions ont maintenant commencé !  Il y a peu de temps, nous avions présentés les plans de la base du robot, elle a été coupée en 4 grandes pièces identiques, pour pouvoir être imprimée sur la surface de l’imprimante que nous possédons.


Quelques heures de patience sont maintenant nécessaires, mais c’est bien parti :



Après 30 minutes :


 


A en voir l’avancement, le résultat est convaincant ! Mais la partie supérieure de la pièce ne pourra pas s’imprimer correctement … Nous avons tout simplement oublié de configurer le “Support Material” dans Slic3r.
Comme son nom l’indique, le “support material” ajoute du plastique en plus de la pièce souhaitée dans l’objectif de simplifier la suite de l’impression (imaginez construire un pont sans faire de piles, c’est compliqué, non ?).

La pièce a été arrêtée en cours de route, pas le choix. Voici tout de même ce que cela donne.

Bon cette pièce n’est pas totalement un échec pour autant. Elle a permis de vérifier que l’emplacement pour les billes du roulement était à la bonne taille et que les bille pouvaient rouler “librement” dessus. De plus les dents de l’engrenage sont plutôt bien réussies et bien définies.

 

Bon aller on recommence demain et on obtiendra le premier quart de la base !

 

Modélisation du robot : la pince (1/2)

Dans le même temps, un travail a été commencé sur la pince qui est au bout du bras. Ainsi les doigts de la pince ont été modélisés.

Il s’agit d’une première étape, la suivante concernera mise en place du système de mise en mouvement et l’interface avec le bras. Ci-dessous le plan de la modélisation :

Modélisation du robot : la base

Après plusieurs heures de prises en main du logiciel Freecad, nous venons de finir notre première pièce !

L’objectif est de réaliser une tourelle venant se loger au centre de cette base :)

À très bientôt !

Début du projet ! Première construction & réunion

Bonjour à tous !

Le projet ASTRE (pour Autonomous System for TRash Elimination) vient de commencer !

Le projet s'étalera sur une période de 3 mois (janvier à mars 2020). Cette première semaine aura été rythmée par plusieurs échanges, recherches et la réponse finale du CNES (projet PARABOLE). Même si nous n'avons réussi à nous sélectionner au projet PARABOLE initiée par le CNES, nous tenions à réaliser ce projet et réaliser un POC (Proof Of Concept) de notre idée !

Nous venons de dessiner nos premières esquisses du bras robotique et allons bientôt commencer la modélisation 3D. L'installation des différents environnement de développement sur les différentes machines vient de s'achever et nous réalisons déjà les benchmarks (test de performance) des différents ordinateur embarqués en notre possession (Raspberry pi, Banana pi...) afin de choisir le futur cerveau de notre robot.

Finalement, nous avons fini la future plateforme du robot qui nous permettra de le transporter et de faire les tests de calibrations :) !!

Ps : Chaque carreau fait 5 cm.