Turinys:

Šachmatų robotas, pagamintas naudojant „LEGO“ir „Raspberry Pi“: 6 žingsniai
Šachmatų robotas, pagamintas naudojant „LEGO“ir „Raspberry Pi“: 6 žingsniai

Video: Šachmatų robotas, pagamintas naudojant „LEGO“ir „Raspberry Pi“: 6 žingsniai

Video: Šachmatų robotas, pagamintas naudojant „LEGO“ir „Raspberry Pi“: 6 žingsniai
Video: Высокая плотность 2022 2024, Lapkritis
Anonim
Image
Image

Nustebinkite savo draugus šiuo šachmatų robotu!

Tai nėra labai sunku sukurti, jei anksčiau kūrėte LEGO robotus ir turite bent elementarių žinių apie kompiuterių programavimą ir „Linux“.

Robotas daro savo judesius ir naudoja vizualinį atpažinimą, kad nustatytų žmogaus žaidėjo judesį.

Vienas iš naujų šio roboto dalykų yra judesio atpažinimo kodas. Šis vizijos kodas taip pat gali būti naudojamas šachmatų robotams, pastatytiems daugeliu kitų būdų (pvz., Mano „ChessRobot“naudojant „Lynxmotion“robotinę ranką).

Nereikia jokių specialių šachmatų lentų, nendrinių jungiklių ar kitų dalykų (nes žmogaus judesį lemia vizualinis atpažinimas).

Mano kodas galimas asmeniniam naudojimui.

1 žingsnis: Reikalavimai

Šviesos, fotoaparatas, veiksmas!
Šviesos, fotoaparatas, veiksmas!

Visas kodas parašytas „Python“, kuris, be kita ko, veiks su „Raspberry Pi“.

„Raspberry Pi“yra kredito kortelės dydžio kompiuteris, kurį galima prijungti prie ekrano ir klaviatūros. Tai nebrangus (apie 40 USD), galintis mažas kompiuteris, kurį galima naudoti elektronikos projektuose ir robotikoje bei daugeliui dalykų, kuriuos daro jūsų stalinis kompiuteris.

Mano robotas naudoja „Raspberry Pi“ir „Lego“. Techninę sąsają tarp RPi ir „Lego Mindstorms EV3“variklių bei jutiklių teikia „BrickPi3“iš „Dexter Industries“.

„Lego“konstrukcija sukurta pagal Darrouso Hadi „Charlie the Chess Robot“, kurią aš pakeičiau, įskaitant modifikacijas, skirtas naudoti RPi, o ne „Lego Mindstorms“procesorių. Naudojami „Lego Mindstorms EV3“varikliai ir jutikliai.

Jums taip pat reikės stalo, fotoaparato, apšvietimo, klaviatūros, ekrano ir žymeklio (pvz., Pelės).

Ir, žinoma, šachmatų figūros ir lenta.

Tolesnius veiksmus išsamiau aprašysiu visus šiuos dalykus.

2 žingsnis: Aparatūros kūrimas

Image
Image

Kaip jau minėjau, regėjimo kodo širdis veiks su įvairiomis konstrukcijomis.

Savo robotą grindžiau Darrous Hadi „Charlie the Chess Robot“(EV3 versija), tame puslapyje pateikta informacija, kaip gauti kūrimo instrukcijas. Dalių sąrašas yra čia.

Aš pakeičiau robotą keliais būdais.

1. Grobikas. Man tai nepadėjo. Krumpliaračiai paslydo, todėl, kad to išvengčiau, pridėjau papildomų „Lego“detalių. Ir tada, kai kranas buvo nuleistas, jis dažnai užstrigdavo, todėl pridėjau „Watt“jungtį, kad to išvengčiau.

Viršuje veikia griebtuvas, rodantis modifikuotą jungtį.

2. Originalioje konstrukcijoje naudojamas „Lego Mindstorms EV3“procesorius, bet aš naudoju „Raspberry Pi“, todėl lengva naudotis „Python“.

3. Aš naudoju Raspberry Pi 3 B modelį.

4. Norėdami prijungti RPi prie „Lego“, naudoju „BrickPi3“iš „Dexter Industries“. „BrickPi“tvirtinasi prie „Raspberry Pi“ir kartu pakeičia „LEGO Mindstorms NXT“arba „EV3 Brick“.

Kai turite „Lego Digital Designer“failą, kyla klausimas dėl LEGO dalių gavimo. Plyteles galite įsigyti tiesiai iš LEGO parduotuvės, ir tai yra pigiausias būdas jas įsigyti. Tačiau jie neturės visko, ko jums reikia, o plytos gali užtrukti porą savaičių ar ilgiau.

Taip pat galite naudoti „Rebrickable“: atidarykite paskyrą, įkelkite LDD failą ir gaukite pardavėjų sąrašą.

Kitas geras šaltinis yra „Bricklink“.

3 žingsnis: programinė įranga, kuri priverčia robotą judėti

Visas kodas parašytas „Python 2“.

  1. „Dexter Industries“tiekia kodą, skirtą EV3 variklių perkėlimui ir pan. Tai pateikiama kartu su „BrickPi3“.
  2. Pateikiu kodą, kad varikliai judėtų taip, kad judėtų šachmatų figūros!
  3. Šachmatų variklis yra „Stockfish“- kuris gali įveikti bet kurį žmogų! "" Stockfish "yra vienas stipriausių šachmatų variklių pasaulyje. Jis taip pat yra daug stipresnis už geriausius žmonių šachmatų grandus."
  4. „ChessBoard.py“yra šachmatų variklio varymo, judėjimo galiojimo patvirtinimo kodas ir pan.
  5. Aš naudoju tam tikrą kodą iš https://chess.fortherapy.co.uk, kad su juo sąveikau.
  6. Mano kodas (2 aukščiau) tada su juo sąveikauja!

4 žingsnis: programinė įranga žmogaus judėjimui atpažinti

Žaidėjui atlikus judesį, kamera nufotografuoja. Kodas apkarpomas ir pasukamas taip, kad šachmatų lenta tiksliai atitiktų vėlesnį vaizdą. Šachmatų lentos aikštės turi atrodyti kvadratinės !. Vaizdas yra iškraipytas, nes plokštės kraštai yra toliau nuo fotoaparato nei plokštės centras. Tačiau fotoaparatas yra pakankamai toli, todėl po apkarpymo šis iškraipymas nėra reikšmingas. Kadangi robotas žino, kur yra visos dalys po kompiuterio perkėlimo, viskas, ką reikia padaryti po to, kai žmogus juda, yra tas, kad kodas galėtų atskirti šiuos tris atvejus:

  • Tuščia aikštė
  • Bet kokios rūšies juodas gabalas
  • Bet kokios rūšies baltas gabalas.

Tai apima visus atvejus, įskaitant liejimą ir keleivius.

Robotas patikrina, ar žmogaus judesys teisingas, ir informuoja, jei ne! Vienintelis atvejis, kurio neapima, yra tas atvejis, kai žaidėjas žmogus skatina pėstininką tapti ne karaliene. Tada žaidėjas turi pasakyti robotui, koks yra reklamuojamas kūrinys.

Dabar galime apsvarstyti vaizdą šachmatų lentos kvadratais.

Pradiniame lentos nustatyme mes žinome, kur yra visos baltos ir juodos dalys, o kur yra tušti kvadratai.

Tuščių kvadratų spalvos skiriasi daug mažiau nei užimtų kvadratų. Mes apskaičiuojame standartinį nuokrypį kiekvienai iš trijų RGB spalvų kiekvienam kvadratui visuose jo taškuose (išskyrus tuos, kurie yra šalia kvadrato ribų). Maksimalus bet kurio tuščio kvadrato standartinis nuokrypis yra daug mažesnis už minimalų bet kurio užimto kvadrato standartinį nuokrypį, ir tai leidžia mums po to, kai žaidėjas juda, nustatyti, kurie kvadratai yra tušti.

Nustatę tuščių ir užimtų kvadratų slenkstinę vertę, dabar turime nustatyti užimtų kvadratų gabalo spalvą:

Pradinėje lentoje apskaičiuojame kiekvieną baltą kvadratą, kiekvienam iš R, G, B, jo pikselių (išskyrus tuos, kurie yra šalia kvadrato ribų) vidutinę (vidutinę) vertę. Minimalus šių vidurkių skaičius bet kokiam baltam kvadratui yra didesnis už maksimalų vidurkį bet kuriame juodame kvadrate, todėl galime nustatyti užimtų kvadratų gabalo spalvą. Kaip minėta anksčiau, tai yra viskas, ką turime padaryti, kad nustatytume, koks buvo žmogaus žaidėjo žingsnis.

Algoritmai geriausiai veikia, jei šachmatų lentos spalva yra toli nuo figūrų spalvos! Mano roboto figūros yra balkšvos ir rudos spalvos, o šachmatų lenta yra rankų darbo iš kortelės ir yra šviesiai žalios spalvos, nedaug skirtumo tarp „juodųjų“ir „baltųjų“kvadratų.

Redaguoti 2018 m. Spalio 17 d. Dabar rudus gabalus nudažiau matine juoda spalva, todėl algoritmas veikia esant labiau kintančioms apšvietimo sąlygoms.

5 žingsnis: šviesos, fotoaparatas, veiksmas

Šviesos

Jums reikia tolygaus šviesos šaltinio, esančio virš lentos. Aš naudoju šį, tikrai pigų, iš amazon.co.uk - ir, be abejo, yra kažkas panašaus amazon.com. Išjungus kambario apšvietimą.

Atnaujinimas: dabar turiu du žibintus, kad šviesos šaltinis būtų tolygesnis

Fotoaparatas

Be jokios abejonės, galite naudoti specialų „Raspberry Pi“fotoaparato modulį (su ilgu laidu), tačiau aš naudoju USB kamerą - „Logitech 960-001064 C525 HD Webcam - Black“- kuri veikia su RPi. Turite užtikrinti, kad fotoaparatas nejudėtų lentos atžvilgiu, pastatydami bokštą ar turėdami vietą, kur jį tvirtai pritvirtinti. Norint sumažinti geometrinius iškraipymus, fotoaparatas turi būti gana aukštai virš lentos. Turiu fotoaparatą 58 cm virš lentos.

Atnaujinimas: dabar man labiau patinka „HP Webcam HD 2300“, nes manau, kad jis yra patikimesnis.

Lentelė

Jums reikia tvirto. Aš nusipirkau šį. Be to, matote, kad turiu MDF kvadratą su tam tikrais daiktais, kurie neleistų robotui šokinėti, kai vežimėlis juda. Patartina laikyti fotoaparatą toje pačioje padėtyje virš lentos!

Klaviatūra

Pirmajai sąrankai RPi reikia USB klaviatūros. Ir aš jį naudoju kurdamas kodą. Vienintelis dalykas, kuriam robotui reikia klaviatūros, yra paleisti programą ir imituoti šachmatų laikrodžio pataikymą. Aš gavau vieną iš šių. Bet iš tikrųjų jums reikia tik pelės arba mygtuko GPIO, prijungto prie RPi

Ekranas

Kūrimui naudoju didelį ekraną, tačiau vienintelis dalykas, kurio robotui reikia, yra pasakyti, kad jūsų žingsnis yra negaliojantis, patikrinti ir tt. Aš gavau vieną iš šių, taip pat pasiekiamą amazon.com.

Bet užuot reikalaudamas ekrano, robotas kalbės šias frazes! Aš tai padariau konvertuodamas tekstą į kalbą, naudodamas čia aprašytą kodą, ir prijungęs nedidelį garsiakalbį. (Aš naudoju „Hamburger mini garsiakalbį“).

Frazės, kurias sako robotas:

  • Patikrinti!
  • Šachmatas
  • Netinkamas žingsnis
  • Tu laimėjai!
  • Aklavietė
  • Pieškite tris kartus
  • Lygiosios 50 judesių taisyklė

Penkiasdešimt ėjimų šachmatų taisyklėje teigiama, kad žaidėjas gali pretenduoti į lygiąsias, jei per pastaruosius penkiasdešimt ėjimų nebuvo atliktas nė vienas gaudymas ir nebuvo perkeltas pėstininkas (šiuo tikslu „ėjimas“susideda iš žaidėjo, kuris užbaigia savo eilę, o po to priešininkas baigia savo eilę).

Galite išgirsti robotą kalbant aukščiau esančiame trumpame „kvailio draugo“vaizdo įraše (jei garsą pakeliate gana aukštai)!

6 veiksmas: kaip gauti programinę įrangą

1. Žuvys

Jei naudojate „Raspbian“savo RPi, galite naudoti „Stockfish 7“variklį - tai nemokama. Tiesiog bėk:

sudo apt-get install stockfish

2. ChessBoard.py

Gaukite tai čia.

3. Kodas, pagrįstas

Ateina su mano kodu.

4. „BrickPi3“„Python“tvarkyklės:

Gaukite juos čia.

5. Mano kodas, kuris iškviečia visą aukščiau esantį kodą ir kuris priverčia robotą atlikti judesius, ir mano regėjimo kodas.

Gaukite tai iš manęs, paskelbę komentarą, ir aš atsakysiu.

Rekomenduojamas: