Indholdsfortegnelse:
- Trin 1: Krav
- Trin 2: Hardwareopbygningen
- Trin 3: Softwaren, der får robotten til at bevæge sig
- Trin 4: Softwaren til at genkende menneskets bevægelse
- Trin 5: Lys, kamera, handling
- Trin 6: Sådan får du softwaren
Video: Skakrobot lavet med LEGO og Raspberry Pi: 6 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:26
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
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
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.
- Dexter Industries leverer kode til støtte for flytning af EV3 -motorer osv. Dette følger med BrickPi3.
- Jeg giver koden til at få motorerne til at bevæge sig på en sådan måde, at de kan flytte skakbrikkerne!
- 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."
- Koden til at køre skakmotoren, validere at et træk er gyldigt og så videre er ChessBoard.py
- Jeg bruger en vis kode fra https://chess.fortherapy.co.uk til at kommunikere med det.
- 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:
Smart vækkeur: et smart vækkeur lavet med hindbær Pi: 10 trin (med billeder)
Smart vækkeur: et smart vækkeur lavet med Raspberry Pi: Har du nogensinde ønsket et smart ur? I så fald er dette løsningen for dig! Jeg lavede Smart Alarm Clock, dette er et ur, hvor du kan ændre alarmtiden i henhold til webstedet. Når alarmen går, kommer der en lyd (summer) og 2 lyser
Easy Wake-Up: et smart Wake-Up Light lavet med Raspberry Pi: 6 trin
Easy Wake-Up: et smart Wake-Up Light lavet med Raspberry Pi: IntroFor pensumsprojekt1 måtte jeg lave noget. Jeg var altid fascineret over, hvordan et wake-up light som ville gavne dig i at vågne op som dem fra philips, så jeg besluttede mig for at lave et wake-up light. Jeg lavede vågne op med en Raspberr
SafetyLock: en smart lås lavet med Raspberry Pi (fingeraftryk og RFID): 10 trin
SafetyLock: en smart lås lavet med Raspberry Pi (fingeraftryk og RFID): Har du nogensinde ønsket en mere tilgængelig måde at sikre dit hus på? I så fald er dette løsningen for dig! Jeg lavede SafetyLock, dette er en lås, der kan åbnes med dit fingeraftryk, et RFID -badge og endda gennem et websted. Takket være dette koncept vil du
Enkel Raspberry Pi kamerafælde lavet af en madbeholder: 6 trin (med billeder)
Enkel Raspberry Pi kamerafælde fremstillet af en madbeholder: “ Det forekommer mig, at den naturlige verden er den største kilde til spænding, den største kilde til visuel skønhed, den største kilde til intellektuel interesse. Det er den største kilde til så meget i livet, der gør livet værd at leve. &Quot;- D
Musical Menorah (lavet med Arduino): 13 trin (med billeder)
Musical Menorah (lavet med Arduino): Chanukah kommer snart! Så jeg tænkte, at det ville være en god idé at lave et projekt vedrørende ferien. Jeg lavede denne fede Chanukah Menorah med en Arduino, der spiller en anden sang hver gang du ændrer natten ved at trykke på knappen. Lysdioderne