Outils pour utilisateurs

Outils du site


petit_pendule_de_furuta_software

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
petit_pendule_de_furuta_software [2022/06/11 10:03] – [Branchement direct sur la Pi: Solution abandonnée à cause de la latence] sergepetit_pendule_de_furuta_software [2023/05/22 14:38] (Version actuelle) – [Cartel] Benjamin Labomedia
Ligne 1: Ligne 1:
-====== Petit Pendule de Furuta: Branchements et Software======+====== Petit Pendule de Furuta: Electronique Branchements Software======
 <WRAP center round box 60% centeralign> <WRAP center round box 60% centeralign>
 **{{tagpage>petit_pendule_furuta|Toutes les pages sur le Petit Pendule de Furuta}}** **{{tagpage>petit_pendule_furuta|Toutes les pages sur le Petit Pendule de Furuta}}**
Ligne 11: Ligne 11:
 **{{tagpage>bestiaire_ia|Toutes les pages sur le Bestiaire Intelligence Artificielle}}** **{{tagpage>bestiaire_ia|Toutes les pages sur le Bestiaire Intelligence Artificielle}}**
 </WRAP> </WRAP>
 +====== Mode d'emploi ======
 +Phallocratie n°2 - le pendule de Furuta est presque plug and play, pour l'allumer, il faut mettre le bouton d'alimentation situé à l'arrière de la boite sur "1"
  
 +Ensuite, une fois l'ordi démarré, on accède à des écrans interactifs :
 +
 +{{ ::img_20230522_154329.jpg |}}
 +
 +{{ ::img_20230522_154353.jpg |}}
 +Il existe 2 modes de fonctionnement : le mode Training qui rejoue l’entraînement du pendule et le mode Testing où le modèle déjà entrainé est utilisé pour maintenir la tige à la verticale
 +
 +Via ce menu, il est aussi possible d'éteindre la Pi proprement
 +
 +{{ ::img_20230522_154429.jpg |}}
 +Pour ce mode, on peut démarrer ou arrêter l'entrainement
 +
 +{{ ::img_20230522_154411.jpg |}}
 +Pour ce mode, on peut démarrer ou arrêter le test du modèle
 +
 +====== Cartel ======
 +Phallocratie même n°2 est un pendule de Furuta réalisé par Serge Pierre dans le cadre des activités de la Labomedia.
 +
 +Le pendule de Furuta, ou pendule rotationnel inversé, se compose d'un bras entraîné qui tourne dans le plan horizontal et d'un pendule attaché à ce bras qui est libre de tourner dans le plan vertical. Il a été inventé en 1992 au Tokyo Institute of Technology par Katsuhisa Furuta et ses collègues.
 +
 +Ce robot illustre particulièrement bien ce que l'on appelle "l'apprentissage par renforcement" dans le domaine de l'intelligence artificielle. En intelligence artificielle donc, plus précisément en apprentissage automatique, l'apprentissage par renforcement consiste, pour un agent autonome (robot, etc.), à apprendre à partir d'expériences, de façon à optimiser une récompense quantitative au cours du temps, positive ou négative. En répétant les expériences, le robot progresse.
 +
 +Ce mode d'apprentissage provient de La boîte de Skinner (« Skinner box ») qui est un dispositif expérimental inventé par B. F. Skinner au début des années 1930 dans le but de simplifier l'étude des mécanismes de conditionnement. Il inventa cet appareil pour tester les capacités des rongeurs et des pigeons à subir un conditionnement opérant, c’est-à-dire faisant intervenir le comportement de l'animal et le renforcement de celui-ci par des stimuli renforçateurs (obtenir de la nourriture lorsque l'on fait la bonne action par exemple).
 +
 +Phallocratie même n°2, pour maintenir sa tige à la verticale, a ainsi appris pendant plusieurs jours, plusieurs sessions d'entrainement ont été réalisées avant de garder la version "102" présentée ici.
 +
 +Ce dispositif permet soit de démontrer le fonctionnement du pendule avec l''entraînement réalisé (Mode Testing), soit de rejouer l’entraînement en se déplaçant éventuellement dans les phases de cet entraînement (mode Training).
 +
 +Réalisation : Serge Pierre avec l'aide d'adhérent-es de la Labomedia
 +Documentation : https://ressources.labomedia.org/Accueil?do=search&id=accueil&q=furuta
 +
 +{{ ::cartel_phallocratie_meme_n_2.odt |}} {{ :cartel_phallocratie_meme_n_2.pdf |}}
 +
 +=====Les sources du projet=====
 +  * **[[https://github.com/sergeLabo/furuta/tree/main/petit_furata|Petit Pendule de Furuta tout en Python]]**, 2 encodeurs optique US DIGITAL 1000 points.
 +{{ :media_16:petit_furuta_structure_code.png?400 |}}
 ===== GPIO d'un Pi3 B+ ou d'un Pi4===== ===== GPIO d'un Pi3 B+ ou d'un Pi4=====
 {{ :media_15:raspi_gpio_wiki.png?400 |}} {{ :media_15:raspi_gpio_wiki.png?400 |}}
Ligne 42: Ligne 80:
   Exec=sudo pigpiod   Exec=sudo pigpiod
 </code> </code>
 +
 +====Câblage sur la Pi====
 +{{ :media_10:branchement_pi-1.png?400 |}}
 +
 +====Tension d'entrée des GPIO sur la PI====
 +Les PINS GPIO sont à 1 si la tension d'entrée est comprise entre 1.8V et 3.3V, et à zéro si inférieure à 1.8V\\
 +Les entrées A B et Index de chaque codeurs sont baissées à 3V avec une puce [[https://www.gotronic.fr/art-convertisseur-de-4-niveaux-logiques-21529.htm|Convertisseur de 4 niveaux logiques]].
 +{{:media_16:shema_3_3v_5v.png?200|}}{{:media_16:convertisseur_de_niveau_logique_1.png?200|}}\\
 +{{:media_16:interieur_3_3v_5v.jpg?400|}}{{:media_16:adaptateur_5v_3_3v.jpg?260|}}
  
 =====PWM===== =====PWM=====
-{{:media_15:pwm_1.png?300|}}{{:media_15:pwm_2.png?300|}}{{:media_15:dri00042.png?300|}}+{{:media_15:pwm_1.png?250|}}{{:media_15:pwm_2.png?250|}}{{:media_15:dri00042.png?250|}}
  
 ==== Matériels ==== ==== Matériels ====
Ligne 52: Ligne 99:
  
 ==== Câblage ==== ==== Câblage ====
-^PIN^GPIO^Fonction^ Borne du DRI0042^ +{{:media_16:sku_dri0042_sur_pi.png?300|}} 
-| 14 | GND| GND | COM +{{:media_16:connecteur_commande_sku_dri0042.png?200|}}
-13 | 27 | Sens droite | IN1 | +
-| 15 | 22 | Sens gauche | IN2 | +
-| 12 | 18 | PWM | PWM |+
  
   * https://www.teachmemicro.com/raspberry-pi-pwm-servo-tutorial/   * https://www.teachmemicro.com/raspberry-pi-pwm-servo-tutorial/
- +La puissance envoyée au moteur est contrôlée sur le PWM. PWM est toujours positif, il ne défini pas le sens de rotation: le sens est défini par IN1 et IN2. Voir [[https://wiki.dfrobot.com/15A_Single_DC_Motor_Driver_#target_1|wiki.dfrobot.com]] pour le détail du fonctionnement. 
-La puissance envoyée au moteur est contrôlée sur le PWM. PWM est toujours positif, il ne défini pas le sens de rotation: le sens est défini par IN1 et IN2. Voir [[https://wiki.dfrobot.com/15A_Single_DC_Motor_Driver_SKU__DRI0042#target_1|wiki.dfrobot.com]] pour le détail du fonctionnement. +
 Il est conseillé de faire une pause entre 2 changements de sens, **un certain temps** en fonction du moteur et des valeurs PWM avant après. En pratique, le moteur est utilisé au tiers de sa puissance, il a supporté des dizaines de millions de steps, ne chauffe pas du tout.\\ Il est conseillé de faire une pause entre 2 changements de sens, **un certain temps** en fonction du moteur et des valeurs PWM avant après. En pratique, le moteur est utilisé au tiers de sa puissance, il a supporté des dizaines de millions de steps, ne chauffe pas du tout.\\
-La fréquence des impulsions a été testée entre 14 Hz et 28 Hz. La durée de l'impulsion est de 0.02 seconde. +La fréquence des impulsions a été testée entre 14 Hz et 28 Hz. La durée de l'impulsion est de 0.02 à 0.03 seconde.\\
 **Voir le script de commande du moteur** TODO rajouter le lien **Voir le script de commande du moteur** TODO rajouter le lien
  
 =====US DIGITAL S1 Optical Shaft Encoder===== =====US DIGITAL S1 Optical Shaft Encoder=====
-====Branchement direct sur la Pi: Solution abandonnée à cause de la latence==== +====Branchement direct sur la Pi==== 
-https://www.raspberryme.com/comment-utiliser-un-encodeur-rotatif-avec-le-raspberry-pi/\\ +{{:media_16:branchement_codeurs_us_digital.png?400|}}
-Encoder du **moteur**: +
-^PIN du S1^DESCRIPTION^Borne du RASPI^GPIO^ +
-|1 | Ground                 | 6  | Ground | +
-|2 | Index = 1 top par tour | 33 | GPIO13 | +
-|3 | A channel              | 35 | GPIO19 | +
-|4 | +5V DC power           | 2  | 5V     | +
-|5 | B channel              | 36 | GPIO16 | +
-Encoder du **balancier**: +
-^PIN du S1^DESCRIPTION^Borne du RASPI^GPIO^ +
-|1 | Ground                 | 30 | Ground | +
-|2 | Index = 1 top par tour | 29 | GPIO5  | +
-|3 | A channel              | 31 | GPIO6  | +
-|4 | +5V DC power           | 4  | 5V     | +
-|5 | B channel              | 32 | GPIO12 |+
  
 +https://www.raspberryme.com/comment-utiliser-un-encodeur-rotatif-avec-le-raspberry-pi/\\
  
-===Latence des callbacks=== +====Latence des callbacks==== 
-Dans certains transitoires avec des rotations sur les codeurs rapides, les callbacks ne sont pas traités en temps réelsce qui provoque de la latence. Un décalage de plus de 2 minutes a été constaté.  +Une Raspberry Pi peut gérer des callbacks jusqu'à 20kHzsans erreur et sans latence.\\ 
- +Un codeur de 1000 points au tour appelle 2000 callbacks sur le canal A (montée et descente des tops)et autant sur le canal BSoir des callbaks à 4000 Hz à un tour par seconde.\\ 
-====Branchement sur un ESP32==== +Un codeur de 4000 points appelle des callbacks à 16 000 Hz à un tour par seconde.\\
- +
- +
- +
-=====SPI===== +
-Les 2 codeurs esclaves sont branchés sur SPI0\\ +
-{{:media_15:spi_0.png?150|}} {{:media_15:master_slave.png?300|}}  +
- +
-  * **[[https://fr.wikipedia.org/wiki/Serial_Peripheral_Interface|Serial Peripheral Interface]]** Une liaison SPI est un bus de données série synchrone baptisé ainsi par Motorola, au milieu des années 1980 qui opère en mode full-duplex. +
-  * https://pinout.xyz/pinout/spi# +
- +
-Doc probable pour le SPI du capteur à effet hall chinois : [[https://fr.aliexpress.com/item/4001028228270.html | page aliexpress ]] +
-Il semblerait que le circuit dans le coder est peut être celui-cicar le datagramme SPI est très similaire : [[ https://ams.com/documents/20143/36005/AS5048_DS000298_4-00.pdf/910aef1f-6cd3-cbda-9d09-41f152104832 | datasheet ]] +
- +
-Il faudrait donc voir, car pour lire une données théoriquement il faut envoyer une commande READ qui permet de recevoir simultanément la valeur au moment du READ précédent.+
  
-On devrait avoir 16 bits à lire :  +Soit 20 kHz pour les 2 codeurs à un tour par seconde. Mais certain transitoires vont plus vite que tour par seconde. Les callbacks sont empilé sur une pile qui a été estimée à 2 mn après quelques heures d'apprentissage. Les actions moteur sont alors du n'importe quoi.
-bit de parité +
-- 1 bit error flag +
-- 14 bits indiquant l'angle absolue sur 14 bits.+
  
-Lorsqu'on lit les données SPI dans les 2 octets, il y a donc les 6 derniers bits du premier octet à concaténé avec les bits du second octet pour reconstituer le mot de 14 bits.+===Solution=== 
 +**Le codeur de 4000 points du balancier a été remplacé par un codeur 1000 points**.\\ 
 +La fréquence a 1 tour par seconde devient kHz: ce qui fait une grosse marge par rapport à 20 kHz.
  
-====Activation du SPI==== +La précision est tout à fait suffisante: le point zéro est défini à -/+ 1 ou 2 ou 3 pointsc'est très sensible.
-[[https://www.raspberryme.com/activer-linterface-spi-sur-le-raspberry-pi/#Methode_2_-_Utilisation_de_la_Configuration_Raspberry_Pi|Activation du SPI]] Aller dans MenuSettings, Enable SPI, puis [[https://www.raspberryme.com/activer-linterface-spi-sur-le-raspberry-pi/#Etape_2_-_Verifier_si_SPI_est_active_facultatif|Vérifier si SPI est activé]]+
  
-=====Câblage===== +=====Recherche sur ESP32===== 
-{{:media_16:cablage-1.png?400|}} +====Branchement sur ESP32 et Com en SPI avec Raspi==== 
-{{:media_16:cablage-2.png?400|}} +{{:media_16:branchements_esp32.png?300|}}{{:media_16:com_spi_esp32_pi.png?200|}}
-{{:media_16:cablage-3.png?400|}} +
-{{:media_16:cablage-4.png?400|}} +
-{{:media_16:cablage-5.png?400|}} +
-{{:media_16:cablage-6.png?400|}}+
  
 +===Ressources===
 +  * **[[https://www.best-microcontroller-projects.com/rotary-encoder.html|best-microcontroller-projects.com]]** Rotary Encoder: Immediately Tame your Noisy Encoder! Find out how to Instantly Stop Switch Bounce using one of 2 software methods. Easily get Reliable Operation from your Encoder.
 +  * Voir la page dédiée: **[[rotary_encoder_controller]]**
  
 {{tag> bestiaire_ia petit_pendule_furuta raspberry_pi raspbian sb }} {{tag> bestiaire_ia petit_pendule_furuta raspberry_pi raspbian sb }}
petit_pendule_de_furuta_software.1654941837.txt.gz · Dernière modification : 2022/06/11 10:03 de serge