Outils pour utilisateurs

Outils du site


intelligence_du_pendule_de_furuta

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
intelligence_du_pendule_de_furuta [2022/02/09 09:18] – [Notre environement] sergeintelligence_du_pendule_de_furuta [2022/10/07 10:11] (Version actuelle) – [Version avec ESP32] serge
Ligne 11: Ligne 11:
 {{ :media_14:cartpole.gif |}} {{ :media_14:cartpole.gif |}}
 =====C'est quoi une Intelligence Artificielle ?===== =====C'est quoi une Intelligence Artificielle ?=====
-Une Intelligence Artificielle n'est jamais intelligente. C'est un programme informatique qui comprend à un moment donné un Apprentissage Automatique. +Une Intelligence Artificielle n'est jamais intelligente.\\ 
 +**C'est un programme informatique qui comprend à un moment donné un Apprentissage Statistique.**
  
 =====Ressources===== =====Ressources=====
Ligne 18: Ligne 18:
   * **[[https://ressources.labomedia.org/apprentissage_par_renforcement#principe_vulgarise_de_l_apprentissage_par_renforcement|Principe vulgarisé de l'Apprentissage par Renforcement]]**   * **[[https://ressources.labomedia.org/apprentissage_par_renforcement#principe_vulgarise_de_l_apprentissage_par_renforcement|Principe vulgarisé de l'Apprentissage par Renforcement]]**
   * **[[https://ressources.labomedia.org/apprentissage_par_renforcement#comment_est_definit_l_objectif_a_atteindre|Comment est définit l'objectif à atteindre]]**   * **[[https://ressources.labomedia.org/apprentissage_par_renforcement#comment_est_definit_l_objectif_a_atteindre|Comment est définit l'objectif à atteindre]]**
- +  * **[[https://pythonprogramming.net/saving-and-loading-reinforcement-learning-stable-baselines-3-tutorial/?completed=/introduction-reinforcement-learning-stable-baselines-3-tutorial/|Reinforcement Learning in Python with Stable Baselines 3 : How to save and load models]]** 
 +  * **[[https://stable-baselines3.readthedocs.io/en/master/guide/custom_env.html|Création d'un Environment particulier dans Gym de OpenAI]]**  
 =====Principes===== =====Principes=====
-  * Un PC serveur avec l'IA, avec un GUI ou des BP et un petit écran. 
-  * Un PC client sur le pendule. 
-  * Ils communiquent en OSC par un wifi adhoc/hotspot 
- 
 L'apprentissage se compose de cycles, un cycle comprend des steps.\\ L'apprentissage se compose de cycles, un cycle comprend des steps.\\
 Un step est: Un step est:
   * Le pendule envoie 4 items: (position, vitesse) du chariot, (position, vitesse) du pendule.   * Le pendule envoie 4 items: (position, vitesse) du chariot, (position, vitesse) du pendule.
-  * Le serveur répond par une impulsion sur le moteur dans un sens ou dans l'autre. Cette impulsion sera proportionnelle (coefficient à trouver empiriquement !) à la valeur entre -1 et 1+  * Le serveur répond par une impulsion sur le moteur dans un sens ou dans l'autre, de combien à définir empiriquement. 
- +Un cycle se termine au bout de 2000 steps.
-Le nombre de steps est limité, pour recommencer souvent, ce qui va faire converger l'apprentissage. Un cycle comprend souvent 2000 step Maxi. Un cycle est stoppé aussi si le chariot est trop loin du zéro, si le pendule tourne trop vite ...\\ +
-Un apprentissage comprend un nombre total de steps entre 100 000 et 1 000 000. +
- +
-====Reset pour un nouveau cycle==== +
-  * Le serveur demande un reset au pendule +
-  * Le pendule se place dans une position angulaire entre -180 et 180 degrés, avec une petite vitesse angulaire +
-  * Le chariot est proche de zéro avec une petite vitesse linéaire +
-  * Le client envoie ses '/reset' = positions/vitesses +
-  * Un nouveau cycle commence +
- +
-====Calcul de la vitesse et de la position==== +
-Il est nécessaire de connaître vitesse et position du chariot et du pendule.\\ +
-La fréquence des impulsions moteur pourrait être de 50 Hz, soit une période de 0.02 s\\ +
-Pour un codeur de 4000 points sur un tour de chariot, sur un rayon de 200 mm, le déplacement du pendule est de 2*3.14*200/4000=0.314 mm par point.\\ +
-Si le chariot parcours 100mm en 1 seconde, soit 100/0.314=318 points en 1 seconde, en 0.02s --> 6 pts +
- +
-Calcul de la vitesse: +
- +
- +
- +
- +
- +
- +
-====Matériels pour le Dalek==== +
-**[[pendule_de_furuta_grand_modele|dalek]]**\\ +
-Choix du PC pour l'IA: Le fichier de poids fait ~46 ko. Un Raspi 4 doit suffire.\\ +
-Choix du PC pour le pendule: Un Raspi 3 et du Arduino ? +
  
 =====Installation de l'intelligence artificielle===== =====Installation de l'intelligence artificielle=====
-Nous utilisons Gym de OpenAI et Stable-Baselines3. +Nous utilisons Gym de OpenAI et Stable-Baselines3.\\ 
- +Le code de Stable-baselines est le code de Baselines nettoyé, amélioré, documenté. Stable-baselines3 est la dernière version, il utilise Torch[[https://stable-baselines3.readthedocs.io/en/master/guide/examples.html|Documentation de stable-baselines3]] @ stable-baselines3.readthedocs.io\\ 
-===Stable-baselines3=== +Les modules python à installer: stable-baselines3 et pyglet. Pyglet ne sert qu'a tester l'installation. L'installation de stable-baselines3 installe gym et installe tout ce qui est dans requirements.txt
-Le code de Stable-baselines est le code de Baselines nettoyé, amélioré, documenté. **[[https://stable-baselines.readthedocs.io/en/master/index.html|Documentation de stable-baselines]]** @ stable-baselines.readthedocs.io +
-Stable-baselines3 est la dernière version, il utilise tensorflow2 et Torch\\ +
-  * **[[https://stable-baselines3.readthedocs.io/en/master/guide/examples.html|Documentation de stable-baselines3]]** @ stable-baselines3.readthedocs.io +
- +
-===Installation:=== +
- https://stable-baselines3.readthedocs.io/en/master/guide/install.html\\ +
-Les modules python à installer: stable-baselines3[extra] et pyglet. Pyglet ne sert qu'a tester l'installation. L'installation de stable-baselines3 installe gym et installe tout ce qui est dans requirements.txt+
  
 <code bash> <code bash>
Ligne 78: Ligne 41:
 </code> </code>
  
-Télécharger les sources de **[[https://github.com/sergeLabo/furuta|furuta]]**\\ 
 Dans votre dossier "projets", par exemple /home/machin/projets Dans votre dossier "projets", par exemple /home/machin/projets
 <code bash> <code bash>
 git clone https://github.com/sergeLabo/furuta git clone https://github.com/sergeLabo/furuta
 # Allez dans le dossier des sources # Allez dans le dossier des sources
-cd /home/machin/projets/furuta+cd ./furuta
 python3 -m venv mon_env python3 -m venv mon_env
 source mon_env/bin/activate source mon_env/bin/activate
Ligne 89: Ligne 51:
 </code> </code>
  
-====Notre environement==== +=====Petit Pendule de Furuta===== 
-Ressources**[[https://stable-baselines3.readthedocs.io/en/master/guide/custom_env.html|Création d'un Environment particulier dans Gym de OpenAI]]** +====Version tout en python==== 
 +Au bout de très longs apprentissages, le maître a fini par comprendre que pigpio empilait les callbacks à traiter ce qui décalait l'apprentissage par rapport au pendule réel.\\ 
 +Le codeur du balancier de 4 000 points crée 16 000 callbacks. En estimant la vitesse de rotation du balancier à 1 tour par seconde, la fréquence d'appel du callback est de 16 000 Hz.\\ 
 +Le moteur a un codeur de 1 000 points: le même calcul ajoute 4 000 Hz.\\ 
 + 
 +Les gpio d'une Pi ne peuvent pas tourner à plus de 20 000 Hz: [[https://atman-iot.com/blog/raspberry-pi-benchmark/|Can the Raspberry pi acquire high frequency signals?]] 
 + 
 +Les vitesses de rotation sont plus rapides que 1 tour/seconde: la Pi prend alors du retard. 
 + 
 +Le codeur de 4 000 points a été remplacé par un codeur de 1 000 points, qui est grandement suffisant: les frottements ne permettent pas d'apprécier la position du points zéro à mieux que +- 1 ou 2 points. 
 + 
 +===Training avec "best"=== 
 +La méthode training_best de train_test.py est étrange: la doc n'est pas claire, ça ne finit jamais, il y a un message d'erreur au lancement assez obscure. 
 +<code python> 
 +eval_callback = EvalCallback(self.env, 
 +                                     best_model_save_path=self.best_model_save_path, 
 +                                     log_path=self.logdir, 
 +                                     eval_freq=500, 
 +                                     deterministic=True, 
 +                                     render=False) 
 +</code> 
 + 
 + 
 +=====Suivi de l'efficacité de l'apprentissage avec tensorboard===== 
 +====Installation, utilisation==== 
 +tensorboard est dans les requirements.\\ 
 +Dans le dossier du projet, qui contient le venv=mon_env, lancer en terminal: 
 +  ./mon_env/bin/tensorboard --logdir=logs 
 +   
 +Dans un navigateur: 
 +  http://localhost:6006/ 
 +   
 + 
 + 
 +====Exemples==== 
 +{{:media_15:tb_00.png?200|}} 
 +{{:media_15:tb_03.png?200|}} 
 +{{:media_15:tb_04.png?200|}} 
 +{{:media_15:tb_01.png?200|}} 
 +====Moyenne des récompenses==== 
 +{{:media_15:tb_10.png?300 |}} Permet d'apprécier l'efficacité de l'apprentissage\\ 
 +avec rollout/ep_rew_nean
  
-Notre environnement: **[[https://github.com/sergeLabo/furuta|furuta sur github]]** 
  
  
  
-{{tag>bestiaire_ia}}+{{tag> bestiaire_ia petit_pendule_furuta pytorch tensorboard }}
intelligence_du_pendule_de_furuta.1644398299.txt.gz · Dernière modification : 2022/02/09 09:18 de serge