Projet Rob3 - Cléo, Léon, Adam, Anass, Valentin, Marianne
Objectif Général
Durant ce projet, nous souhaitons réaliser un robot muni d'une pince capable de se déplacer dans une arène en partant d'une position fixe pour aller chercher un totem dont la position est approximativement connue et venir le redéposer à un autre endroit de l'arène.
Lien vers l’énoncé détaillé: https://wiki.fablab.sorbonne-universite.fr/BookStack/attachments/1660
Liens utiles (codes, pieces, vidéos...)
Codes pour l'utilisation du robot:
Pièces utilisées:
Planning
Afin d'avoir un planning structuré et facile à suivre, nous avons mis en place un diagramme de Gantt où vous pouvez voir les tâches précises qui composent chaque pôle, qui a participé à ces tâches et sur combien de séances elles sont étalées.
Lien vers le Diagramme de Gantt
Séance 1 12/02/2026
Dans le cadre de notre première séance, on s'est familiarisé avec le projet. On a réparti les rôles pour une résolution ordonnée du problème :
Chef de projet : Cléo SAUVENAY,
Responsable du Wiki : Marianne RODRIGUEZ,
Responsable informatique : Valentin BOUR et Léon CHERPITEL,
Responsable mécanique : Adam ABDENNADHER,
Responsable électronique : Anass CHHIBI,
Pôle Mécanique
Travail réalisé (ADAM, MARIANNE et VALENTIN): La modélisation du robot commence par un châssis triangulaire à deux angles tronqués, permettant de fixer les moteurs des roues sur des plaques perpendiculaires et la roue folle à la pointe. Une tige assure l'alignement des roues, bien qu'elle puisse être absente ou ajustée dans le modèle final pour permettre la rotation.
Dans ce premier modèle la pince fonctionne via un système pignon-crémaillère : une plaque dentée coulisse dans une encoche et s'engrène avec une roue dentée entraînée par le moteur, assurant le mouvement vertical.
Enfin, deux capteurs de distance sont prévus : un sur le côté pour surveiller la trajectoire par rapport aux murs, et un au-dessus de la pince pour détecter la distance avec le totem.
Schéma du châssis, du système pignon-crémaillère et du montage des roues sous le châssis.
Schéma dimensionné avec placement des différents composants (carte Arduino, batterie, etc.)
Travail pour la prochaine séance : Un premier prototype en papier reprenant les dimensions complètes du robot.
Pôle Informatique
Travail pour la prochaine séance : Se familiariser avec la documentation et réfléchir à des structures de programmes.
Pôle Électronique
Travail réalisé (ANASS et CLÉO): On a vérifié, comme demandé par les enseignants, le bon fonctionnement de tout l'équipement électrique durant les 2 premières heures, en suivant les instructions du PDF fourni par les référents. Lors de la dernière heure, nous avons discuté de la direction que le groupe allait prendre concernant le robot ainsi que de l'organisation du projet.
Séance 2 29/03/2026
Pôle Mécanique
Travail réalisé (ADAM et MARIANNE): Durant cette séance, nous avons reconsidéré le modèle défini lors de la séance précédente. Nous nous sommes rendu compte que le système pignon-crémaillère prévu pour manipuler la pince était trop complexe à mettre en œuvre. Nous avons donc décidé de changer de stratégie et d'opter pour un bras de type levier avec la pince à son extrémité. Nous avons ensuite réfléchi aux pièces nécessaires pour ce nouveau système :
Schéma du montage de la pince et de son encastrement dans le châssis
C'est ainsi que nous avons commencé la modélisation du bras (fixé au moteur et auquel la pince est attachée) ainsi que du support permettant de fixer le moteur au châssis sur SolidWorks, afin de pouvoir ensuite l'imprimer en 3D.
(CLÉO): En même temps, nous avons commencé à nous familiariser avec la découpeuse laser dans le but de déterminer les bonnes cotes au cas où nous devrions faire des encastrements. Pour avoir un trou de 3 mm, il faut mettre 2,8 sur SolidWorks, et pour avoir un bon encastrement, il faut faire 3,02, donc une différence de 0,22.
Pôle Informatique
Objectif de la séance : Définir l'architecture générale du programme de navigation du robot.
Travail réalisé (Anass, Léon, Valentin): L'équipe informatique s'est réunie pour établir les grandes lignes du programme, en se concentrant sur trois fonctions centrales : le suivi de mur (longer un obstacle de manière stable), l'atteinte du totem (guider le robot jusqu'à la cible) et le retour au point de dépôt.
Les primitives de déplacement ont également été définies : déplacement en ligne droite, rotation sur place ou en arc, correction de trajectoire, ainsi que la récupération et le dépôt du totem.
Pour chaque fonction, un organigramme a été réalisé afin de modéliser la logique de contrôle, permettant de :
- visualiser clairement les séquences d'opérations ;
- identifier les conditions et branchements nécessaires ;
- préparer une base solide pour l'implémentation.
Algorithme de déplacement du robot
1. Avancer de X cm puis tourner à 90° droite
Fin : mouvement / rotation des roues = terminé
2. Avancer en gardant une distance à droite de 30 cm
Fin : distance avant = X cm
3. Tourner à 90° gauche
Fin : mouvement / rotation des roues = terminé
4. Avancer en gardant une distance à droite de 30 cm
Fin : distance avant = X2 cm
5. → Répéter l'étape 2
6. → Répéter l'étape 3
7. → Répéter l'étape 2
8. → Répéter l'étape 3
9. Avancer en gardant une distance à droite de 30 cm
Fin : nb de tours de roue atteint
10. Lâcher le totem
Paramètres : X = distance avec le mur en face, X2 = distance avec le totem.
Pôle Électronique
Travail réalisé (Anass et Léon): Concernant le pôle électronique, nous avons connecté deux câbles entre l’Arduino et le contrôleur moteur en les soudant, puis en les sécurisant avec une gaine thermorétractable. Nous avons ensuite ajouté un bornier afin de simplifier et d’optimiser les branchements. Enfin, le câblage des moteurs vers l’Arduino a été réalisé.
Séance 3 2/04/2026
Pole Mécanique:
Travail réalisé (Cléo): Modélisation du châssis sur SolidWorks avec les trous prévus pour le placement des composants, le passage et la gestion des câbles. Découpe au laser dans une plaque de MDF 6 mm. Après test d'alignement, plusieurs ajustements ont été identifiés : augmenter légèrement le diamètre des trous pour les vis M3 fixant la carte Arduino, réduire l'écart entre les deux trous centraux, positionner les trous de fixation du moteur du bras en diagonale plutôt qu'en ligne afin d'éliminer le jeu, et ajouter des trous supplémentaires pour le passage de serre-câbles.
Photo du premier châssis
(Adam): Durant cette séance, on a retravaillé la pièce permettant d'actionner la pince, qu'il a fallu re-modéliser après avoir constaté un problème de dimensionnement sur le premier essai. La pièce finale est la suivante :
Après impression, nous avons pu monter la pince, le moteur ainsi que l'ensemble des fixations.
Pour finir nous avons réfléchi au montage des roues et à comment garantir leur parallélisme cela dans le but de pouvoir les monter la séance prochaine.
Schéma du montage des roues et de leur fixation
Pôle Électronique et Informatique
Travail réalisé (Anass, Léon, Valentin): Lors de cette séance, les pôles informatique et électronique se sont concentrés sur des tests de déplacement du robot, en s'appuyant sur un code d'exemple permettant de contrôler les roues selon trois modes : avancer, reculer et tourner. Ce code s'est avéré fonctionnel et les trois actions ont été exécutées avec succès.
Cependant, deux problèmes sont apparus : la pince effectuait des mouvements non prévus, puis en tentant de changer de port, l'alimentation de la carte Arduino a été court-circuitée. Une grande partie de la séance a donc été consacrée à identifier les composants défectueux et ceux encore fonctionnels (capteurs et moteurs KTECH).
Travail pour la prochaine séance : Pour la prochaine séance, l'objectif est de réimplémenter le code sur une nouvelle carte Arduino afin de retrouver les mouvements de base du robot, puis d'intégrer la détection des capteurs.
Séance 4 16/04/2026
Pole Mécanique
Travail réalisé (Cléo, Adam et Marianne): Durant cette séance, le pôle mécanique a poursuivi le développement du châssis et l'intégration des différents composants du robot.
Les pièces de fixation des roues ainsi que celles dédiées aux capteurs infrarouges ont été conçues, modélisées puis découpées dans des plaques de MDF 6 mm. Ce premier montage complet a permis d'identifier plusieurs conflits entre certaines pièces, dont le plus critique était le défaut de parallélisme des deux roues motrices. Le châssis a donc été retravaillé pour corriger ces problèmes, et une nouvelle version a pu être découpée.
Dans un second temps, les pièces relatives aux capteurs et au positionnement de la batterie ont été modélisées et découpées. Il a été décidé de placer les capteurs sous le châssis afin d'optimiser leur efficacité. La batterie, quant à elle, est posée directement sur le châssis et maintenue en position par quatre cales encastrées, assurant un maintien solide sans fixation supplémentaire.
Pièce pour positionnement batterie (gauche) et pièce pour fixer capteurs (droite)
Première version montée du robot
Pôle Électronique et Informatique
Travail réalisé (Anass, Léon, Valentin) : Durant cette séance, le pôle informatique a travaillé sur deux axes principaux : le contrôle des actionneurs et l'exploitation des données capteurs.
Un premier programme a été développé pour piloter les déplacements du robot via un Arduino communiquant avec deux moteurs par bus CAN. Le démarrage est déclenché par un bouton-poussoir sur la pin 2, géré par interruption matérielle, ce qui permet au programme d'attendre sans bloquer la boucle principale. Plusieurs primitives de mouvement ont été implémentées — avancer, tourner à droite et à gauche — et validées par une séquence de test en boucle infinie, sans anomalie observée.
Pour estimer sa position et son orientation, le robot lit en continu l'angle de rotation de chaque roue depuis les moteurs. À chaque cycle, la variation d'angle est convertie en distance parcourue grâce au périmètre de roue (diamètre 50 mm, soit environ 157 mm) : la moyenne des deux roues donne la distance avancée, la différence donne la rotation. Ces valeurs mettent à jour les variables odom_x_mm, odom_y_mm et odom_theta, et pilotent les fonctions moveForward_mm() et rotate_deg() jusqu'à ce que l'objectif soit atteint.
Deux capteurs ultrasons HC-SR04 ont ensuite été intégrés : un capteur avant (pins 22/23) pour détecter les obstacles, et un capteur droit (pins 42/43) pour mesurer la distance au mur latéral. En l'absence d'écho dans un délai de 30 ms, la distance est fixée à 999 cm. Sur cette base, un programme d'asservissement a été développé pour maintenir le robot à distance constante du mur, selon une logique bang-bang : en dessous de 10 cm, la roue gauche ralentit ; au-dessus de 15 cm, c'est la roue droite ; entre les deux, les deux roues avancent à vitesse normale. Le longeage s'arrête dès que le capteur avant détecte un obstacle plus proche que le seuil mesuré en début de phase.
Enfin, deux tests ont été conduits : le premier validait les fonctions de mouvement seules afin de vérifier l'odométrie et le bus CAN ; le second ajoutait les capteurs et la logique de longeage, avec un affichage en temps réel des distances dans le moniteur série (AVANT: xx cm | DROITE: xx cm), ce qui a permis de valider les seuils de correction avant de lancer le robot.
Schéma du fonctionnement du programme
Séance supplémentaire du 20/05/2026
Afin de rattraper le retard accumulé et de rester dans les temps pour les tests et le développement du code, une séance supplémentaire a été organisée.
Durant celle-ci, nous avons démonté la première version du robot pour le remonter dans le nouveau châssis, mieux dimensionné. Cette opération a nécessité de rallonger et de souder plusieurs câbles, entraînant ainsi une refonte partielle du câblage. Une fois le montage finalisé, nous avons pu tester le code général du robot simulant son parcours dans l'arène.
Séance 5 du 21/05/2026
Lors de cette dernière séance au Fablab, nous avons travaillé sur les derniers détails du robot.
Il a fallu démonter les roues afin d'installer une tige reliant les deux côtés, dans le but d'éviter qu'elles se courbent sous le poids important exercé sur le châssis. Nous avons également revu toute la connectivité du robot afin de vérifier que tous les branchements étaient corrects.
Ensuite, nous avons pu poursuivre les tests du code. Chaque fonction a été testée séparément : les déplacements, les rotations à 90 degrés, l'avancement, l'arrêt du robot, ainsi que le levage et l'abaissement de la pince, sans oublier son ouverture et sa fermeture.
Il a fallu faire particulièrement attention au calibrage des capteurs, ce qui a nécessité plusieurs essais avant d'obtenir des mesures fiables. Nous avons également dû prendre en compte le fait que les deux roues ne tournaient pas dans le même sens : pour faire avancer le robot correctement, il fallait donc leur appliquer des vitesses opposées.
Séance supplémentaire du 27 et 28 05/2026
Durant ces deux séances supplémentaires avant la présentation finale, nous avons effectué les dernières touches du code.
Nous avons d'abord calibré les capteurs afin de savoir quand le robot doit tourner aux différentes étapes du parcours. Un problème est apparu : la pince était détectée par le capteur en position basse, rendant toute reconnaissance impossible dans cette configuration. Nous avons donc modifié le code pour qu'à chaque phase de reconnaissance, la pince soit automatiquement levée.
Malgré un code qui fonctionnait auparavant, nous avons eu des problèmes avec la configuration des roues, nous avons donc tout redéfini. Nous avons également mis en place le suivi de mur avec un correcteur proportionnel afin de maintenir la pince à 30 cm du mur latéral, et refait un câblage propre et organisé.
Durant les tests, nous nous sommes rendu compte que serrer ou desserrer la pince causait un reset de l'Arduino, nous avons donc dû la débrancher. Trouver les bonnes valeurs du correcteur a nécessité plusieurs tests, mais nous avons fini par obtenir quelque chose de cohérent.
Finalement, pour le dépôt de l'objet à la bonne distance du mur du fond, la stratégie retenue est de mesurer le temps pour aller jusqu'au totem, terminer la traversée, puis refaire ce même temps en sens inverse.
Robot version finale
Vidéo du robot en mouvement : Video_Robot.mp4














No Comments