Sadržaj:

Šahovski robot napravljen od LEGO -a i Raspberry Pi: 6 koraka
Šahovski robot napravljen od LEGO -a i Raspberry Pi: 6 koraka

Video: Šahovski robot napravljen od LEGO -a i Raspberry Pi: 6 koraka

Video: Šahovski robot napravljen od LEGO -a i Raspberry Pi: 6 koraka
Video: AngeBot the Tilbot Chess Robot 2024, Juli
Anonim
Image
Image

Zadivite svoje prijatelje ovim šahovskim robotom!

Nije previše teško izgraditi ako ste već radili LEGO robote i ako imate barem osnovno znanje o računalnom programiranju i Linuxu.

Robot čini vlastite poteze i koristi vizualno prepoznavanje kako bi odredio potez ljudskog igrača.

Jedna od novih stvari u ovom robotu je kôd za prepoznavanje pokreta. Ovaj kôd vizije je također upotrebljiv za šahovske robote izgrađene na mnogo drugih načina (kao što je moj ChessRobot koji koristi Lynxmotion robotsku ruku).

Nisu potrebne nikakve posebne šahovske ploče, prekidači za trčanje ili bilo što drugo (jer se ljudski pokret određuje vizualnim prepoznavanjem).

Moj kôd je dostupan za ličnu upotrebu.

Korak 1: Zahtjevi

Svjetla, kamera, akcija!
Svjetla, kamera, akcija!

Sav kod je napisan na Pythonu, koji će, između ostalog, raditi na Raspberry Pi -u.

Raspberry Pi je računar veličine kreditne kartice koji se može priključiti na ekran i tastaturu. To je jeftin (oko 40 USD) sposoban mali računar koji se može koristiti u projektima elektronike i robotike, kao i za mnoge stvari koje vaš desktop računar radi.

Moj robot koristi Raspberry Pi i Lego. Hardversko sučelje između RPi i Lego Mindstorms EV3 motora i senzora osigurava BrickPi3 iz Dexter Industries.

Lego verzija je zasnovana na "Charlie the Chess Robot", Darrous Hadi, koju sam ja izmijenio, uključujući modove za korištenje RPi -a, a ne Lego Mindstorms procesora. Koriste se Lego Mindstorms EV3 motori i senzori.

Trebat će vam i stol, kamera, osvjetljenje, tastatura, ekran i pokazivački uređaj (npr. Miš).

I naravno, šahovske figure i tabla.

Sve ove stvari detaljnije opisujem u narednim koracima.

Korak 2: Izgradnja hardvera

Image
Image

Kao što sam ranije naznačio, srce koda vizije će raditi s različitim nadogradnjama.

Bazirao sam svog robota na osnovu "Charlie the Chess Robot" (EV3 verzija) Darrous Hadi, informacije na toj stranici govore kako doći do uputstava za izradu. Lista dijelova je ovdje.

Robota sam izmijenio na nekoliko načina.

1. Hvatač. Ovo mi nije uspjelo. Zupčanici su skliznuli, pa sam dodao dodatne Lego komade da to spriječim. A kad bi se dizalica spustila, često bi se zaglavila, pa sam dodao Wattovu vezu kako bih to spriječio.

Iznad je hvatač u akciji, koji prikazuje izmijenjenu vezu.

2. Originalna verzija koristi Lego Mindstorms EV3 procesor, ali ja koristim Raspberry Pi, što olakšava upotrebu Pythona.

3. Koristim Raspberry Pi 3 model B.

4. Za povezivanje RPi -a sa Lego -om, koristim BrickPi3 iz Dexter Industries. BrickPi se pričvršćuje na Raspberry Pi i zajedno zamjenjuju LEGO Mindstorms NXT ili EV3 Brick.

Kada imate datoteku Lego Digital Designer, postavlja se pitanje nabavke LEGO komada. Cigle možete nabaviti direktno u LEGO trgovini, a ovo je najjeftiniji način da ih nabavite. Međutim, neće imati sve što vam je potrebno, a do zidanja cigli može proći nekoliko tjedana ili više.

Možete koristiti i Rebrickable: otvorite račun, učitajte LDD datoteku i iz toga dobijete listu prodavača.

Još jedan dobar izvor je Bricklink.

Korak 3: Softver koji pokreće robota

Sav kod je napisan na Pythonu 2.

  1. Dexter Industries isporučuje kôd za podršku premještanja EV3 motora itd. Ovo dolazi s BrickPi3.
  2. Dajem kôd za pokretanje motora na takav način da pomiču šahovske figure!
  3. Šahovski motor je Stockfish - koji može pobijediti svakog čovjeka! "Stockfish je jedan od najjačih šahovskih motora na svijetu. Također je mnogo jači od najboljih ljudskih šahovskih velemajstora."
  4. Kôd za pokretanje šahovske mašine, provjeru valjanosti poteza i tako dalje je ChessBoard.py
  5. Koristim neki kod sa https://chess.fortherapy.co.uk za povezivanje s tim.
  6. Moj kôd (u 2 gore) tada se povezuje s tim!

Korak 4: Softver za prepoznavanje ljudskog pokreta

Nakon što se igrač povuče, kamera snima fotografiju. Kod obrezuje i rotira tako da šahovska ploča točno pristaje sljedećoj slici. Kvadrati šahovske ploče moraju izgledati četvrtasto !. Postoji izobličenje slike jer su rubovi ploče udaljeniji od kamere nego središte ploče. Međutim, kamera je dovoljno udaljena tako da nakon izrezivanja ovo izobličenje nije značajno. Budući da robot zna gdje se nalaze svi dijelovi nakon premještanja računara, sve što treba učiniti nakon što čovjek napravi potez je da kôd može razlikovati sljedeća tri slučaja:

  • Prazan kvadrat
  • Crni komad bilo koje vrste
  • Beli komad bilo koje vrste.

Ovo pokriva sve slučajeve, uključujući rokada i prolaznika.

Robot provjerava je li potez čovjeka ispravan i obavještava ih ako nije! Jedini slučaj koji nije obuhvaćen je kada ljudski igrač promovira pješaka u ne-kraljicu. Igrač tada mora reći robotu šta je promovirano djelo.

Sada možemo uzeti u obzir sliku u obliku polja šahovske ploče.

Na početnom postavljanju ploče znamo gdje su svi bijeli i crni komadi, a gdje su prazni kvadrati.

Prazni kvadrati imaju mnogo manje varijacije u boji nego zauzeti kvadrati. Izračunavamo standardnu devijaciju za svaku od tri RGB boje za svaki kvadrat po svim njegovim pikselima (osim onih blizu granica kvadrata). Maksimalna standardna devijacija za bilo koji prazan kvadrat mnogo je manja od minimalne standardne devijacije za bilo koji zauzeti kvadrat, a to nam omogućuje da, nakon sljedećeg poteza igrača, odredimo koji su polja prazna.

Nakon što smo odredili vrijednost praga za prazne i zauzete kvadrate, sada moramo odrediti boju komada za zauzete kvadrate:

Na početnoj ploči izračunavamo za svaki bijeli kvadrat, za svaki od R, G, B srednju (prosječnu) vrijednost njegovih piksela (osim onih blizu granica kvadrata). Minimum ovih sredina za bilo koji bijeli kvadrat veći je od maksimuma sredina za bilo koji crni kvadrat, pa možemo odrediti boju komada za zauzete kvadrate. Kao što je ranije rečeno, ovo je sve što trebamo učiniti kako bismo utvrdili kakav je bio potez ljudskog igrača.

Algoritmi najbolje funkcioniraju ako šahovska ploča ima boju koja je daleko od boje figura! U mom robotu, figure su prljavo bijele i smeđe, a šahovska ploča ručno izrađena u kartonu i svijetlozelena je s malom razlikom između "crnog" i "bijelog" kvadrata.

Izmeni 17. oktobra 2018: Sada sam obojila smeđe komade u crno, što čini da algoritam radi u promenljivijim uslovima osvetljenja.

Korak 5: Svjetla, kamera, akcija

Svjetla

Treba vam ravnomjeran izvor svjetlosti postavljen preko ploče. Koristim ovaj, koji je zaista jeftin, sa amazon.co.uk - i nema sumnje da postoji nešto slično na amazon.com. Sa isključenim svjetlom u prostoriji.

Ažuriranje: Sada imam dva svjetla, kako bih dala ujednačeniji izvor svjetla

Kamera

Nema sumnje da možete koristiti poseban modul kamere Raspberry Pi (s dugim kabelom), ali ja koristim USB kameru - "Logitech 960-001064 C525 HD web kamera - crna" - koja radi s RPi -jem. Morate se pobrinuti da se kamera ne pomiče u odnosu na ploču, izgradnjom tornja ili nekim mjestom za čvrsto pričvršćivanje. Kamera mora biti prilično visoko iznad ploče, kako bi se smanjila geometrijska izobličenja. Imam kameru 58 cm iznad ploče.

Ažuriranje: Sada više volim HP Webcam HD 2300 jer smatram da je pouzdaniji.

Tablica

Treba vam čvrst. Kupio sam ovaj. Povrh toga, možete vidjeti da imam kvadrat od MDF -a, s nekim stvarima koje sprečavaju robota da skače okolo dok se kolica kreću. Bilo bi dobro da kameru držite u istom položaju preko ploče!

Keyboard

RPi -u je za prvo postavljanje potrebna USB tipkovnica. I ja to koristim za razvoj koda. Robotu je potrebna samo tastatura da pokrene program i simulira udaranje šahovskog sata. Imam jednu od ovih. Ali zaista, potreban vam je samo miš ili dugme GPIO spojeno na RPi

Prikaz

Koristim veliki ekran za razvoj, ali jedino što robotu treba je da vam kaže da je vaš potez nevažeći, provjerite itd. Nabavio sam jedan od ovih, takođe dostupan na amazon.com.

Ali umjesto da zahtijeva ekran, robot će govoriti ove fraze! To sam učinio tako što sam pretvorio tekst u govor pomoću koda kako je ovdje opisano i priključio mali zvučnik. (Ja koristim "Hamburger mini zvučnik").

Fraze koje robot kaže:

  • Check!
  • Mat
  • Nevažeći potez
  • Ti si pobijedio!
  • Zastoj
  • Crtanje trostrukim ponavljanjem
  • Pravilo povlačenja po 50 poteza

Pravilo pedeset poteza u šahu kaže da igrač može zatražiti neriješeno ako nije uhvaćen i nijedan pješak nije pomaknut u posljednjih pedeset poteza (u tu svrhu "potez" se sastoji od igrača koji je završio svoj potez, nakon čega slijedi protivnik završava svoj red).

Možete čuti robota kako govori u kratkom videu "partner budale" iznad (ako pojačate zvuk prilično visoko)!

Korak 6: Kako nabaviti softver

1. Stoka

Ako pokrećete Raspbian na svom RPi -u, možete koristiti Stockfish 7 engine - besplatan je. Samo pokrenite:

sudo apt-get install stockfish

2. ChessBoard.py

Uzmi ovo ovdje.

3. Kôd zasnovan na

Dolazi sa mojim kodom.

4. Python upravljački programi za BrickPi3:

Nabavite ih ovdje.

5. Moj kôd koji poziva sve gore navedene kodove i koji tjera robota na poteze, i moj kôd za vid.

Dobijte ovo od mene objavljivanjem komentara, a ja ću vam odgovoriti.

Preporučuje se: