Cuprins:

Robot de șah realizat cu LEGO și Raspberry Pi: 6 pași
Robot de șah realizat cu LEGO și Raspberry Pi: 6 pași

Video: Robot de șah realizat cu LEGO și Raspberry Pi: 6 pași

Video: Robot de șah realizat cu LEGO și Raspberry Pi: 6 pași
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Iulie
Anonim
Image
Image

Uimeste-ti prietenii cu acest robot de sah!

Nu este prea dificil de construit dacă ați creat roboți LEGO înainte și dacă aveți cel puțin cunoștințe elementare despre programarea computerelor și Linux.

Robotul își face propriile mișcări și folosește recunoașterea vizuală pentru a determina mișcarea jucătorului uman.

Unul dintre lucrurile noi ale acestui robot este codul pentru recunoașterea mișcărilor. Acest cod de viziune poate fi utilizat și pentru roboții de șah construiți în multe alte moduri (cum ar fi Robotul meu de șah folosind brațul robot Lynxmotion).

Nu este necesară nicio tablă de șah specială, comutatoare reed sau orice altceva (deoarece mișcarea omului este determinată de recunoașterea vizuală).

Codul meu este disponibil pentru uz personal.

Pasul 1: Cerințe

Lumini, camera, actiune!
Lumini, camera, actiune!

Tot codul este scris în Python, care va rula, printre altele, pe un Raspberry Pi.

Raspberry Pi este un computer de dimensiunea unui card de credit care poate fi conectat la un ecran și o tastatură. Este un computer ieftin (în jur de 40 USD), capabil, care poate fi utilizat în proiecte electronice și robotică și pentru multe dintre lucrurile pe care le face computerul dvs. desktop.

Robotul meu folosește un Raspberry Pi și Lego. Interfața hardware dintre motoarele și senzorii RPi și Lego Mindstorms EV3 este furnizată de BrickPi3 de la Dexter Industries.

Construcția Lego se bazează pe „Robotul de șah Charlie”, de Darrous Hadi, modificat de mine, inclusiv moduri pentru a utiliza un RPi, mai degrabă decât procesorul Lego Mindstorms. Se folosesc motoare și senzori Lego Mindstorms EV3.

De asemenea, veți avea nevoie de o masă, o cameră, iluminat, o tastatură, ecran și dispozitiv de indicare (de exemplu, mouse-ul).

Și, desigur, piese de șah și o tablă.

Descriu toate aceste lucruri mai detaliat în etapele următoare.

Pasul 2: Construirea hardware-ului

Image
Image

După cum am indicat anterior, inima codului de viziune va funcționa cu o varietate de versiuni.

Mi-am bazat robotul pe „Robotul șahului Charlie” (versiunea EV3) de Darrous Hadi, informațiile din acea pagină spun cum să obțineți instrucțiunile de construcție. Lista pieselor este aici.

Am modificat robotul în câteva moduri.

1. Apucătorul. Acest lucru nu a funcționat pentru mine. Angrenajele au alunecat, așa că am adăugat piese Lego suplimentare pentru a preveni acest lucru. Și atunci când macaraua a fost coborâtă, aceasta se bloca adesea, așa că am adăugat o legătură Watt pentru a preveni acest lucru.

Deasupra se află grafferul în acțiune, care arată legătura modificată.

2. Construcția originală folosește procesorul Lego Mindstorms EV3, dar eu folosesc un Raspberry Pi, care facilitează utilizarea Python.

3. Folosesc un Raspberry Pi 3 Model B.

4. Pentru a interfața RPi cu Lego, folosesc BrickPi3 de la Dexter Industries. BrickPi se atașează la Raspberry Pi și împreună înlocuiesc LEGO Mindstorms NXT sau EV3 Brick.

Când aveți fișierul Lego Digital Designer, atunci există problema obținerii pieselor LEGO. Puteți obține cărămizi direct de la magazinul LEGO și acesta este cel mai ieftin mod de a le obține. Cu toate acestea, nu vor avea tot ce aveți nevoie, iar cărămizile ar putea dura câteva săptămâni sau mai mult pentru a ajunge.

De asemenea, puteți utiliza Rebrickable: deschideți un cont, încărcați fișierul LDD și obțineți o listă de vânzători.

O altă sursă bună este Bricklink.

Pasul 3: Software-ul care face mutarea robotului

Tot codul este scris în Python 2.

  1. Dexter Industries furnizează cod pentru a sprijini deplasarea motoarelor EV3, etc. Aceasta vine cu BrickPi3.
  2. Ofer codul pentru a face motoarele să se miște în așa fel încât să miște piesele de șah!
  3. Motorul de șah este Stockfish - care poate învinge orice om! "Stockfish este unul dintre cele mai puternice motoare de șah din lume. Este, de asemenea, mult mai puternic decât cei mai buni maeștri de șah umani."
  4. Codul pentru a conduce motorul de șah, pentru a valida faptul că o mutare este validă și așa mai departe este ChessBoard.py
  5. Folosesc niște cod de la https://chess.fortherapy.co.uk pentru a interacționa cu asta.
  6. Codul meu (în 2 de mai sus) se interfață cu acesta!

Pasul 4: Software-ul pentru recunoașterea mișcării umane

După ce jucătorul și-a făcut mișcarea, camera face o fotografie. Codul recoltează și rotește acest lucru astfel încât tabla de șah să se potrivească exact imaginii ulterioare. Pătratele de șah trebuie să arate pătrate !. Există distorsiuni în imagine, deoarece marginile plăcii sunt mai departe de cameră decât este centrul plăcii. Cu toate acestea, camera este suficient de departe, astfel încât, după decupare, această distorsiune să nu fie semnificativă. Deoarece robotul știe unde sunt toate piesele după mutarea computerului, atunci tot ce trebuie făcut după ce omul face o mișcare este ca codul să poată face diferența dintre următoarele trei cazuri:

  • Un pătrat gol
  • O bucată neagră de orice fel
  • O bucată albă de orice fel.

Aceasta acoperă toate cazurile, inclusiv castling și en passant.

Robotul verifică dacă mișcarea omului este corectă și îi informează dacă nu este! Singurul caz neacoperit este acela în care jucătorul uman promovează un pion într-o non-regină. Jucătorul trebuie să-i spună robotului care este piesa promovată.

Acum putem lua în considerare imaginea în termeni de pătrate de tablă de șah.

Pe setarea inițială a plăcii știm unde sunt toate piesele albe și negre și unde sunt pătratele goale.

Pătratele goale au o variație mult mai mică a culorii decât pătratele ocupate. Calculăm abaterea standard pentru fiecare dintre cele trei culori RGB pentru fiecare pătrat pe toți pixelii săi (cu excepția celor de lângă marginile pătratului). Abaterea standard maximă pentru orice pătrat gol este mult mai mică decât abaterea standard minimă pentru orice pătrat ocupat și acest lucru ne permite, după o mutare ulterioară a jucătorului, să determinăm care pătrate sunt goale.

După ce am stabilit valoarea pragului pentru pătratele goale versus cele pătrate, acum trebuie să determinăm culoarea piesei pentru pătratele ocupate:

Pe tabla inițială calculăm pentru fiecare pătrat alb, pentru fiecare dintre R, G, B, valoarea medie (medie) a pixelilor săi (altele decât cele din apropierea marginilor pătratului). Minimul acestor mijloace pentru orice pătrat alb este mai mare decât maximul mijloacelor de pe orice pătrat negru, astfel încât să putem determina culoarea piesei pentru pătratele ocupate. După cum sa menționat anterior, aceasta este tot ce trebuie să facem pentru a determina care a fost mișcarea jucătorului uman.

Algoritmii funcționează cel mai bine dacă tabla de șah are o culoare care este departe de culoarea pieselor! În robotul meu, piesele sunt alb-maroniu și maro, iar tabla de șah este făcută manual în cărți și este de un verde deschis, cu puține diferențe între pătratele „negre” și „albe”.

Editează 17 octombrie 2018: acum am vopsit piesele maro negru mat, ceea ce face ca algoritmul să funcționeze în condiții de iluminare mai variabile.

Pasul 5: Lumini, cameră, acțiune

Lumini

Aveți nevoie de o sursă uniformă de lumină plasată deasupra plăcii. Eu îl folosesc pe acesta, care este foarte ieftin, de pe amazon.co.uk - și fără îndoială că există ceva similar pe amazon.com. Cu luminile camerei stinse.

Actualizare: acum am două lumini, pentru a oferi o sursă de lumină mai uniformă

aparat foto

Fără îndoială că puteți utiliza modulul special de cameră Raspberry Pi (cu un cablu lung), dar eu folosesc o cameră USB - „Logitech 960-001064 C525 HD Webcam - Black” - care funcționează cu RPi. Trebuie să vă asigurați că camera nu se mișcă în raport cu placa, construind un turn sau având undeva unde să-l fixeze ferm. Camera trebuie să fie destul de sus deasupra plăcii, pentru a reduce distorsiunea geometrică. Am camera mea la 58 cm deasupra plăcii.

Actualizare: acum prefer HP Webcam HD 2300, deoarece consider că este mai fiabil.

Masa

Ai nevoie de unul robust. L-am cumpărat pe acesta. Mai mult decât atât, puteți vedea că am un pătrat de MDF, cu câteva lucruri pentru a opri robotul să sară atunci când troleul se mișcă. Este o idee bună să păstrați camera în aceeași poziție peste tablă!

Tastatură

RPi are nevoie de o tastatură USB pentru prima sa configurare. Și o folosesc pentru dezvoltarea codului. Singurul lucru pentru care robotul are nevoie de o tastatură este să pornească programul și să simuleze lovirea ceasului de șah. Am unul dintre acestea. Dar într-adevăr, aveți nevoie doar de un mouse sau de un buton conectat GPIO la RPi

Afişa

Folosesc un ecran mare pentru dezvoltare, dar singurele lucruri de care robotul are nevoie este să vă spun că mutarea dvs. este invalidă, verificați, etc. Am primit unul dintre acestea, disponibil și pe amazon.com.

Dar, mai degrabă decât să solicite un afișaj, robotul va rosti aceste fraze! Am făcut acest lucru convertind textul în vorbire folosind codul așa cum este descris aici și atașând un difuzor mic. (Eu folosesc un „mini difuzor Hamburger”).

Expresii pe care robotul le spune:

  • Verifica!
  • Șah mat
  • Mutare nevalidă
  • Ai castigat!
  • Impas
  • Desenați prin repetarea de trei ori
  • Trageți cu regula de 50 de mișcări

Regula de cincizeci de mișcări din șah afirmă că un jucător poate pretinde o remiză dacă nu a fost făcută nicio captură și nu a fost mutat nici un pion în ultimele cincizeci de mișcări (în acest scop, o „mișcare” constă în faptul că un jucător își completează rândul urmat de adversar care își completează rândul).

Puteți auzi robotul vorbind în scurtul videoclip "Prietenul prostului" de mai sus (dacă vă ridicați sunetul destul de sus)!

Pasul 6: Cum să obțineți software-ul

1. Stockfish

Dacă rulați Raspbian pe RPi, puteți utiliza motorul Stockfish 7 - este gratuit. Pur și simplu alergați:

sudo apt-get install stockfish

2. ChessBoard.py

Aduceți-l aici.

3. Cod bazat pe

Vine cu codul meu.

4. Drivere Python pentru BrickPi3:

Aduceți-le aici.

5. Codul meu care invocă tot codul de mai sus și care îl face pe robot să facă mișcările și codul meu de viziune.

Obțineți acest lucru de la mine postând un comentariu și voi răspunde.

Recomandat: