Skip to main content

Groupe 1 : Melia, Maxime, Raul, Lucas, Mathieu, Arianne, Hind

PROJET ROB 3 

Informations : 

Contexte et objectifs :

       Dans le cadre de notre projet de Robotique de troisième année, nous avons du concevoir un robot capable de saisir un objet appelé totem et le déplacer de manière autonome au sein d'une arène de jeu.

       L'enjeu majeur de ce projet est l'intégration de plusieurs domaines de l'ingénierie:

                      Conception Mécanique :  L'architecture du robot repose sur un châssis simple conçu à l'aide de croquis à la main ainsi que de SolidWorks. 

                      Électronique: afin de gérer la distribution d'énergie par une batterie 12V, la communication par bus CAN entre les composants, ainsi que l'utilisation des capteurs à ultrason à l'aide de ARDUINO MEGA.                

                      Informatique: L'intelligence du robot est pilotée par un programme ARDUINO. Ce code, en langage C++,permet de gérer la navigation autonome, la détection du totem et l'exécution des trajectoires. Il assure également le traitement des données capteurs et la commande précise des moteurs KTECH et Dynamixel.

Matériel à disposition :

  • une pince 3551
  • deux moteurs KTECH MS4015-V3
  • un moteur Dynamixel
  • deux petites roues et une roue pivotante ( de caddie) 
  • une carte Arduino MEGA, un shield SEED et un shield Dynamixel
  • deux capteurs à distance ultrasons HC-SR04
  • une batterie RS PRO 12V 1,2Ah

Répartition des tâches :

       Après s'être familiarisés avec le sujet, on se répartit les taches de la manière suivante :

  • Chef de projet: Maxime CARLIER
  • Responsable de l'électronique: Raul ABI KHALIL
  • Responsables de l'informatique: Hind BENRADJA et Melia TAFAT
  • Responsable de la mécanique: Lucas BRUGNONE
  • Responsables du Wiki: Hind BENRADJA et Melia TAFAT

Aspect mécanique du projet :

       Nous avons par la suite réfléchi à différentes solutions possibles et avons opté, dans un premier temps, pour la solution suivante:

                                              image.png          

                                                                     Figure 1: Modélisation de la première solution

       On modélise un chassis avec des emplacements définis pour chaque composant, et on décide d'adopter pour une structure en escalier afin de fixer la roue pilotante à l'extrémité la plus haute, étant donné le fait qu'elle soit plus volumineuse que les autres roue, et de placer la pince sur une cale située à l'autre extrémité. Le mouvement de celle-ci sera piloté par un système de pont levis qui consiste à lever la cale à l'aide d'une corde qui s'enroulera. 

       Cependant, après réflexions, on se rend compte que cette première solution était inutilement complexe et présentait quelques inconvénients, comme le fait que la pince soit trop haute. On décide alors d'opter pour un chassis plus simple (figure 2), supprimant l'escalier et on résout le soucis de différence de taille des roues en plaçant simplement les petites roues à un niveau plus bas que la roue de pilotante. Pour la pince, on garde l'idée du mouvement du pont levis, que l'on modernise, en mettant en place une liaison pivot entre le chassis et une plaque en bois où l'on fixera la pince. Le principe reste donc le même que précédemment mais l'exécution est plus simple désormais.                 

                             image.png

                                                                      Figure 2: Modélisation du chassis final

       Après avoir validé ce modèle, il est possible pour chaque membre de traiter les différents aspects du projet. Dans un premier temps, le responsable électronique vérifie le bon fonctionnement des composants en les câblant comme l'indique la documentation et en lançant le code Arduino donné (example.ino).

Aspect électronique :

Aspect informatique :

       On réalise tout d'abord un organigramme afin de structurer la logique de l'algorithme avant de passer à la programmation.

                           66D65800-45B8-48D7-99CA-644CABCF95C4.jpeg

                                                                  Figure 3: Organigramme du fonctionnement du robot

       Pour réaliser la boucle correspondante, on code tout d'abord les fonctions suivantes : 

                      fonction controler_pince () : qui, comme son nom l'indique, sert à ouvrir ou fermer la pince du robot afin d'attraper et relâcher le totem. La fonction reçoit en entrée un choix logique (true pour ouvrir, false pour fermer): si la condition est vraie, elle envoie un signal électrique spécifique (PWM de 50) sur la broche de la pince pour l'ouvrir au maximum ; si elle est fausse, elle envoie un signal différent (PWM de 245) pour la fermer. Enfin, on intègre une courte pause (delay), qui laisse le temps mécanique au servomoteur de finaliser son mouvement afin d'éviter de perturber les autres commandes électriques du robot.

                      fonction lire_distance (int pinTrig, int pinEcho) : qui reçoit en entrée les numéros des broches du capteur. Elle sert à mesurer la distance séparant le robot d’un obstacle en calculant le temps de vol d'une onde sonore. Le code commande d'abord au capteur d'émettre un son (via la broche Trigger), puis met le programme brièvement en pause pour mesurer le temps de propagation de l'écho reçu (via la broche Echo). Enfin, elle réalise un calcul mathématique simple pour convertir cette durée en centimètres (en utilisant la vitesse du son) et envoie le résultat final sous forme de nombre décimal au programme principal, permettant au robot de décider s'il doit s'arrêter ou continuer sa route.

                      fonction mesurer_distance_parcourue () : qui retourne la distance parcourue par le robot en mètres depuis le dernier appel à reset_encodeurs(). Elle lit l'état des deux moteurs KTECH via readState(CAN) pour récupérer leur position angulaire cumulée, puis calcule le déplacement de chaque roue en soustrayant la position de référence sauvegardée lors du reset_encodeurs(). Ce déplacement angulaire est ensuite converti en mètres via la fonction deg_to_m(), et la valeur retournée est la moyenne des distances des deux roues afin de compenser les éventuelles dissymétries mécaniques du châssis.