Sisukord:

LEGO ja Raspberry Pi -ga valmistatud malemobot: 6 sammu
LEGO ja Raspberry Pi -ga valmistatud malemobot: 6 sammu

Video: LEGO ja Raspberry Pi -ga valmistatud malemobot: 6 sammu

Video: LEGO ja Raspberry Pi -ga valmistatud malemobot: 6 sammu
Video: Building a "Lego" NES Mini Console (with a Raspberry Pi) 2024, Juuli
Anonim
Image
Image

Üllatage oma sõpru selle malerobotiga!

Selle ehitamine pole liiga keeruline, kui olete varem LEGO -roboteid valmistanud ja kui teil on vähemalt algteadmised arvutiprogrammeerimisest ja Linuxist.

Robot teeb oma käigud ja kasutab visuaalset äratundmist, et määrata inimese mängija käik.

Üks selle roboti uudseid asju on liigutuste tuvastamise kood. See nägemiskood on kasutatav ka paljudel muudel viisidel ehitatud malerobotite jaoks (näiteks minu ChessRobot, mis kasutab Lynxmotioni robotkätt).

Ei ole vaja spetsiaalset malelauda, pilliroo lülitit ega midagi muud (kuna inimese käigu määrab visuaalne äratundmine).

Minu kood on isiklikuks kasutamiseks saadaval.

Samm: nõuded

Tuled, kaamera, tegevus!
Tuled, kaamera, tegevus!

Kogu kood on kirjutatud Pythonis, mis töötab muu hulgas ka Raspberry Pi peal.

Raspberry Pi on krediitkaardi suurune arvuti, mille saab ühendada ekraani ja klaviatuuriga. See on odav (umbes 40 dollarit) võimekas väike arvuti, mida saab kasutada elektroonikaprojektides ja robootikas ning paljude muude asjade jaoks, mida teie lauaarvuti teeb.

Minu robot kasutab Raspberry Pi ja Legot. Riistvaralise liidese RPi ning Lego Mindstorms EV3 mootorite ja andurite vahel pakub Dexter Industries BrickPi3.

Lego konstruktsioon põhineb Darrous Hadi "Charlie Chess Robotil", minu modifitseeritud, sealhulgas modifikatsioonid RPi kasutamiseks, mitte Lego Mindstorms protsessor. Kasutatakse Lego Mindstorms EV3 mootoreid ja andureid.

Teil on vaja ka lauda, kaamerat, valgustust, klaviatuuri, ekraani ja osutusseadet (nt hiirt).

Ja muidugi malenupud ja laud.

Ma kirjeldan kõiki neid asju üksikasjalikumalt järgnevates etappides.

Samm: riistvara ehitamine

Image
Image

Nagu ma varem märkisin, töötab nägemiskoodi süda mitmesuguste ehitistega.

Võtsin oma roboti aluseks Darrous Hadi "Charlie the Chess Robot" (EV3 versioon), sellel lehel olev teave ütleb, kuidas hankida koostamisjuhiseid. Osade nimekiri on siin.

Muutsin robotit paaril viisil.

1. Haarats. See ei töötanud minu jaoks. Käigud libisesid, nii et lisasin selle vältimiseks täiendavaid Lego tükke. Ja siis, kui kraana langetati, jäi see sageli kinni, nii et lisasin selle vältimiseks Watti haakeseadise.

Eespool on haarats tegevuses, näidates muudetud sidet.

2. Algne ehitis kasutab Lego Mindstorms EV3 protsessorit, aga mina kasutan Raspberry Pi, mis teeb Pythoni kasutamise lihtsaks.

3. Ma kasutan Raspberry Pi 3 mudelit B.

4. RPi ühendamiseks Legoga kasutan Dexter Industriesi BrickPi3. BrickPi kinnitub Raspberry Pi külge ja koos asendavad nad LEGO Mindstorms NXT või EV3 Brick.

Kui teil on Lego Digital Designeri fail, siis on küsimus LEGO tükkide hankimises. Klotse saate otse LEGO poest ja see on odavaim viis nende hankimiseks. Neil pole aga kõike vajalikku ja telliste kohalejõudmiseks võib kuluda paar nädalat või rohkem.

Võite kasutada ka Rebrickable'i: avage konto, laadige üles LDD -fail ja hankige sealt müüjate loend.

Teine hea allikas on Bricklink.

Samm: tarkvara, mis paneb roboti liikuma

Kogu kood on kirjutatud Python 2 -s.

  1. Dexter Industries tarnib koodi, mis toetab EV3 mootorite liigutamist jne. See on kaasas BrickPi3 -ga.
  2. Annan koodi, mis paneb mootorid liikuma nii, et malenupud liiguksid!
  3. Malemootor on Stockfish - mis suudab võita iga inimest! "Stockfish on üks tugevamaid malemootoreid maailmas. See on ka palju tugevam kui parimad inimeste male suurmeistrid."
  4. Malemootori juhtimise, käigu kehtivuse kinnitamise jms kood on ChessBoard.py
  5. Kasutan sellega liitumiseks mõnda koodi saidilt
  6. Minu kood (ülal 2) liidestub sellega!

4. samm: tarkvara inimese käigu äratundmiseks

Kui mängija on oma liigutuse teinud, teeb kaamera foto. Kood kärbib ja pöörab seda nii, et malelaud sobiks täpselt järgneva pildiga. Malede ruudud peavad välja nägema ruudukujulised !. Pildil on moonutusi, kuna tahvli servad on kaamerast kaugemal kui tahvli keskpunkt. Kaamera on aga piisavalt kaugel, nii et pärast kärpimist pole see moonutus märkimisväärne. Kuna robot teab pärast arvuti liigutamist, kus kõik osad asuvad, tuleb pärast inimese käiku teha ainult see, et kood suudaks eristada järgmist kolme juhtumit:

  • Tühi väljak
  • Igasugune must tükk
  • Igasugune valge tükk.

See hõlmab kõiki juhtumeid, kaasa arvatud castling ja en passant.

Robot kontrollib, kas inimese käik on õige, ja teavitab teda, kui see pole nii! Ainus juhtum, mida ei käsitleta, on see, kus inimmängija edendab etturit kuningannaks. Seejärel peab mängija robotile ütlema, mis on reklaamitud tükk.

Nüüd võime pilti kaaluda malelaua ruutude osas.

Tahvli esialgsel seadistamisel teame, kus on kõik valged ja mustad tükid ning kus on tühjad ruudud.

Tühjade ruutude värvivalik on palju väiksem kui hõivatud ruutude puhul. Arvutame standardhälbe iga kolme RGB värvi jaoks iga ruudu kohta kõigi selle pikslite puhul (välja arvatud ruudu piiride lähedal). Tühja ruudu maksimaalne standardhälve on palju väiksem kui hõivatud ruudu minimaalne standardhälve ja see võimaldab meil pärast järgnevat mängija käiku määrata, millised ruudud on tühjad.

Olles määranud tühjade ja hõivatud ruutude läviväärtuse, peame nüüd määrama hõivatud ruutude tükkvärvi:

Esialgsel tahvlil arvutame iga valge ruudu jaoks iga R, G, B puhul selle pikslite (välja arvatud ruudu piiride lähedal) keskmise (keskmise) väärtuse. Nende valgete ruutude minimaalne arv on suurem kui keskmise ruudu keskmiste maksimum ja seega saame hõivatud ruutude tükkvärvi määrata. Nagu varem öeldud, on see kõik, mida peame tegema, et teha kindlaks, milline oli inimese mängija käik.

Algoritmid toimivad kõige paremini siis, kui malelaual on värv, mis on tükkide värvist kaugel! Minu robotil on tükid valkjad ja pruunid ning malelaud on käsitsi valmistatud kartongist ning heleroheline, millel on vähe erinevusi "musta" ja "valge" ruudu vahel.

Muuda 17. okt 2018: Olen nüüd pruunid tükid mattmustaks värvinud, mis paneb algoritmi muutuvamates valgustingimustes töötama.

Samm: tuled, kaamera, tegevus

Valgus

Tahvli kohale on vaja ühtlast valgusallikat. Ma kasutan seda, mis on tõesti odav, saidilt amazon.co.uk - ja kahtlemata on midagi sarnast ka saidil amazon.com. Toa tuled välja lülitatud.

Värskendus: mul on nüüd kaks valgust, et anda ühtlasem valgusallikas

Kaamera

Kahtlemata saate kasutada spetsiaalset Raspberry Pi kaameramoodulit (pika kaabliga), kuid mina kasutan USB -kaamerat - "Logitech 960-001064 C525 HD Webcam - Black" - mis töötab koos RPi -ga. Peate tagama, et kaamera ei liiguks tahvli suhtes, ehitades torni või omades seda kuskil kindlalt kinnitada. Geomeetriliste moonutuste vähendamiseks peab kaamera olema plaadi kohal üsna kõrgel. Mul on kaamera 58 cm laua kohal.

Värskendus: ma eelistan nüüd HP Webcam HD 2300, kuna leian, et see on usaldusväärsem.

Tabel

Teil on vaja tugevat. Ostsin selle. Peale selle näete, et mul on MDF -i ruut, kus on mõned asjad, mis takistavad roboti hüppamist, kui käru liigub. Kaamerat on hea hoida laua kohal samas asendis!

Klaviatuur

RPi vajab esmakordseks seadistamiseks USB -klaviatuuri. Ja ma kasutan seda koodi arendamiseks. Ainus, mille jaoks robot vajab klaviatuuri, on programmi käivitamine ja malekella löömise simuleerimine. Sain ühe sellise. Kuid tegelikult vajate RPi-ga ühendatud hiirt või GPIO-nuppu

Ekraan

Ma kasutan arendamiseks suurt ekraani, kuid ainus asi, mida robot vajab, on teile teatada, et teie samm on kehtetu, kontrollige jne. Mul on üks neist, saadaval ka aadressil amazon.com.

Kuid selle asemel, et kuvarit nõuda, räägib robot neid väljendeid! Olen seda teinud, teisendades teksti kõneks, kasutades siin kirjeldatud koodi, ja lisades väikese kõlari. (Ma kasutan "Hamburgeri minikõlarit").

Laused, mida robot ütleb:

  • Kontrollima!
  • Kambematt
  • Kehtetu käik
  • Sina võitsid!
  • Patiseis
  • Joonista kolmekordse kordusega
  • Joonista 50 käigu reegel

Male viiekümne käigu reegel ütleb, et mängija saab nõuda viiki, kui viimast viiskümmend käiku pole tabatud ja etturit pole liigutatud (sel eesmärgil koosneb "käik" mängijast, kes lõpetab oma käigu ja millele järgneb vastane lõpetab oma käigu).

Kuulete robotit rääkimas ülaltoodud lühikeses "lolli kaaslase" videos (kui keerate heli üsna kõrgele)!

6. samm: tarkvara hankimine

1. Kalakala

Kui käivitate oma RPi -l Raspbiani, saate kasutada Stockfish 7 mootorit - see on tasuta. Lihtsalt jookse:

sudo apt-get install stockfish

2. ChessBoard.py

Hankige see siit.

3. Kood põhineb

Kaasas minu kood.

4. Pythoni draiverid BrickPi3 jaoks:

Hankige need siit.

5. Minu kood, mis kutsub esile kogu ülaltoodud koodi ja paneb roboti liigutusi tegema, ja minu nägemiskood.

Saage see minult, postitades kommentaari ja ma vastan.

Soovitan: