IMA3/IMA4 2018/2020 P5 : Différence entre versions
(→Semaine 1) |
(→Documents Rendus) |
||
(61 révisions intermédiaires par 4 utilisateurs non affichées) | |||
Ligne 365 : | Ligne 365 : | ||
Cette année les Robots représenterons de bateaux navigant en haute mer leur but premier sera de ramener des bouées perdus au large, les objectifs sont listés ci-dessous: | Cette année les Robots représenterons de bateaux navigant en haute mer leur but premier sera de ramener des bouées perdus au large, les objectifs sont listés ci-dessous: | ||
− | + | * Créer des chenaux pour rétablir la circulation maritime. | |
− | + | * Relever les manches à air qui ont été balayées par la tempête. | |
− | + | * Allumer le phare pour que les bateaux égarés puissent rentrer au port en toute sécurité. | |
− | + | * Arriver à bon port, afin de mettre les robots au mouillage, à l’abri du vent, à la fin de leur voyage. | |
− | + | * Hisser les pavillons pour transmettre des messages aux autres navires. | |
− | + | * Estimer la performance. | |
===== Créer des chenaux ===== | ===== Créer des chenaux ===== | ||
Ligne 398 : | Ligne 398 : | ||
===== Arriver à bon port ===== | ===== Arriver à bon port ===== | ||
− | + | ||
Il existe deux zones de mouillage pour chaque équipe: une zone de mouillage nord et sud. Il s'agit de la zone dans laquelle les robots doit s'arrêter à la fin du temps réglementaire. Pour définir dans quelle zone les robots doivent s'arrêter, il existe une boussole qui indique le nord et le sud. Au début du temps réglementaire, celle-ci tourne, et le point cardinal sur lequel elle s’arrête détermine la zone de mouillage. | Il existe deux zones de mouillage pour chaque équipe: une zone de mouillage nord et sud. Il s'agit de la zone dans laquelle les robots doit s'arrêter à la fin du temps réglementaire. Pour définir dans quelle zone les robots doivent s'arrêter, il existe une boussole qui indique le nord et le sud. Au début du temps réglementaire, celle-ci tourne, et le point cardinal sur lequel elle s’arrête détermine la zone de mouillage. | ||
Ligne 404 : | Ligne 404 : | ||
Le nombre de point est déterminé de la façon suivante | Le nombre de point est déterminé de la façon suivante | ||
− | + | * 10 points si les deux robots sont valides dans la zone de mouillage indiquée par la girouette | |
− | + | * 5 points si les deux robots sont valides dans la mauvaise zone de mouillage | |
− | + | * 5 points si un des deux robots est valide dans la zone de mouillage indiquée par la girouette | |
− | + | * 0 points si les deux robots sont valides mais dans des zones de mouillage différentes | |
De plus un mouillage est valide selon les conditions suivantes: | De plus un mouillage est valide selon les conditions suivantes: | ||
Ligne 512 : | Ligne 512 : | ||
Le but de cette partie est d'obtenir un robot qui se déplace de manière autonome et qui sache définir son prochain objectif. | Le but de cette partie est d'obtenir un robot qui se déplace de manière autonome et qui sache définir son prochain objectif. | ||
Dans cette partie, nous verrons: | Dans cette partie, nous verrons: | ||
− | + | * La configuration de la Raspberry Pie | |
− | + | * La communication de la Raspberry avec l'Arduino | |
− | + | * Le traitement d'image par Open CV | |
− | + | * L'asservissement du Robot | |
=== Configuration de la Raspberry Pie === | === Configuration de la Raspberry Pie === | ||
Ligne 550 : | Ligne 550 : | ||
[[fichier:Modelisation_3D_robot.png]] [[fichier:Representation_interieure.png|400px]] | [[fichier:Modelisation_3D_robot.png]] [[fichier:Representation_interieure.png|400px]] | ||
+ | |||
+ | * en jaune : la raspberry | ||
+ | * en noir : la carte | ||
+ | * en vert : la batterie | ||
+ | |||
+ | === Semaine 2 === | ||
+ | |||
+ | Pendant cette semaine nous nous sommes attardés sur principalement sur l'utilisation de la pixy pour notre projet, c'est à dire comment l'installer, lui faire apprendre une couleur, etc.. | ||
+ | |||
+ | Pour faire apprendre une couleur à un arduino, c'est assez simple, il suffit de télécharger le logiciel Piximon donné par le constructeur de la pixy. Avec celui-ci on peut entrer un total de 7 couleur reconnaissable par la pixy ce qui est très bien car nous n'avons seulement besoin que de deux couleurs (rouge et vert) | ||
+ | |||
+ | Voici le lien pour l'installation de la pixy sur un arduino pixy arduino : https://docs.pixycam.com/wiki/doku.php?id=wiki:v1:hooking_up_pixy_to_a_microcontroller_-28like_an_arduino-29 | ||
+ | |||
+ | Cette installation sur l'arduino nous sert principalement de test en attendant la configuration de la raspberry pi. | ||
+ | |||
+ | Voici donc comment installer la pixy sur la raspberry pi : https://docs.pixycam.com/wiki/doku.php?id=wiki:v1:hooking_up_pixy_to_a_raspberry_pi | ||
+ | |||
+ | === Semaine 3 === | ||
+ | |||
+ | Au cours de cette semaine nous avons continué notre découverte d'opencv pour pouvoir l'utiliser afin de reconnaître et d'attraper les différents gobelets présents sur l'arène. | ||
+ | Pour commencer, nous avons tester la librairie opencv sur la webcam inclue sur l'ordinateur en essayant de détecter une certaine couleur. Dans l'image ci-dessous nous avons tester le bleu: | ||
+ | |||
+ | |||
+ | [[fichier:detection_couleur_bleu.png|300px]] | ||
+ | |||
+ | |||
+ | Ensuite nous avons essayé d'implémenter le fait que la caméra puisse reconnaître 2 couleurs. Sur la photo ci-dessous on peut voir que la caméra reconnaît l'objet en bleu et celui en rouge. | ||
+ | |||
+ | |||
+ | |||
+ | [[fichier:detection_deux_couleurs.png|300px]] | ||
+ | |||
+ | |||
+ | Le code de ce programme est disponible sur le github suivant : https://github.com/Vankcee/cdf_robotique_2020 | ||
+ | |||
+ | |||
+ | Durant cette semaine nous nous sommes également chargé de la modélisation 3D du bras final, celui sur lequel sera disposé la pince. N'ayant pas cette pince à notre disposition la finalisation de cette modélisation doit attendre afin d'avoir toutes les mesures nécessaires. | ||
+ | |||
+ | === Semaine 4 === | ||
+ | |||
+ | Cette semaine, pour la partie reconnaissance de l'objet je devais faire en sorte savoir différencier un écocup d'un autre objet d'une même couleur. Je me suis donc dit que ce serait plus facile pour commencer de détecter d'abord une sorte de forme plutôt que l'écocup en lui-même, j'ai utilisé la fonction findContours(), de OpenCv pour pouvoir réaliser ceci. Voici le résultat : | ||
+ | |||
+ | |||
+ | [[fichier:Rectangle_bleu_P5.png|300px]] | ||
+ | |||
+ | |||
+ | On peut voir sur la photo que la forme indiquée que le contour du paquet de mouchoirs n'est pas vraiment rectangle mais c'est parce que je considère le rectangle est un polygone à 4 côtés. Je dois donc essayer de rendre cela plus précis. | ||
+ | |||
+ | |||
+ | Ne pouvant pas finaliser le bras nous avons vu pour faire le chassis.Après concertation avec M.Astori nous avons conclu qu'il serait plus judicieux de conserver la base du chassis actuel mais d'y ajouter une extension de sorte à accueillir les elements nécessaire. | ||
+ | Après réalisation à la découpeuse laser voici le résultat : | ||
+ | |||
+ | |||
+ | [[fichier:Chassis_P5.jpg|300px]] | ||
+ | |||
+ | === Semaine 6 === | ||
+ | |||
+ | Cette semaine, ayant réussi à détecter une couleur et à savoir si la forme de cette couleur était un rectangle, j'ai commencé à vouloir implémenter le code créé jusqu'à maintenant sur la raspberry pi et ensuite envoyer les résultats obtenus via liaison série à l'arduino. Pour l'instant j'envoie juste le message 1 si il y a un ecocup en face de la webcam et 0 sinon. On pense rester sur le seul fait qu'il y ait un ecocup ou non dans le champ de la webcam donc envoyer 1 si l'ecocup est bleu, 2 si il est vert et 0 si il n'y a rien dans le champs. On se limite à cela car la fonction de la librairie serial sous python ne sait envoyer qu'un seul caractère à la fois. Par la suite on pense peut-être à découper l'écran en une vingtaine de cases et envoyer la zone dans laquelle se trouve le barycentre de l'ecocup. Ensuite il nous faudra corréler ces résultats avec ceux obtenus par les différents capteurs. | ||
+ | |||
+ | Nous avons également repris le code arduino de l'année dernière concernant le déplacement du robot. Nous avions un problème concernant les interruptions entrainé par les codeurs incrémentaux. Ce problème était simplement due au fait que les pins d'interruption ne sont pas les mêmes sur un Uno et un Mega. La théorie semble donc fonctionner, il faut donc construire le 2e étage du chassis afin qu'il soit mobile et ainsi que l'on puisse observé sont comportement réel. | ||
+ | |||
+ | |||
+ | === Carte Electronique === | ||
+ | |||
+ | Lors du semestre 7 nous avions décidé de produire une carte éléctronique. Celle-ci était issu d'un ancien projet IMA4. Elle répondait à nos besoins en matière de controles moteurs et communications avec les capteurs de l'automate. Nous avons commandé en fin S7/début S8 les composants nécessaires à la réalisation de cette carte. | ||
+ | |||
+ | A la réception de la première commande il manque certains composants. Les controleurs moteurs TB6612 sont dispensable actuellement. Cependant le composant de surface CAY16 qui est un réseau de résistance utilisé dans la fonction de communication entre les deux microprocesseurs est manquant. Il manque aussi certaines résistances de 1M ohm. | ||
+ | |||
+ | J'ai pris rendez-vous avec M. Thierry Flamen pour acceder au four à refusion. Il m'a expliquer la technique que je ne conaissais pas. Je procede à la dépose des premiers composants (Microcontroleurs ATMEGA2560 et ATMEGA8U2) ainsi que la plupart des résistances et capacités autour des microcontroleurs. Je souhaite dans un premier temps souder tout les composants intervenant dans la fonction de communication entre les deux microprocesseurs. Cependant il me manque certaines résistances ainsi que le réseau de résistance. | ||
+ | |||
+ | Je repasse commande auprès de M. Alexandre Boé. | ||
+ | |||
+ | Etant donné la situation de confinement, nous utilisons notre solution de secours qui est d'utiliser deux arduinos UNO. | ||
+ | |||
+ | === Compte rendu du chat suite au confinement === | ||
+ | |||
+ | A cause du confinement nous devons travailler à distance chacun de notre côté, nous avons donc discuté avec les professeurs sur ce que l'on devait/pouvait faire pour la suite du projet : | ||
+ | |||
+ | *Pour Pierre : Construction du châssis et code pour le faire avancer et le réguler. | ||
+ | *Pour Maxime : Modélisation / Impression 3D de la pince et de son bras. Puis création d'un shield Arduino pour une des deux cartes. | ||
+ | *Pour Raphael : Finalisation de la liaison série : envoyer la position approximative de l'écocup donc découper l'écran de la camera en 16 cases, associer un caractère à chaque case et envoyer en liaison série le caractère correspondant à la position du barycentre de l'écocup. Puis comme pour Maxime mais pour l'autre carte. | ||
+ | |||
+ | === Semaine 7 === | ||
+ | |||
+ | La réalisation de la pince ainsi que son système d'ouverture et de fermeture sont réalisé, il faut à présent finir le support de celle ci afin de compléter le reste du bras. | ||
+ | |||
+ | [[fichier:PinceV2_P5.mov]] | ||
+ | |||
+ | ==== Construction Chassis ==== | ||
+ | |||
+ | Cette semaine j'ai percé les fixations du chassis dans les deux plaques de plexiglas et j'ai aussi adapter les fixations que j'avais sous la main. J'ai réussi, avec beaucoup de précautions à ne briser qu'un coin d'une plaque de plexiglas. J'ai supperposé les deux plaques sommairement. J'ai commandé des fixations de meilleurs qualités. | ||
+ | |||
+ | === Semaine 8 === | ||
+ | === Semaine 9 === | ||
+ | |||
+ | Pierre : J'ai récupéré ma commande pour les fixations ce 07/04. Le montage devrait être fini ce mercredi 08/04. Une fois le montage fini je m'attelle à la programation de l'automate. | ||
+ | |||
+ | === Shield Arduino === | ||
+ | |||
+ | Afin de simplifier le câblage nous avons décidé de réaliser un shield pour les capteurs présent sur le robot. Ainsi nous avons fait le choix de connecter les GND avec des fils isolés que nous souderons à la main. | ||
+ | |||
+ | [[fichier: Shield_capteurs_P5.jpg | 400 px| ]] | ||
+ | |||
+ | |||
+ | Voici le shield pour le 2ème arduino qui gère les moteurs. Sur ce shield est présent les connections aux différents servos moteurs utiles pour la pince et le contrôleur moteur lié aux roues. Pour le contrôleur moteur j'ai pris celui de base dans le package de Fritzing car celui que nous utilisons n'était pas présent et que de toute façon le shield ne pourrait pas être imprimés à cause des événements actuels. | ||
+ | |||
+ | [[fichier: Shield_P5_motors.png | 400 px| ]] | ||
+ | |||
+ | === Programmation === | ||
+ | |||
+ | Je n'ai pas de câble chez moi pour téléverser mon code sur mes cartes. Je me lance dans la création d'une simulation du robot sur MATLAB Simulink. | ||
+ | J'utilise la boite à outils Mobile Robotics pour la simulation du comportement physique du robot. | ||
+ | |||
+ | J'ai repris le code du S6 que j'ai améliorer après détection d'erreurs. On ne peux pas utiliser la fonction arc tangente simplement puisqu'elle ne place pas l'angle dans le bon quadrant du plan. Il est préférable d'utiliser la fonction arc tangente seconde (atan2) qui résous ce problème d'orientation. De plus elle prend en compte les cas où le dénominateur est nulle, ce qui est impossible avec la fonction arc tangente. | ||
+ | |||
+ | Le contrôle du robot est réalisé grâce à un asservissement de l'orientation de celui-ci. J'ai implémenté un régulateur proportionnel pour rendre le système plus rapide. Je pense que le système physique aurait nécessite un régulateur Proportionnel Intégrale pour corriger l'erreur statique du au frottement des roues. | ||
+ | |||
+ | La simulation montre actuellement que le robot atteint sa position cible quelque soit la position de la cible. | ||
+ | |||
+ | [[fichier : Simulation1_P5_2020.mp4]] | ||
+ | [[fichier : SImulation2_P5_2020.mp4]] | ||
===Documents Rendus=== | ===Documents Rendus=== | ||
+ | |||
+ | |||
+ | [[fichier : Soutenance_S8_P5_2020.pdf]] | ||
+ | |||
+ | [[fichier : Rapport_P5_S8_2020.pdf]] |
Version actuelle datée du 5 mai 2020 à 16:30
Sommaire
- 1 Présentation générale
- 2 Analyse du projet
- 3 Préparation du projet
- 4 Réalisation du Projet
- 4.1 Projet S6
- 4.2 Projet S7
- 4.3 Objectif et règlement de la coupe de France de robotique 2020
- 4.4 Tâches à effectuer cette année
- 4.5 Réalisation de chaque Objectif
- 4.6 Actionneurs du robot (Raphaël Bonvalet & Maxime Fontaine)
- 4.7 Commande du Robot (Pierre Gautreau & Jérémie Hassenforder)
- 4.8 Documents Rendus
- 4.9 Projet S8
Présentation générale
Git du projet : https://archives.plil.fr/pgautrea/CDFR_2020.git
Vidéo de présentation: https://drive.google.com/file/d/1VKVaFjUyWxPFNAm0rAdbfV4Y_LRRJ-xu/view?usp=sharing
Description
Dans le cadre de l'association Robotech, qui souhaite participer à la coupe de France de robotique, nous allons construire le robot secondaire qui devra accomplir plusieurs tâche partagées avec le robot primaire.
Afin de mener à bien ce projet, différentes parties complémentaires devront être réalisées :
- La partie électrique : Gestion de l’alimentation du robot à partir de batteries (24V), conversion de tension (DC/DC) afin d’alimenter les différentes cartes présentes sur le robot (Raspberry, Arduino, FPGA, ...) et de fournir la puissance nécessaire aux différents actionneurs (moteurs, servos, vérins, ...). La gestion du câblage (placement des chemins, dimensionnement des câbles) ainsi que la conception des différents PCB devront faire l’objet d’une attention particulière.
- La partie informatique : Afin de se repérer dans son environnement (piste imposée par le cahier des charges) le robot devra être capable d'interagir avec différents capteurs (gyroscope, roues codeuses, ...). Cependant afin de réaliser certaines contraintes du cahier des charges, un système de reconnaissance de couleurs devra être mis en place. Afin d’assembler le tracking de la position du robot et la détection de couleurs, la piste du traitement d’image réalisée via une caméra Pixie est envisagée.
- Partie commune : Afin de faire communiquer les parties informatiques et électriques entre elles (ainsi que les différentes sous-parties ; modules Arduinos qui traiteront des tâches précises du CdC), la mise en place d’une communication série sera nécessaire. Il sera nécessaire de réfléchir à la mise en place d’un protocole permettant de limiter le nombres de câbles présents sur le robots (protocole SPI par exemple).
Objectifs
Chaque année le club Robotech Lille participe à la Coupe de France de Robotique(qualification des équipes françaises à l’Eurobot). L’objectif est de concevoir, fabriquer et programmer un ou deux robots qui doivent réaliser une suite de tâches décrites dans le cahier des charges, dans un temps donné d'environ 1min30.
Pour la fin de l'année, notre robot devra avancer de manière linéaire tout en évitant toute collision avec l'environnement. Nous devrons laisser de la place dans le châssis pour permettre l'ajout de modules qui permettrons de répondre aux attentes du règlement de la coupe de France de robotique 2020 disponible en octobre 2020. Plus précisément, il nous faudra réaliser l'asservissement PID du robot, et son repérage dans l'espace grâce à des balises infrarouges.
A terme, nous devrons donc construire les modules (que l'on rajoutera sur le robot) permettant de participer à la coupe de France. Les objectifs et la stratégie spécifique à cette partie serons définis à la sortie du règlement.
Analyse du projet
Positionnement par rapport à l'existant
Il existe des robots autonomes très complexes de toute sortes, mais ici, nous devons répondre à un besoin très précis. Les règles sont fixées par le règlement de la coupe de France de robotique. Nous ne pouvons donc pas vraiment nous positionner par rapport a d'autres robots existant puisque les règles de la coupe changent chaque année.
Analyse du premier concurrent
Robot gagnant de la précédente édition :
Robotech Legends (Polytech Montpellier)
Analyse du second concurrent
Deuxième concurrent de l'année dernière :
ESEO Angers
Scénario d'usage du produit ou du concept envisagé
On place notre robot sur le plateau de jeu. Au top départ, il s'élance le plus vite possible pour marquer des points, il dispose d'1min30.
5' : il longe les bords du plateau, en se localisant grâce aux trois balises laser disposés sur les bords.
20': il détecte un obstacle et l'évite.
Réponse à la question difficile
Comment réaliser un robot secondaire pouvant participer à la coupe de France de robotique avec les moyens et le temps limités à notre disposition?
Pour cela, tout d'abord nous avons décider de nous regrouper pour faire un seul robot pour tout le groupe de projet plutôt que deux à cause de la limite de temps. Ensuite, pour le matériel, normalement nous devrions récupérer des composants des anciens robots de Robotech. De plus, à Robotech, il y a un projet d'arduino 12V, de ce fait nous pourrons être en mesure de l'utiliser.
Bibliographie et webographie
Préparation du projet
Cahier des charges du groupe
Cahier des charges des équipes
Equipe 1
Equipe 1: Chaine d'energie ( Jerem & Pierre )
- Batteries
- Moteurs
- Déplacement
- Actionnement // Octobre
Equipe 2
Equipe 2: Chaine d'information ( Maxime & Raphael )
- Capteurs & Balises
- Communication(Avec Environnement, avec adversaire, avec 2nd Robot)
- Carte Controleur
- Stratégie // Octobre
Choix techniques : matériel et logiciel
Equipe 1
- Moteur: faulhaber schönaich 3557k024cs-118
https://www.glockenankermotor.com/DE_3557_CS_DFF(8).pdf?XTCsid=bbe4ac3ca5a2cab7d9e7bfd2e131bc29
Tension nominale de 24V Puissance de 25.4 W
- Encodeur: HEDS-5500
Fichier:Datasheet encodeur.pdf
1485 tics/tour de roue
- Arduino Uno
Nombre de ports suffisants pour l'instant
Equipe 2
- Capteur de distance ultrason Arduino
- Capteur de distance infrarouge: Sharp GP2D120
- Arduino Uno
- Contrôleur moteur: L298N
Fichier:Jhassenf data ctrl mot.pdf
Liste des tâches à effectuer
Equipe 1
Trouver une batterie adaptée (Fait)
Choisir le contrôleur moteur (Fait)
Faire fonctionner le contrôleur moteur (Fait)
Trouver comment fonctionne les encodeurs (Fait)
Trouver la distance parcourue par le robot (Fait)
Asservissement numérique en position (presque fini)
Equipe 2
Faire en sorte de s'arrêter à la vue d'un obstacle (Fait)
Stratégie (A faire l'an prochain en fonction du règlement)
Utiliser le contrôleur moteur pour faire tourner les moteurs (Fait)
Robot secondaire (En cours)
Calendrier prévisionnel
Le calendrier prévisionnel peut se concrétiser sous la forme d'un diagramme de GANTT.
Equipe 1
Equipe 2
Réalisation du Projet
Projet S6
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.
Semaine 1
Mise en place du sujet.
Prise de connaissances du sujet trouvé sur le site de l'événement.
On a commencé à réfléchir à une stratégie pour pouvoir concevoir notre robot en fonction de celle-ci.
Forme de la prise probable : Plateau, Ventouse??
En tant que robot secondaire notre priorité est d'aller charger le golden palet ( Celui qui pèse le plus lourd donc celui qui rapporte le plus de points).
Voir avec le groupe d'IMA 4 pour leur arduino 24 V.
Vu la limite de temps et les besoins en matériel, nos deux équipes vont fusionner pour parvenir à achever notre projet dans les temps.
Semaine 4
Mise à jour des objectif: Robotech ne participera pas à la coupe de France de Robotique 2019, mais à celle de 2020. Nous adaptons donc nos objectifs en conséquence
Répartition des tâches.
Recherche des technologies utilisables (balises infrarouges, asservissement PID avec Arduino)
Semaine 5
Début du dimensionnement des moteurs et des batterie.
https://www.technologuepro.com/outils/dimensionnement-moteur.html
Recherche sur le type de capteur pour la localisation
Semaine 6
- Démontage du châssis du robot pour ne garder que l'essentiel.
- Recherche des datasheet des moteurs et des encodeurs
Moteurs: faulhaber schönaich 3557k024cs-118
https://www.glockenankermotor.com/DE_3557_CS_DFF(8).pdf?XTCsid=bbe4ac3ca5a2cab7d9e7bfd2e131bc29
Tension nominale : 24V
Puissance de sortie: 25.4W
Rendement max 78%
Vitesse de rotation à vide: 5 500 tr/min
Encodeur:
1485 ticks par tour.
Fichier:Datasheet encodeur.pdf
Semaine 7
Recherche d'un contrôleur moteur
Fichier:Jhassenf data ctrl mot.pdf
Nouvelle division du travail
On a fait tourner les moteurs:)
Semaine 8
Video explicative du cablâge du contrôleur moteur sur un arduino
Grâce à cette video, nous avons réussi à faire fonctionner le robot en avant et en arrière en faisant varier la vitesse grâce à une MLI (PWM).
Semaine 9
Semaine 10
Nous avons fait des recherches pour le système de balises. Pour celui ci, nous avons quelques pistes comme l'infrarouge ou les ultrasons mais nous devons encore faire des recherches plus approfondies pour choisir un des deux.
Recherches pour faire fonctionner les encodeurs: essai du circuit de la doc : on branche l'encodeur sur une entrée analogique et on regarde la valeur de retour
Semaine 11
INT4 : roue droite en arrière INT3 : roue droite en avant INT1 : roue gauche avant INT2 : roue gauche en arrière
Nous sommes parvenus à obtenir les données de l'encodeur mais aussi a faire avancer, reculer, tourner notre robot pendant un certain temps.
Après avoir compris comment l'encodeur fonctionnait, nous avons décidé de changer d'objectif concernant le repérage dans l'espace de notre robot. En effet, nous allons essayer d'utiliser les encodeur afin que le robot se repère sur la piste grâce aux nombre de pic qu'ils relèvent. Ainsi le système de balise serait utilisé pour l'initialisation de la position initiale le jour J.
Semaine 12
mercredi
Semaine 13
- Vendredi
Structure du robot: réalisation d'une plaque pour fixer les composants puis perçage et maintient en position par liens Colson. On a réfléchis sur le moyen d'alimenter l'arduino: cela ce fera par 4 piles 1.5 V, le robot sera alimenté par une batterie lithium 14.6 V
Semaine 14
- Lundi
Câblage de l'arduino Uno:
Pin 1 :
Pin 2 : Channel A roue gauche
Pin 3 : Channel A roue droite
Pin 4 : Channel B roue droite
Pin 5 : ENB = PWM moteur gauche (0->5V)
Pin 6 : INT4 = Roue droite en avant
Pin 7 : INT3 = Roue droite en arrière
Pin 8 : INT2 = Roue gauche en avant
Pin 9 : INT1 = Roue gauche en arrière
Pin 10 : ENA = PWM moteur droit (0->5V)
Pin 11 : ECHO = capteur de distance
Pin 12 : TRIGGER = trigger du capteur de distance
Pin 13 : channel B roue gauche
- Mardi
Programmation du robot pour qu'il avance de 50cm exactement: on a regarder combien de tics correspondent à un tour de roue. On a trouver 1485 tics par tour de roue.
Connaissant le rayon de la roue, on peut donc trouver la distance parcourue par un tic soit pi*82/1485 (=2*pi*R/nombre de tic pour un tour).
- Mercredi
Début de la tentative d'asservissement PID. Réalisation d'un Dock pour la batterie que l'on fixe sous le robot.
- Vendredi
Le robot avance presque droit mais parfois dévie vers la gauche Début de la programmation de la rotation. On a peut aussi rentrer un point de coordonnée X,y et le robot le suit jusque là.
- Samedi
La ligne droite fonctionne: le robot s’arrête bien à la distance rentrée et il roule droit.
Semaine 15
Préparation du rapport et de la présentation. Quelques ajustements du wiki
On a donner une consigne de position au robot et on remarque sur la vidéo que le robot atteint bien la position souhaitée. Vérifie en traçant la courbe de la trajectoire sous excel.
Documents Rendus
Fichier:Rapport projet IMA.pdf
Fichier:Rapport projet P5 Ima3 2018-2019.pdf
Vidéo de présentation (mp4):
https://drive.google.com/file/d/10lw-U7lDu5jlMp4HOucZ4Jg7w4Dk1aII/view?usp=sharing
Vidéo de présentation (ogv):
https://drive.google.com/file/d/1yzcPN3J-es8540Tccmg0FTDwAiSAZvJh/view?usp=sharing
Vidéo de présentation (Mpeg2):
https://drive.google.com/file/d/1VKVaFjUyWxPFNAm0rAdbfV4Y_LRRJ-xu/view?usp=sharing
Vidéo de présentation (Mpeg4):
https://drive.google.com/file/d/1GbeIBVSzEiX2yzwPE4XnQ5GMLDR4uQw3/view?usp=sharing
Projet S7
Lors de cette première partie de l'année, nous avons dû revoir les objectif. En effet, le but de ce projet est toujours de participer à la coupe de France de Robotique, mais de l'édition 2020. Ainsi, puisque les règles de la compétition sont différentes, nous avons dû adapter notre travail à la nouvelle stratégie. Comme l'année dernière, notre projet est en partenariat avec Robotech, le club de Robotique de l'école, club avec lequel nous nous répartissons les Tâches. Nous devons travailler de concert avec eux, nous répartir les tâches pour être le plus efficace possible. Deux de nos membre sont du bureau de Robotech: Maxime (Président) et Jérémie (Respo com), ce qui facilite la communication. Ce projet à donc aussi un côté de management d'équipe, car en effet la plupart des gens de Robotech qui travaillent sur la coupe de France sont de IMA3 ou des PEIP1.
Objectif et règlement de la coupe de France de robotique 2020
Le règlement complet de la coupe de France de robotique 2020 se trouve ci-dessous.
Cette année les Robots représenterons de bateaux navigant en haute mer leur but premier sera de ramener des bouées perdus au large, les objectifs sont listés ci-dessous:
- Créer des chenaux pour rétablir la circulation maritime.
- Relever les manches à air qui ont été balayées par la tempête.
- Allumer le phare pour que les bateaux égarés puissent rentrer au port en toute sécurité.
- Arriver à bon port, afin de mettre les robots au mouillage, à l’abri du vent, à la fin de leur voyage.
- Hisser les pavillons pour transmettre des messages aux autres navires.
- Estimer la performance.
Créer des chenaux
Un total de 44 bouée sont disposé tout autour de l'aire de jeu et leur position est connue avec certitude au début du match. La moitié de ces bouées sont rouge et l'autre verte. Leurs dimension et leur forme est connue: il s'agit d'un cône aplatit sur son sommet et creux, comme sur la figure suivante:
Le but du robot est de ramenez les bouées dans le port et les placer dans les chenaux, voire aire de jeu ci-dessus. Il gagne un point si les bouées sont dans le port et un point supplémentaire si la bouée est placée sur la ligne de chenal de la même couleur. Les conditions de validitée, sont résumés sous dessous:
Chaque paire de bouée valides donne deux point supplémentaires
Relever les manches à air
Chaque équipes disposent de deux manches à air disposés sur les bords du plateau (représentés sur la figure ci-dessous. Le but est de les relever pour gagner 5 point si une seule est relevée, et 15 point si les deux sont relevés.
Allumer le phare
Pour guider les 'bateaux', un phare doit être réalisé par chaque équipe. Ce dispositif doit être déployé sur 700mm avant de tourner avec un angle de balayage de minimum 180°. Le déploiement du phare doit être actionné par le robot avant la fin du match. Le phare permet de marquer 2 point s'il est déposé sur la zone rocheuse avant le début du match, puis 3 points s'il est activé durant le match et 10 points supplémentaires s'il est correctement déployé et allumé avant le fin du match.
Arriver à bon port
Il existe deux zones de mouillage pour chaque équipe: une zone de mouillage nord et sud. Il s'agit de la zone dans laquelle les robots doit s'arrêter à la fin du temps réglementaire. Pour définir dans quelle zone les robots doivent s'arrêter, il existe une boussole qui indique le nord et le sud. Au début du temps réglementaire, celle-ci tourne, et le point cardinal sur lequel elle s’arrête détermine la zone de mouillage.
Le nombre de point est déterminé de la façon suivante
- 10 points si les deux robots sont valides dans la zone de mouillage indiquée par la girouette
- 5 points si les deux robots sont valides dans la mauvaise zone de mouillage
- 5 points si un des deux robots est valide dans la zone de mouillage indiquée par la girouette
- 0 points si les deux robots sont valides mais dans des zones de mouillage différentes
De plus un mouillage est valide selon les conditions suivantes:
Hisser les pavillons
Lors des cinq dernière seconde, l'un des deux robot doit hisser ses pavillons pour indiquer sa présence aux autre 'bateaux'. Cela consiste à élevé au dessus du robot, un pavillon à l'aide d'un système électromécanique, comme montré ci dessous:
Estimer la performance
Tâches à effectuer cette année
Maintenant que nous avons la base du robot, nous allons devoir faire en sorte que celui-ci réalise les objectifs: nous devons donc réaliser deux parties distinctes: la commande précise du robot et ses actionneurs, pour marquer des points.
Commande du robot
Nous nous sommes rendus compte que la commande du robot ne pourra pas se faire exclusivement par un Arduino. On nous a alors suggérer d'utiliser un Raspberry Pie pour effectuer la partie calcul du robot. C'est à dire le calcul de la trajectoire, de la position, etc. Ce Raspberry sera connecté en série à l'Arduino, ainsi ce dernier pourra de façon précise contrôler les différents moteurs et actionneurs du système.
De plus, par conseil des professeur, nous avons décider que le robot se repérera par traitement d'images, obtenues par une caméra de type Pixie. Cette caméra sera connectée au Raspberry qui fera le traitement d'image pour savoir où le robot doit aller.
Actionneurs
Pour que le robot puisse marquer des points, avancer droit ne suffit pas, celui-ci doit attraper les bouée pour les amener dans leurs zones.
Répartition des Tâches
Entres les différents acteurs du projet
Les différents objectifs seront répartis comme suit entre les différents acteurs du projet: Pierre et Jérémie, s'occuperons de la commande des robots: de l'asservissement des robots pour qu'ils atteignent les positions désirés
Entre chaque robot
Le Robot principal s’occupera de rassembler les bouée et de les placés dans le port et sur les chenaux, tandis que le robot secondaire relèvera les manches à air et actionnera le phare.Bien sûr les deux robots
Diagramme Prévisionnel
Réalisation de chaque Objectif
Dans cette partie, nous expliquerons sommairement le choix retenu pour chaque tâche de la compétition. Les détails des choix techniques seront donnés par la suite.
Créer des chenaux
Relever les manches à air
Allumer le phare
Arriver à bon port
Hisser les pavillons
Estimer la performance
Actionneurs du robot (Raphaël Bonvalet & Maxime Fontaine)
Dans cette partie, nous verrons comment le robot va pouvoir se saisir des bouées pour marquer des points.
Bras mécanique
Nous avons opter pour un bras mécanique équipé d'une pince au bout de celui-ci pour pouvoir attraper le gobelet.
Le bras sera composé de deux barres réalisées avec une imprimante 3D, d'un moteur pas à pas pour la base et de 2 servomoteurs, un pour la pince et l'autre pour la jonction des deux bras.
La raison pour laquelle nous avons choisi un moteur pas à pas et non un moteur à courant continue est que le moteur pas à pas est plus facile à mettre en œuvre pour être précis.
Servomoteurs :
SG90 (2,5kg/cm) : http://www.ee.ic.ac.uk/pcheung/teaching/DE1_EE/stores/sg90_datasheet.pdf
Hitec HS422(4.1kg/cm) :https://media.digikey.com/pdf/Data%20Sheets/DFRobot%20PDFs/SER0002_Web.pdf
Moteur pas à pas :
Liste de moteurs : https://www.igus.fr/info/drive-technology-motors-overview?gclid=Cj0KCQiAk7TuBRDQARIsAMRrfUavFQZqj6OAls8oMsPrvt0u-6380olboe8HbStIY3V23nZDMWxYzGwaAl07EALw_wcB.
Nous avons choisi le NEMA 17 car il est petit, donc prendra moins de place sur le robot, mais il est assez puissant pour soulever le bras.
La première version du bras a était réalisé en impression 3D afin de vérifier les dimensions du robot mais aussi afin de valider ou non le modèle pensé.
Commande du Robot (Pierre Gautreau & Jérémie Hassenforder)
Le but de cette partie est d'obtenir un robot qui se déplace de manière autonome et qui sache définir son prochain objectif. Dans cette partie, nous verrons:
- La configuration de la Raspberry Pie
- La communication de la Raspberry avec l'Arduino
- Le traitement d'image par Open CV
- L'asservissement du Robot
Configuration de la Raspberry Pie
Séance 02 Décembre 2019:
Finalisation de la configuration de la Raspberry Pi 3 et de la connexion Ethernet. Nous avons configurer la connexion Ethernet entre la carte et un ordinateur afin de faciliter le téléversement du code du robot lors des tests.
L'archive git va être recrée puisque nous n’arrivons plus à nous connecter à la précédente.
Communication série Raspberry/Arduino
Nous avons fait le choix de laisser les calculs à la raspberry pie qui communique en série avec l'arduino pour contrôler les moteur et les actionneurs.
Traitement d'image par Open CV
L'asservissement du Robot
Suite au conseil de M. Redon de regarder le projet P46 de l'année dernière, qui avait construit un robot mobile. Nous avons décidé de récréer leur carte car elle correspondait parfaitement à nos besoin. Cette carte est composée de 8 entrées pour réguler les moteurs à l'aide des encodeurs, ainsi que de de 8 sorties permettant de commander les moteurs
Documents Rendus
Projet S8
Semaine 1
Lors de cette première semaine nous n'avions pas accès à notre commande ainsi nous nous sommes attardé sur la modélisation de notre futur châssis afin de nous faire une idée sur la disposition des éléments.
- en jaune : la raspberry
- en noir : la carte
- en vert : la batterie
Semaine 2
Pendant cette semaine nous nous sommes attardés sur principalement sur l'utilisation de la pixy pour notre projet, c'est à dire comment l'installer, lui faire apprendre une couleur, etc..
Pour faire apprendre une couleur à un arduino, c'est assez simple, il suffit de télécharger le logiciel Piximon donné par le constructeur de la pixy. Avec celui-ci on peut entrer un total de 7 couleur reconnaissable par la pixy ce qui est très bien car nous n'avons seulement besoin que de deux couleurs (rouge et vert)
Voici le lien pour l'installation de la pixy sur un arduino pixy arduino : https://docs.pixycam.com/wiki/doku.php?id=wiki:v1:hooking_up_pixy_to_a_microcontroller_-28like_an_arduino-29
Cette installation sur l'arduino nous sert principalement de test en attendant la configuration de la raspberry pi.
Voici donc comment installer la pixy sur la raspberry pi : https://docs.pixycam.com/wiki/doku.php?id=wiki:v1:hooking_up_pixy_to_a_raspberry_pi
Semaine 3
Au cours de cette semaine nous avons continué notre découverte d'opencv pour pouvoir l'utiliser afin de reconnaître et d'attraper les différents gobelets présents sur l'arène. Pour commencer, nous avons tester la librairie opencv sur la webcam inclue sur l'ordinateur en essayant de détecter une certaine couleur. Dans l'image ci-dessous nous avons tester le bleu:
Ensuite nous avons essayé d'implémenter le fait que la caméra puisse reconnaître 2 couleurs. Sur la photo ci-dessous on peut voir que la caméra reconnaît l'objet en bleu et celui en rouge.
Le code de ce programme est disponible sur le github suivant : https://github.com/Vankcee/cdf_robotique_2020
Durant cette semaine nous nous sommes également chargé de la modélisation 3D du bras final, celui sur lequel sera disposé la pince. N'ayant pas cette pince à notre disposition la finalisation de cette modélisation doit attendre afin d'avoir toutes les mesures nécessaires.
Semaine 4
Cette semaine, pour la partie reconnaissance de l'objet je devais faire en sorte savoir différencier un écocup d'un autre objet d'une même couleur. Je me suis donc dit que ce serait plus facile pour commencer de détecter d'abord une sorte de forme plutôt que l'écocup en lui-même, j'ai utilisé la fonction findContours(), de OpenCv pour pouvoir réaliser ceci. Voici le résultat :
On peut voir sur la photo que la forme indiquée que le contour du paquet de mouchoirs n'est pas vraiment rectangle mais c'est parce que je considère le rectangle est un polygone à 4 côtés. Je dois donc essayer de rendre cela plus précis.
Ne pouvant pas finaliser le bras nous avons vu pour faire le chassis.Après concertation avec M.Astori nous avons conclu qu'il serait plus judicieux de conserver la base du chassis actuel mais d'y ajouter une extension de sorte à accueillir les elements nécessaire.
Après réalisation à la découpeuse laser voici le résultat :
Semaine 6
Cette semaine, ayant réussi à détecter une couleur et à savoir si la forme de cette couleur était un rectangle, j'ai commencé à vouloir implémenter le code créé jusqu'à maintenant sur la raspberry pi et ensuite envoyer les résultats obtenus via liaison série à l'arduino. Pour l'instant j'envoie juste le message 1 si il y a un ecocup en face de la webcam et 0 sinon. On pense rester sur le seul fait qu'il y ait un ecocup ou non dans le champ de la webcam donc envoyer 1 si l'ecocup est bleu, 2 si il est vert et 0 si il n'y a rien dans le champs. On se limite à cela car la fonction de la librairie serial sous python ne sait envoyer qu'un seul caractère à la fois. Par la suite on pense peut-être à découper l'écran en une vingtaine de cases et envoyer la zone dans laquelle se trouve le barycentre de l'ecocup. Ensuite il nous faudra corréler ces résultats avec ceux obtenus par les différents capteurs.
Nous avons également repris le code arduino de l'année dernière concernant le déplacement du robot. Nous avions un problème concernant les interruptions entrainé par les codeurs incrémentaux. Ce problème était simplement due au fait que les pins d'interruption ne sont pas les mêmes sur un Uno et un Mega. La théorie semble donc fonctionner, il faut donc construire le 2e étage du chassis afin qu'il soit mobile et ainsi que l'on puisse observé sont comportement réel.
Carte Electronique
Lors du semestre 7 nous avions décidé de produire une carte éléctronique. Celle-ci était issu d'un ancien projet IMA4. Elle répondait à nos besoins en matière de controles moteurs et communications avec les capteurs de l'automate. Nous avons commandé en fin S7/début S8 les composants nécessaires à la réalisation de cette carte.
A la réception de la première commande il manque certains composants. Les controleurs moteurs TB6612 sont dispensable actuellement. Cependant le composant de surface CAY16 qui est un réseau de résistance utilisé dans la fonction de communication entre les deux microprocesseurs est manquant. Il manque aussi certaines résistances de 1M ohm.
J'ai pris rendez-vous avec M. Thierry Flamen pour acceder au four à refusion. Il m'a expliquer la technique que je ne conaissais pas. Je procede à la dépose des premiers composants (Microcontroleurs ATMEGA2560 et ATMEGA8U2) ainsi que la plupart des résistances et capacités autour des microcontroleurs. Je souhaite dans un premier temps souder tout les composants intervenant dans la fonction de communication entre les deux microprocesseurs. Cependant il me manque certaines résistances ainsi que le réseau de résistance.
Je repasse commande auprès de M. Alexandre Boé.
Etant donné la situation de confinement, nous utilisons notre solution de secours qui est d'utiliser deux arduinos UNO.
Compte rendu du chat suite au confinement
A cause du confinement nous devons travailler à distance chacun de notre côté, nous avons donc discuté avec les professeurs sur ce que l'on devait/pouvait faire pour la suite du projet :
- Pour Pierre : Construction du châssis et code pour le faire avancer et le réguler.
- Pour Maxime : Modélisation / Impression 3D de la pince et de son bras. Puis création d'un shield Arduino pour une des deux cartes.
- Pour Raphael : Finalisation de la liaison série : envoyer la position approximative de l'écocup donc découper l'écran de la camera en 16 cases, associer un caractère à chaque case et envoyer en liaison série le caractère correspondant à la position du barycentre de l'écocup. Puis comme pour Maxime mais pour l'autre carte.
Semaine 7
La réalisation de la pince ainsi que son système d'ouverture et de fermeture sont réalisé, il faut à présent finir le support de celle ci afin de compléter le reste du bras.
Construction Chassis
Cette semaine j'ai percé les fixations du chassis dans les deux plaques de plexiglas et j'ai aussi adapter les fixations que j'avais sous la main. J'ai réussi, avec beaucoup de précautions à ne briser qu'un coin d'une plaque de plexiglas. J'ai supperposé les deux plaques sommairement. J'ai commandé des fixations de meilleurs qualités.
Semaine 8
Semaine 9
Pierre : J'ai récupéré ma commande pour les fixations ce 07/04. Le montage devrait être fini ce mercredi 08/04. Une fois le montage fini je m'attelle à la programation de l'automate.
Shield Arduino
Afin de simplifier le câblage nous avons décidé de réaliser un shield pour les capteurs présent sur le robot. Ainsi nous avons fait le choix de connecter les GND avec des fils isolés que nous souderons à la main.
Voici le shield pour le 2ème arduino qui gère les moteurs. Sur ce shield est présent les connections aux différents servos moteurs utiles pour la pince et le contrôleur moteur lié aux roues. Pour le contrôleur moteur j'ai pris celui de base dans le package de Fritzing car celui que nous utilisons n'était pas présent et que de toute façon le shield ne pourrait pas être imprimés à cause des événements actuels.
Programmation
Je n'ai pas de câble chez moi pour téléverser mon code sur mes cartes. Je me lance dans la création d'une simulation du robot sur MATLAB Simulink. J'utilise la boite à outils Mobile Robotics pour la simulation du comportement physique du robot.
J'ai repris le code du S6 que j'ai améliorer après détection d'erreurs. On ne peux pas utiliser la fonction arc tangente simplement puisqu'elle ne place pas l'angle dans le bon quadrant du plan. Il est préférable d'utiliser la fonction arc tangente seconde (atan2) qui résous ce problème d'orientation. De plus elle prend en compte les cas où le dénominateur est nulle, ce qui est impossible avec la fonction arc tangente.
Le contrôle du robot est réalisé grâce à un asservissement de l'orientation de celui-ci. J'ai implémenté un régulateur proportionnel pour rendre le système plus rapide. Je pense que le système physique aurait nécessite un régulateur Proportionnel Intégrale pour corriger l'erreur statique du au frottement des roues.
La simulation montre actuellement que le robot atteint sa position cible quelque soit la position de la cible.