Utiliser le Set Vision pour affronter Ned/Ned2 au Tic-Tac-Toe

V.1.1

Jouer au tic tac toe avec ned

Difficulté : moyenne

Temps : ~30 min

Note

Ce tutoriel est fonctionnel à partir de :
La version v3.0.0 de la ned_ros_stack
La version v3.0.0 de Niryo Studio
La version v3.1.0 de PyNiryo

Si vous utilisez un Niryo One, référez vous à ce tutoriel.

Il est temps de combattre un opposant de taille, Ned, au Tic-Tac-Toe !

Ou Ned2, pour le mode difficile!

Introduction

Cette application utilise notre API PyNiryo, Ned/Ned2, ainsi que notre Set Vision. Le traitement d’images permet au robot de détecter tous les objets sur le workspace, qui est utilisé comme un plateau de jeu. L’IA permet à Ned/Ned2 d’être un redoutable adversaire, en fonction du niveau de difficulté choisi au début de chaque nouvelle partie.

Cliquez ici pour télécharger le dépôt Github afin affronter Ned/Ned2 au Tic-Tac-Toe.

Ce dont vous aurez besoin

  • Ned (ou un Ned2)

  • La pompe à vide

  • 5 pions bleus et 5 pions verts

  • Le Set Vision et le workspace

  • Optionnel : la rampe du convoyeur

Vous pouvez également personnaliser votre propre workspace.

Installation

Installer Ned

Vue d'ensemble avec Ned, son environnement de travail et ses pions

Il y a quelques variables que vous devez changer dans les dossiers tictactoe_vision.py et tic_tac_toe_config.yaml du dépôt Github :

Dans tictactoe_vision.py :

  • L’adresse IP de votre robot

Dans tic_tac_toe_config.yaml :

  • Le nom du workspace : commencez par calibrer le workspace avec Niryo Studio. Le nom de votre workspace est le même que celui spécifié dans le dossier tictactoe_vision.py (nommé par défaut default_ws).
  • La position d’observation : si votre workspace n’est pas en face du robot, vous devrez modifier la variable “observation_pose” afin qu’il puisse détecter les quatre marqueurs du workspace.

Indication

Afin de déterminer la position d’observation, activez le mode apprentissage, placez le robot au dessus du workspace de manière à ce qu’il détecte les quatre marqueurs , dans le panneau relatif à la position des axes, cliquez sur Prendre les valeurs actuelles du robot. Désormais, la position d’observation est sauvegardée et vous avez juste à copier les valeurs dans la variable observation_pose.

Il est très important d’attacher fermement votre robot, la rampe et le workspace.

Installer la rampe

Si vous souhaitez l’utiliser, il est nécéssaire de localiser la rampe avant que la partie ne débute. Pour cela, commencez par lancer le programme avec :

python3 tictactoe_vision.py
  • Placez la ventouse du robot sur le pion au bas de la rampe.

  • Pressez la touche entrée.

Vous pouvez aussi utiliser l’argument –reset afin de modifier la position de la rampe :

python3 tictactoe_vision.py --reset

ou utilisez le menu en utilisant l’argument –menu.

Note

Si la position de la rampe a été changée depuis la dernière partie, il sera alors nécessaire de donner au robot sa nouvelle position.

Comment cela fonctionne ?

Afin d’implémenter Tic-Tac-Toe avec Ned/Ned2, nous utilisons le Set Vision afin de capturer le workspace. Ensuite, la position des pions dans le workspace est extraite grâce aux fonctions de traitement d’images. Enfin, les objets sont placés dans une matrice 3x3, utilisée comme plateau de jeu.

Grâce à l’algorithme et en fonction de la difficulté sélectionnée, le robot calculera son prochain mouvement. Une commande sera ensuite envoyée au robot afin qu’il place le pion à la bonne position.

Cette application est composée de plusieurs fichiers Python qui implémentent différentes classes :

  • tictactoe_vision.py affiche l’historique, gère les options ainsi que la position de la rampe et lance la boucle qui utilise les autres fichiers.
  • game.py implémente la classe TicTacToe, qui fournit toutes les méthodes de calcul pour le jeu du Tic-Tac-Toe et qui gère la grille de jeu.
  • robot_player.py implémente la classe RobotPlayer, qui fournit l’ensemble des méthodes d’action de Ned, telles que « pick_place_on_grid ».
  • object_detection.py implémente la classe ObjectDetection, qui permet de gérer à la fois l’affichage et la détection des objets.

Caractéristiques

Afin de lancer le programme, utilisez :

python3 tictactoe_vision.py

Cette commande lancera l’application Tic-Tac-Toe avec les paramètres par défaut, à savoir :

  • Une partie uniquement

  • Vous notifiez à Ned/Ned2 que vous venez de jouer votre tour en le bougeant (vous pouvez bouger l’axe de votre choix)

  • La difficulté de l’intelligence artificielle est définie à 5 sur 1000 (davantage d’informations dans la section Liste des commandes)

  • Vous utilisez la rampe

Changer les paramètres

Afin de changer ces paramètres, vous pouvez :

  • directement changer leurs valeurs dans le fichier tictactoe_vision.py dans le dictionnaire param en dessous de la ligne :
    if __name__ == '__main__':
    
  • ou vous pouvez lancer le programme en utilisant l’argument –menu avec :
    python3 tictactoe_vision.py --menu
    

    Cette méthode vous permet de choisir de nombreux paramètres au lancement du programme. Ces paramètres vous offriront la possibilité de changer la façon dont le robot joue la partie :

    Démarrer le program avec l'option --menu

Autres caractéristiques

Notre intelligence artificielle dispose des caractéristiques suivantes :

  • Le programme est capable de voir si le joueur en face triche. Dans ce cas, il lancera une animation, puis, jouera son tour.
  • La difficulté peut être adaptée, d’une IA imbattable, à une IA qui joue de manière complètement aléatoire (voir la liste des commandes).
  • Si l’option –noslope est choisie, le robot rangera automatiquement le workspace avant chaque partie ou placera les pions en dehors du workspace.
  • À chaque fois que le robot analyse le workspace, une fenêtre s’ouvre et affiche le traitement d’images qu’utilise le robot pour localiser les pions.

Liste des commandes

Note

Vous pouvez uniquement utiliser une commande au lancement du programme.

{A NUMBER}

python3 tictactoe_vision.py --105

Le nombre est un nombre entier entre 0 et 1000. Cette commande vous permet d’ajuster le caractère aléatoire de l’intelligence artificielle. L’IA est imbattable si vous définissez la difficulté à 0, et elle jouera aléatoirement si la difficulté est définie sur 1000.

{–loop | -l}

python3 tictactoe_vision.py --loop
python3 tictactoe_vision.py --l

Cette commande génère le lancement d’une nouvelle partie après toute partie terminée.

{–button | -b}

python3 tictactoe_vision.py --button
python3 tictactoe_vision.py --b

Cette commande vous permet de dire au robot quand votre tour est terminé en cliquant sur un bouton branché sur les ports GPIO de Ned/Ned2.

{–red | -r}

python3 tictactoe_vision.py --red
python3 tictactoe_vision.py --r

Cette commande vous permet de dire au robot que votre tour est terminé en plaçant un pion rouge sur le workspace. Vous pouvez le placer sur la grille 3x3. Ensuite, Ned/Ned2 placera ce pion sur le premier marqueur, avant de jouer son tour.

{–noslope | -s}

python3 tictactoe_vision.py --noslope
python3 tictactoe_vision.py --s

Cette commande vous donne la possibilité d’utiliser le workspace à la place de la rampe pour le stockage des pions du robot. Avant d’utiliser cette commande, assurez vous de placer les pions verts du robot sur le workspace avant le lancement de la partie (vous pouvez également les ajouter à la rampe de stockage pendant la partie). Lorsque ce paramètre est activé, le robot rangera automatiquement le le workspace au début de chaque partie.

Note

Cette fonction ne fonctionne qu’avec les pions ronds car les pions carrés sont trop gros pour être placés sur le workspace au début de la partie.

{–reset}

python3 tictactoe_vision.py --reset

Réinitialise la position de la rampe, qui est stockée dans un dossier tic_tac_toe_config.yalm.

Lancer une partie

Lancer une partie avec les paramètres standards :

  • Si vous utilisez la rampe :

    Commencez par placer cinq pions verts sur la rampe de Ned, puis lancez :

    python3 tictactoe_vision.py
    

    Note

    Lorsque vous jouez pour la première fois, ou que la position de la rampe a été changée, Ned aura besoin de connaître sa nouvelle position. Consultez la partie Installer la rampe de cette application pour cela.

  • Si vous n’utilisez pas la rampe :

    Commencez par placer cinq pions verts sur le côté du workspace dédié au placement des pions, puis lancez :

    python3 tictactoe_vision.py --noslope
    

Une interface graphique apparaîtra. Elle affichera :

../../_images/graphical_interface.png
  • Ce que Ned/Ned2 a vu la dernière fois qu’il a regardé le workspace depuis sa position d’observation

  • Plusieurs grilles regroupant les informations à propos de la position des pions bleu et rouge.

De plus, une grille sera affichée dans le terminal du programme, vous permettant de savoir où Ned/Ned2 a vu chaque pion, de cette façon :

B

B

G

G

G

G

Les pions de Ned/Ned2 sont stockés à gauche, et la grille 3x3 au coin en haute à droite représente le plateau du Tic-Tac-Toe.

Si vous commencez la partie

  • Placez un pion où vous le souhaitez sur le workspace.

  • Une fois que le pion est placé, indiquez à Ned/Ned2 que votre tour est terminé, de la manière dont vous l’avez indiqué dans l’argument turn_end. Ned/Ned2 scannera le workspace et jouera à son tour.

  • Répétez l’opération jusqu’à la fin de la partie !

Quand la partie est terminée, Ned/Ned2 retournera à sa position de repos.

Si Ned/Ned2 commence la partie

Pour commencer, vous devez indiquer à Ned/Ned2 qu’il doit commencer, en fonction de l’option choisie dans l’argument turn_end. Il scannera le workspace et placera son premier pion. Une fois que votre pion est sur le workspace, bougez un axe du robot pour qu’il joue son tour, et ainsi de suite, jusqu’à la fin de la partie.