Indholdsfortegnelse:

Skakrobot lavet med LEGO og Raspberry Pi: 6 trin
Skakrobot lavet med LEGO og Raspberry Pi: 6 trin

Video: Skakrobot lavet med LEGO og Raspberry Pi: 6 trin

Video: Skakrobot lavet med LEGO og Raspberry Pi: 6 trin
Video: Angel of Santo Tomas #shorts 2024, Juli
Anonim
Image
Image

Forundre dine venner med denne skakrobot!

Det er ikke for svært at bygge, hvis du har lavet LEGO -robotter før, og hvis du i det mindste har et elementært kendskab til computerprogrammering og Linux.

Robotten foretager sine egne træk og bruger visuel genkendelse til at bestemme den menneskelige spillers bevægelse.

En af de nye ting i denne robot er koden til bevægelsesgenkendelse. Denne visionskode kan også bruges til skakrobotter bygget på mange andre måder (f.eks. Min ChessRobot ved hjælp af Lynxmotion robotarm).

Der kræves ikke noget særligt skakbræt, rørskifter eller hvad som helst (da menneskets bevægelse bestemmes af visuel genkendelse).

Min kode er tilgængelig til personlig brug.

Trin 1: Krav

Lys, kamera, action!
Lys, kamera, action!

Al koden er skrevet i Python, som blandt andet kører på en Raspberry Pi.

Raspberry Pi er en computer i kreditkortstørrelse, der kan tilsluttes en skærm og et tastatur. Det er en billig (omkring $ 40), i stand til lille computer, der kan bruges i elektronikprojekter og robotik, og til mange af de ting, som din stationære pc gør.

Min robot bruger en Raspberry Pi og Lego. Hardware -grænsefladen mellem RPi og Lego Mindstorms EV3 motorer og sensorer leveres af BrickPi3 fra Dexter Industries.

Lego -bygningen er baseret på "Charlie the Chess Robot" af Darrous Hadi, modificeret af mig, herunder mods til at bruge en RPi, frem for Lego Mindstorms -processoren. Lego Mindstorms EV3 motorer og sensorer bruges.

Du skal også bruge et bord, et kamera, belysning, et tastatur, skærm og pegeudstyr (f.eks. Mus).

Og selvfølgelig skakbrikker og et bræt.

Jeg beskriver alle disse ting mere detaljeret i de efterfølgende trin.

Trin 2: Hardwareopbygningen

Image
Image

Som jeg tidligere har angivet, vil hjertet i visionskoden fungere med en række bygninger.

Jeg baserede min robot på "Charlie the Chess Robot" (EV3 -version) af Darrous Hadi, info på siden siger, hvordan man får byggeinstruktionerne. Delelisten er her.

Jeg modificerede robotten på et par måder.

1. Griberen. Dette virkede ikke for mig. Gearene gled, så jeg tilføjede yderligere Lego -stykker for at forhindre det. Og så når kranen blev sænket, ville den ofte jamme, så jeg tilføjede en watts kobling for at forhindre det.

Ovenfor er grabberen i aktion, der viser den modificerede forbindelse.

2. Den originale build bruger Lego Mindstorms EV3 -processoren, men jeg bruger en Raspberry Pi, som gør det let at bruge Python.

3. Jeg bruger en Raspberry Pi 3 Model B.

4. For at kunne tilslutte RPi til Lego bruger jeg BrickPi3 fra Dexter Industries. BrickPi tilsluttes Raspberry Pi, og sammen erstatter de LEGO Mindstorms NXT eller EV3 Brick.

Når du har Lego Digital Designer -filen, så er der spørgsmålet om at få LEGO -brikkerne. Du kan få klodser direkte fra LEGO -shoppen, og det er den billigste måde at få dem på. De vil dog ikke have alt, hvad du har brug for, og det kan tage et par uger eller mere at tegne.

Du kan også bruge Rebrickable: åbne en konto, uploade LDD -filen og derefter få en liste over sælgere.

En anden god kilde er Bricklink.

Trin 3: Softwaren, der får robotten til at bevæge sig

Al koden er skrevet i Python 2.

  1. Dexter Industries leverer kode til støtte for flytning af EV3 -motorer osv. Dette følger med BrickPi3.
  2. Jeg giver koden til at få motorerne til at bevæge sig på en sådan måde, at de kan flytte skakbrikkerne!
  3. Skakmotoren er Stockfish - som kan slå ethvert menneske! "Tørrfisk er en af de stærkeste skakmotorer i verden. Den er også meget stærkere end de bedste menneskelige skakmestre."
  4. Koden til at køre skakmotoren, validere at et træk er gyldigt og så videre er ChessBoard.py
  5. Jeg bruger en vis kode fra https://chess.fortherapy.co.uk til at kommunikere med det.
  6. Min kode (i 2 ovenfor) grænseflader derefter med det!

Trin 4: Softwaren til at genkende menneskets bevægelse

Efter at spilleren har foretaget deres bevægelse, tager kameraet et foto. Koden beskærer og roterer dette, så skakbrættet præcist passer til det efterfølgende billede. Skakbrættets firkanter skal se firkantede ud !. Der er forvrængning i billedet, fordi kortets kanter er længere væk fra kameraet, end midten af kortet er. Kameraet er dog langt nok væk, så denne forvrængning efter beskæring ikke er signifikant. Fordi robotten ved, hvor alle brikkerne er efter computerens bevægelse, er alt, hvad der skal gøres, efter at mennesket har foretaget et træk, at koden er i stand til at fortælle forskellen mellem følgende tre tilfælde:

  • En tom firkant
  • Et sort stykke af enhver art
  • Et hvidt stykke af enhver art.

Dette dækker alle sager, herunder castling og en passant.

Robotten kontrollerer, at menneskets bevægelse er korrekt, og informerer dem, hvis det ikke er det! Det eneste tilfælde, der ikke er dækket, er, hvor den menneskelige spiller promoverer en bonde til en ikke-dronning. Spilleren skal derefter fortælle robotten, hvad det promoverede stykke er.

Vi kan nu overveje billedet i form af skakbræt -firkanter.

På den første tavleopsætning ved vi, hvor alle de hvide og sorte stykker er, og hvor de tomme firkanter er.

Tomme firkanter har meget mindre variation i farve end har optaget firkanter. Vi beregner standardafvigelsen for hver af de tre RGB -farver for hver firkant på tværs af alle dens pixels (bortset fra dem nær kvadratets grænser). Den maksimale standardafvigelse for enhver tom firkant er meget mindre end minimumsstandardafvigelsen for enhver besat firkant, og dette giver os mulighed for, efter et efterfølgende spillerflyt, at bestemme, hvilke firkanter der er tomme.

Efter at have bestemt tærskelværdien for tomme kontra besatte firkanter, skal vi nu bestemme stykke farve for besatte firkanter:

På det indledende tavle beregner vi for hver hvid firkant, for hver af R, G, B, middelværdien (gennemsnit) for dens pixels (andre end dem nær kvadratets grænser). Minimumet af disse midler for enhver hvid firkant er større end maksimumet af midlerne på tværs af enhver sort firkant, og så kan vi bestemme stykke farve for besatte firkanter. Som tidligere nævnt er dette alt, hvad vi skal gøre for at afgøre, hvad den menneskelige spillers bevægelse var.

Algoritmerne fungerer bedst, hvis skakbrættet har en farve, der er langt fra farven på brikkerne! I min robot er brikkerne råhvide og brune, og skakbrættet er håndlavet i kort og er en lysegrøn med lille forskel mellem de "sorte" og "hvide" firkanter.

Rediger 17. oktober 2018: Jeg har nu malet de brune stykker matsort, hvilket får algoritmen til at fungere under mere variable lysforhold.

Trin 5: Lys, kamera, handling

Lys

Du har brug for en jævn lyskilde placeret over brættet. Jeg bruger denne, som er virkelig billig, fra amazon.co.uk - og der er uden tvivl noget lignende på amazon.com. Med rumlyset slukket.

Opdatering: Jeg har nu to lamper for at give en mere jævn lyskilde

Kamera

Du kan uden tvivl bruge det særlige Raspberry Pi kameramodul (med et langt kabel), men jeg bruger et USB -kamera - "Logitech 960-001064 C525 HD Webcam - Sort" - som fungerer med RPi. Du skal sikre, at kameraet ikke bevæger sig i forhold til brættet, ved at bygge et tårn eller have et sted at rette det fast. Kameraet skal være temmelig højt over tavlen for at reducere geometrisk forvrængning. Jeg har mit kamera 58 cm over tavlen.

Opdatering: Jeg foretrækker nu HP Webcam HD 2300, da jeg synes, det er mere pålideligt.

Bord

Du har brug for en robust. Jeg købte denne. Derudover kan du se, at jeg har en firkant af MDF, med nogle ting til at stoppe robotten hoppe rundt, når vognen bevæger sig. Det er en god idé at holde kameraet i samme position over brættet!

Tastatur

RPi har brug for et USB -tastatur til sin første opsætning. Og jeg bruger det til at udvikle koden. Det eneste robotten har brug for et tastatur til, er at starte programmet og simulere at ramme skakuret. Jeg fik en af disse. Men egentlig behøver du kun en mus eller en knap GPIO-tilsluttet RPi

Skærm

Jeg bruger en stor skærm til udvikling, men det eneste robotten har brug for, er at fortælle dig, at dit træk er ugyldigt, tjek osv. Jeg har en af disse, også tilgængelig på amazon.com.

Men i stedet for at kræve et display, vil robotten tale disse sætninger! Jeg har gjort dette ved at konvertere tekst til tale ved hjælp af kode som beskrevet her og vedhæfte en lille højttaler. (Jeg bruger en "Hamburger mini -højttaler").

Sætninger, robotten siger:

  • Kontrollere!
  • Skakmat
  • Ugyldigt træk
  • Du vandt!
  • Dødvande
  • Tegn ved tredobbelt gentagelse
  • Reglen for tegning med 50 træk

Reglen i halvtreds-træk i skak angiver, at en spiller kan kræve uafgjort, hvis der ikke er foretaget en fangst, og der ikke er blevet flyttet en bonde i de sidste halvtreds træk (til dette formål består et "træk" af, at en spiller fuldfører sin tur efterfulgt af modstanderen fuldfører sin tur).

Du kan høre robotten tale i den korte video af "fjolsens makker" ovenfor (hvis du skruer din lyd ganske højt op)!

Trin 6: Sådan får du softwaren

1. Tørrfisk

Hvis du kører Raspbian på din RPi, kan du bruge Stockfish 7 -motoren - det er gratis. Bare kør:

sudo apt-get installer tørfisk

2. ChessBoard.py

Få det her.

3. Kode baseret på

Kommer med min kode.

4. Python -drivere til BrickPi3:

Få disse her.

5. Min kode, som påberåber sig al koden ovenfor, og som får robotten til at foretage bevægelserne, og min visionskode.

Få dette fra mig ved at sende en kommentar, så svarer jeg.

Anbefalede: