Tartalomjegyzék:

Sakkrobot LEGO -val és Raspberry Pi -vel: 6 lépés
Sakkrobot LEGO -val és Raspberry Pi -vel: 6 lépés

Videó: Sakkrobot LEGO -val és Raspberry Pi -vel: 6 lépés

Videó: Sakkrobot LEGO -val és Raspberry Pi -vel: 6 lépés
Videó: Ambionics | Portrait of an Inventor | Ben Ryan | RS Components 2024, November
Anonim
Image
Image

Lepje meg barátait ezzel a sakkrobottal!

Nem túl nehéz építeni, ha már készített LEGO robotokat, és ha legalább elemi ismeretekkel rendelkezik a számítógépes programozásról és a Linuxról.

A robot saját mozdulatait hajtja végre, és vizuális felismerés segítségével határozza meg az emberi játékos lépését.

A robot egyik újdonsága a mozgásfelismerés kódja. Ez a látáskód használható sok más módon épített sakkrobotok esetében is (például a Lynxmotion robotkarját használó ChessRobotom).

Nincs szükség speciális sakktáblára, nádkapcsolókra vagy bármi másra (mivel az ember mozgását vizuális felismerés határozza meg).

A kódom személyes használatra elérhető.

1. lépés: Követelmények

Fények, kamera, akció!
Fények, kamera, akció!

Az összes kód Pythonban van írva, amely többek között Raspberry Pi -n is fut.

A Raspberry Pi egy hitelkártya méretű számítógép, amely képernyőhöz és billentyűzethez csatlakoztatható. Ez egy olcsó (körülbelül 40 dollár), képes kis számítógép, amely használható az elektronikai projektekben és a robotikában, és sok mindenben, amit az asztali PC -k csinálnak.

A robotom Raspberry Pi -t és Legót használ. Az RPi és a Lego Mindstorms EV3 motorok és érzékelők közötti hardver interfészt a Dexter Industries BrickPi3 szolgáltatja.

A Lego -konstrukció Darrous Hadi "Charlie the Chess Robot" -jára épül, általam módosítva, beleértve a RPi -t használó modokat is, nem pedig a Lego Mindstorms processzort. Lego Mindstorms EV3 motorokat és érzékelőket használnak.

Szüksége lesz asztalra, kamerára, világításra, billentyűzetre, képernyőre és mutatóeszközre (pl. Egér) is.

És persze sakkfigurák és tábla.

Mindezeket részletesebben leírom a következő lépésekben.

2. lépés: A hardver felépítése

Image
Image

Amint korábban jeleztem, a látáskód szíve különféle konstrukciókkal fog működni.

A robotomat Darrous Hadi "Charlie the Chess Robot" -jára (EV3 -as verzió) alapultam, az oldalon található információk azt írják, hogyan szerezhetők meg az építési utasítások. Az alkatrészlista itt található.

A robotot néhány módon módosítottam.

1. A markoló. Ez nekem nem működött. A fogaskerekek megcsúsztak, ezért további Lego -darabokat tettem hozzá, hogy ezt megakadályozzam. És amikor a darut leeresztették, gyakran elakadt, ezért hozzáadtam egy Watt kapcsolót, hogy ezt megakadályozzam.

Fent látható a markoló akcióban, amely a módosított összekapcsolást mutatja.

2. Az eredeti konstrukció a Lego Mindstorms EV3 processzort használja, de én egy Raspberry Pi -t használok, ami megkönnyíti a Python használatát.

3. Raspberry Pi 3 B modellt használok.

4. Az RPi és a Lego összekapcsolásához a Dexter Industries BrickPi3 -at használom. A BrickPi a Raspberry Pi -hez kapcsolódik, és együtt kicserélik a LEGO Mindstorms NXT vagy EV3 Brick -et.

Ha megvan a Lego Digital Designer fájl, akkor a kérdés a LEGO darabok beszerzése. Téglát közvetlenül a LEGO üzletből szerezhet be, és ez a legolcsóbb módja annak, hogy beszerezze őket. Azonban nem lesz mindenük, amire szüksége van, és a téglák megérkezése néhány hétig vagy tovább is eltarthat.

Használhatja a Rebrickable -t is: nyisson egy fiókot, töltse fel az LDD -fájlt, és onnan szerezze be az eladók listáját.

Egy másik jó forrás a Bricklink.

3. lépés: A szoftver, amely mozgatja a robotot

Minden kód Python 2 -ben van írva.

  1. A Dexter Industries kódot biztosít az EV3 motorok stb. Mozgatásához. Ez a BrickPi3 -hoz tartozik.
  2. Megadom a kódot, hogy a motorok úgy mozogjanak, hogy elmozduljanak a sakkfigurák!
  3. A sakk motorja Stockfish - amely minden embert meg tud verni! "A Stockfish a világ egyik legerősebb sakkmotorja. Sokkal erősebb is, mint a legjobb emberi sakknagymesterek."
  4. A sakkmotor hajtására, a lépés érvényesítésére vonatkozó kód, és így tovább, a ChessBoard.py
  5. A https://chess.fortherapy.co.uk webhelyről származó kódot használok az interfészhez.
  6. A kódom (a fenti 2 -ben) majd kapcsolódik ehhez!

4. lépés: A szoftver az ember mozgásának felismerésére

Miután a játékos megmozdult, a kamera készít egy fényképet. A kód ezt kivágja és elforgatja, hogy a sakktábla pontosan illeszkedjen a következő képhez. A sakktábla négyzeteknek négyzetnek kell látszaniuk !. A kép torzul, mert a tábla szélei távolabb vannak a kamerától, mint a tábla közepe. A kamera azonban elég messze van, így a vágás után ez a torzítás nem jelentős. Mivel a robot tudja, hol van az összes darab a számítógép mozgatása után, ezért az ember lépése után csak annyit kell tennie, hogy a kód meg tudja különböztetni a következő három esetet:

  • Üres tér
  • Bármilyen fekete darab
  • Bármilyen fehér darab.

Ez minden esetre kiterjed, beleértve az öntvényt és az utast.

A robot ellenőrzi, hogy az ember lépése helyes -e, és tájékoztatja őket, ha nem! Az egyetlen eset, amelyre nem terjed ki, az, amikor az emberi játékos gyalogot hirdet nem királynévá. A játékosnak ezután meg kell mondania a robotnak, hogy mi a reklámozott darab.

Most a sakktábla négyzetek szempontjából tekinthetjük a képet.

A kezdeti táblán már tudjuk, hol van az összes fehér és fekete darab, és hol vannak az üres négyzetek.

Az üres négyzetek színe sokkal kisebb, mint az elfoglalt négyzetek. Kiszámítjuk a szórást a három RGB szín mindegyikére minden négyzetre minden pixelén (kivéve a négyzet határainak közelében). Az üres négyzetek maximális szórása sokkal kisebb, mint az elfoglalt négyzetek minimális szórása, és ez lehetővé teszi számunkra, hogy egy későbbi játékosmozgás után megállapítsuk, mely négyzetek üresek.

Miután meghatároztuk az üres és elfoglalt négyzetek küszöbértékét, most meg kell határoznunk a foglalt négyzetek darabszínét:

A kezdő táblán minden fehér négyzetre, R, G, B mindegyikére kiszámítjuk a képpontok átlagos (átlagos) értékét (kivéve a négyzet határainak közelében). Ezen átlagok minimuma bármely fehér négyzetnél nagyobb, mint bármely fekete négyzet átlaga, és így meg tudjuk határozni a darab színét a foglalt négyzeteknél. Amint azt korábban említettük, ez minden, amit meg kell tennünk annak meghatározásához, hogy mi volt az emberi játékos lépése.

Az algoritmusok akkor működnek a legjobban, ha a sakktábla színe messze van a darabok színétől! Az én robotomban a darabok törtfehér és barna színűek, a sakktábla kézzel készített, kartonból készült, világos zöld színű, kevés különbséggel a "fekete" és "fehér" négyzetek között.

Szerkesztés 2018. október 17.: A barna darabokat most matt feketére festettem, ami miatt az algoritmus változékonyabb fényviszonyok mellett működik.

5. lépés: Fények, kamera, akció

Lámpák

A tábla fölött egyenletes fényforrásra van szüksége. Ezt az igazán olcsó terméket az amazon.co.uk -ról használom - és kétségkívül van valami hasonló az amazon.com -on. Kikapcsolt szobavilágítással.

Frissítés: Most két lámpám van, hogy egyenletesebb fényforrást biztosítsak

Kamera

Kétségtelen, hogy használhatja a speciális Raspberry Pi kamera modult (hosszú kábellel), de én egy USB kamerát - "Logitech 960-001064 C525 HD Webcam - Black" - használok, amely az RPi -vel működik. Gondoskodnia kell arról, hogy a kamera ne mozduljon el a táblához képest, építsen egy tornyot vagy legyen helye, ahol szilárdan rögzítheti. A fényképezőgépnek meglehetősen magasan kell lennie a tábla felett a geometriai torzítás csökkentése érdekében. A fényképezőgépem 58 cm -rel a tábla felett van.

Frissítés: Most a HP Webcam HD 2300 -at részesítem előnyben, mivel megbízhatóbbnak találom.

asztal

Kell egy erős. Ezt vettem. Ezen felül láthatod, hogy van egy négyzet alakú MDF lapom, néhány dologgal, ami megakadályozza, hogy a robot ugráljon, amikor a kocsi mozog. Érdemes a kamerát ugyanabban a helyzetben tartani a tábla felett!

Billentyűzet

Az RPi első beállításához USB billentyűzetre van szüksége. És ezt használom a kód fejlesztéséhez. A robotnak csak billentyűzetre van szüksége, hogy elindítsa a programot és szimulálja a sakkóra ütését. Kaptam egy ilyet. Valójában csak egy egérre vagy egy GPIO-ra van szüksége az RPi-hez csatlakoztatva

Kijelző

Nagy képernyőt használok a fejlesztéshez, de a robotnak csak annyit kell tennie, hogy közölje, hogy a lépése érvénytelen, csekk stb. Kaptam egy ilyet, szintén elérhető az amazon.com oldalon.

De ahelyett, hogy megjelenítést igényelne, a robot kimondja ezeket a kifejezéseket! Ezt úgy tettem, hogy a szöveget beszéddé alakítottam az itt leírt kód használatával, és egy kis hangszórót csatoltam. ("Hamburger mini hangszórót" használok).

A robot mondatai:

  • Jelölje be!
  • Sakk -matt
  • Érvénytelen lépés
  • Ön nyert!
  • Patt
  • Rajzoljon háromszoros ismétléssel
  • Döntetlen 50 mozdulattal szabály

A sakk ötven lépéses szabálya kimondja, hogy a játékos döntetlenre tarthat igényt, ha az utolsó ötven lépésben nem történt elfogás és gyalog sem mozdult el (e célból a "lépés" abból áll, hogy a játékos befejezi a körét, majd a az ellenfél befejezi a körét).

Hallhatja a robot beszédét a fenti rövid "bolond társ" videóban (ha elég magasra állítja a hangot)!

6. lépés: A szoftver beszerzése

1. Állományhal

Ha Raspbian -ot futtat RPi -jén, használhatja a Stockfish 7 motort - ingyenes. Csak fuss:

sudo apt-get install stockfish

2. ChessBoard.py

Szerezd meg ezt itt.

3. Kód:

A kódommal jár.

4. Python illesztőprogramok a BrickPi3 számára:

Szerezd meg ezeket itt.

5. Az én kódom, amely meghívja a fenti kódot, és a robotot mozgatja, és a látás kódom.

Kérje ezt tőlem egy megjegyzés közzétételével, és válaszolok.

Ajánlott: