Sisällysluettelo:

Shakkirobotti LEGOlla ja Raspberry Pi: 6 askelta
Shakkirobotti LEGOlla ja Raspberry Pi: 6 askelta

Video: Shakkirobotti LEGOlla ja Raspberry Pi: 6 askelta

Video: Shakkirobotti LEGOlla ja Raspberry Pi: 6 askelta
Video: BIGGEST LEGO SCAMS of 2023 2024, Heinäkuu
Anonim
Image
Image

Yllätä ystäväsi tällä shakkirobotilla!

Sen rakentaminen ei ole liian vaikeaa, jos olet tehnyt LEGO -robotteja aiemmin ja jos sinulla on ainakin perustiedot tietokoneohjelmoinnista ja Linuxista.

Robotti tekee omat liikkeensä ja määrittää visuaalisen tunnistuksen avulla ihmisen pelaajan liikkeen.

Yksi tämän robotin uusista asioista on liikkeen tunnistuksen koodi. Tämä visio -koodi on käyttökelpoinen myös shakkiroboteille, jotka on rakennettu monilla muilla tavoilla (kuten minun ChessRobotillani, joka käyttää Lynxmotion -robottivartta).

Mitään erityistä shakkilautaa, ruoko -kytkintä tai muuta ei tarvita (koska ihmisen liike määräytyy visuaalisen tunnistuksen perusteella).

Koodini on käytettävissä henkilökohtaiseen käyttöön.

Vaihe 1: Vaatimukset

Valot, kamera, toiminta!
Valot, kamera, toiminta!

Kaikki koodit on kirjoitettu Pythonilla, joka toimii muun muassa Raspberry Pi: llä.

Raspberry Pi on luottokortin kokoinen tietokone, joka voidaan kytkeä näyttöön ja näppäimistöön. Se on edullinen (noin 40 dollaria), kykenevä pieni tietokone, jota voidaan käyttää elektroniikkaprojekteissa ja robotiikassa sekä monissa asioissa, joita pöytätietokoneesi tekee.

Robottini käyttää Raspberry Pi: tä ja Legoa. Laitteistorajapinnan RPi: n ja Lego Mindstorms EV3 -moottorien ja -antureiden välillä tarjoaa Dexter Industriesin BrickPi3.

Lego -rakenne perustuu Darrous Hadin "Charlie the Chess Robotiin", jonka olen muokannut, mukaan lukien modit RPi: n käyttämiseksi Lego Mindstorms -prosessorin sijasta. Käytössä ovat Lego Mindstorms EV3 -moottorit ja -anturit.

Tarvitset myös pöydän, kameran, valaistuksen, näppäimistön, näytön ja osoitinlaitteen (esim. Hiiren).

Ja tietysti shakkinappulat ja lauta.

Kuvaan kaikkia näitä asioita tarkemmin seuraavissa vaiheissa.

Vaihe 2: Laitteiston rakentaminen

Image
Image

Kuten aiemmin mainitsin, visio -koodin sydän toimii erilaisilla rakenteilla.

Perustin robotin Darrous Hadin "Charlie the Chess Robot" -versioon (EV3 -versio). Sivun tiedot kertovat rakennusohjeiden saamisesta. Osaluettelo on täällä.

Muutin robottia muutamalla tavalla.

1. Nappaaja. Tämä ei toiminut minulle. Vaihteet liukastuivat, joten lisäsin lisää Lego -osia sen estämiseksi. Ja sitten, kun nosturi laskettiin alas, se usein juuttui, joten lisäsin Watt -kytkimen estääkseni sen.

Yllä on tarttumistoiminto, joka näyttää muokatun kytkennän.

2. Alkuperäinen rakenne käyttää Lego Mindstorms EV3 -prosessoria, mutta käytän Raspberry Pi: tä, mikä helpottaa Pythonin käyttöä.

3. Käytän Raspberry Pi 3 -mallia B.

4. Liittääkseni RPi: n Legoon käytän Dexter Industriesin BrickPi3: a. BrickPi kiinnittyy Raspberry Pi: hen ja yhdessä ne korvaavat LEGO Mindstorms NXT: n tai EV3 Brickin.

Kun sinulla on Lego Digital Designer -tiedosto, on kysymys LEGO -osien hankkimisesta. Voit ostaa palikoita suoraan LEGO -kaupasta, ja tämä on halvin tapa saada ne. Niissä ei kuitenkaan ole kaikkea mitä tarvitset, ja tiilien saapuminen voi kestää pari viikkoa tai enemmän.

Voit myös käyttää Rebrickable -toimintoa: avaa tili, lataa LDD -tiedosto ja hanki sieltä myyjien luettelo.

Toinen hyvä lähde on Bricklink.

Vaihe 3: Ohjelmisto, joka saa robotin liikkumaan

Kaikki koodit on kirjoitettu Python 2: lla.

  1. Dexter Industries toimittaa koodin EV3 -moottoreiden jne. Siirtämiseen. Tämä tulee BrickPi3: n mukana.
  2. Annan koodin moottorien liikuttamiseksi siten, että shakkipaloja liikutetaan!
  3. Shakkimoottori on Stockfish - joka voi voittaa kaikki ihmiset! "Stockfish on yksi maailman vahvimmista shakkimoottoreista. Se on myös paljon vahvempi kuin ihmisen parhaat shakkimestarit."
  4. ChessBoard.py
  5. Käytän jotain koodia osoitteesta https://chess.fortherapy.co.uk liittymään siihen.
  6. Koodini (2 yllä) on sitten rajapinnassa sen kanssa!

Vaihe 4: Ohjelmisto ihmisen liikkeen tunnistamiseksi

Kun pelaaja on tehnyt liikkeen, kamera ottaa valokuvan. Koodi rajaa ja kiertää sitä niin, että shakkilauta sopii tarkasti seuraavaan kuvaan. Shakkilaudan neliöiden on näytettävä neliömäisiltä !. Kuvassa on vääristymiä, koska levyn reunat ovat kauempana kamerasta kuin levyn keskipiste. Kamera on kuitenkin riittävän kaukana, joten tämä vääristymä ei ole rajauksen jälkeen merkittävä. Koska robotti tietää, missä kaikki palat ovat tietokoneen siirron jälkeen, kaikki mitä on tehtävä ihmisen liikkeen jälkeen, on, että koodi pystyy erottamaan seuraavat kolme tapausta:

  • Tyhjä neliö
  • Kaikenlainen musta pala
  • Kaikenlainen valkoinen pala.

Tämä kattaa kaikki tapaukset, mukaan lukien castling ja matkustaja.

Robotti tarkistaa, että ihmisen liike on oikea, ja ilmoittaa heille, jos ei! Ainoa tapaus, jota ei käsitellä, on se, että ihmispelaaja nostaa sotilaan ei-kuningattareksi. Pelaajan on sitten kerrottava robotille, mikä on korostettu pala.

Voimme nyt tarkastella kuvaa shakkilaudan neliöinä.

Alustan kokoonpanossa tiedämme, missä kaikki valkoiset ja mustat palat ovat ja missä tyhjät neliöt ovat.

Tyhjillä neliöillä on paljon vähemmän värivaihtelua kuin käytössä olevilla neliöillä. Laskemme keskihajonnan kullekin kolmelle RGB -värille kullekin neliölle kaikilla sen pikseleillä (muut kuin neliön rajojen lähellä olevat värit). Jokaisen tyhjän neliön suurin keskihajonta on paljon pienempi kuin minkä tahansa varatun neliön vähimmäispoikkeama, ja tämän avulla voimme seuraavan pelaajan siirron jälkeen määrittää, mitkä neliöt ovat tyhjiä.

Kun olemme määrittäneet kynnysarvon tyhjille ja varattuille neliöille, meidän on nyt määritettävä varattujen neliöiden kappaleen väri:

Aloitustaululla laskemme kullekin valkoiselle neliölle kullekin R, G, B sen pikselien (muut kuin neliön rajojen lähellä olevat) keskiarvon (keskiarvon). Näiden keskiarvojen vähimmäismäärä mille tahansa valkoiselle neliölle on suurempi kuin minkä tahansa mustan neliön keskiarvon enimmäismäärä, joten voimme määrittää palan värin käytössä oleville neliöille. Kuten aiemmin todettiin, tämä on kaikki mitä meidän on tehtävä, jotta voimme määrittää, mikä oli ihmisen pelaajan liike.

Algoritmit toimivat parhaiten, jos shakkilaudalla on väri, joka on kaukana kappaleiden väristä! Robotissani palaset ovat luonnonvalkoisia ja ruskeita, ja shakkilauta on käsintehty kortista, ja se on vaaleanvihreä, jossa on vain vähän eroa "mustan" ja "valkoisen" neliön välillä.

Edit 17.10.2018: Olen nyt maalannut ruskeat palat mattamustiksi, mikä saa algoritmin toimimaan vaihtelevissa valaistusolosuhteissa.

Vaihe 5: Valot, kamera, toiminta

Valot

Tarvitset tasaisen valonlähteen levyn päälle. Käytän tätä, todella halpaa, osoitteesta amazon.co.uk - ja epäilemättä on jotain vastaavaa amazon.comissa. Huoneen valot sammutettuna.

Päivitys: Minulla on nyt kaksi valoa, jotta valonlähde olisi tasaisempi

Kamera

Epäilemättä voit käyttää erityistä Raspberry Pi -kameramoduulia (pitkällä kaapelilla), mutta käytän USB -kameraa - "Logitech 960-001064 C525 HD Webcam - Black" - joka toimii RPi: n kanssa. Sinun on varmistettava, että kamera ei liiku levyyn nähden, rakentamalla torni tai jos sinulla on paikka, jolla se voidaan kiinnittää tiukasti. Kameran on oltava melko korkealla levyn yläpuolella geometristen vääristymien vähentämiseksi. Minulla on kamera 58 cm levyn yläpuolella.

Päivitys: Pidän nyt mieluummin HP Webcam HD 2300: sta, koska se on mielestäni luotettavampi.

Pöytä

Tarvitset tukevan. Ostin tämän. Tämän lisäksi näet, että minulla on neliö MDF -levyä, jossa on joitain esineitä, jotka estävät robotin hyppimästä vaunun liikkuessa. Kamera on hyvä pitää samassa asennossa levyn päällä!

Näppäimistö

RPi tarvitsee USB -näppäimistön ensimmäiseen käyttöönottoonsa. Ja käytän sitä koodin kehittämiseen. Ainoa asia, johon robotti tarvitsee näppäimistön, on käynnistää ohjelma ja simuloida shakkikellon lyömistä. Sain yhden näistä. Mutta todella tarvitset vain hiiren tai GPIO-painikkeen, joka on kytketty RPi: hen

Näyttö

Käytän kehitystä suurella näytöllä, mutta robotin tarvitsee vain kertoa, että siirtosi on virheellinen, tarkista jne. Sain yhden näistä, saatavana myös osoitteesta amazon.com.

Mutta sen sijaan, että robotti vaatisi näyttöä, se puhuu nämä lauseet! Olen tehnyt tämän muuttamalla tekstin puheeksi käyttämällä tässä kuvattua koodia ja liittämällä pienen kaiuttimen. (Käytän "Hamburger -minikaiutinta").

Lauseita robotti sanoo:

  • Tarkistaa!
  • Shakki Matti
  • Virheellinen liike
  • Sinä voitit!
  • Pattitilanne
  • Piirrä kolminkertaisella toistolla
  • Piirrä 50 liikettä -sääntö

Shakin viisikymmentäliikettä koskeva sääntö sanoo, että pelaaja voi vaatia tasapeliä, jos mitään kaappausta ei ole tehty eikä panttia ole siirretty viidenkymmenen viimeisen liikkeen aikana (tätä tarkoitusta varten "siirto" käsittää pelaajan, joka suorittaa vuoronsa ja jota seuraa vastustaja suorittaa vuoronsa).

Voit kuulla robotin puhuvan yllä olevassa lyhyessä "hölmön kaverin" videossa (jos nostat äänesi melko korkealle)!

Vaihe 6: Ohjelmiston hankkiminen

1. Kantakala

Jos käytät Raspbiania RPi: lläsi, voit käyttää Stockfish 7 -moottoria - se on ilmainen. Juokse:

sudo apt-get install stockfish

2. ChessBoard.py

Hanki tämä täältä.

3. Koodi perustuu osoitteeseen

Tulee koodini mukana.

4. BrickPi3: n Python -ohjaimet:

Hanki nämä täältä.

5. Oma koodini, joka kutsuu kaiken yllä olevan koodin ja joka saa robotin tekemään liikkeet, ja minun visio -koodini.

Hanki tämä minulta lähettämällä kommentti, niin vastaan.

Suositeltava: