Robot transporteur

De Wiki de bureau d'études PeiP
Révision datée du 8 mai 2013 à 14:08 par Dsaunder (discussion | contributions) (La pince de levage)

Introduction


Vidéo HD


Nous allons vous présenter notre projet pour le bureau d'étude IMA 2012/2013. Nous sommes tous les deux très intéressés par ce département, et ce petit robot nous a passionné dans sa conception et sa programmation. Nous avons choisi de mélanger les différents styles de robots à concevoir, pour proposer une idée personnelle de projet. Notre objectif est de créer un robot autonome qui transporte des objets. Cela passe par deux grandes étapes : la conception d'un système à 4 servomoteurs et la programmations des tâches réalisées en autonomie.

La Conception

Le robot est composé deux éléments essentiels : une base motrice et une pince de levage. Il comporte aussi deux capteurs pour le rendre autonome.

La base motrice

receptacle
Réceptacle pour boîtes NXT et Foxboard

La base est composée de deux servomoteurs qui sont reliés entre eux pour former un socle solide. En effet, ce socle doit être capable de supporter le poids de deux boites NXT, ainsi que celui de la pince et de l'objet transporté. Les servomoteurs entraînent la rotation de 4 roues sur lesquelles sont fixées des chenilles pour lui permettre d'avancer. La première boite NXT est directement fixée sur les servomoteurs, puis derrière, nous avons mis en place un réceptacle capable de contenir une deuxième boite NXT ou une Foxboard (nous ne savions pas encore comment guider le robot). La structure devait être solide, car on devait encore ajouter la pince de levage sur le dessus. Voici quelques illustrations de la construction.

basemoteur
Base motrice à chenille, composée de deux servomoteur

La pince de levage

La pince de levage a été l'objet de toute la première séance, c'était l'élément le plus compliqué à assembler. Nous avons été confronté à plusieurs contraintes : le poids des objets transportés, la résistance du système de levage, et l'adaptation de la forme de la pince.

Nous avons d'abord créé une pince composée de deux servomoteurs pour le serrage et un autre pour le levage de la pince, mais ce système était trop lourd et peu pratique à solidariser avec le reste du robot. Nous avons donc évolué vers un système plus léger composé de seulement 2 servomoteurs. Dans ce nouveau système, un servomoteur était dédié à serrer la pince et l'autre à la soulever par un mouvement de rotation. Le problème est que la pince était encore lourde et compliquée à fixer, car tout était accroché à l'avant du véhicule, il y a donc eu un problème de répartition de poids. Inutile de préciser qu'en ajoutant en plus un objet dans la pince, le robot se serait effondré. Nous avons alors pensé à mettre en place une poulie, ce qui a permis de surmonter ces obstacles.

modelepince
Modèle de la pince, avec un bras mobile fixé sur le servomoteur et une barre fixe

La pince est donc composée de deux parties :

  • Un servomoteur fixé sur le dessus du robot, pour répartir le poids et assurer une fixation solide. Sur ce moteur, nous avons fixé de petits embouts, ainsi que l’extrémité d'un fil. De cette manière quand le moteur tourne, le fil s'enroule autour de ceux-ci. C'est donc la poulie.
  • Un servomoteur relié à l'avant du véhicule par une liaison pivot. Il peut donc se déplacer de haut en bas sans problème. Ce moteur permet de serrer la pince par une rotation d'une des deux branches qui la compose. Vous voyez, à gauche, que la pince est constituée d'une barre fixe sur laquelle s'appuie l'objet quand la pince est en position fermée, et d'une partie partie mobile , liée au moteur (en arc de cercle pour favoriser la prise des objets à transporter) qui change de position pour ouvrir et fermer la pince. L'autre extrémité du fil, provenant de la poulie, est fixée sur la barre fixe.

Nous avons donc une pince qui se ferme pour saisir un objet, puis qui se soulève et redescend grâce à une poulie, pour enfin se rouvrir et déposer l'objet.

Les capteurs

Le robot est doté de deux capteurs : un capteur de couleur pour suivre une ligne, et un capteur RFID qui lui sert à détecter les bases sur lesquelles il doit effectuer une action.

Nous avions d'abord pensé à installer un capteur de pression sur la pince pour vérifier si l'objet était bien serré dans la pince. Mais celui-ci s'est avéré inutile après programmation, car le programme permet de serrer l'objet autant qu'il faut pour que l'objet soit correctement maintenu. La détection de pression n'était donc pas nécessaire.

capteur
Emplacement des capteurs sur le robot

En revanche, comme nous voulions faire un robot guidé par des bandes noires au sol, nous avions besoin d'un capteur de couleurs. La difficulté est que ce capteur n'a qu'une très courte portée, c'est pourquoi nous avons du le placer dans un endroit ou il serait immobile, le plus proche du centre de l'avant du robot et le plus proche du sol possible. De cette façon, la détection est bonne, et permet une bonne correction de trajectoire. Cependant, le robot n'était pas conçu pour avoir un capteur à cet endroit, nous l'avons donc décentré un peu. Mais après quelques tests, la position que nous avons choisi, nous a permis d'obtenir une trajectoire correcte.


Le capteur RFID a été beaucoup plus simple à installer, car il a une plus grande portée (3cm). Nous l'avons donc placé juste à coté du capteur de couleur. Cet emplacement, permet une bonne détection des cartes RFID,et le robot distingue facilement la position des objets à transporter.

Robot final

Voici l'allure de notre robot totalement assemblé, on peut voir les capteurs, la pince, mais surtout le fil qui relie la poulie et la pince.

final
Robot totalement assemblé

La programmation

modelepince
Modèle de la pince, avec un bras mobile fixé sur le servomoteur et une barre fixe

Nous avons choisi de programmer en langage NXC (Not eXactly C) que nous avons compilé avec l'IDE BricxCC (Bricx Command Center).

Nous avons décidé de faire suivre au robot un ensemble d'action dans un ordre précis.


La première partie consiste à initialiser les deux capteurs de couleurs et RFID.

Les étapes du parcours

Durant ces phases, le robot suit les lignes de couleurs vertes. Dès qu'il détecte une ligne rouge, il essaye de lire la carte RFID présente sur le sol pour savoir s'il faut déposer ou prendre un colis.

/* expliquer les state : gotobaseget... */




La recherche de ligne

Dans un premier temps, nous avons créer un programme permettant de retrouver une ligne de couleur suivant le raisonnement suivant :

INITIALISER timer A 0 ms
INITIALISER ligne_trouvee A faux
TANT QUE ligne_trouvee DIFFERENT DE vrai FAIRE
   SI detecteur_de_couleur = couleur_ligne
      ligne_trouvee = vrai
   FIN SI
   SI timer < 2500 ms
      ROBOT tourne a GAUCHE
   ET SI  timer < 6000 ms
      ROBOT tourne a DROITE
   SINON
      timer = 0 ms
   FIN SI
INCREMENTER timer DE 1 ms
FIN TANT QUE

Cette solution nous a permis de faire fonctionner le robot avec toutes les autres parties du programme. Cependant, il était plutôt long pour trouver les lignes de couleurs sur sa droite.

Cette problématique nous a amenés à écrire un deuxième algorithme permettant de retrouver une ligne plus rapidement, quelque soit le côté où elle se trouve par rapport au robot. /* rajouter l'algo */

Nous avons donc créer un algorithme dit d'exagération de recherche, c'est à dire qu'il cherche pendant un cours laps de temps dans une direction, puis dans l'autre sens pendant une durée plus importante. Le robot répète ces deux opérations pendant un certain nombre de fois, en augmentant à chaque fois un peu plus la durée de recherche. Si au bout d'un nombre d'itération le robot ne trouve toujours pas la ligne, on lui ordonne de faire demi-tour.

Après avoir effectué des tests comparatifs, nous sommes arrivés à la conclusion que le robot était, avec le deuxième programme, 50 à 60 % plus rapide.

La reconnaissance RFID

De façon à pouvoir lire les cartes RFID avec le capteur RFID, nous avons choisi d'utiliser une librairie externe OpenSource.

Cette librairie est disponible à l'adresse suivante

/* preciser que au départ modulo 2, mais on choisi modulo 3 car sinon erreur */ Cette librairie nous permet de récupérer les 5 informations disponibles sur la carte. De façon à pouvoir les traiter nous avons décider d'utiliser le secteur numéro quatre, et d'effectuer un modulo 3 sur la valeur. En fonction de la réponse, le robot est programmé pour effectuer des tâches particulières:

  • 0 : Ces cartes sont retirées car la réponse 0 est identique à la réponse du lecteur en cas d'erreur
  • 1 : La valeur 1 ordonne au robot de récupérer un objet s'il n'en a pas actuellement
  • 2 : La valeur 1 ordonne au robot de déposer l'objet qu'il tient s'il en a un actuellement

La communication entre les deux boîtiers NXT

Bien qu'au début nous avions commencé le projet dans l'optique d'utiliser un seul boitier NXT. Cependant, nous avons été contraint d'opter pour deux boitier car un seul ne peut commander que 3 servomoteurs, et il nous était nécessaire d'utiliser quatre servomoteurs. Nous avons donc décider d'utiliser ces deux boitiers, et de les faire communiquer par la technologie Bluetooth.

Cela nous à donc amener à utiliser une bibliothèque externe OpenSource, qui nous permet d'utiliser plus simplement la fonctionnalité Bluetooth.

La page Web de cette librairie est la suivante.


Lorsque le robot se trouve sur une base, et qu'il doit récupérer un colis, le boitier NXT maître (celui contrôlant les moteurs de déplacement) envoie au NXT esclave l'instruction "PRENDRE COLIS".

L'instruction est envoyée en boucle tant que le NXT esclave ne lui renvoi pas l'instruction "COLIS EMBARQUÉ"


De façon analogue, lorsque le robot se trouve sur une base et qu'il doit déposer un colis, le boitier NXT maître envoie au NXT esclave l'instruction "DEPOSER COLIS" tant que l'esclave ne lui renvoie pas l'instruction "COLIS DÉPOSÉ"

Toutes les instructions sont envoyées à l'aide de la boîte 0.


De plus, pour éviter que le robot ne démarre alors que la connection Bluetooth n'est pas active, nous avons utilisé un programme qui nous permet de vérifier au démarrage que les deux boîtiers sont bien connectés.

Voici un schéma résumant les rôles de chacun des boitiers :


Communication.jpg

L'intégration des fonctionnalité

Nous avons commencé à intégrer les fonctionnalité supplémentaire lors de la séance du 7/03. Le robot doit :

  • être contrôlable à distance avec une webcam par l’intermédiaire du site internet de la Foxboard
  • pouvoir lire des RFID pour se localiser sur le circuit
  • suivre une ligne discontinue et emprunter des voies de garage

Ajouts des nouveaux éléments

Nous avons équipé le robot d'une Foxboard que nous avons placé sur le dessus du robot avec la webcam pour répartir le poids. De plus nous avons ajouté un capteur boussole pour que le robot puisse suivre une ligne discontinue. L'architecture générale du robot n'a pas changée.


Contrôle à distance

Pour le contrôle à distance nous avons dus intégrer la Foxboard sur notre robot. La Foxboard est équipée de plusieurs éléments :

  • une carte Wifi pour la communication entre le site internet du robot et la Foxboard.
  • une clé Bluetooth pour les échanges d'informations entre le boitier NXT maître et la Foxboard.
  • une webcam pour visualiser en direct ce que voit le robot depuis le site internet.

Le contrôle a distance s'est effectué en deux temps :

  • La programmation des actions en fonction du "bouton" sur lequel on clique.
  • Une amélioration du site dédié au contrôle par Foxboard.

/* Préciser */

Lecture des RFID

Pendant l'intégration des fonctionnalités, nous avons utilisé les RFID de deux manières différentes. D'une part pour séquencer notre algorithme de suivi de ligne, et d'autre part pour se repérer en temps réel sur le circuit. La première chose indispensable était donc la création d'une base de données RFID. Pour cela nous avons scanné toutes les RFID pour choisir les informations les plus pertinentes à utiliser afin de les distinguer.Chaque carte a donc pu être reconnue comme unique par le robot.

Lors du suivi de la ligne les RFID indiquent au robot comment il doit se comporter. Il y a 7 étapes différentes :

  • Aller chercher l'objet
  • Entrer dans la base de récupération de l'objet
  • Sortir de cette base
  • Aller déposer l'objet
  • Passer en mode ligne discontinue
  • Entrer dans la base de dépôt de l'objet
  • Sortir de cette base

Le suivi du robot en temps réel s'effectue par transmission de la dernière carte RFID scannée. Le NXT envoi l'information à la Foxboard qui l'envoi au site internet, on voit alors la dernière base où s'est trouvé le robot sur le site internet.

Les lignes discontinues

Pour intégrer cette fonction nous nous sommes fortement inspirés du code réalisé par Alexandre Jouy et Kévin De Arriba. En effet, leur code permettait de suivre une direction donnée à partir de la boussole. Nous avons modifié ce code afin qu'il convienne à notre algorithme séquentiel. Nous avons aussi dus définir la direction à prendre selon la carte RFID scannée. Au final, nous utilisons une version simplifiée du code de Kévin et Alexandre.

/* A revoir */ Lorsque le robot scanne une RFID qui lui indique de passer en mode discontinu, il suit la direction qu'on lui impose jusqu'à ce qu'il retrouve la ligne verte (ligne principale du circuit).