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