Projet ROB3 (Diyana, Émile, Rayan, Matthieu, Pierre-Louis, Esteban)
1. Présentation et organisation
1.1. Objectif général
Dans le cadre de notre Projet ROB3, nous devons concevoir un robot autonome capable de déplacer un objet depuis une position initiale vers une position finale définie à l’intérieur d’une arène. Celui-ci, doit être constitué d’un chariot mobile de type unicycle, d’un bras à 1 DDL en parallélogramme vertical, et d’une pince montée à l’avant. Il doit pouvoir saisir l’objet donné à un emplacement précis qui sera donné par l’arbitre le jour de l’évaluation. L’objet présente une zone “amincie”, imposant alors une prise précise à notre robot.
Ces positions n’étant pas connues à l’avance, il est donc nécessaire de concevoir un robot capable de se déplacer tout en détectant son environnement afin d’ajuster sa trajectoire, d’éviter tout obstacle, sans aucune interaction humaine.
Ce projet mobilise alors 3 pôles complémentaires qui seront chacun pilotés par différents responsables :
- Pôle mécanique : conception du châssis, du bras et gestion des différentes contraintes physiques associées → Matthieu
- Pôle électronique : câblage des éléments, connexions entre composants, et veiller à l’alimentation de la batterie, du bon fonctionnement des capteurs, servomoteurs, capteurs… → Rayan
- Pôle Informatique : développement des comportements du robot (déplacement, pince, capteurs…) → Pierre-Louis
Ces pôles seront alors coordonnés par un responsable chargé de la planification, et l’organisation générale des différentes tâches de chacun ainsi que la cohésion des différents groupes → Esteban
Afin de permettre une collaboration efficace et équilibrée, il a été décidé que les tâches seraient réparties selon les affinités de chacun, sur tous les membres de l'équipe, sans limiter obligatoirement les membres à un seul pôle.
2. Réalisation
2.1 Séance 1 : Introduction
- 13/02/25 -
Dans cette première séance d'introduction, nous avons commencé par découvrir les attendus du projet, le matériel fourni ainsi que les fichiers et documentations disponibles sur le Wiki. Suite à nos premiers échanges, nous avons pu convenir d'un premier modèle de conception pour notre machine, permettant alors de poser les bases de notre organisation et de définir les tâches à répartir pour chaque pôle dans notre diagramme de Gantt.
Nous avons ainsi abouti à un schéma général de notre stratégie de conception :
L’agencement global du robot a été pensé en représentant notre châssis et les différents éléments répartis. Le bras est défini sur tout le châssis. Il est alors articulé selon 2 liaisons pivots (1, 2 sur le schéma) afin permettre le mouvement vertical tout en conservant la forme de parallélogramme imposée.
Nous avons également décidé de la position des capteurs : un à l’avant au niveau de la pince pour détecter l’objet en face du robot, et un second capteur sur le côté droit pour permettre un suivi du mur lors des déplacements.
En parallèle, nous avons entamé les premiers tests techniques, en nous concentrant sur les capteur à ultrasons. L’objectif est de confirmer leurs comportements afin de préparer leur intégration dans le code principal. Pour obtenir une mesure fiable en centimètres de la part du capteur, une documentation en ligne particulièrement claire et complète, a permis de répondre à toutes nos questions.
Ressources : https://www.gotronic.fr/pj2-guide-us-hc-sr04-compatible-arduino-2309.pdf
2.2 Pôle mécanique
- 06/03/25 -
2.2.1 Conception du bras du robot :
a) Choix de l'architecture
Un des premiers problèmes rencontrés pour cette conception a été lié au placement des éléments sur le châssis. En effet, il a fallu respecter la contrainte de garder une grande partie du bras sur le châssis. Nous avons donc déterminé que placer sa base en arrière permettait d'assurer une meilleure stabilité, faciliter les calculs de bras de levier et d'optimiser les déplacements. Cependant, cette configuration implique qu'en position basse, le bras occuperait une grande partie du châssis, environ égale à sa projection sur celui-ci. On aurait alors une zone s'étendant sur quasi toute la longueur du châssis dite zone morte où aucun composant ne peut être placé.
Schéma à main levée, en bleu : châssis, en rouge : zone morte
Afin de contourner cette contrainte, nous avons pensé à 3 idées différentes pour l'implantation du bras :
- Idée 1 : Placer le bras au centre du châssis
Le bras est composé de 2 bielles montées sur des liaisons pivots, connectées à deux pièces latérales (B1 et B1') fixées au châssis par encastrement. La pièce B2 assure la continuité vers l’avant jusqu’à la pince.
- Idée 2 : Bras articulé via 2 bielles de part et d'autre du châssis
Les bielles B1 et B2 montées sur pivots, sont chacune reliées à un support moteur : A1 à droite et A2 à gauche. Les moteurs auraient ainsi été installés sur deux supports indépendants, chacun positionné de part et d’autre du châssis et relié directement vers la bielle associée.
- Idée 3 : Positionner 2 bielles sur une des extrémités du châssis
La pièce B1 agit comme bielle motrice, montée sur le support A1. La bielle B2, située juste à côté, complète le montage parallélogramme en se reliant à l’extrémité de l'élément e qui prolonge le bras vers l’avant.
Avantages & Inconvénients :
Les idées 2 et 3 facilitaient l'organisation des composants sur le châssis laissant plus d'espace pour l'intégration d'autres composants. Cependant, elles se révèlent plus complexes pour la conception puisque la(es) liaison(s) encastrement(s) nécessaires pour fixer solidement la partie du bras perpendiculaire (de longueur d sur l'idée 3) aux autres éléments étaient difficilement réalisables compte tenu de la largeur limitée de bois disponible.
b) Bras final :
Nous nous sommes finalement orientés vers une dérivée de la première option : 2 bielles sont alignées et fixées au chassis différemment. La bielle avant agit comme une bielle motrice : elle est vissée à un moteur par deux vis assurant la transmission du mouvement. Ce moteur est lui-même fixé au chassis à l'aide d'un support, monté serré au châssis grâce à un système de cales ajustées.
La bielle arrière est quant à elle directement maintenue entre deux pièces supports de par et d'autre de la bielle, et fixées par une vis. L'écart étant très petit, le jeu reste négligeable. De la même manière, ces supports sont montés serrés au châssis à l'aide de cales, assurant une fixation sans jeu. Le mouvement de pivot est rendu possible grâce à l'espace libre précisément permis entre les supports, ce qui permet à la bielle de tourner autour de son axe.
Le dernier élément du bras, qui supporte la pince, est de forme arquée. En effet, dans une première version, on avait fait une pièce droite qui rentrait en collision avec la partie de la bielle connectée au moteur lors de la descente maximal du bras. La forme arquée permet donc de résoudre ce problème.
La pièce relie latéralement aux extrémités des deux bielles grâce à des roulements connectés par 2 vis transversales. Elle permet de maintenir une distance fixe entre les bielles même en l'absence de parallélogramme. Toutefois, les vis reliant les bielles à cette pièce flottaient légèrement, ce qui engendrait un jeu. Pour y remédier, nous avons entouré les vis de papier scotch afin de combler l'espace des trous fait et améliorer l’adhérence.
Ainsi voici une première version détaillée avec mesure de notre système. En effet, après mesure, en sachant que nous avions à disposition du bois de 3.00 ou 6.00 mm, est 13/14 n'étant pas des multiples de 3, nous avions au préalable convenu que nous partirions sur une pièce large de 12mm (3+6+3) et que nous rajouterions des chutes très fines de bois pour approcher les 13.5 cm.
Schéma bras avec mesures et solution de maintien du capteur IR
Au final, toutes les pièces ont été modélisées sur mesure dans SolidWorks, nous permettant alors d'ajuster les dimensions :
- bielle
- pièce arquée : choisie par rapport à la pince
- support moteur
- support bielle
- cales
Elles ont ensuite été obtenues par découpe laser dans du bois de 6 mm d'épaisseur pour assurer une robustesse. Un axe d'amélioration aurait été d'augmenter la longueur des bielles pour que celle en avant soit moins en collision avec les câblages.
Pour garantir la compatibilité de cette structure avec l'ensemble du robot, il a été nécessaire de travailler en étroite collaboration avec la conception du châssis et la fixation des roues à celui-ci, pour éviter tout conflit d'espace.
2.2.2 Conception et usinage du châssis
Notre châssis a été usiné par découpe laser à partir d'une plaque rectangulaire de 6 mm d'épaisseur avec des extrémités arrondies. Il a été pensé pour être suffisamment long et large pour accueillir :
- Une mini plaque Labdec
- Une batterie 12V
- Une carte Arduino UNO et son CAN BUS Shield
- Le bras monté
- Les supports/moteurs
Sa modélisation sur SolidWorks a été faite en prenant en compte la mesure de ces différents composants.
Comme vu, les supports du bras et des moteurs devaient être parfaitement intégrés au châssis. Nous avons donc réalisé 5 découpes rectangulaires en longueur réparties de part et d'autre de la surface. Ces ouvertures permettent d'emboîter les supports du bras et des moteurs, qui comportent eux-mêmes deux trous rectangulaires en largeur. Dans chacun de ces trous, nous avons inséré des cales rectangulaires par le dessus et le dessous du châssis, de manière à bloquer fermement chaque support par serrage. Nos moyens de fixation permettent toujours un assemblage rigide mais toujours démontable en cas d'ajustement de l'assemblage. Un trou circulaire a également été percé à l'avant pour la roue folle. Un trou également pour permettre le cable management. On note que la largeur du châssis est plus grande que prévu à l'arrière du châssis du fait d'une erreur sur les mesures de la batterie qui ont été données.
2.2.3 Fixation des roues
Pour que le robot puisse rouler et donc bouger dans l'espace, nous avons utilisé les deux moteurs donnés. Les moteurs sont positionnés symétriquement dans le milieu arrière du châssis. Nous avons ainsi commencé par fixer les roues directement sur les axes moteurs. Cela permis grâce à des pièces rouges fournies avec le kit. Ainsi dès que les moteurs sont alimentés, les roues arrières tournent. Les moteurs ont ensuite été vissés sur des plaques/supports que nous avons préalablement insérées dans les découpes du châssis. Le montage au châssis a été vu plus haut. Enfin, pour la roue folle à l'avant nous avons simplement fait passer la vis de la roue par le dessous du châssis et bloqué le tout avec un écrou. Ces dispositions permettent alors un mouvement fluide du robot.
Support moteur avec trous moteurs + découpes rectangulaires
2.2.4 Support pince / capteurs
a) Pince
La pince est placée à l'extrémité de l'élément arquée du bras du robot, de façon à ce qu'elle soit abaissée (axe z) par rapport au plan du châssis. Ce choix a été guidé par des contraintes techniques. Si la pince avait été alignée avec le bras ou à hauteur du châssis, alors nous ne pourrions pas attraper le "totem" car ne correspondrait pas par rapport au mouvement permis.
Pour assurer le maintien de la pince au bras, nous avons dû nous soumettre à sa conception imposée : deux supports à trous d'épaisseur 3 mm pour encadrer notre pièce en arc grâce à des vis. Afin de garantir un bon maintien sans jeu, nous avons encore enroulé du scotch au niveau des vis. Les deux pattes de la pince espacées d'un écartement inconnu. Nous avons d'ailleurs placé un bout d'élastique entre les deux pattes de la pince pour que l'objet à attraper adhère mieux.
b) Capteur infra-rouge
Deux supports spécifiques ont été conçus pour fixer les capteurs. Le premier a été placé au-dessus de la pince, sur la pièce arquée à l'avant du bras. Son support a été découpé de manière à l'encadrer de face, ce qui lui permet de tenir en équilibre et rester perpendiculaire au bras. Grâce à cette orientation, le capteur est directement tourné vers l'avant, ce qui lui permet de détecter tout objet se trouvant devant le robot, en particulier pour la saisie du totem. Pour le capteur du côté droit : on applique le même processus de fixation au châssis qu'avec la bielle en l'adaptant au support encadrant le capteur.
2.2.5 Assemblage mécanique final
L'assemblage final a été réalisé progressivement après avoir réalisé individuellement toutes les pièces modélisées. Chaque élément a été monté manuellement sur le châssis selon les découpes prévues. Pour assurer un bon ajustement nous avons parfois dû recommencer certaines pièces ou ajuster avec du scotch lorsque le jeu était trop important.
L'ensemble du bras a été monté sur les supports fixés au châssis. Cependant, lors des premiers tests, le bras ne parvenait pas à remonter correctement après avoir été abaissé. Il s'est avéré que le moteur seul ne fournissait pas suffisamment de couple pour soulever l'ensemble du bras et de la pince (à moins de modifier ça dans le programme mais pas optimal). Pour résoudre cela, nous avons installé un élastique, tendu entre l'arrière du châssis et l'arrière du bras. Ce dispositif agit comme une force de rappel en aidant le moteur lors de la remontée du bras.
L'organisation des composants sur le châssis a été pensée afin d'optimiser l'espace tout en répartissant bien les différentes masses. Ainsi :
- La batterie 12V a été placé à l'arrière du châssis, le poids le plus lourd donc au niveau des deux roues motrices
- La carte Arduino Uno sur le côté droit, proche du capteur de droite
- La plaque Labdec de l'autre côté afin de centraliser les connexions et faciliter l'arrangement des câbles
- Le moteur à l'avant (vu)
Enfin, l'ensemble du montage a principalement été conçu pour qu'il soit démontable. De manière générale, toutes les pièces ont été fixés à l'aide de vis, boulons, ou bien par montage ce qui a nous a été très utile au fil du projet pour faire circuler les différents composants entre les différents pôles.
Assemblage quasi-final (manque capteur latéral et serflex pour tenir les câbles) en cours de programmation
2.2 Pôle électronique
Après plusieurs séances consacrées aux tests des composants, à la recherche de schémas de câblage et à la consultation des documents techniques, nous avons pu valider le bon fonctionnement de chacun des éléments ainsi que leur mode d'emploi avant leur intégration.
- Moteurs KTECH : Nous les avons d'abord alimentés un à un avec 12V, pour nous assurer que tout marchait.
- Pince 3551 : nous avons globalement alimenté le servo avec le 5V de l'Arduino et défini un court programme test afin de le tester. Le but était de s'assurer que la pince via le servo ouvrait/fermait bien ses pattes.
- Capteurs ultrasons HC-SR04 : De la même manière nous l'avons branché sur l'Arduino et utilisé un code test pour afficher les distances mesurées. Cela nous a permis de vérifier que le signal revenait bien et que les valeurs étaient cohérentes.
Une fois cela fait, nous avons pu établir une documentation claire et structurée des branchements de l'ensemble des éléments électroniques. Le but est de résumer et d'anticiper les connexions à réaliser pour chaque composant. Cette doc garantie une compréhension commune des branchements à effectuer pour tous les membres du groupe.
Documentation branchements
Composants :
→ pin quelconque : à adapter selon le code
Pince 3551 avec servomoteur intégré :
Branchements avec CAN BUS SHIELD :
- Fil noir = masse → GND du CAN BUS
- Fil rouge = puissance du servo (Vservo, borne positive) → Vin du CAN BUS
- Fil blanc = signal d’asservissement du servomoteur, commande → pin quelconque
- (Fil vert = Potentiomètre = lire l'angle position du moteur, nécessaire pour réguler la commande → pin quelconque analogique)
Capteurs de distance à ultrasons HC-SR04 :
Branchements avec CAN BUS SHIELD
Pour les 2 capteurs :
- Fil rouge → Vcc = + 5V
- Fil bleu → trig = Émission des ultrasons, on lance la mesure → pin quelconque
- Fil vert → echo = Renvoie la durée du retour de l'écho, calcul la distance → pin quelconque
- Fil noir → GND = masse de l’alimentation
Moteurs KTECH MS4015-V3 :
Branchements avec batterie et CAN BUS SHIELD (I = 0.06A si alimentation)
Pour les 3 moteurs :
- 2 fils rouges liés → + 12V pince croco / borne +
- 2 fils noirs → masse (un nécessaire) pince croco / borne -
- Fil bleu H → borne CAN H du CAN BUS
- Fil jaune L → borne CAN L du CAN BUS
Soudure à réaliser :
- 2 fils rouges capteurs ultrasons + un fil rouge pince servo moteur → + 5V CAN
- 2 fils GND capteurs ultrasons → GND CAN
Le montage a été réalisé progressivement, en suivant les plans de câblage définis et en travaillant en accord avec le pôle informatique par rapport à la connexion Arduino.
Pour obtenir un résultat propre nous avons fait une gestion des câbles pour éviter les croisements inutiles.
Nous avons notamment percé un trou dans le châssis pour faire passer les fils du moteur à travers. Les fils rouge (alimentation) ont été regroupés d'un côté d'un bornier connecté à la mini Labdec, tandis que les fils noirs ont été mis de l'autre côté. Même chose avec les fils de signal CAN bleu H et jaune L.
2.3 Pôle Informatique
2.3.1 Description brève du code
Pour mettre en route le robot, on appuie sur un bouton poussoir. Le programme se résume ainsi :
- On enregistre des mesures initiales pour déterminer la distance latérale de référence par rapport au mur grâce au capteur. Cela permet au robot de s'orienter.
- Le robot avance le long du mur en ajustant en continu sa trajectoire pour qu'elle soit parallèle au mur en fonction des mesures du capteur, on le fait en fixant la distance mesurée par le capteur IR latéral. En effet, l'écart fixe et constant lors du déplacement est permis grâce un correcteur proportionnel.
- Le capteur détecte également la présence d'une balise en surveillant les variations brutales des mesures de distance.
- Si détection, alors cela provoque une transition d'état dans la machine à état et le robot s'aligne face à la balise, puis il effectue un virage à 90° pour se mettre dans la direction du totem.
- Le robot s'aligne de nouveau avec le mur et s'avance pour se positionner avant de balayer devant lui à la recherche du totem. Un prototype de code pour que le robot se mette parallèle au mur grâce à des déplacements infimes en boucle et à l'observation de leur dérivée a été entrepris.
- Pendant cette phase, le bras descend jusqu'à une position horizontale définie. Celle-ci est calculée de manière à percevoir le haut du "totem" peu importe la taille de celui-ci. Le balayage tout comme la détection d'une balise surveille les différences importantes de distance pour le capteur frontal. Lorsqu'il pense avoir trouvé le "totem", il s'avance vers lui en ligne droite et s'il le perd de vue, il retente un balayage.
- Lorsqu’il s’approche du totem, le robot ajuste dynamiquement la hauteur de sa pince pour saisir l’objet au bon niveau. Cette action repose sur une fonction de détection du sommet du totem, dont la position est convertie en une consigne de hauteur adaptée à la taille du bras, afin de garantir une prise précise.
- Le robot avance ensuite d'une distance définie et, la pince se ferme pour le prendre.
-
Un signal analogique de retour du servo confirme que la pince a bien été fermée.
-
Le robot bascule alors dans l’état suivant pour repartir vers la zone de dépose.
-
Une fois de retour à l’emplacement initial, le robot suit les mêmes états en sens inverse pour s’aligner à nouveau.
-
Enfin dans l'état DROP, la pince relâche le totem.
Voici le lien pour visiter notre dépot Github : https://github.com/PLFR23456/Rob3Exp2025/tree/StateMachine
La dernière mise à jour de notre programme avec une logique de fonctionnement du robot par états est située dans la branche "StateMachine". Cependant le reste des branches retracent nos tests ainsi qu'apports de fonctionnalités individuelles ou non.
3. Contribution individuelle :
Esteban |
Mécanique :
Informatique :
Chef de projet :
|
Matthieu |
Mécanique :
Électronique - Informatique :
|
Pierre-Louis |
Mécanique :
Informatique :
Rédaction sur la conception du bras + châssis |
Emile |
Informatique :
|
Diyana |
Électronique :
Informatique :
Gestion et rédaction complète du Wiki |
Rayan |
Électronique :
Informatique :
|
No Comments