Simulateur Johnny 2.0

Simulateur Johnny 2.0

Ressources :

- Johnny2_simu_Cpp.7z : source C++
(nécessite la librairie OpenCV)

- Johnny2_simu_Java.7z : source Java


- Johnny2_simu.jar : jar exécutable

Description :

Simulation du robot Johnny 2.0 réalisé dans le cadre de mon TIPE de seconde année. Ce simulateur a été réalisé en C++ (en utilisant la librairie OpenCV pour l’affichage), puis porté en langage Java.

Ce simulateur permet de simuler le comportement de Johnny 2.0 dans deux conditions lumineuses, lumière au centre et lumière sur les bords, tout en observant l’ensemble des paramètres et variables internes de robot. Il est également possible de modifier certains paramètres pendant la simulation, comme les valeurs synaptiques, et d’attribuer des "récompenses" et des "punitions" pour influencer le comportement du robot.

Affichage de la simulation :

- Environnement

simulation
Partie simulation. À gauche, le robot dans son environnement (ici, éclairage sur les bords), à droite, les boutons permettant de piloter la simulation
Le robot et son environnement sont affichés en haut à gauche. Le robot est représenté par un disque gris, avec une roue de chaque coté et deux capteurs de luminosité à l’avant. Une lumière rouge s’allume lorsque l’agent heurte un bord. Il est possible de déplacer le robot en cliquant dessus (la simulation se met alors en pause). Dans la version Java, le simulateur montre le chemin du robot sur les 400 derniers pas.

À droite de l’environnement sont affichés des informations sur la simulation et des boutons permettant de contrôler le déroulement de la simulation :
-affichage des capteurs de lumière : ces histogrammes indiquent la quantité de lumière reçue par chaque capteurs.
-affichage du nombre de pas : indique le nombre de cycle de simulation écoulés depuis le début de la simulation.
-bouton de changement de lumière : permet d’échanger les conditions d’éclairage : lumière au centre (par défaut) et lumière sur les bords. Ce changement permet de tester les capacités d’adaptation du robot aux variations de son environnement.
-bouton de démarrage/pause : permet de lancer la simulation ou la mettre en pause.
-bouton stop : arrête et réinitialise la simulation. Le compteur est remis à 0.
-bouton d’enregistrement : lorsqu’il est activé, le simulateur va à chaque pas, écrire les valeurs internes dans un fichier texte Johnny2_simu.txt. Une ligne s’écrit sous la forme :
pas capteurG capteurD bumper moteurG moteurD astrocyteG astrocyteD synapseG+ synapseG- synapseD+ synapseD- valeur_interneG valeur_interneD conditions_lumineuses

- Système neuronal

système nerveux
système nerveux du robot (à gauche). À droite, l'affichage permet de visualiser les poids synaptiques et de les modifier
Le système nerveux du robot est affiché en bas à gauche. Les deux rectangles en haut à droite et à gauche représentent les valeurs des capteurs de lumière. Le rectangle en haut au milieu représente le capteur de contact. Les rectangles en bas à droite et à gauche représentent les moteurs (le trait horizontal noir indique la vitesse). Les capteurs de lumière sont reliés aux deux neurones (cercles à droite et à gauche), chacun par deux synapses (exitatrice et inhibitrice), représenté par les petits disques. Les sorties des neurones pilotent les moteurs. Les deux cercles au milieu représentent les deux astrocytes. Ceux-ci récupèrent les valeurs du capteur de contact et la vitesse des moteurs pour définir l’état interne. Les astrocytes sont reliés aux synapses dont ils vont modifier la valeur de façon périodique. La couleur des éléments montre les valeurs : vert pour des valeurs positives et rouge pour des valeurs négatives.

À droite du réseau, des réglettes permettent de visualiser et modifier les valeurs internes :
- récompense et punition permettent d’attribuer une valeur de récompense ou de punition qui sera pris en compte au prochain changement de valeur des astrocytes. Ils permettent d’influencer l’apprentissage indépendamment des valeurs internes.
- synapses : ces réglettes affichent la valeur actuelle des quatre poids synaptiques du réseau (gauche excitateur, gauche inhibiteur, droite excitateur, droite inhibiteur), et permettent de les modifier.

- Courbes des valeurs internes
courbes
Courbes des valeurs internes. De haut en bas : capteurs de luminosité, poids synaptiques gauches et droits, valeurs de sortie des astrocytes gauche et droit, vitesses des moteurs gauche et droit
Les courbes à droite permettent d’observer l’évolution des valeurs internes du robot au cours du temps, sur les 400 derniers cycles de simulation. De haut en bas :
- valeurs du capteur de luminosité gauche (jaune)
- valeurs du capteur de luminosité droit (jaune)
- valeurs des synapses gauches, excitateur (jaune) et inhibiteur (bleu)
- valeurs des synapses droits, excitateur (jaune) et inhibiteur (bleu)
- valeur de sortie des astrocytes gauche et droit (vert). Cette valeur vient s’ajouter aux poids synaptiques. Contrairement au robot physique, Lorsque la valeur interne des astrocytes passe en négatif, la fréquence et l’amplitude augmente pour permettre au robot de se tester rapidement des solutions. Cette variation n’a pas été implémenté sur le robot physique en raison des limitations de son microcontrôleur.
- vitesse des moteurs gauche et droit (rouge).

Expériences :

Dans un premier temps, le robot augmente progressivement sa vitesse, puis heurte un mur. Après quelques collisions, il associe la collision à l'absense de lumière, et adope un comportement photovore et tourne autour de la source lumineuse (0:30). Puis, comme le capteur du coté de l'ombre ne permet plus de détecter une collision, le robot adopte un comportement semi-photovore n'utilisant qu'un seul capteur (0:55) et tourne autours de la source lumineuse dans l'autre sens. Après quelques tours sans collision, il recommence à se diriger vers l'obscurité (1:30), et le cycle recommence. On change alors les conditions lumineuses (1:53). Le robot, photovore, se dirige vers le mur. Après collision, il avance doucement, et finit par adopter un comportement photophobe lui permettant de rester loin des murs (2:35).