Kazalo:

Šahovski robot narejen iz LEGO in Raspberry Pi: 6 korakov
Šahovski robot narejen iz LEGO in Raspberry Pi: 6 korakov

Video: Šahovski robot narejen iz LEGO in Raspberry Pi: 6 korakov

Video: Šahovski robot narejen iz LEGO in Raspberry Pi: 6 korakov
Video: Высокая плотность 2022 2024, November
Anonim
Image
Image

Presenetite svoje prijatelje s tem šahovskim robotom!

Zgraditi ga ni težko, če ste že izdelovali LEGO robote in če imate vsaj osnovno znanje o računalniškem programiranju in Linuxu.

Robot se sam premika in z vizualnim prepoznavanjem določi potezo človeškega igralca.

Ena od novih stvari v tem robotu je koda za prepoznavanje premikov. Ta koda vizije je uporabna tudi za šahovske robote, zgrajene na številne druge načine (na primer moj ChessRobot z uporabo robotske roke Lynxmotion).

Nobena posebna šahovska deska, trstična stikala ali karkoli drugega (saj je človekova poteza določena z vizualnim prepoznavanjem).

Moja koda je na voljo za osebno uporabo.

1. korak: Zahteve

Luči, kamera, akcija!
Luči, kamera, akcija!

Vsa koda je napisana v Pythonu, ki bo med drugim deloval na Raspberry Pi.

Raspberry Pi je računalnik velikosti kreditne kartice, ki ga lahko priključite na zaslon in tipkovnico. Je poceni (okrog 40 USD) zmogljiv mali računalnik, ki ga je mogoče uporabiti pri projektih elektronike in robotike ter pri številnih stvareh, ki jih počne vaš namizni računalnik.

Moj robot uporablja Raspberry Pi in Lego. Strojni vmesnik med motorji in senzorji RPi in Lego Mindstorms EV3 zagotavlja BrickPi3 iz Dexter Industries.

Zgradba Lega temelji na "Charlie the Chess Robot", avtorja Darrous Hadi, ki sem ga spremenil, vključno z načini uporabe RPi namesto procesorja Lego Mindstorms. Uporabljajo se motorji in senzorji Lego Mindstorms EV3.

Potrebovali boste tudi mizo, kamero, osvetlitev, tipkovnico, zaslon in kazalno napravo (npr. Miško).

In seveda šahovske figure in tabla.

Vse te stvari podrobneje opišem v naslednjih korakih.

2. korak: Zgradba strojne opreme

Image
Image

Kot sem že omenil, bo srce kode vida delovalo z različnimi zgradbami.

Svojega robota sem zasnoval na "Charlie the Chess Robot" (različica EV3) Darrous Hadi, podatki na tej strani pravijo, kako dobiti navodila za izdelavo. Seznam delov je tukaj.

Robota sem spremenil na nekaj načinov.

1. Grabilica. To mi ni uspelo. Zobniki so zdrsnili, zato sem dodal dodatne kocke Lego, da bi to preprečil. Ko se je žerjav spustil, se je pogosto zagozdil, zato sem dodal Wattovo povezavo, da bi to preprečil.

Zgoraj je grabilica v akciji, ki prikazuje spremenjeno povezavo.

2. Prvotna zgradba uporablja procesor Lego Mindstorms EV3, jaz pa Raspberry Pi, ki olajša uporabo Pythona.

3. Uporabljam Raspberry Pi 3 Model B.

4. Za povezavo RPi z Legom uporabljam BrickPi3 iz Dexter Industries. BrickPi se pritrdi na Raspberry Pi in skupaj zamenjata LEGO Mindstorms NXT ali EV3 Brick.

Ko imate datoteko Lego Digital Designer, se pojavi vprašanje pridobivanja kosov LEGO. Opeke lahko kupite neposredno v trgovini LEGO in to je najcenejši način za njihovo pridobitev. Vendar pa ne bodo imeli vsega, kar potrebujete, in lahko pridejo opeke nekaj tednov ali več.

Uporabite lahko tudi možnost Rebrickable: odprite račun, naložite datoteko LDD in iz nje dobite seznam prodajalcev.

Drug dober vir je Bricklink.

3. korak: Programska oprema, zaradi katere se robot premika

Vsa koda je napisana v Pythonu 2.

  1. Dexter Industries dobavlja kodo za podporo premikanju motorjev EV3 itd. To je priloženo BrickPi3.
  2. Zagotavljam kodo za premikanje motorjev tako, da premikajo šahovske figure!
  3. Šahovski motor je Stockfish - ki lahko premaga vsakega človeka! "Stockfish je eden najmočnejših šahovskih motorjev na svetu. Prav tako je veliko močnejši od najboljših človeških šahovskih velemojstrov."
  4. Koda za pogon šahovskega motorja, potrditev veljavnosti poteze itd. Je ChessBoard.py
  5. Za vmesnik uporabljam nekaj kode s
  6. Moja koda (v 2 zgoraj) se nato poveže s tem!

4. korak: Programska oprema za prepoznavanje človekovega gibanja

Ko se igralec premakne, fotoaparat posname fotografijo. Koda obreže in zavrti tako, da se šahovnica natančno prilega naslednji sliki. Kvadrati šahovnice morajo izgledati pravokotno !. Na sliki je popačenje, ker so robovi plošče bolj oddaljeni od kamere kot središče plošče. Vendar pa je kamera dovolj daleč, da po obrezovanju to popačenje ni pomembno. Ker robot ve, kje so vsi kosi po premiku računalnika, je po tem, ko se človek premakne, treba narediti le to, da lahko koda pokaže razliko med naslednjimi tremi primeri:

  • Prazen kvadrat
  • Črni kos kakršne koli vrste
  • Beli kos kakršne koli vrste.

To zajema vse primere, vključno z rokovanjem in prehodom.

Robot preveri, ali je poteza človeka pravilna, in ga obvesti, če ni! Edini primer, ki ni zajet, je, da človeški igralec promovira pešca v ne-kraljico. Igralec mora nato robotu povedati, kaj je promovirani del.

Zdaj lahko sliko obravnavamo kot kvadrate šahovnice.

Pri začetni postavitvi plošče vemo, kje so vsi beli in črni kosi in kje so prazni kvadrati.

Prazni kvadrati imajo veliko manj razlike v barvi kot zasedeni. Izračunamo standardni odklon za vsako od treh barv RGB za vsak kvadrat po vseh njegovih pikslih (razen tistih blizu meja kvadrata). Največji standardni odklon za kateri koli prazen kvadrat je veliko manjši od minimalnega standardnega odklona za kateri koli zasedeni kvadrat, kar nam omogoča, da po naslednjem premiku igralca ugotovimo, kateri kvadrati so prazni.

Ko smo določili mejno vrednost za prazne in zasedene kvadrate, moramo zdaj določiti barvo kosa za zasedene kvadrate:

Na začetni plošči izračunamo za vsak beli kvadrat, za vsako od R, G, B povprečno (povprečno) vrednost njegovih slikovnih pik (razen tistih blizu meja kvadrata). Najmanjša vrednost teh sredstev za kateri koli beli kvadrat je večja od največje vrednosti za kateri koli črni kvadrat, zato lahko določimo barvo kosa za zasedene kvadrate. Kot smo že omenili, je to vse, kar moramo storiti, da ugotovimo, kakšen je bil korak človeškega igralca.

Algoritmi najbolje delujejo, če ima šahovnica barvo, ki je daleč od barve figur! V mojem robotu so kosi umazano bele in rjave barve, šahovska deska pa je ročno izdelana iz kartona in je svetlo zelena z majhno razliko med "črnimi" in "belimi" kvadrati.

Edit 17. oktober 2018: Zdaj sem rjavo rjavo pobarval v mat črno, zaradi česar algoritem deluje v bolj spremenljivih svetlobnih pogojih.

5. korak: Luči, kamera, akcija

Luči

Potrebujete enakomeren vir svetlobe, nameščen na plošči. Tega, ki je res poceni, uporabljam z amazon.co.uk - in nedvomno je na amazon.com nekaj podobnega. Pri izklopljeni sobni luči.

Posodobitev: Zdaj imam dve luči za bolj enakomeren vir svetlobe

Kamera

Brez dvoma lahko uporabite poseben modul kamere Raspberry Pi (z dolgim kablom), jaz pa uporabljam kamero USB - "Logitech 960-001064 C525 HD Webcam - Black" - ki deluje z RPi. Zagotoviti morate, da se kamera ne premakne glede na ploščo, tako da zgradite stolp ali da ga imate kje trdno pritrditi. Kamera mora biti precej visoko nad ploščo, da se zmanjša geometrijsko popačenje. Fotoaparat imam 58 cm nad desko.

Posodobitev: Zdaj imam raje HP Webcam HD 2300, saj se mi zdi bolj zanesljiv.

Tabela

Potrebujete trdnega. Tole sem kupil. Poleg tega lahko vidite, da imam kvadrat iz MDF -ja, z nekaterimi stvarmi, ki preprečujejo, da bi robot skakal naokoli, ko se voziček premakne. Dobro je, da kamero držite v istem položaju nad ploščo!

Tipkovnica

RPi za prvo nastavitev potrebuje tipkovnico USB. In to uporabljam za razvoj kode. Robot potrebuje le tipkovnico, da zažene program in simulira udarjanje v šahovsko uro. Imam enega od teh. Toda v resnici potrebujete le miško ali gumb GPIO, povezan z RPi

Zaslon

Za razvoj uporabljam velik zaslon, a edino, kar mora robot povedati, da je vaša poteza neveljavna, preverite itd. Enega od teh sem dobil tudi na spletnem mestu amazon.com.

Toda namesto da bi zahteval zaslon, bo robot govoril te fraze! To sem naredil s pretvorbo besedila v govor s kodo, kot je opisano tukaj, in priključitvijo majhnega zvočnika. (Uporabljam "mini zvočnik Hamburger").

Fraze, ki jih robot pravi:

  • Preveri!
  • Mah
  • Neveljavna poteza
  • Zmagal si!
  • Zastoj
  • Nariši s trikratno ponovitvijo
  • Pravilo žrebanja za 50 potez

Pravilo petdesetih potez v šahu navaja, da lahko igralec zahteva neodločen rezultat, če v zadnjih petdesetih potezah ni bil ujet in ni bila premaknjena nobena peška (v ta namen "potezo" sestavljajo igralci, ki zaključijo svoj obrat, čemur sledi nasprotnik, ki zaključi svoj red).

Robota lahko slišite v zgornjem kratkem videu "norčev prijatelj" (če močno povečate zvok)!

6. korak: Kako do programske opreme

1. Nakladnica

Če zaženete Raspbian na svojem RPi -ju, lahko uporabite motor Stockfish 7 - brezplačen je. Samo zaženite:

sudo apt-get install stockfish

2. ChessBoard.py

Pridobite to tukaj.

3. Koda, ki temelji na

Prihaja z mojo kodo.

4. Gonilniki Python za BrickPi3:

Pridobite jih tukaj.

5. Moja koda, ki prikliče vso zgornjo kodo in ki robot naredi, ter moja koda vida.

Pridobite to od mene tako, da objavite komentar in odgovoril vam bom.

Priporočena: