2- La réalisation d’un robot

A) La nomenclature :

Composant : Microcontrôleur (Arduino uno) liens vers le site du fabriquant : http://arduino.cc/ (explications et programmation)

Description : Un microcontrôleur est un circuit intégré qui rassemble les éléments essentiels d’un ordinateur : processeur, mémoires (mémoire morte pour le programme, mémoire vive pour les données), unités périphériques et interfaces d’entrées-sorties. Nous utilisons un microcontrôleur Arduino.

Fonctionnement : Arduino est un circuit imprimé en matériel libre sur lequel se trouve un microcontrôleur qui peut être programmé pour analyser et produire des signaux électriques, de manière à effectuer des tâches très diverses comme la domotique le contrôle des appareils domestiques – éclairage, chauffage…), le pilotage d’un robot, etc. C’est une plateforme basée sur une interface entrée/sortie simple.

Arduino peut être utilisé pour construire des objets interactifs indépendants (prototypage rapide), ou bien peut être connecté à un ordinateur pour communiquer avec ses logiciels.

Application au robot : le microcontrôleur a pour but de contrôler les moteurs ainsi que le servomoteur et de recevoir les informations des capteurs

arduino
Composant : Shield moteur

Description : Le shield permet de piloter deux moteurs à courant direct (DC motors) à l’aide de la carte Arduino.

Fonctionnement : Le shield est connecté au microcontrôleur par emboitement, il transmet donc les informations reçues directement : le shield est une interface entre les capteurs, les moteurs et le servomoteur et le microcontrôleur.

Application au robot : Le shield moteur vous permet de piloter le sens et la vitesse de rotation de vos deux moteurs DC de manière indépendante l’un de l’autre. Le Shield Arduino pour moteurs doit être alimenté par une source d’énergie externe. En effet, l’énergie demandée par les moteurs excède souvent l’énergie disponible par USB

Arduino_IO_Shield.
Composant : Capteurs (x2)

Description : Le Capteur de distance Sharp mesure la distance en continu entre 10 cm à 80cm et la rapporte sous forme d’un signal analogique (voltage).

Fonctionnement : L’interface se connecter avec un câble avec connecteur JST 3-pin qui est fourni au microcontrôleur par l’intermédiaire du shield. Le capteur n’a pas besoin de logiciel supplémentaire pour fonctionner.

Application au robot : Les capteurs infrarouge permettent la détection des obstacles.

sharp nomenclature
Composant : Moteur (moto-réducteur, x2)

Description : On trouve dans le commerce tous types de moto-réducteurs, soit à axe moteur déporté, soit à axe perpendiculaire par rapport à l’axe de sortie.

Fonctionnement : Le moto-réducteur est un ensemble constitué d’un réducteur déjà équipé, d’un moteur électrique et prêt à être monté tel-quel sur les installations.

Application au robot : Les moto-réducteurs servent à la propulsion du robot.

moteur-motoreducteur-6v

Composant : Servomoteur

Description : Un servomoteur (souvent abrégé en « servo », provenant du latin servus qui signifie « esclave ») est un moteur capable de maintenir une opposition.

Fonctionnement : Il est prévu pour supporter un effort statique et dont la position est vérifiée en continu et corrigée en fonction de la mesure. C’est un système asservi.

Application au robot : Le servomoteur a pour but de permettre la rotation des capteurs et de connaître leur angle de rotation.

servo-moteur-
Composant : Accessoires : fils électriques, rack de piles, connecteur clip piles, interrupteur

Description : Ces composants sont de type électrique.

Fonctionnement : Ils permettent le raccordement des différents composants électroniques et donc leurs alimentations en énergie et la communication entre eux sous la forme de signaux électrique.

Application au robot : Ils peuvent-être vu comme des éléments négligeables alors qu’ils ont toutes leurs dans le fonctionnement du robot ; ils sont indispensables.

Composants
Composant : plate-forme du robot (turtle)

Description : Cette plate-forme est composée d’un kit de montage composé de support, de vis et d’écrous de fixation.

Application au robot : Ils permettent la solidarité des composants électroniques à une base solide et mobile.

plateforme-robot-mobile-2-roues-turtle

B) La fabrication     :

Étape 1 : nous avons commencé par l’assemblage sur la plate-forme des moteurs que nous avons du préalablement câbler. Pour cela, mous avons soudé des câbles étamés (action de recouvrir les brins de cuivre des câbles d’une fine couche d’étain) aux moteurs. Dès lors, nous avons différencié les moteurs en nomment M1 le moteur gauche et M2 le moteur droit par rapport à l’avant de la plate- forme. Les moteurs y sont boulonnés.

IMG_2039

IMG_2043
Étape 2 : nous avons vissé à la plate-forme la roue libre et aux axes des moteurs les roues. Cela permet d’apporter la notion de mobilité à la plate-forme. Cependant elle n’est pas capable de se mouvoir car il manque encore l’énergie.

IMG_2046

IMG_2047

Étape 3 : nous installons sur le bas de la plate-forme le coupleur de pile dans le but de l’alimentation en énergie électrique du futur du robot. Nous y relions l’interrupteur sur le fil – ou ground (noir). L’interrupteur, quant à lui, est accroché au plateau du haut de la plate-forme, il faut donc faire attention à ne pas tirer sur les câbles qui risqueraient de se dessouder !

IMG_2049

IMG_2066
Étape 4 : nous avons installé le microcontrôleur sur le plateau du haut de la plate-forme. Du fait de la rareté des  composants électroniques dans la robotique et du manque de compatibilité entre des composants de différentes marques, nous avons eu quelques difficultés à installer le microcontrôleur grâce aux entretoises fournies par le kit plate-forme : nous avons donc du commencé par fixer une vis entre le plateau du haut et le bas de la plate-forme car celle-ci se trouvera coincée sous le microcontrôleur. Puis nous avons fixé le microcontrôleur au plateau grâce à trois entretoises dont une inversé obligeant à faire pivoter le plateau autour de la vis déjà fixée et à enlever les roues du robot pour permettre la rotation. Après le remontage et l’assemblage du plateau à la plate-forme le microcontrôleur est donc fini d’être installé grâce à deux vis.

IMG_2068
Étape 5 : nous connectons ensemble le microcontrôleur et le shield moteur par un simple emboîtement des broches (qui sont fragiles) dans les pins. Cela permet la connexion et donc la communication entre les deux composants. Les câbles des deux moteurs sont reliés au shield qui reçoit par la même occasion reçoit les câbles d’alimentation. Cela permet donc au robot de devenir fonctionnel et de commencer à se déplacer si un programme est entré dans le microcontrôleur.

IMG_2071

Étape 6 : nous avons ensuite décidé d’installer le servomoteur sur lequel sont accrochés les deux capteurs infrarouge. Pour cela, nous devons déterminer l’angle entre les deux capteurs qui se trouveront parallèle au sol : afin de solidariser les capteurs entre eux et au servomoteur, nous utilisons des pièces de meccano. Nous choisissons une disposition en « V » plutôt qu’une disposition linéaire ou en « V » inversé car, selon nous, ces dispositions sont peu adaptées car dans ces cas les obstacles situés devant eux ne peuvent pas être perçus.

Schéma capteur

On peut conclure que la disposition des capteurs est importante : c’est la clef pour la prise en compte de l’environnement donc des obstacles.

IMG_2126
Étape 7 : nous avons fixé les capteurs, qui sont solidaires, sur le servomoteur qui permettra leur rotation et donc l’augmentation de leur champ de détection. Nous avons décidé de suspendre le servomoteur à l’avant du plateau supérieur car cela permet aux capteurs de se trouver parallèle et proche du sol ; à mi-hauteur entre le plateau supérieur et le sol. Cette disposition permet d’optimiser la capacité de détection des obstacles dans l’environnement.

IMG_2221
Étape 8 : nous avons clôturé l’assemblage du robot par la connexion du servomoteur et des capteurs au microcontrôleur par l’intermédiaire du shield qui est connecté dessus. Les capteurs et le servomoteur ont trois câbles chacun : les deux premiers (noir et rouge pour les capteurs ; marron et rouge pour le servomoteur) sont les câbles d’alimentation et le troisième câble (bleu pour les capteurs ; orange pour le servomoteur) est le câble du signal qui permet au microcontrôleur de recevoir (capteurs) ou de transmettre (servomoteur).

IMG_2222

IMG_2220

C) Le fonctionnement :

Suite à la fabrication, le première objectif est d’offrir à un robot une autonomie dans ces déplacements, et la possibilité de se déplacer en ligne droite et d’effectuer des rotations. En jouant sur la vitesse et le sens de rotation, il est possible de déplacer un robot 2WD ( Possédant 2 roues motrices) dans toutes les directions. Afin de faire avancer le robot pendant 3 secondes et s’arrêter pendant 1 seconde en boucle il faut demander au microcontrôleur d’effectuer  la liste d’instruction suivante : Voir annexe du site. Afin de faire tourner le robot  on remplace l’un des ordre AVANT par ARRIÈRE. La réalisation de ce type d’exercice est primordiale afin d’aborder les bases même de la programmation d’une des clés de l’autonomie : Le déplacement. Cette phase permet au programmeur de déceler les problèmes mécaniques et appréhender les caractéristiques du robot (vitesse de rotation inégales des roues, problème de temporisation lors de
20
la rotation du robot, mauvais câblage…) afin de mieux aborder la partie suivante : La perception du monde.
Dans l’objectif de permettre au robot d ‘accéder à une perception plus ou moins élaborée de son environnement des capteurs Sharp sont utilisés. Ce type de capteur renvoie par la sortie SIGNAL un courant de 0 à 5 Volts en fonction de la distance à l’objet. La valeur de la broche où est brancher le signal du capteur est lu 30 à 50 fois afin de réaliser une moyenne cette moyenne est ensuite envoyée par câble USB à l’ordinateur (VOIR ANNEXE DU SITE). Afin de comprendre comment traiter ce type de valeur il faut consulter la data-sheet (ou fiche technique) du capteur (VOIR ANNEXE DU SITE). Par exemple, la data-sheet des capteurs utilisés présentent le graphique suivants :

sharp
Sur ce graphique la courbe est représentative d’une fonction qui associe la distance L entre le capteur et l’objet reflétant les rayons infrarouges (émis par le capteur) aux voltage en sortie du capteur. La courbe n’étant pas linéaire on ne peut utiliser des relations de proportionnalité afin de convertir le voltage en sorite du capteur en une distance.Il faut dans ce cas déterminer une fonction en réalisant une série de mesures en notant la valeur renvoyé par l’Arduino (le microcontrôleur) et la distance à laquelle se trouve l’objet. Dans notre cas nous avons réaliser des mesures de 10 à 80 cm tous les 2 cm (voir photo et schéma du montage). On obtient ainsi le tableau suivant :

régressi tableau
Voici le schéma du montage :

IR
Et les photos :

IMG_2111

IMG_2112
Grâce à régressi on peut tracer une courbe à partir du tableau :

régressi
La courbe est représentative d’une fonction que l’ont peut modéliser grâce à régressi. On obtient après quelques modifications et divers test (suppression des valeurs extrêmes, ajoute d’unité…) la relation suivante :
Soit Cm la fonction qui associe la valeur à la distance et D la valeur lu part l’arduino.

MAth
Après avoir réalisé ces différentes étapes de calibrage il faut modifié le programme, permettant de renvoyé la valeur lut sur la broche possédant le fil signal ,en ajoutant la ligne suivante :

cm = ( (87.3)* pow(lecture,-1.09) )* pow(10,2);

Cette ligne a pour but de convertir la valeur moyenne relevée en une distance moyenne et renvoyée cette dernière à l’ordinateur et donc vérifier l’exactitude de notre calibrage.Le programme permet alors de déterminer la distance de l’objet le plus proche et l’envoie un l’ordinateur. Dans notre cas le calibrage et le programme ont fonctionné et nous avons pus ainsi mesurer la distance aux obstacles et donc permettre à notre robot de prendre des mesures sur le monde qu’il l’entoure. la prise en compte de l’environnement étant primordiale afin de rendre un robot autonome, on se doit de mettre en œuvre des pratiques expérimentales et des calcules afin d’obtenir une prise en compte de l’environnement précise et donc efficace.

Une certaine prise en compte de l’environnement étant maintenant possible, les connaissances acquises au cours des précédentes recherches et des expérimentations peuvent être mis à en application dans un premier projet : S’arrêter face au obstacle
la réflexion et le cheminement vers  l’autonomie en robotique doivent se faire de manière progressive.Ainsi à partir du moment où le robot que l’ont développe est capable de se mouvoir et qu’il peut plus ou moins étudier son environnement, on peut tout d’abord faire s’arrêter le robot face aux obstacles. Pour se faire, nous avons imaginer la liste d’instruction suivante (voir annexe pour le programme complet) :

Flowchart
Le programme fonctionne bien,, tant que le robot ne détecte pas d’obstacle à moins de 20 cm, donc il avance, sinon il s’arrête,

Ainsi les calcules et mesures permettent au robot d’éviter des contacts avec les obstacles et donc de se sauvegarder de façon plus ou moins primaire et basique, puisque le robot s’arrête avant de se cogner. Si le robot avait une tache particulière à effectuer, il ne pourrait la mener à bien puisque, si il s’arrête, le robot est alors obligé d’attendre que l’obstacle s’écarte ou qu’une personne repositionne le robot. Il est donc obligé d’attendre une intervention extérieure et ne peut résoudre le problème par lui même.On ne peut ainsi, qualifier un tel comportement d’autonome.

Pour surmonter cette difficulté nous avons fait en sorte que le robot donne suite à ses actions, après avoir détecter la présence d’un potentiel obstacle. Nous avons modifié le programme de manière progressive. Ainsi nous avons fait en sorte qu’il continue face à un obstacle à se déplacer et surtout qu’il s’éloigne même sommairement des obstacles. Nous avons en faite remplacé l’ordre ARRÊT DU ROBOT par TOURNE À DROITE

Malgré un évitement d’obstacles beaucoup plus efficace le robot se bloque toujours dans les angles et obstacles rapprochés. La situation a donc été schématisée afin de comprendre ce qu’il se passait :

angle
À partir de ce schéma nous en avons conclu que le robot lorsqu’il est bloqué, doit se trouver dans la situation où Cm1 = Cm2 (distances entre les capteurs et les obstacles). Nous avons donc programmé le robot pour qu’il détecte cette situation et donc la présence d’un angle.

Ainsi, nous avons programmé le robot afin qu’il RECULE, si et seulement si le robot constate que la relation suivante est correct :                         -2 < (Cm1 – Cm2) < 2 Le robot ne s’arrêtant que très rarement et le remplacement de la fonction RECULE par TOURNE DE 90° À DROITE ne changeant rien à part quelque tournant maladroit, plusieurs solutions ont été alors imaginées…

1) Détecter le blocage du robot

Nous désirons faire en sorte que le robot soit conscient qu’il est bloqué. Il faut d’abord comprendre ce qui se passe au niveau de l’exécution du programme lorsqu’il est bloqué. Nous avons donc programmé le microcontrôleur afin qu’il envoie un message par un câble USB à l’ordinateur lorsqu’il tourne à droite, à gauche, ou qu’il avance :

IMG_2184
Nous en avons déduit que quelque soit l’angle dans lequel est bloqué le robot il effectue à peu près un même nombre de fois la commande TOURNE À GAUCHE et la commande TOURNE À DROITE et donc n’effectue jamais la commande AVANCE.

Nous avons donc décidé d’utiliser ces informations afin de réaliser des calculs pour déterminer si le nombre de commandes TOURNE À DROITE est équivalente au nombre de commandes TOURNE À GAUCHE : le robot réalise des rotations indéfiniment, dans un sens puis dans l’autre. On peut en déduire qu’il est bloqué.

Les calculs imaginés consistent à incrémenter une variable lorsque le robot tourne à gauche et à incrémenter une seconde variable lorsque il tourne à droite et calculer la différence des deux variables. Le résultat obtenu correspond à l’écart entre le nombre de fois où le robot tourne à gauche et à droite. Si la différence obtenue est proche de zéro, on peut en conclure que le robot est bloqué.

Malheureusement le programme s’est révélé complexe à mettre en œuvre puisque l’on ne sait pas quand réinitialiser ces deux variables ni quand faire la différence. De plus, les variables sont au départ toutes deux égales à zéro et le robot s’arrêtait donc dès le début. Quelques soit les modifications le comportement du robot était donc imprévisible.

Cette expérimentation, malgré une issue non concluante, est tout de même intéressante puisque nous avons essayé de repérer la situation précise d’un robot. Si l’ont veut améliorer l’autonomie d’un robot il est donc intéressant de réfléchir à la manière dont il pourrait lui même détecter sa situation.

Ainsi au lieu de simplement savoir s’il y a ou non un obstacle, il faut faire en sorte que le robot analyse son comportement face aux obstacles, afin de savoir si ce comportement lui permet réellement d’éviter les obstacles. Il doit en conséquence passer à une autre stratégie d’évitement (voir partie C-Autre idée et stratégie d’évitement).

B) Tourner de manière proportionnelle

Nous avons souhaité partir du programme d’évitement d’obstacle ayant pour particularité de tourner à droite de 90° si le robot constate la relation suivante : -2 < (Cm1 – Cm2) < 2 et de faire en sorte que le robot tourne à gauche ou à droite en fonction de la position du servomoteur. Cela veut dire que l’obstacle se trouve en face des deux capteurs, mais on ne peut pas déterminer la positon de l’objet en comparant seulement cm1 et cm2. Le robot requiert en faite de nouvelles données. Nous souhaitons enfin faire en sorte que cette rotation à gauche ou à droite se fasse proportionnellement, c’est à dire : plus le servomoteur qui porte les capteurs, se trouve dans l’alignement du robot et plus le robot doit tourner longtemps. Ce comportement a été programmé de façon progressive afin de bien comprendre ce qui ce passe et déceler les éléments responsables d’un comportement plus (ou au contraire moins) autonome chez notre robot.

Premièrement, en programmation il faut faire en sorte que deux actions censé être opposées ne puissent être réalisé en même temps.C’est à dire, dans notre cas, que la situation ne doit pas correspondre, par exemple à : Cm1 > Cm2 ET -2 < (Cm1 – Cm2) < 2.

Or, si la différence entre les deux capteurs est comprise entre en -2 et 2, alors il est tout de même très probable que Cm1 > Cm2 ou que Cm2 > Cm1.Dans notre cas nous avons par exemple remplacé :

If ( Cm1 > Cm2) ;

Par

If  (Cm1 > Cm2 & (Différence des distances relevées par les 2 capteurs   > 2  ou  < -2) ;

Ce premier programme a d’abord été élaboré (Voir annexe sur le site) :

Si Cm1 n’est pas supérieur à Cm2 et Cm2 n’est pas supérieur à Cm1 alors qu’un obstacle est détecte par au moins l’un des deux capteur alors, cela veut dire qu’un obstacle se trouve en face des deux capteurs ou que la zone de détection est saturé d’obstacle.Il faut dans ce cas, que le robot s’arrête.

Le programme permet au robot d’éviter correctement les obstacles en tournant à gauche ou à droite et en  s’arrêtant dès qu’il s’approche d’une zone refermée, d’un coin ou d’un mur de face. Ainsi, à partir de l’élaboration d’un tel programme un robot est capable de détecter une zone à éviter. La fonction ARRÊT est remplacée par TOURNE A DROITE, permettent au robot de s’écarter plus ou moins efficacement des zones à éviter qu’il est maintenant capable de détecter.Il faut , bien sur, faire en sorte que le robot choisit son sens de rotation mais aussi le temps de rotation. Afin de choisir le sens de la rotation une information primordiale est récupérée : La position du servomoteur. Il faut traiter cette valeur afin de déterminer le positionnement des obstacles. Dans notre cas la valeur varie de 65 à 150°. Ainsi, si des obstacles se trouvent à la même distance des deux capteurs :  si l’angle du servomoteur se trouve entre 65 et 108°, le robot doit tourner à gauche et si le servomoteur se trouve entre 108 et 150°, le robot doit tourner à droite. (Voir annexe schéma sur le site)
L’idée étant que le robot tourne proportionnellement à la position du servomoteur si et seulement si les deux capteurs détectent un obstacle. Il faut donc, calculer la durée de rotation en fonction de l’angle prit par le servomoteur en associant au angle extrême une durée de rotation :
photo 1

Afin de programmer cette conversion il faut utiliser la fonction map qui prend pour argument une variable à redimensionner, la valeur minimum et maximum que peut avoir la variable ainsi que les valeurs minimales et maximales que l’on souhaite lui appliquer. Par exemple, la variable angle qui peut varier de 65 à 108 doit être convertit en une variable comprise de 10 à 460. Ainsi, si l’angle du servomoteur est de 86°(milieu entre 65 et 108) la fonction map renvoie une valeur de 235 (milieu entre 10 et 460) : DurreDeRotation = map(angle, 65, 108, 10, 460); On obtient ainsi le programme suivant :(voir annexe sur le site)
Grâce à ce programme le robot évite parfaitement bien les obstacles. Il réalise, face aux zones à éviter (coin…), une rotation proportionnelle à la position de l’obstacle. Le robot se bloque parfois mais se sort de ces situation difficiles par lui même.
Le robot  atteint alors un certain seuil d’autonomie car le nombre d’information prise en compte et traitée ainsi que le nombre de décision possible sont augmentées :

photo 2
Observation et discutions :

À partir de ce tableau résumant les entrées et informations déduites ainsi que les sorties et actions  effectuées par notre robot on peut en déduire les réflexions suivantes…

Premièrement, on observe que certaine information (en jaune) sont relatives, elles peuvent varier, illustrant ainsi un grand nombre de possibilité d’information et de décisions. Par exemple les capteurs peuvent avoir jusqu’à 85 positions différentes et donc 85 informations possible à traiter conduisant ainsi à un grand nombre de sortie. Et donc une plus grande adaptation au situation. Les actions sont plus précises et justifiées face à la situation réelle. Cela est permis puisque certaines actions sont proportionnelles à la situation, clé de l’adaptation. Ainsi un robot ne peut-être autonome s’il adopte une prise de décision qui ne s’adapte pas à la situation, ainsi logique en T.O.R(tout ou rien)  réduit les possibilités d’adaptation et de réponse aux situations.

C)Autre solution et idée…

Nous avons pensé de nombreuse autres solutions afin d’améliorer l’autonomie de notre robot dont :

→ L’ajout de bumpeurs afin de garantir la sécurité du robot quelque soit la situation (petit obstacle,pied de chaise…) et explorer d’autre manière de percevoir l’environnement.

bumper

→ La détection du sol afin que le robot vérifié la présence du sol et donc la sûreté du milieu dans lequel il évolue.

→ L’autorégulation afin de corriger les actions que le robot entreprend

→ L’inclusion du hasard dans les paramètre de l’évitement d’obstacle face afin de sortir de situation complexe puisque le robot effectue des actions aléatoires et donc non prévus par le programmeur.

→ Comparaison des possibilités de directions face aux obstacle afin de choisir la meilleur solution.Le robot réalise alors des choix face à plusieurs proposition.

→ L’odométrie afin d’estimer la position du robot de manière plus fiable

→ La communication avec l’environnement (sonorisation, led…).Le robot doit-il communiquer avec son environnement afin d’améliorer son autonomie ?

→ les méthodes de programmation développementaliste (apprendre à apprendre, recherche de la solution,mécanisme d’adaptation…) afin de libérer le robot de la programmation systématique de ses actions et donc du contrôle humain.

Conclusion :
On peut ainsi conclure de cette application une troisième fonction primordiale pour l’autonomie d’un robot mobile : La décision. Cette fonction est déterminante, la réflexion doit ainsi se centrer sur le développement de la précision, l’adaptation, et de la cohérence des décision prise par un robot.

Il faut ainsi comprendre ce que fait le robot face à certaines situations qui posent problèmes et schématiser ces dernières car notre environnent est complexe et change on ne peut donc pas limiter  les actions d’un robot à quelque décision. Il faut prévoir la correction progressivement, en fonction des obstacles rencontrés. Enfin, lors de la conception d’un robot mobile on se doit de faire en sorte que le robot ne soit pas limité à un simple programme action/réaction mais à un programme qui évolue en fonction de l’environnement.

Cliquer ci-dessous pour accéder à la suite du contenu.

fleche_suivant

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s