Sadržaj:

Šahovski robot napravljen s LEGO -om i Raspberry Pi: 6 koraka
Šahovski robot napravljen s LEGO -om i Raspberry Pi: 6 koraka

Video: Šahovski robot napravljen s LEGO -om i Raspberry Pi: 6 koraka

Video: Šahovski robot napravljen s LEGO -om i Raspberry Pi: 6 koraka
Video: Don't Do This At Home 2024, Studeni
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 elementarno 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 poteza. Ovaj kôd vizije također se može koristiti za šahovske robote izgrađene na mnoge druge načine (poput mog ChessRobota koji koristi robotsku ruku Lynxmotion).

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

Moj kôd je dostupan za osobnu upotrebu.

Korak 1: Zahtjevi

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

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

Raspberry Pi je računalo veličine kreditne kartice koje se može priključiti na zaslon i tipkovnicu. To je jeftino (oko 40 USD) sposobno malo računalo koje se može koristiti u projektima elektronike i robotike te za mnoge stvari koje radi vaše stolno računalo.

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 se temelji 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.

Također će vam trebati stol, kamera, osvjetljenje, tipkovnica, zaslon i pokazivački uređaj (npr. Miš).

I naravno, šahovske figure i tabla.

Sve ove stvari detaljnije opisujem u sljedećim koracima.

Korak 2: Izgradnja hardvera

Image
Image

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

Svog sam robota bazirao na "Charlie the Chess Robot" (EV3 verzija) Darrous Hadi, podaci na toj stranici govore kako doći do uputa za izradu. Popis 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 kako bih to spriječio. 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 korištenje Pythona.

3. Koristim Raspberry Pi 3 Model B.

4. Kako bih RPi spojio s Legom, koristim BrickPi3 iz Dexter Industries. BrickPi se pričvršćuje na Raspberry Pi i zajedno zamjenjuju LEGO Mindstorms NXT ili EV3 Brick.

Kad imate datoteku Lego Digital Designer, postavlja se pitanje nabavke LEGO komada. Opeke možete nabaviti izravno u LEGO trgovini, a to je najjeftiniji način da ih nabavite. Međutim, neće imati sve što vam je potrebno, a cigle će možda potrajati nekoliko tjedana ili više.

Također možete koristiti Rebrickable: otvorite račun, učitajte LDD datoteku i iz toga dobijete popis 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. Dolazi s BrickPi3.
  2. Dajem kôd za pokretanje motora na 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. Za povezivanje s tim koristim neki kôd s
  6. Moj kôd (u 2 gore) tada se povezuje s tim!

Korak 4: Softver za prepoznavanje ljudskog poteza

Nakon što je igrač napravio potez, kamera snima fotografiju. Kôd obrezuje i rotira tako da šahovska ploča točno pristaje sljedećoj slici. Kvadrati šahovske ploče moraju izgledati četvrtasto !. Na slici postoji izobličenje jer su rubovi ploče udaljeniji od fotoaparata nego središte ploče. Međutim, kamera je dovoljno udaljena da nakon izrezivanja to izobličenje nije značajno. Budući da robot zna gdje se nalaze svi dijelovi nakon premještanja računala, 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
  • Bijeli komad bilo koje vrste.

To obuhvaća sve slučajeve, uključujući roštilj i prolaznike.

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 što je promovirano djelo.

Sada možemo sliku promatrati 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ći.

Prazni kvadrati imaju mnogo manje varijacije u boji od zauzetih kvadrata. 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.

Utvrdivši 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 na bilo kojem crnom kvadratu, 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 prljavobijele i smeđe, a šahovska ploča ručno izrađena u kartonu i svijetlozelena je s malom razlikom između "crnih" i "bijelih" kvadrata.

Edit 17. listopada 2018: Sada sam obojila smeđe komade u crno, što čini da algoritam radi u promjenjivijim uvjetima osvjetljenja.

Korak 5: Svjetla, kamera, akcija

Svjetla

Treba vam ravnomjeran izvor svjetlosti postavljen preko ploče. Ovaj, koji je stvarno jeftin, koristim s amazon.co.uk - i nema sumnje da postoji nešto slično na amazon.com. Kad je svjetlo u sobi isključeno.

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

Fotoaparat

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 osigurati da se kamera ne pomiče u odnosu na ploču, izgradnjom tornja ili da ga imate gdje čvrsto učvrstiti. Kamera mora biti prilično visoko iznad ploče kako bi se smanjila geometrijska izobličenja. Imam fotoaparat 58 cm iznad ploče.

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

Stol

Treba vam čvrst. Ovu sam kupio. 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 držati kameru u istom položaju preko ploče!

Tipkovnica

RPi za prvo postavljanje treba USB tipkovnicu. I to koristim za razvoj koda. Jedino za što robotu treba tipkovnica je da pokrene program i simulira udaranje šahovskog sata. Ja sam dobio jednu od ovih. Ali doista, potreban vam je samo miš ili gumb GPIO spojen na RPi

Prikaz

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

No, umjesto da zahtijeva zaslon, robot će govoriti ove fraze! To sam učinio pretvarajući 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:

  • Ček!
  • Mat
  • Nevažeći potez
  • Pobjedio si!
  • Pat
  • Crtanje trostrukim ponavljanjem
  • Pravilo izvući po 50 poteza

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

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

Korak 6: Kako nabaviti softver

1. Stočna riba

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

sudo apt-get install stockfish

2. ChessBoard.py

Uzmi ovo ovdje.

3. Kôd temeljen na

Dolazi s mojim kodom.

4. Python upravljački programi za BrickPi3:

Ovdje nabavite ove.

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

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

Preporučeni: