1. Introduction

L'othello est un jeu de société crée en 1971 par Goro Hasegawa(14), l'objectif de ce jeu est simple: obtenir un maximum de cases, avec la possibilité de récupérer les cases appartenant à l'opposant. Mon projet consiste à une version simplifié de ce jeu: faire jouer deux Thymios sans interactions externes, le but du jeu étant que l'un des 2 thymios ait le plus de "territoire". Le terrain sera composé d'une matrices de 3 par 3, ce qui donne 9 cases à posséder en tout. Afin de pouvoir acquérir une case le thymio devra passer dessus et mettre les données à jour afin de valider son "territoire". L'idée étant que lorsque l'une des cases change de propriétaire le thymio adverse puisse récupérer en repassant par dessus. Afin que les spectateurs du jeu puissent suivre le déroulement du match, un système de LEDs par case composé de deux couleurs, chacune des couleurs représentant un thymio et dont le tout sera gérer par un raspberry, sera installé; les LEDs allumé représenteront le propriétaire de la case. A la fin du temps impartie, un tableau sur le terminal sera afficher afin d'indiquer l'issue du match. Ce projet à pour but de développer l’ apprentissage auto dictat et de nous faire acquérir des connaissances afin de progresser et d'évoluer par nous mêmes.

2. Matériel et méthodes

[Figure1.1 Schéma]
[Figure1.2 Version réelle]

2.1 Matériel

  • Deux Thymios
  • Raspberry pi 3
  • LAN adaptater
  • Câble LAN
  • Ruban adhésif noir et blanc (terrain)
  • (Leds(9 bleus, 9 jaunes))
  • (Breadboards(1 grande, 2 petites))
  • (Resistances 3 Ohm)
  • (câbles électriques)

2.2 Méthode

Etape 1:Connection du Raspberry pi sur mon ordinateur (Windows) N'étant ni sur Linux ni sur Mac ,un moyen de substitution afin d'accéder à mon Raspberry depuis mon ordinateur, était nécessaire. J'ai utilisé un adaptateur et un câble LAN pour le Raspberry à un réseau. Suite à cela j'ai accéder à mon Raspberry grâce à PuTTY par le protocole SSH.(1)

Etape 2:Mise à jour et installation de Aseba Studio sur Raspberry Pi Afin de pouvoir mettre à jour Aseba sur le Raspberry Pi, j'ai dû d'abord mettre à jour le Raspberry lui-même(2):

  1. Mettre à jour les paquets: sudo apt-get update
  2. Mettre à jour les paquets et la distribution: sudo apt-get dist-upgrade
  3. Mettre à jour Raspbian: sudo rpi-update

Puis télécharger la dernière version d'Aseba(3). Ensuite suivre ce tutoriel( Asebamedulla est un utilitaire en ligne de commande, qui permet d'accéder à un réseau Aseba à travers D-Bus qui nous permettra de contrôler les thymios à travers le Raspberry pi avec le langage python.)(4)

Etape 3: Apprentissage du langage python Python est un langage de programmation qui m'est inconnue, sa découverte est essentielle afin de poursuivre mon projet(5),(6),(7)(13)

Etape 4 : Code Un tableau à deux dimensions sur python afin de représenter le terrain(8): field=[0,0,0,0,0,0,0,0,0] .(matrice de 3x3) Puis chercher l'API de asebamedulla mais les recherches n'aboutissant pas sur quelque chose de concluant le code sera donc basé sur les exemples(9,10): Les librairies à importer:

import dbus
import dbus.mainloop.glib
import gobject
import time
from optparse import OptionParser

Puis les fonctionnement des évènements, des variables et des fonctions à travers la librairie et D-bus:

dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
network = dbus.Interface(bus.get_object('ch.epfl.mobots.Aseba', '/')
dbus_interface='ch.epfl.mobots.AsebaNetwork')

Ainsi que les couleurs:

with tempfile.NamedTemporaryFile(suffix='.aesl', delete=False) as aesl:
 aesl.write("onevent become.yellow\n    call leds.top(32,32,0)\n")
aesl.write("onevent become.blue\n    call leds.top(0,0,32)\n")
 aesl.write("</node>\n")
 aesl.write('</network>\n')

A cette étape là j'ai réalisé que mon projet était irréalisable à travers asebamedulla dû à des problèmes logistiques et physiques: le thymio ne peux pas se connecter sans fil au Raspberry pi de plus le Raspberry ne peux pas se connecter à deux thymios en même temps à travers asebamedulla. Ce qui va suivre est purement théorique et ne pourra pas être tester.
[Figure1.3 Capture d'écran]

Tout d'abord: déterminer les variables: une pour la durée du match, deux pour différencier les deux thymios, une pour les déplacements aléatoires(12) et finalement une pour délimité le terrain

game_time = 180

thymioa = "ttyACM0"

thymiob = "ttyACM1"

option = random.uniform(0,3)

forbidden = network.GetVariable("ttyACM1","ttyACM0", "prox.ground.reflected",reply_hand$

Calcul intérmédiaire: La vitesse idéal arbitraire est de 300, une case est égale à 25 cm donc le thymio devrait parcourir une case en environ 2 secondes: 300"20/500. (11) Cette information nous servira à déterminer le temps d'attente entre chaque nouvelle action

Puis la création d'un def pour chacun des thymios afin de de définir leurs comportements lors du jeu délimité par la ligne noir qui représenter les limites du terrain. Ne pas oublier le temps d'action pour aller à une autre case est de 2 sec car le thymio parcoure environ 24 cm en vitesse 300 (case de 25 cm)

def turn() :
 if option > 2: #left
        network.SetVariable("thymioa", "motor.left.target", [300])
        network.SetVariable("thymioa","motor.right.target", [-300])
        time.sleep(0.2)
        network.SetVariable("thymioa", "motor.left.target", [0])
        network.SetVariable("thymioa", "motor.right.target", [0])
        time.sleep(0.2)
        network.SetVariable("thymioa", "motor.left.target", [300])
        network.SetVariable("thymioa", "motor.right.target", [300])///. 
Afin d'évaluer le nombre de case que chacun des thymios ont, l'attribution d'une valeur sera transmis: les cellules du tableau auront chacune leur valeur ,déterminant son propriétaire (entre +1 et -1) :
 ///#behaviour blue
if thymioa == field[][] and field[][] == 0 :
        field[0][0]=(field[0][0])+1
        turn ()
        else
                turn ()
if thymioa == field[][] and field[][] == -1 :
        field[0][0]=(field[0][0])+2
        turn ()
        else
                turn ()
  1. behaviour yellow

if thymiob == field and field == 0 :

        field00=(field00)-1
        turn1 ()
         else
                        turn ()

if thymiob == field and field == 1 :///




La durée d'un match est fixé à trois minutes:

for i in range(game_time):
        str(game_time-i)
        time.sleep(1) 

Finalement pour découvrir l'issue du match il faut afficher field: print field

3. Résultats

Le projet est un échec. Comme mentionné auparavant deux obstacles: le premier étant l'incapacité au raspberry à se connecter à deux thymios. De plus le manque de temps dû à ma procrastination à mener à la non réalisation du tableau de LEDs. Des imprévu tel que la faible documentation sur asebamedulla ainsi que la recherche d'un moyen de substitution afin d'utiliser le raspberry sur Windows, m'ont ralenti. Pour finir, plusieurs jours de doute où la réalisation du projet était flou m'ont également pénalisé. [Figure1.4 Aperçu(absence de rési...].

4. Discussion

Déception de ma part, en effet le non aboutissement de mon projet est dû à mon manque de rigueur, ces erreurs auraient pu être éviter si j'avais vérifié plus tôt la compatibilité du Thymio Wireless et le Raspberry pi 3. Une solution alternative serait d'utiliser la communication entre Thymios pour envoyer les informations sans fil, dans ce cas là un investissement de temps dans la réalisation du dispositif LEDs est nécessaire afin d'améliorer la compréhension du jeu et une meilleure connaissance du langage python est également requise.

5. Conclusion

Malgré l'échec de mon projet, cela ne m'a pas décourager et me permettra d'être plus prévoyante et plus efficace pour la prochaine fois . Ce projet a été une bonne expérience: elle a permis de me pousser un peu plus dans l'apprentissage autodidacte, elle m'a également permis de découvrir le langage python, totalement inconnue à ce jour. Je suis toute fois curieuse et cherchera volontiers une solution alternative pour mon plaisir personnel. J'ai également conscience que le non aboutissement de ce projet est dû à mon organisation personnelle douteuse.

Références

  1. https://www.youtube.com/watch?v=ZZue71GksbA
  2. https://angristan.fr/mettre-a-jour-raspberry-pi-sous-raspbian/
  3. https://www.thymio.org/en:linuxinstall
  4. https://www.thymio.org/en:asebamedulla
  5. https://www.youtube.com/watch?v=kyxF5eH3Kic
  6. https://www.youtube.com/watch?v=jj8iwJLCmWc
  7. http://math.mad.free.fr/depot/numpy/base.html
  8. https://www.youtube.com/watch?v=8-5Gmc1h0_k
  9. https://mindsized.org/spip.php?article274&lang=fr
  10. http://www.adambowes-portfolio.com/blog/2014/11/3/thymio-ii-control-with-python
  11. https://aseba.wdfiles.com/local--files/fr:asebausermanual/ThymioCheatSheet_fr.svg
  12. https://www.youtube.com/watch?v=KzqSDvzOFNA
  13. https://www.youtube.com/watch?v=rfscVS0vtbw
  14. https://fr.wikipedia.org/wiki/Othello_(jeu)