Table des matières:

Robot d'échecs fabriqué avec LEGO et Raspberry Pi : 6 étapes
Robot d'échecs fabriqué avec LEGO et Raspberry Pi : 6 étapes

Vidéo: Robot d'échecs fabriqué avec LEGO et Raspberry Pi : 6 étapes

Vidéo: Robot d'échecs fabriqué avec LEGO et Raspberry Pi : 6 étapes
Vidéo: Bras robotique 💪 & vision par ordinateur avec Raspberry Pi 🍓 2024, Juillet
Anonim
Image
Image

Surprenez vos amis avec ce robot d'échecs !

Ce n'est pas trop difficile à construire si vous avez déjà fait des robots LEGO et si vous avez au moins une connaissance élémentaire de la programmation informatique et de Linux.

Le robot effectue ses propres mouvements et utilise la reconnaissance visuelle pour déterminer le mouvement du joueur humain.

L'une des nouveautés de ce robot est le code de reconnaissance des mouvements. Ce code de vision est également utilisable pour les robots d'échecs construits de nombreuses autres manières (comme mon ChessRobot utilisant le bras robotique Lynxmotion).

Aucun échiquier spécial, interrupteur à lames ou autre n'est requis (car le mouvement de l'humain est déterminé par la reconnaissance visuelle).

Mon code est disponible pour un usage personnel.

Étape 1: Exigences

Lumière, caméra, action!
Lumière, caméra, action!

Tout le code est écrit en Python, qui fonctionnera entre autres sur un Raspberry Pi.

Raspberry Pi est un ordinateur de la taille d'une carte de crédit qui peut être branché sur un écran et un clavier. Il s'agit d'un petit ordinateur peu coûteux (environ 40 $) qui peut être utilisé dans des projets d'électronique et de robotique, et pour la plupart des tâches de votre ordinateur de bureau.

Mon robot utilise un Raspberry Pi et Lego. L'interface matérielle entre le RPi et les moteurs et capteurs Lego Mindstorms EV3 est fournie par BrickPi3 de Dexter Industries.

La version Lego est basée sur "Charlie the Chess Robot", de Darrous Hadi, modifié par moi, y compris des mods pour utiliser un RPi, plutôt que le processeur Lego Mindstorms. Des moteurs et capteurs Lego Mindstorms EV3 sont utilisés.

Vous aurez également besoin d'une table, d'un appareil photo, d'un éclairage, d'un clavier, d'un écran et d'un dispositif de pointage (par exemple une souris).

Et bien sûr, des pièces d'échecs et un échiquier.

Je décris toutes ces choses plus en détail dans les étapes suivantes.

Étape 2: la construction matérielle

Image
Image

Comme je l'ai indiqué précédemment, le cœur du code de vision fonctionnera avec une variété de versions.

J'ai basé mon robot sur "Charlie the Chess Robot" (version EV3) de Darrous Hadi, les informations sur cette page expliquent comment obtenir les instructions de construction. La liste des pièces est ici.

J'ai modifié le robot de plusieurs manières.

1. La pince. Cela n'a pas fonctionné pour moi. Les engrenages ont glissé, j'ai donc ajouté des pièces Lego supplémentaires pour éviter cela. Et puis, lorsque la grue était abaissée, elle se coinçait souvent, j'ai donc ajouté une tringlerie de Watt pour éviter cela.

Ci-dessus, la pince en action, montrant la liaison modifiée.

2. La version originale utilise le processeur Lego Mindstorms EV3, mais j'utilise un Raspberry Pi, ce qui facilite l'utilisation de Python.

3. J'utilise un Raspberry Pi 3 modèle B.

4. Afin d'interfacer le RPi avec le Lego, j'utilise BrickPi3 de Dexter Industries. Le BrickPi se fixe au Raspberry Pi et, ensemble, ils remplacent la brique LEGO Mindstorms NXT ou EV3.

Lorsque vous avez le fichier Lego Digital Designer, alors il y a la question d'obtenir les pièces LEGO. Vous pouvez obtenir des briques directement dans la boutique LEGO, et c'est le moyen le moins cher de les obtenir. Cependant, ils n'auront pas tout ce dont vous avez besoin et les briques peuvent prendre quelques semaines ou plus pour arriver.

Vous pouvez également utiliser Rebrickable: ouvrez un compte, téléchargez le fichier LDD et à partir de là, obtenez une liste de vendeurs.

Bricklink est une autre bonne source.

Étape 3: Le logiciel qui fait bouger le robot

Tout le code est écrit en Python 2.

  1. Dexter Industries fournit du code pour prendre en charge le déplacement des moteurs EV3, etc. Ceci est fourni avec le BrickPi3.
  2. Je fournis le code pour faire bouger les moteurs de manière à déplacer les pièces d'échecs !
  3. Le moteur d'échecs est Stockfish - qui peut battre n'importe quel humain ! "Stockfish est l'un des moteurs d'échecs les plus puissants au monde. Il est également beaucoup plus puissant que les meilleurs grands maîtres d'échecs humains."
  4. Le code pour piloter le moteur d'échecs, valider qu'un coup est valide, et ainsi de suite est ChessBoard.py
  5. J'utilise un code de https://chess.fortherapy.co.uk pour interfacer avec cela.
  6. Mon code (en 2 ci-dessus) s'interface alors avec ça !

Étape 4: Le logiciel pour reconnaître le mouvement de l'humain

Une fois que le joueur a fait son mouvement, l'appareil photo prend une photo. Le code recadre et fait pivoter cela afin que l'échiquier corresponde exactement à l'image suivante. Les cases de l'échiquier doivent avoir l'air carrées !. Il y a une distorsion dans l'image car les bords du tableau sont plus éloignés de la caméra que le centre du tableau. Cependant, la caméra est suffisamment éloignée pour qu'après recadrage, cette distorsion ne soit pas importante. Parce que le robot sait où se trouvent toutes les pièces après le déplacement de l'ordinateur, tout ce qui doit être fait après le déplacement de l'humain est que le code soit capable de faire la différence entre les trois cas suivants:

  • Un carré vide
  • Une pièce noire en tout genre
  • Une pièce blanche de toute sorte.

Cela couvre tous les cas, y compris le roque et en passant.

Le robot vérifie que le mouvement de l'humain est correct et l'informe si ce n'est pas le cas ! Le seul cas non couvert est celui où le joueur humain transforme un pion en non-reine. Le joueur doit alors dire au robot quelle est la pièce promue.

Nous pouvons maintenant considérer l'image en termes de carrés d'échiquier.

Lors de la configuration initiale du plateau, nous savons où se trouvent toutes les pièces blanches et noires et où se trouvent les cases vides.

Les carrés vides ont beaucoup moins de variation de couleur que les carrés occupés. Nous calculons l'écart type pour chacune des trois couleurs RVB pour chaque carré sur tous ses pixels (autres que ceux près des bords du carré). L'écart type maximum pour n'importe quelle case vide est bien inférieur à l'écart type minimum pour n'importe quelle case occupée, et cela nous permet, après un déplacement ultérieur du joueur, de déterminer quelles cases sont vides.

Après avoir déterminé la valeur seuil pour les cases vides par rapport aux cases occupées, nous devons maintenant déterminer la couleur de la pièce pour les cases occupées:

Sur le tableau initial, nous calculons pour chaque carré blanc, pour chacun de R, G, B, la valeur moyenne (moyenne) de ses pixels (autres que ceux proches des bords du carré). Le minimum de ces moyennes pour n'importe quel carré blanc est supérieur au maximum des moyennes pour n'importe quel carré noir, et nous pouvons donc déterminer la couleur de la pièce pour les carrés occupés. Comme indiqué précédemment, c'est tout ce que nous devons faire pour déterminer quel était le mouvement du joueur humain.

Les algorithmes fonctionnent mieux si l'échiquier a une couleur très éloignée de la couleur des pièces ! Dans mon robot, les pièces sont blanc cassé et marron, et l'échiquier est fait à la main en carton, et est d'un vert clair avec peu de différence entre les carrés "noir" et "blanc".

Edit 17 Oct 2018: J'ai maintenant peint les pièces brunes en noir mat, ce qui fait que l'algorithme fonctionne dans des conditions d'éclairage plus variables.

Étape 5: Lumières, caméra, action

Lumières

Vous avez besoin d'une source de lumière uniforme placée au-dessus du tableau. J'utilise celui-ci, qui est vraiment bon marché, sur amazon.co.uk - et il existe sans aucun doute quelque chose de similaire sur amazon.com. Avec les lumières de la chambre éteintes.

Mise à jour: j'ai maintenant deux lumières, pour donner une source de lumière plus uniforme

Caméra

Vous pouvez sans doute utiliser le module caméra spécial Raspberry Pi (avec un long câble), mais j'utilise une caméra USB - "Logitech 960-001064 C525 HD Webcam - Black" - qui fonctionne avec le RPi. Vous devez vous assurer que la caméra ne bouge pas par rapport au plateau, en construisant une tour ou en ayant un endroit pour la fixer solidement. La caméra doit être assez haute au-dessus du plateau, afin de réduire la distorsion géométrique. J'ai mon appareil photo à 58 cm au dessus du plateau.

Mise à jour: je préfère désormais la HP Webcam HD 2300, car je la trouve plus fiable.

Table

Il vous en faut un solide. J'ai acheté celui-ci. En plus de cela, vous pouvez voir que j'ai un carré de MDF, avec des trucs pour empêcher le robot de sauter lorsque le chariot se déplace. C'est une bonne idée de garder la caméra dans la même position au-dessus de la planche !

Clavier

Le RPi a besoin d'un clavier USB pour sa première configuration. Et je l'utilise pour développer le code. La seule chose pour laquelle le robot a besoin d'un clavier est de démarrer le programme et de simuler le coup sur la pendule d'échecs. J'en ai un. Mais vraiment, vous n'avez besoin que d'une souris ou d'un bouton GPIO connecté au RPi

Affichage

J'utilise un grand écran pour le développement, mais la seule chose dont le robot a besoin est de vous dire que votre mouvement est invalide, vérifier, etc. J'en ai un, également disponible sur amazon.com.

Mais plutôt que de nécessiter un affichage, le robot prononcera ces phrases ! J'ai fait cela en convertissant le texte en parole à l'aide du code décrit ici et en attachant un petit haut-parleur. (J'utilise une "mini enceinte Hamburger").

Phrases le robot dit:

  • Vérifier!
  • Échec et mat
  • Déplacement invalide
  • Tu as gagné!
  • Impasse
  • Dessiner par triple répétition
  • Règle du tirage par 50 coups

La règle des cinquante coups aux échecs stipule qu'un joueur peut réclamer une égalité si aucune capture n'a été faite et qu'aucun pion n'a été déplacé au cours des cinquante derniers coups (à cette fin, un "coup" consiste en un joueur qui termine son tour suivi du adversaire terminant son tour).

Vous pouvez entendre le robot parler dans la courte vidéo "copain du fou" ci-dessus (si vous montez le son assez haut) !

Étape 6: Comment obtenir le logiciel

1. Stockfish

Si vous exécutez Raspbian sur votre RPi, vous pouvez utiliser le moteur Stockfish 7 - c'est gratuit. Exécutez simplement:

sudo apt-get installer stockfish

2. Échiquier.py

Obtenez ceci ici.

3. Code basé sur

Livré avec mon code.

4. Pilotes Python pour BrickPi3:

Obtenez-les ici.

5. Mon code qui invoque tout le code ci-dessus et qui amène le robot à faire les mouvements, et mon code de vision.

Obtenez ceci de moi en postant un commentaire, et je vous répondrai.

Conseillé: