Sommario:

Robot degli scacchi realizzato con LEGO e Raspberry Pi: 6 passaggi
Robot degli scacchi realizzato con LEGO e Raspberry Pi: 6 passaggi

Video: Robot degli scacchi realizzato con LEGO e Raspberry Pi: 6 passaggi

Video: Robot degli scacchi realizzato con LEGO e Raspberry Pi: 6 passaggi
Video: Un nuovo braccio robot con Micro:bit! || Recensione 2024, Novembre
Anonim
Image
Image

Stupisci i tuoi amici con questo robot degli scacchi!

Non è troppo difficile da costruire se hai già realizzato robot LEGO e se hai almeno una conoscenza elementare di programmazione per computer e Linux.

Il robot fa le proprie mosse e utilizza il riconoscimento visivo per determinare la mossa del giocatore umano.

Una delle novità di questo robot è il codice per il riconoscimento dei movimenti. Questo codice di visione è utilizzabile anche per i robot di scacchi costruiti in molti altri modi (come il mio ChessRobot che utilizza il braccio robotico Lynxmotion).

Nessuna scacchiera speciale, interruttori a lamella o altro (poiché la mossa dell'essere umano è determinata dal riconoscimento visivo).

Il mio codice è disponibile per uso personale.

Passaggio 1: requisiti

Luci, camera, azione!
Luci, camera, azione!

Tutto il codice è scritto in Python, che verrà eseguito, tra le altre cose, su un Raspberry Pi.

Raspberry Pi è un computer delle dimensioni di una carta di credito che può essere collegato a uno schermo e a una tastiera. È un piccolo computer economico (circa $ 40) che può essere utilizzato in progetti di elettronica e robotica e per molte delle cose che fa il tuo PC desktop.

Il mio robot usa un Raspberry Pi e Lego. L'interfaccia hardware tra l'RPi e i motori e i sensori Lego Mindstorms EV3 è fornita da BrickPi3 di Dexter Industries.

La build Lego è basata su "Charlie the Chess Robot", di Darrous Hadi, modificato da me, comprese le mod per utilizzare un RPi, piuttosto che il processore Lego Mindstorms. Vengono utilizzati motori e sensori Lego Mindstorms EV3.

Avrai anche bisogno di un tavolo, una macchina fotografica, un'illuminazione, una tastiera, uno schermo e un dispositivo di puntamento (es. mouse).

E, naturalmente, pezzi degli scacchi e una scacchiera.

Descrivo tutte queste cose in modo più dettagliato nei passaggi successivi.

Passaggio 2: la costruzione dell'hardware

Image
Image

Come ho indicato in precedenza, il cuore del codice della visione funzionerà con una varietà di build.

Ho basato il mio robot su "Charlie the Chess Robot" (versione EV3) di Darrous Hadi, le informazioni su quella pagina dicono come ottenere le istruzioni di costruzione. L'elenco delle parti è qui.

Ho modificato il robot in un paio di modi.

1. L'afferratore. Questo non ha funzionato per me. Gli ingranaggi sono scivolati, quindi ho aggiunto ulteriori pezzi di Lego per evitarlo. E poi, quando la gru veniva abbassata, spesso si inceppava, quindi ho aggiunto un collegamento di Watt per evitarlo.

Sopra c'è il grabber in azione, che mostra il collegamento modificato.

2. La build originale utilizza il processore Lego Mindstorms EV3, ma io uso un Raspberry Pi, che rende facile l'uso di Python.

3. Uso un Raspberry Pi 3 Modello B.

4. Per interfacciare l'RPi al Lego, utilizzo BrickPi3 di Dexter Industries. Il BrickPi si collega al Raspberry Pi e insieme sostituiscono il LEGO Mindstorms NXT o il mattoncino EV3.

Quando hai il file Lego Digital Designer, allora c'è la questione di ottenere i pezzi LEGO. Puoi ottenere i mattoncini direttamente dal negozio LEGO e questo è il modo più economico per ottenerli. Tuttavia, non avranno tutto ciò di cui hai bisogno e i mattoni potrebbero impiegare un paio di settimane o più per arrivare.

Puoi anche usare Rebrickable: apri un account, carica il file LDD e da quello ottieni un elenco di venditori.

Un'altra buona fonte è Bricklink.

Passaggio 3: il software che fa muovere il robot

Tutto il codice è scritto in Python 2.

  1. Dexter Industries fornisce il codice per supportare lo spostamento dei motori EV3, ecc. Questo viene fornito con BrickPi3.
  2. Fornisco il codice per far muovere i motori in modo tale da muovere i pezzi degli scacchi!
  3. Il motore degli scacchi è Stockfish, che può battere qualsiasi essere umano! "Lo stoccafisso è uno dei motori scacchistici più potenti al mondo. È anche molto più forte dei migliori maestri di scacchi umani."
  4. Il codice per guidare il motore degli scacchi, convalidare che una mossa è valida e così via è ChessBoard.py
  5. Uso del codice da https://chess.fortherapy.co.uk per interfacciarmi con quello.
  6. Il mio codice (in 2 sopra) quindi si interfaccia con quello!

Passaggio 4: il software per riconoscere il movimento dell'essere umano

Dopo che il giocatore ha fatto la sua mossa, la fotocamera scatta una foto. Il codice ritaglia e ruota questo in modo che la scacchiera si adatti esattamente all'immagine successiva. I quadrati della scacchiera devono sembrare quadrati!. C'è distorsione nell'immagine perché i bordi della scheda sono più lontani dalla fotocamera rispetto al centro della scheda. Tuttavia, la fotocamera è abbastanza lontana in modo che, dopo il ritaglio, questa distorsione non sia significativa. Poiché il robot sa dove sono tutti i pezzi dopo che il computer si è mosso, tutto ciò che deve essere fatto dopo che l'umano ha fatto un movimento è che il codice sia in grado di distinguere tra i seguenti tre casi:

  • Una piazza vuota
  • Un pezzo nero di qualsiasi tipo
  • Un pezzo bianco di qualsiasi tipo.

Questo copre tutti i casi, compreso l'arrocco e l'en passant.

Il robot controlla che la mossa dell'uomo sia corretta e lo informa se non lo è! L'unico caso non coperto è quello in cui il giocatore umano promuove un pedone in una non-regina. Il giocatore deve quindi dire al robot qual è il pezzo promosso.

Possiamo ora considerare l'immagine in termini di quadrati della scacchiera.

Nella configurazione iniziale della scacchiera sappiamo dove sono tutte le pedine bianche e nere e dove sono le caselle vuote.

I quadrati vuoti hanno una variazione di colore molto minore rispetto ai quadrati occupati. Calcoliamo la deviazione standard per ciascuno dei tre colori RGB per ogni quadrato su tutti i suoi pixel (diversi da quelli vicino ai bordi del quadrato). La deviazione standard massima per ogni casella vuota è molto inferiore alla deviazione standard minima per ogni casella occupata, e questo ci permette, dopo una successiva mossa del giocatore, di determinare quali case sono vuote.

Dopo aver determinato il valore di soglia per le caselle vuote rispetto a quelle occupate, dobbiamo ora determinare il colore del pezzo per le caselle occupate:

Sulla scacchiera iniziale calcoliamo per ogni quadrato bianco, per ciascuno di R, G, B, il valore medio (medio) dei suoi pixel (diversi da quelli vicini ai bordi del quadrato). Il minimo di queste medie per ogni quadrato bianco è maggiore del massimo delle medie per ogni quadrato nero, quindi possiamo determinare il colore del pezzo per i quadrati occupati. Come affermato in precedenza, questo è tutto ciò che dobbiamo fare per determinare quale sia stata la mossa del giocatore umano.

Gli algoritmi funzionano meglio se la scacchiera ha un colore molto lontano dal colore dei pezzi! Nel mio robot, i pezzi sono bianco sporco e marrone, e la scacchiera è fatta a mano in carta ed è di un verde chiaro con poca differenza tra i quadrati "nero" e "bianco".

Modifica 17 ott 2018: ora ho dipinto i pezzi marroni di nero opaco, il che fa funzionare l'algoritmo in condizioni di illuminazione più variabili.

Passaggio 5: luci, fotocamera, azione

Luci

Hai bisogno di una fonte di luce uniforme posizionata sopra il tabellone. Io uso questo, che è davvero economico, da amazon.co.uk - e senza dubbio c'è qualcosa di simile su amazon.com. Con le luci della stanza spente.

Aggiornamento: ora ho due luci, per dare una fonte di luce più uniforme

Telecamera

Senza dubbio puoi usare lo speciale modulo fotocamera Raspberry Pi (con un cavo lungo), ma io uso una fotocamera USB - "Logitech 960-001064 C525 HD Webcam - Black" - che funziona con l'RPi. Devi assicurarti che la telecamera non si muova rispetto al tabellone, costruendo una torre o avendo un posto dove fissarla saldamente. La telecamera deve essere abbastanza in alto sopra il tabellone, al fine di ridurre la distorsione geometrica. Ho la mia macchina fotografica a 58 cm sopra il tabellone.

Aggiornamento: ora preferisco HP Webcam HD 2300, poiché la trovo più affidabile.

Tavolo

Ti serve uno robusto. Ho comprato questo. Inoltre puoi vedere che ho un quadrato di MDF, con alcune cose per impedire al robot di saltare quando il carrello si muove. È una buona idea mantenere la telecamera nella stessa posizione sopra il tabellone!

Tastiera del computer

L'RPi ha bisogno di una tastiera USB per la sua prima configurazione. E lo uso per sviluppare il codice. L'unica cosa per cui il robot ha bisogno di una tastiera è avviare il programma e simulare il battito dell'orologio degli scacchi. Ho uno di questi. Ma in realtà, hai solo bisogno di un mouse o di un pulsante GPIO collegato a RPi

Schermo

Uso un grande schermo per lo sviluppo, ma l'unica cosa di cui ha bisogno il robot è dirti che la tua mossa non è valida, controllare, ecc. Ne ho uno, disponibile anche su amazon.com.

Ma piuttosto che richiedere un display, il robot pronuncerà queste frasi! L'ho fatto convertendo il testo in parlato usando il codice come descritto qui e collegando un piccolo altoparlante. (Io uso un "mini altoparlante Hamburger").

Frasi il robot dice:

  • Dai un'occhiata!
  • Scacco matto
  • Mossa non valida
  • Hai vinto!
  • Stallo
  • Disegna per tripla ripetizione
  • Disegna per la regola delle 50 mosse

La regola delle cinquanta mosse negli scacchi afferma che un giocatore può richiedere la patta se non è stata effettuata alcuna cattura e nessun pedone è stato mosso nelle ultime cinquanta mosse (a tal fine una "mossa" consiste in un giocatore che completa il proprio turno seguito dal avversario che completa il proprio turno).

Puoi sentire il robot parlare nel breve video di "fool's mate" qui sopra (se alzi il volume abbastanza alto)!

Passaggio 6: come ottenere il software

1. Stoccafisso

Se esegui Raspbian sul tuo RPi puoi utilizzare il motore Stockfish 7: è gratuito. Corri:

sudo apt-get install stoccafisso

2. Scacchiera.py

Prendi questo qui.

3. Codice basato su

Viene fornito con il mio codice.

4. Driver Python per BrickPi3:

Prendi questi qui.

5. Il mio codice che richiama tutto il codice sopra e che fa muovere il robot e il mio codice di visione.

Ottieni questo da me pubblicando un commento e io risponderò.

Consigliato: