Telechargé par Othmane Knine

Realisation d un robot a patte

publicité
Université MOHAMED PREMIER
Ecole National des Sciences Appliquées Oujda
Rapport du projet de fin d’année :
Réalisation d’un robot à patte
Réalisé par :
Haddad Anas
Encadré par :
Knine Othmane
Mr. Emharraf Mohamed
REMERCIEMENTS :
Nous tenons à remercier notre professeur : Mr. Emharraf
Mohamled qui nous a été d’un aide précieux et qui nous a
encadrés avec patience durant la réalisation de ce travail.
Aussi devons-nous reconnaître que sans votre collaboration et
vos conseils pertinents, ce modeste travail n’aurait pas été fait
dans de bonnes conditions. Sans oublier que Ce projet a été une
expérience enrichissante dans la mesure où il nous a permis de
développer nos connaissances dans le domaine de système
embarqué.
2
Table des matières
Introduction ................................................................................................................
I. Présentation du Projet……………………………………………………………….
1. Cahier des charges
2. La solution proposé
3. Matériel utiliser
II .Presentation et realisation du robot a patte..………….……………………….….
1. Les pièces du robot ……………………………………………………………………
IV. Commande de robot par renforcement ………………………………………..……..
1. Q-Learning …………………………………………..…
2. Les étapes de la commande ………………………………………………………...
3. Test et validation…………………………………….……………………………....
4. Analyse des resultats ……………………………………………………………..
Conclusion……………………………………………………………………………………
Annex……………………………………………………………………………………….
3
Introduction :
La robotique est un domaine vaste qui regroupe un grand nombre de matières
telles que l’informatique et l’électronique. C'est pourquoi nous avons trouvé
intéressant de créer un outil plus attirant pour les nouvelles générations dans leur
découverte des nouvelles technologies. Nous avons choisi de concevoir un robot
mobile capable de mettre en œuvre ces matières.
Notre objectif au terme de ce projet est de réaliser un robot éducatif, facile à
monter et bon marché. Il devra rassembler des éléments permettant de réaliser
des expériences amusantes de découvertes de la robotique, l'électronique et
l'informatique.
Nous voulons donc concevoir un robot capable d'interagir avec son
environnement au moyen de capteurs. Il sera commandé à l'aide de différents
programmes C. Nous pouvons diviser notre travail en deux phases majeures.
D’abord la conception d'une base mécanique pour un robot à deux roues
motrices. Puis l’intégration d'une plateforme robotique simple avec électronique
de commande et Arduino.
4
I.
Présentation du Projet :
Cahier des charges :
Le monde est en train de changer en profondeur,
silencieusement, sans que l’on ne s’en rende
réellement compte. Toutes les choses que nous
pensions comme définitivement acquises, tous
les mécanismes traditionnels de notre économie
globalisée et la façon dont nous, les humains,
nous insérons dans celle-ci est en train d’être.
Qu’est ce qu’une Intelligence Artificielle ?
L’intelligence artificielle est la science dont le but est de faire faire par une machine des
tâches que l’homme accomplit en utilisant son intelligence. Ce n’est pas qu’un simple concept
de sciences fictions associé à Terminateur ou Star Wars. Elles sont déjà partout autour de
nous, et elles se développent à une vitesse exponentielle. On peut les classer en 3 grandes
catégories en fonction de leur niveau d’intelligence :
Artificiel Narrow Intelligence (ANI) : Il s’agit d’IA spécialisées et limitées dans des
tâches/domaines bien précis. Elles rythment déjà notre quotidien. Siri sur iPhone est une
Artificiel Narrow Intelligence, tous les systèmes informatiques de nos voitures ou encore les
systèmes de recommandations personnalisés sur Amazon ou Facebook le sont aussi.
Artificiel General Intelligence (AGI) : Il s’agit d’intelligences artificielles qui auraient
globalement le même niveau d’intelligence que les humains. Elles auraient la capacité de
résonner, prévoir, résoudre des problèmes penser de manière abstraite ou encore apprendre
vite, de ses propres expériences. Tout comme nous.
Artificiel Super-intelligence (ASI) : “une intelligence bien plus intelligente que les meilleurs
cerveaux humains dans tous les domaines, y compris en termes de créativité, de sagesse et de
capacités de sociabilité.” Ces IA atteindront très certainement un niveau d’intelligence
inimaginable (et potentiellement infini) à notre niveau. On sait ce que sont des Quotients
Intellectuels de 85 ou de 160 (celui d’Einstein), mais pouvons-nous réellement imaginer ce
que donnerait un QI de 12 500 ?
Pour l’instant nous ne “maîtrisons” et n’utilisons uniquement que les ANI : les intelligences
artificielles sont globalement capables d’effectuer des taches qui requièrent des raisonnements
rationnels mais sont incapables de gérer tout ce nous faisons (nous ou les animaux) de nonréfléchi, de manière instinctive.
5
Qu’est ce qu’apporte l’IA à la robotique?
L’Intelligence Artificielle s’adapte à tous les domaines. Mais si l’on part du principe que l’IA
tend à remplacer le cerveau humain ou au moins à le seconder, il est un domaine dans lequel
elle trouve toute sa place comme une évidence : la robotique.
En effet, de tout temps l’homme a cherché à reproduire son semblable comme s’il avait un
double. La robotique vise à créer des machines capables d’aider l’être humain ou de le
remplacer dans des tâches complexes, dangereuses ou répétitives. Elle utilise de grandes
puissances de calcul et des algorithmes performants.
Le Deep learning : les machines apprennent par elles-mêmes
Le Deep Learning n’est pas la simple conséquence de l’augmentation de la puissance de
calcul des machines et de l’expansion de nos connaissances en neurosciences : c’est
également une résultante de la très forte croissance des données, des Big data. Ces big data ne
sont ni plus ni moins que des informations, que nous créons chaque jour, et nous en créons
toujours plus.
6
Dans notre projet on va utiliser l’algorithme d’apprentissage par renforcement : Q-Learning.
Q-Learning :
Le Q-Learning [Barto et al., 1989] est un algorithme d’apprentissage par renforcement.
L’agent évolue dans un environnement qu’il ne connait que partiellement (il ne connait pas la
matrice de transition T et la fonction de récompense R), ce qui nous rapproche du cadre
expérimental du stage : l’apprentissage par renforcement sur un robot. Dans cet algorithme on
apprend en faisant des simulations suivant une stratégie exploratoire.
Dans cet algorithme, on travaille avec une fonction de valeur à apprendre Q(s, a) qui associe à
un couple état/action une valeur numérique estimant l’intérêt à faire cette action dans cet état.
L’intérêt de cette fonction est de donner un critère de choix d’une action a ∈ A dans un état s
∈ S donné. On notera π la politique qui à chaque état s ∈ S associe une action a ∈ A à
effectuer. Le principe est que, pour toute nouvelle expérience (s, a)→ (s′,r), on met à jour Q
en effectuant un compromis entre l’ancienne estimation et la nouvelle expérience. Un
coefficient αt est introduit pour permettre de régler la portée de ce compromis (de quelle
façon on tient compte des nouvelles expériences dans l’apprentissage. Dans l’algorithme, on
𝑡
cherche à maximiser Q selon le critère E[∑∞
𝑡=0 𝛾 𝑟𝑡 ]. La nouvelle expérience laisse espérer un
gain de r + γ ∗ 𝑚𝑎𝑥a′∈A Q(s ′ , a′ ). La fonction de mise à jour de Q s’écrit donc :
7
L’algorithme 1 décrit le fonctionnement de base du Q-Learning. Pour tout état s ∈ S, on
notera l’espérance de gain en cet état : V (s) = 𝑚𝑎𝑥a∈A Q(s, a). La solution optimale au
système alors considéré est notée V ∗ (à laquelle est associée une unique fonction Q∗ ). Le
facteur 𝛼𝑡 ∈ [0; 1[ est le taux d’apprentissage qui détermine dans quelle mesure les nouvelles
informations acquises vont remplacer les anciennes. Un taux d’apprentissage de 0 ne fera rien
apprendre à l’agent tandis qu’un taux d’apprentissage à 1 ne lui fera considérer que
l’information la plus récente.
Le facteur γ ∈ [0; 1] permet de déterminer l’importance des récompenses futures dans
l’apprentissage. Dans la pratique αt tends vers 0 au cours de l’apprentissage. Un facteur de 0
fera considérer que les dernières récompenses à l’agent tandis qu’un facteur proche de 1 lui
fera considérer les récompenses à long terme autant qu’à court terme. Si on connait la valeur
de Q optimale (notée Q∗ ), une politique (π gloutonne) optimale en un état s est π ∗ (s) ∈
argmaxa∈AQ∗ (s, a). Remarque : cette version de l’algorithme est adaptée à un
environnement à espace d’états discrets.
Exploration vs Exploitation :
Comme décrit ci-dessus, l'algorithme est un algorithme glouton, car il choisit toujours l'action
avec la meilleure valeur. Mais que se passe-t-il si une action a une très faible probabilité de
produire une très grande récompense? L'agent n'y arrivera jamais. Ceci est corrigé en ajoutant
une exploration aléatoire. De temps en temps, l'agent effectue un déplacement aléatoire, sans
8
tenir compte de la stratégie optimale. Mais comme nous voulons que l'algorithme converge à
un moment donné, nous réduisons la probabilité de prendre une action aléatoire au fur et à
mesure que le jeu avance
9
II. Fonctionnement de robot :
Le robot utilise une technique d'intelligence artificielle appelée Q-learning (développée en
1989 par Chris Watkins), qui est un apprentissage par renforcement de type. Dans
l'apprentissage par renforcement, le robot apprend en agissant. L’objectif de robot est
d’optimiser son mouvement vers l’avant, comme l’indique la molette de la souris qu’il traîne
sur le sol.
Chaque fois que le robot bouge son bras, il reçoit une récompense - positive pour avancer,
négative pour arrière, ou neutre pour aucun mouvement. Au fil du temps, le robot apprend à
quoi s'attendre pour chaque action et utilise ces informations pour créer une sorte de carte
pour laquelle des séquences d'actions optimiseront les déplacements.
Au début, les actions sont pour la plupart aléatoires, donnant un processus d'exploration. Au
fur et à mesure que l'apprentissage progresse, les actions les plus connues sont suivies dans un
processus d'exploitation. Le robot est toujours en train d'apprendre - si les mêmes actions
commencent à avoir un résultat différent (par exemple si le terrain change), un nouveau
comportement peut en résulter.
III. Les pièces du robot :
Le circuit électrique que nous avons choisi est composé de :
10

Arduino Uno :
 Micro contrôleur : ATmega328
 Tension d'alimentation interne=5V
 tension d'alimentation
(recommandée)= 7 à 12V, limites =6
à 20 V
 Entrées/sorties numériques : 14 dont
6 sorties PWM
 Entrées analogiques = 6 (avec une
résolution de 10 bits => 1024 valeurs
différentes)
 Courant max par broches E/S = 40
mA
 Courant max sur sortie 3,3V = 50mA
 Mémoire Flash 32 KB dont 0.5 KB
utilisée par le bootloader*
 Mémoire SRAM 2 KB
 mémoire EEPROM 1 KB
 Fréquence horloge = 16 MHz
 Dimensions = 68.6mm x 53.3mm
 2 servomoteurs (TowerPro SG90 9g servo clones):
Un servomoteur est un moteur à courant
continu
disposant
d'un
système
d'asservissement complet intégrant une boucle
de retour (effectuée grâce à un potentiomètre)
un organe de calcul, ainsi qu'un driver de
moteur à courant continu pilotant le moteur.
Caractéristiques :
Alimentation : 4,8 à 6 Vcc
Course : 120° minimum
Couple : 1,6 kg.cm à 4.8 Vcc
Vitesse : 0,12 s/60° à 4.8 Vcc
Dimensions : 24 x 13 x 29 mm
11

Batterie rechargeable (4x piles AAA NiMH) :
9V Pile Accus Ni-MH Rechargeable:
Recharge rapidement et assure plus
longue autonomie de vie lorsqu'il
décharge pour l’utilisation quotidienne.
Stockage d’Energie au Maximum:
La faible auto-décharge améliorée lui
permet de conserver 85% de sa capacité
après un an de non-utilisation.

Souris PS / 2 piratée (roue codeuse de distance) :
Grace à la molette de la souris qu’il traîne
sur le sol. Chaque fois que le robot bouge
son bras, il reçoit une récompense - positive
pour avancer, négative pour arrière, ou
neutre pour aucun mouvement.
12

Fils de connexion :
C’est un fil électrique qui relie les dipôles
d’un circuit entre eux. Son rôle est de
permettre au courant électrique de
circuler entre ces dipôles.
Les fils de connexion sont utilisés au
collège car ils permettent de réaliser
facilement des connexions.
IV. Circuit de commande:
C'est dans ce circuit que sont rassemblés tous les éléments de contrôle le microcontrôleur.
1. Application de Q-Learning sur le robot :
Dans notre projet, nous avons implanté un algorithme d’apprentissage par renforcement :
C’était le Q-Learning.
lorsque q-learning est effectué, nous créons ce que nous appelons une table ou matrice q qui
suit la forme de [state, action]et initialisons nos valeurs à zéro.
Nous mettons ensuite à jour et stockons nos valeurs q après un épisode. Cette table q devient
une table de référence permettant à notre agent de sélectionner la meilleure action en fonction
de la valeur q.
Passer à l'action: Explorer ou exploiter
Un robot interagit avec l'environnement de l'une des deux manières suivantes. La première
consiste à utiliser la table q comme référence et à afficher toutes les actions possibles pour un
13
état donné. Le robot sélectionne ensuite l'action en fonction de la valeur maximale de ces
actions. Ceci est appelé exploitation, car nous utilisons les informations dont nous disposons
pour prendre une décision. La deuxième façon d'agir consiste à agir au hasard. Ceci s'appelle
explorer . Au lieu de sélectionner des actions en fonction de la récompense future maximale,
nous sélectionnons une action au hasard. Il est important d’agir au hasard car cela permet à
l’robot d’explorer et de découvrir de nouveaux états qui, autrement, ne pourraient pas être
sélectionnés pendant le processus d’exploitation.
Mise à jour de la table des matières
Les mises à jour se produisent après chaque étape ou action et se terminent lorsqu'un
mouvement est terminé. Terminé dans ce cas signifie que le robot doit atteindre un point
terminal. Un état terminal, la plus grande distance parcourue par un seul mouvement. Le robot
n'apprendra pas grand chose après un seul mouvement, mais avec suffisamment d'exploration
(étapes et mouvement ). il va converger et apprendre les valeurs q ou q-star optimales (Q∗).
Voici les 3 étapes de base: Le robot démarre dans un état (s1) effectue une action (a1) et
reçoit une récompense (r1) Le robot sélectionne l'action en référençant la table Q avec la
valeur maximale (max) Mettre à jour les valeurs q
14
2. partie arduino uno :
Un microcontrôleur intègre sur un circuit intégré : un processeur (CPU), avec une largeur
du chemin de données allant de 4 bits pour les modèles les plus basiques à 32 ou 64 bits
pour les modèles les plus évolués ; de la mémoire vive (RAM) pour stocker les données et
variables ; de la mémoire pour stocker le programme : ROM (mémoire morte) et/ou
EPROM, EEPROM, Flash ; souvent un oscillateur pour le cadencement. Il peut être
réalisé avec un quartz, un circuit RC ou encore une PLL1 ;
15
2.1. L'usage Arduino uno :
C’est une plateforme open-source, accessible et avec laquelle on peut facilement créer des
projets électroniques. Il s'articule autour d'un IDE (environnement de développement intégré)
où les utilisateurs peuvent écrire des programmes pour Arduino en C ou C ++.
2.2. Les entrées/sorties numériques : de D0 à D13
Chacun des connecteurs D0 à D13 peut être configuré par programmation en
entrée ou en sortie, nous pouvons donc avoir par exemple les connecteurs 2 et
3 configurés comme des entrées et les connecteurs 7, 8 et 9 configurés comme
des sorties.
Il est par conséquent possible de connecter côte à côte des capteurs logiques
(interrupteurs par exemple) aux connecteurs 2 et 3 et des actionneurs aux
connecteurs 7, 8 et 9.
Les signaux véhiculés par ces connecteurs sont des signaux logiques, c'est-àdire qu'ils ne peuvent prendre que deux états : HAUT (5 Volts) ou BAS (0
Volt), par rapport au connecteur de masse GND, qui lui est toujours, par
définition, à 0 Volt.
Attention : les connecteurs ne peuvent pas fournir en sortie un courant
supérieur à 40 mA, ce qui interdit de brancher directement un moteur sur une
sortie logique. Remarquez le signe ~ sur les connecteurs 3, 5, 6, 9 10 et 11,
nous verrons plus tard sa signification (PWM) et son importance.
Vocabulaire : on qualifie parfois ces entrées/sorties de numériques, de
logiques ou de digitales, ces trois adjectifs sont ici considérés comme
synonymes.
2.3. Programmation de l’Arduino uno :
Le langage Arduino est basé sur le C/C++.
Le langage de programmation d'Arduino est en effet une implémentation de Wiring (une
plateforme open source similaire de physical computing qui proposait elle-même une
bibliothèque appelée Wiring qui simplifie les opérations d'entrée/sortie).
Un programme Arduino est aussi appelé un sketch.
16

Structure d'un programme :
 Prise en compte des instructions de la partie déclarative.
 Exécution de la partie configuration (fonction setup()).
 Exécution de la boucle sans fin (fonction loop()): le code compris dans la boucle sans
fin est exécuté indéfiniment.
17
 La syntaxe du langage :

Programmation de l’Arduino de notre robot :
 Déclaration des deux servo Moteurs :
Soit 𝜃 l’angle de rotation du servo moteur.
Au début on va initialiser les 2 servo moteurs à un degré 𝜃𝑖𝑛𝑖𝑡𝑖𝑎𝑙 , et après , on détermine
𝜃𝑚𝑖𝑛 , et 𝜃𝑚𝑎𝑥 le degré maximale qui va atteindre le servo moteur.
On choisit 𝜃𝑖𝑛𝑖𝑡𝑖𝑎𝑙 = 90° pour les 2 servo moteurs, et on essaye de réduire l’intervalle de
rotation des 2 servo moteurs en prenant les degrés qui contribuent dans le mouvement de
robot, à fin de minimiser la période d’exploration.
18
19
 Calcul de la distance à l’aide d’une molette :
On a utiliser la molette de la souris comme capteur de distance à l’aide des encodeurs en
quadrature.
Que sont les encodeurs en quadrature?
Les encodeurs en quadrature sont des capteurs pratiques qui vous permettent de mesurer la
vitesse et la direction d'un arbre en rotation (ou un mouvement linéaire) et de garder une trace
de votre déplacement.
Un codeur en quadrature a normalement au moins deux sorties (canaux A et B), chacune
d’elles produisant des impulsions numériques lorsque la chose qu’elle mesure est en
mouvement. Ces impulsions suivront un modèle particulier qui vous permettra de dire dans
quelle direction la chose bouge et, en mesurant le temps écoulé entre les impulsions, ou le
nombre d’impulsions par seconde, vous pouvez également obtenir la vitesse.
Commençons par une animation montrant le fonctionnement du codeur en quadrature à
l'intérieur des roues HUB-ee.
Cette animation montre l’atmosphère de nos roues HUB-ee. Ils ont une roue codeuse
réfléchissante noir et blanc à l'intérieur de la jante et le circuit imprimé a une paire de capteurs
réfléchissants qui pointent vers la roue codeuse. Ces capteurs ont le bon espacement entre
eux, et par rapport aux bandes sur la roue, pour produire le motif d'impulsions que vous voyez
dans l'animation.
20
En termes techniques, ces impulsions sont déphasées de 90 degrés, ce qui signifie qu'une
impulsion est toujours en avance sur l'autre d'un quart de cycle complet (un cycle est une
transition complète de faible -> haut -> bas à nouveau.
L'ordre dans lequel ces impulsions se produisent changera lorsque le sens de rotation change.
Les deux diagrammes ci-dessous montrent comment se présentent les deux types d'impulsions
pour une rotation dans le sens des aiguilles d'une montre et dans le sens inverse.
21
La détection de la direction :
Commençons par le canal A en haut (rotation dans le sens des aiguilles d'une montre):
1 Canal A va de bas à haut.
2 Canal B est faible.
Vous allez dans le sens des aiguilles d'une montre!
Jetez maintenant un coup d'œil au canal A dans le sens contraire des aiguilles d'une montre:
1 Canal A va de LOW à HIGH.
2 Canal B est haute.
Vous allez dans le sens antihoraire!
Le branchement de la souris PS/2 avec l’Arduino uno :
Pin 1: Données (data) → Arduino 5
Pin 2: GND → Arduino GND
Pin 3: Vcc → Arduino 5V
Pin 4: Horloge (clock) → Arduino 6
On coupe le câble de la souris pour brancher les 4 fils conducteurs directement aux
entrées/sorties de l'Arduino.
22
On a utilisé l’interruption comme entrée numérique car l’Arduino exécutait son programme
en séquence, instruction par instruction, dans l’ordre. Certaines instructions permettent de
rompre cet ordre : les instructions conditionnelles comme le if ... else ou les instructions de
boucle comme le for(...). Mais l’Arduino reste sur ses rails et respecte les instructions qui lui
sont données. Une interruption, comme son nom l’indique, consiste à interrompre
momentanément le programme que l’Arduino exécute pour qu’il effectue un autre travail.
Quand cet autre travail est terminé, l’Arduino retourne à l’exécution du programme et reprend
à l’endroit exact où il l’avait laissé.
23
24
Conclusion :
Au terme de ce projet de fin d’études, nous soulignons l’occasion qui nous a été offerte de
s’approfondir dans le domaine de la robotique.
Dans le cadre de ce travail nous avons modélisé le robot à patte, à l’aide de l’Arduino Uno en
se basant sur l’intelligence artificielle. Dans l'apprentissage par renforcement, le robot
apprend en agissant. L’objectif de robot est d’optimiser son mouvement vers l’avant, comme
l’indique la molette de la souris qu’il traîne sur le sol.
A travers ce projet, nous avons progressé en programmation C++ sur les logiciels Arduino.
De plus, nous avons appréhendé les grands principes de fonctionnement de la simulation
numérique appliquée au robot à patte.
25
Téléchargement