Acest proiect (care a constituit lucrarea mea de licenta) este alcatuit dintr-un robot capabil sa joace impotriva unui adversar uman, jocul "4-pe-linie" (cunoscut si sub numele de "Connect 4" sau "4-on-a-line"). Spre deosebire de celelalte proiecte, aici am folosit pentru construirea robotului si piese Meccano impreuna cu piesele Lego, astfel robotul este mai robust si mai usor de construit.
Jocul "4-pe-linie" se joaca pe o plansa formata dintr-un grid vertical de 4 pe 5 pozitii de joc (dimensiunea originala a plansii este de 7 pe 6, dar din motive de fezabilitate am optat pentru micsorarea plansii). Fiecare jucator da drumul pe rand unei piese pe o coloana verticala, iar scopul jocului este sa obtii 4 piese consecutive pe linie (orizontala, verticala sau diagonala).
Laptop-ul (cu turnul si camera web conectate) si robotul pe plansa de joc
Logica jocului si componenta care decide urmatoarea miscare a robotului se afla pe laptop. Acesta are conectata o camera web, cu ajutorul careia detecteaza bilele (dupa culoare) si turnul RCX (cu ajutorul unui adaptor) cu care se poate realiza comunicarea cu robotul. Inainte de rularea programului se marcheaza fiecare cilindru cu cate un punct, cu rol de reper, pentru a se putea determina ordinea cilindrilor. Odata ce jucatorul uman pune o bila, programul o va detecta, in punctul respectiv, va simula miscarea in reprezentarea interna a jocului si va calcula urmatoarea miscare. Aceasta miscare este calculata in trei pasi: mutarea castigatoare, aparare, atac.
In prima faza incearca sa determine daca o mutare castigatoare imediata este posibila. Daca da, atunci va opta pentru aceasta miscare si coul se va incheia cu victoria robotului. In caz contrar, face acelasi lucru dar din perspectiva adversarului, astfel se apara impotriva unei eventuale victorii ale utilizatorului. Daca o mutare castigatoare nu este posibila pentru nici unul dintre jucatori, atunci incerca sa calculeze mutarea printr-un algoritm care confera fiecarei pozitii de pe plansa o prioritate. Astfel, o pozitie pe care se afla o piesa va avea prioritatea -1, pozitiile din jurul bilei adversarului vor fi incrementate cu 1 (atunci cand acesta pune bila), iar pozitiile din jurul bilei proprii vor fi incrementate cu 2. La fiecare tura va alege sa mute pe pozitia cu prioritatea cea mai mare, iar daca mai multe astfel de pozitii exista, o va alege pe oricare (avand prioritati egale, de valoare maxima, orice miscare este considerata ca fiind buna). Astfel prioritatea sa este de a ataca, dar in acelasi timp, incearca sa si blocheze adversarul.
Odata determinata o mutare, transite caramizii Lego, cu ajutorul turnului, un mesaj corespunzator cilindrului pe care sa puna bila. In cazul in care jocul se sfarseste trimite un mesaj corespunzator, iar in functie de rezultat caramida va canta o melodie diferita. Mai multe detalii despre protocolul de comunicare al RCX-ului se pot afla aici: http://www.mralligator.com/rcx/protocol.html
Plansa este formata din patru cilindrii transparenti, din plastic, cu cate o palnie in capat (pentru a usura caderea bilelor), fixati pe o placa de poliester. Pe aceasta se afla robotul si caramida RCX.
Mecanismul robotului
Robotul este construit cu piese din seturi Meccano, avand din setul Lego, doar caramida, cablurile, senzorii si motorul. Axul vertical, pe care se afla sina, este angrenat cu ajutorul unei rotite spiralate numite reductor melcat. Aceasta are rolul de a face sina sa se roteasca cu mai multa putere, in detrimentul vitezei. Pe axul motorului, in capat, se afla atasata o roata sub care se afla un senzor de atingere (senzorul 2), actionat de piesele de pe roata (patru la numar). Numarul de actionari ale acestui senzor (impusurile) reprezinta unitatea de masura in care se masoara rotatia sinei. Senzorul 1 este actionat de doua piese aflate pe o roata de pe axul vertical atunci cand sina se afla la capete (cilindrii 1 si 4). Cand se afla deasupra cilindrului dorit, va fi actionat electromagnetul, bratul va cobori, permitand unei bile sa cada, iar apoi electromagnetul va fi oprit, bratul se va ridica si va opri restul bilelor.
La pornirea programului din caramida, bratul se va roti in sensul acelor de ceas pana la cilindrul 1 (adica pana cand senzorul 1 este actionat). La primirea unui mesaj este calculata directia de rotatie si numarul de impulsuri necesare. Rotatia pana la capete nu se face pe numar de impulsuri, ci pana cand senzorul 1 este actionat. La 3 mutari succesive intre cilindrii 2 si 3, sina se va recalibra automat, rotindu-se pana la cel mai apropiat capat (1, respectiv 4).
Echipa:
CeRVA. All rights reserved.