Taula de continguts:

Robot d'escacs fabricat amb LEGO i Raspberry Pi: 6 passos
Robot d'escacs fabricat amb LEGO i Raspberry Pi: 6 passos

Vídeo: Robot d'escacs fabricat amb LEGO i Raspberry Pi: 6 passos

Vídeo: Robot d'escacs fabricat amb LEGO i Raspberry Pi: 6 passos
Vídeo: Часть 3. Аудиокнига Оскара Уайльда «Портрет Дориана Грея» (гл. 10–14) 2024, Juliol
Anonim
Image
Image

Sorprèn als teus amics amb aquest robot d'escacs!

No és massa difícil de construir si ja heu creat robots LEGO i si teniu almenys un coneixement elemental de programació i Linux.

El robot fa els seus propis moviments i utilitza el reconeixement visual per determinar el moviment del jugador humà.

Una de les novetats d’aquest robot és el codi per al reconeixement de moviments. Aquest codi de visió també es pot utilitzar per a robots d'escacs construïts de moltes altres maneres (com ara el meu robot d'escacs que utilitza el braç robòtic Lynxmotion).

No es requereix cap tauler d'escacs especial, interruptors de canya o el que sigui necessari (ja que el reconeixement visual determina el moviment de l'ésser humà).

El meu codi està disponible per a ús personal.

Pas 1: requisits

Llums, càmera, acció!
Llums, càmera, acció!

Tot el codi està escrit en Python, que funcionarà, entre altres coses, amb un Raspberry Pi.

Raspberry Pi és un ordinador de mida de targeta de crèdit que es pot connectar a una pantalla i un teclat. És un petit equip econòmic (al voltant de 40 dòlars), que es pot utilitzar en projectes electrònics i robòtica, i per a moltes de les coses que fa el vostre PC d'escriptori.

El meu robot utilitza un Raspberry Pi i un Lego. La interfície de maquinari entre els motors i sensors RPi i Lego Mindstorms EV3 és proporcionada per BrickPi3 de Dexter Industries.

La versió de Lego es basa en "Charlie the Chess Robot", de Darrous Hadi, modificat per mi, que inclou modificacions per utilitzar un RPi, en lloc del processador Lego Mindstorms. S’utilitzen motors i sensors Lego Mindstorms EV3.

També necessitareu una taula, una càmera, una il·luminació, un teclat, una pantalla i un dispositiu de senyalització (per exemple, el ratolí).

I, per descomptat, peces d’escacs i un tauler.

Descric totes aquestes coses amb més detall en els passos següents.

Pas 2: la construcció del maquinari

Image
Image

Com he indicat anteriorment, el nucli del codi de visió funcionarà amb diverses versions.

Vaig basar el meu robot en "Charlie the Chess Robot" (versió EV3) de Darrous Hadi, la informació d'aquesta pàgina explica com obtenir les instruccions de construcció. La llista de peces és aquí.

Vaig modificar el robot de dues maneres.

1. L’agafador. Això no va funcionar per a mi. Els engranatges es van relliscar, així que vaig afegir peces de Lego addicionals per evitar-ho. I després, quan es baixava la grua, sovint s’encallava, de manera que he afegit un enllaç de Watt per evitar-ho.

A la part superior hi ha l’agafador en acció, que mostra l’enllaç modificat.

2. La versió original utilitza el processador Lego Mindstorms EV3, però jo faig servir un Raspberry Pi, que facilita l’ús de Python.

3. Faig servir un Raspberry Pi 3 Model B.

4. Per connectar el RPi amb el Lego, faig servir BrickPi3 de Dexter Industries. El BrickPi s’uneix al Raspberry Pi i junts substitueixen el LEGO Mindstorms NXT o EV3 Brick.

Quan teniu el fitxer Lego Digital Designer, hi ha la qüestió d’obtenir les peces de LEGO. Podeu obtenir maons directament a la botiga LEGO, i aquesta és la forma més barata d’obtenir-los. No obstant això, no tindran tot el que necessiteu i els maons poden trigar un parell de setmanes o més a arribar.

També podeu utilitzar Rebrickable: obriu un compte, pengeu el fitxer LDD i obteniu una llista de venedors.

Una altra bona font és Bricklink.

Pas 3: el programari que fa moure el robot

Tot el codi està escrit a Python 2.

  1. Dexter Industries subministra codi per donar suport al moviment dels motors EV3, etc. Això ve amb el BrickPi3.
  2. Proporciono el codi perquè els motors es moguin de manera que es moguin les peces d'escacs.
  3. El motor dels escacs és Stockfish, que pot vèncer a qualsevol ésser humà. "Stockfish és un dels motors d'escacs més forts del món. També és molt més fort que els millors grans mestres d'escacs humans".
  4. El codi per conduir el motor d'escacs, validar que un moviment és vàlid, i així successivament és ChessBoard.py
  5. Faig servir un codi de https://chess.fortherapy.co.uk per relacionar-me amb això.
  6. Aleshores, el meu codi (a la part 2 anterior) s’interface amb això.

Pas 4: el programari per reconèixer el moviment humà

Després que el jugador hagi fet el moviment, la càmera fa una foto. El codi retalla i gira de manera que el tauler d'escacs s'adapti exactament a la imatge posterior. Els quadres d’escacs han de semblar quadrats !. Hi ha distorsió a la imatge perquè les vores del tauler estan més allunyades de la càmera que el centre del tauler. Tanmateix, la càmera es troba prou lluny perquè, després de retallar, aquesta distorsió no sigui significativa. Com que el robot sap on es troben totes les peces després del moviment de l’ordinador, tot el que s’ha de fer després que l’ésser humà faci un moviment és que el codi pugui diferenciar els tres casos següents:

  • Una plaça buida
  • Una peça negra de qualsevol tipus
  • Una peça blanca de qualsevol tipus.

Això abasta tots els casos, inclosos els enreixos i els passants.

El robot comprova que el moviment humà és correcte i els informa si no ho és. L'únic cas que no es tracta és que el jugador humà promou un peó en una no reina. El jugador ha de dir al robot quina és la peça promocionada.

Ara podem considerar la imatge en termes de quadres d’escacs.

A la configuració inicial del tauler sabem on es troben totes les peces blanques i negres i on són les caselles buides.

Els quadrats buits tenen molta menys variació de color que els quadrats ocupats. Calculem la desviació estàndard per a cadascun dels tres colors RGB de cada quadrat de tots els seus píxels (diferents dels propers a les vores del quadrat). La desviació estàndard màxima per a qualsevol casella buida és molt inferior a la desviació estàndard mínima per a qualsevol casella ocupada, i això ens permet, després d’un moviment posterior de jugador, determinar quines caselles estan buides.

Després d’haver determinat el valor llindar de les caselles buides o ocupades, ara hem de determinar el color de la peça per a les caselles ocupades:

Al tauler inicial calculem per a cada quadrat blanc, per a cadascun de R, G, B, el valor mitjà (mitjà) dels seus píxels (que no siguin els propers a les vores del quadrat). El mínim d’aquests mitjans per a qualsevol quadrat blanc és superior al màxim de la mitjana de qualsevol quadrat negre i, per tant, podem determinar el color de la peça per als quadrats ocupats. Com s'ha dit anteriorment, això és tot el que hem de fer per determinar quina va ser la jugada del jugador humà.

Els algoritmes funcionen millor si el tauler d’escacs té un color que s’allunya del color de les peces. Al meu robot, les peces són de color blanc trencat i marró, i el tauler d’escacs està fet a mà en cartolina i és de color verd clar, amb poca diferència entre els quadrats "negre" i "blanc".

Edició 17 d'octubre de 2018: ara he pintat les peces marrons de negre mat, cosa que fa que l'algorisme funcioni en condicions d'il·luminació més variables.

Pas 5: llums, càmera, acció

Llums

Necessiteu una font uniforme de llum sobre el tauler. Jo faig servir aquest, realment barat, d’amazon.co.uk i, sens dubte, hi ha alguna cosa similar a amazon.com. Amb els llums de l'habitació apagats.

Actualització: ara tinc dues llums, per donar una font de llum més uniforme

Càmera

Sens dubte, podeu utilitzar el mòdul de càmera Raspberry Pi especial (amb un cable llarg), però jo faig servir una càmera USB - "Càmera web Logitech 960-001064 C525 HD - Negre" - que funciona amb el RPi. Heu d’assegurar-vos que la càmera no es mogui respecte al tauler, construint una torre o tenint algun lloc per fixar-la fermament. La càmera ha d’estar força alta per sobre del tauler, per tal de reduir la distorsió geomètrica. Tinc la meva càmera a 58 cm sobre el tauler.

Actualització: ara prefereixo l'HP Webcam HD 2300, ja que considero que és més fiable.

Taula

Necessiteu un de robust. He comprat aquest. A més, es pot veure que tinc un quadrat de MDF, amb algunes coses per evitar que el robot salti quan es mou el carro. És una bona idea mantenir la càmera en la mateixa posició sobre el tauler.

Teclat

El RPi necessita un teclat USB per a la seva primera configuració. I ho faig servir per desenvolupar el codi. L’únic que necessita un teclat per al robot és iniciar el programa i simular el cop del rellotge d’escacs. Tinc un d’aquests. Però, realment, només necessiteu un ratolí o un botó GPIO connectat al RPi

Visualització

Utilitzo una pantalla gran per al desenvolupament, però l’únic que necessita el robot és dir-vos que el vostre moviment no és vàlid, comproveu-ho, etc. En tinc un, també disponible a amazon.com.

Però en lloc de requerir una pantalla, el robot pronunciarà aquestes frases. Ho he fet convertint text a veu mitjançant el codi que es descriu aquí i adjuntant un petit altaveu. (Faig servir un "mini altaveu Hamburger").

Frases que diu el robot:

  • Comprovar!
  • Escac i mat
  • Moviment no vàlid
  • Vas guanyar!
  • Estancament
  • Dibuixa per triple repetició
  • Dibuixa per 50 moviments la regla

La regla dels cinquanta moviments als escacs estableix que un jugador pot reclamar un empat si no s’ha fet cap captura i no s’ha mogut cap peó en els darrers cinquanta moviments (per a aquest propòsit, un "moviment" consisteix en que un jugador completa el seu torn seguit del oponent completant el seu torn).

Podeu escoltar el robot parlant al breu vídeo "El company del ximple" que apareix més amunt (si augmenteu el so bastant alt).

Pas 6: Com obtenir el programari

1. Stockfish

Si feu servir Raspbian al vostre RPi, podeu utilitzar el motor Stockfish 7: és gratuït. Només cal executar:

sudo apt-get install stockfish

2. ChessBoard.py

Aconsegueix això aquí.

3. Codi basat en

Ve amb el meu codi.

4. Controladors de Python per a BrickPi3:

Aconsegueix-los aquí.

5. El meu codi que invoca tot el codi anterior i que fa que el robot faci els moviments i el meu codi de visió.

Obtingueu-ho publicant un comentari i us respondré.

Recomanat: