Documente Academic
Documente Profesional
Documente Cultură
1
Cuprins
Capitolul 1. Introducere.................................................................................................. 3
Capitolul 2.Implementarea unui robot pentru rezolvarea cubului rubik folosind
kit-ul Lego Mindstorm Ev3 .............................................................................................4
2.1 Kitul LEGO MINDSTORMS Ev3. Elemente constructive........................4
2.2 Implementarea robotului Lego........................................................... 7
2.3 Comunicația dintre utilizator si robot folosind mediul de lucru Matlab .....10
2.4 Comunicația prin conexiune USB, Bluetooth sau Wi-fi ........................10
2.5 Toolbox-ul Lego Mindstorms EV3 utilizat în implementare ....................11
Capitolul 3. Reguli pentru rezolvarea cubului Rubik .................................................12
3.1 Concepte si abordări de bază.............Error: Reference source not found2
3.2 Implementarea unui algortim utilizând EV3.....Error: Reference source not
found15
Capitolul 4. Concluzii și direcții viitoare de cercetare...............................................15
Bibliografie.....................................................................................................................16
ANEXĂ ...................................................................... Error: Reference source not found6
2
Capitolul 1. Introducere
3
albastru și verde). Un mecanism de pivoți permite rotirea independentă a fiecărei
fețe astfel încât culorile se vor amesteca. Pentru rezolvarea jucăriei, fiecare față
trebuie adusă la o singură culoare.
Brick-ul programabil:
Figura 1
Computer cu sistem Linux bazat pe procesor ARM tactat la frecvența de
300MHz. Memoria calculatorului este formată din memorii Flash de 16 megabyte,
care pot fi extinse datorită portului de card microSDHC și memoriei de operare de
memorie RAM de 64 MB. În cub există patru porturi de intrare pentru conectarea
cu senzori și 4 porturi de ieșire pentru reactoare.
Pentru comunicare computerul extern este prevăzut cu porturi USB și Mini-USB
și cu tehnologia Bluetooth wireless și, opțional, cu Wi-Fi, prin intermediul unui
adaptor suplimentar. Toate acestea sunt furnizate de panoul de interacțiune cu
4
utilizatorul, pe care sunt 6 butoane programabile, LED-uri colorate, un difuzor și
afișaje LCD cu o rezoluție de 178x128 pixeli.
Figura 2
Servomotoarele mari sunt motoare inteligente puternice.Acestea permit
programarea acțiunilor robotice precise și puternice. Fiecare are un senzor de
rotaţie integrat cu rezoluţie de 1 grad pentru un control precis. Servomotoarele
sunt optimizate pentru a fi baza de acţionare a roboţilor tăi. Prin utilizarea blocului
de programare Move Steering (dirijarea mișcării) sau Move Tank (rezervorul de
mișcări) în software-ul EV3, cele 2 servomotoare vor coordona acţiunea simultan.
Servomotoarele funcţionează la 160–170 rpm, cu un cuplu de funcţionare de 20
Ncm şi un cuplu de antrenare de 40 Ncm (mai lente, dar mai puternice).
Servomotorul mediu
Figura 3
Păstrează precizia, renunţând la o parte din putere în favoarea dimensiunii
compacte și reacţiei mai rapide
Și servomotorul mediu include un Rotation Sensor (senzor de rotaţie) integrat (cu
rezoluţie de 1 grad), dar este mai mic și mai ușor decât un servomotor mare.
Asta înseamnă că poate reacţiona mai rapid decât servomotorul mare.
Motorul mediu funcţionează la 240–250 rpm, cu un cuplu de funcţionare de 8
Ncm şi un cuplu de antrenare de 12 Ncm (mai rapid, dar mai puţin puternic).
5
Senzorul de culoare
Figura 4
Recunoaşte şapte culori diferite şi măsoară intensitatea luminii.
Color Sensor este un senzor digital care poate detecta culoarea sau intensitatea
luminii care pătrunde prin fereastra mică de pe faţa senzorului. Acest senzor
poate fi utilizat în trei moduri diferite: Color Mode (mod de culoare), Reflected
Light Intensity Mode (modul de intensitate a luminii reflectate), şi Ambient Light
Intensity Mode (modul de intensitate a luminii mediului înconjurător)
Senzorul giroscopic
Figura 5
Măsoară mișcarea de rotație a robotului și schimbările în orientarea sa.
Poate măsura o viteză de rotație între -440 grade / secundă și +440 grade /
secundă. Poate, de asemenea, pentru valori de viteză unghiulară, să calculeze
poziția unghiulară a unui robot.
Rata de reîmprospătare pentru senzorul giroscopic pentru robotul Lego
Mindstorms EV3 este de 1 kHz.
6
Senzorul de infraroșii
Figura 6
7
Figura 7: Robotul privit din față
Spinner
Scop: să asigure un loc de depozitare a cubului, permițând în același timp
manipularea cubului atât în ceea ce privește mișcările de rotație, cât și cele de
bază.
Motorul atașat permite o schimbare a orientării orizontale (așa cum se vede în
figura 23), pe lângă barierele laterale care ajută brațul rotativ în timpul schimbării
orientării verticale (așa cum se vede în figura 22). În timpul mișcărilor de bază,
suportul rotește un singur strat în timp ce brațul rotativ este utilizat pentru a
menține straturile rămase în poziție.
8
Braț de rotație
9
Camera
10
USB a fost conectat corespunzător sau cablul USB a fost conectat, dar nu
funcționează corect.
În ceea ce priveşte conexiunea Bluetooth, există trei stări în care acesta se poate
afla:Bluetooth-ul este deschis, dar brick-ul NXT nu este vizibil pentru alte dispozitive
Bluetooth; Bluetooth este deschis și brick-ul NXT este vizibil pentru alte dispozitive
Bluetooth; Bluetooth este deschis și brick-ul NXT este conectat la alt dispozitiv
Bluetooth.
Conexiunea prin Wi-fi este mai eficientă decât cea prin bluetooth și are o rază de
acțiune mai mare, însă utilizeaza mai multă putere și este nevoie de un router
wireless pentru a putea realiza această conexiune.
Odată ce conexiunea Bluetooth sau Wi-fi este setată, aceasta poată fi folosită pentru
următoarele caracteristici: descărcarea programelor din calculator fără folosirea
cablului USB, trimiterea programelor de pe alte dispozive decât propriul calculator,
inclusiv de la propriul EV3, trimiterea programelor la variate dispozitive EV3.
Suportul pentru Matlab permite controlul robotului lego. Pachetul de suport oferă
funcții MATLAB pentru a controla motoarele și interfața cu senzorii de intrare
hardware și capacitățile de ieșire.
Se pot efectua următoarele sarcini direct din MATLAB:
- controlarea motoarelor
- citirea intensității culorilor și a luminii
- măsurarea distanței și a proximității
- obținerea unghiului de rotație
- scriere de text pentru afișajul LCD brick
- realizarea de semnale sonore și redarea lor pe difuzorul EV3
11
Capitolul 3. Reguli pentru rezolvarea cubului Rubik
Figura 14: Cub desfăcut: Culori Figura 15: Cub desfăcut: Fețe
12
Lista mișcărilor cubului rubik
Față Notație Notație Rotație dublă
în sens invers
în sensul acelor acelor de
de ceasornic ceasornic
Front F F’ F2
Back B B’ B2
Up U U’ U2
Down D D’ D2
Right R R’ R2
Left L L’ L2
Pentru a clarifica că există trei tipuri diferite de blocuri care cuprind cubul,
blocurile centrale de pe fiecare față au o singură culoare și rămân într-o
poziție fixă și, prin urmare, nu sunt manipulate de nici una dintre mișcările
cubului menționate mai sus. Pe un Cub Rubik's standard de 3x3x3, există opt
bucăți de margine care constau în două culori în plus față de cele patru piese
de colț care sunt compuse din trei culori.
Figura16: Blocuri centrale Figura 17: Blocuri laterale Figura 18: Blocuri de colț
13
Figura 19: Orientarea blocului de colt Figura 20: Orientarea blocului lateral
[1] https://eu.rubiks.com/
[6] https://en.wikipedia.org/wiki/Morwen_Thistlethwaite
ANEXĂ
% Rezolvarea cubului utilizand algoritmul T45
P = load('Prunes');
P1 = P.P1;
P2 = P.P2;
P3 = P.P3;
P4 = P.P4;
sol = [];
E = GetEdges(R);
C = GetCorners(R);
n = State2Ind(E(2,:))+1;
N = P1(n);
while N>0
for i=1:18
E2 = TwistEdges(E,moves{i});
n = State2Ind(E2(2,:))+1;
M = P1(n);
if M<N
N = M;
E = E2;
C = TwistCorners(C,moves{i});
sol = [sol moves(i)];
break
end
end
end
Clist = P.ClistP2;
Elist = P.ElistP2;
F = E(1,:);
F = double(F>=9);
Cind = State2Ind(C(2,:));
Eind = State2Ind(F);
n = Clist==Cind;
m = Elist==Eind;
N = P2(n,m);
while N>0
for i=1:14
C2 = TwistCorners(C,moves{i});
E2 = TwistEdges(E,moves{i});
F2 = E2(1,:);
F2 = double(F2>=9);
Cind = State2Ind(C2(2,:));
Eind = State2Ind(F2(1,:));
n = Clist==Cind;
m = Elist==Eind;
M = P2(n,m);
if M<N
N = M;
C = C2;
E = E2;
sol = [sol moves(i)];
break
end
end
end
Clist = P.ClistP3;
Elist = P.ElistP3;
F = ceil(E(1,1:8)/4)-1;
Cind = State2Ind(C(1,:));
Eind = State2Ind(F,2);
n = find(Clist==Cind);
m = find(Elist==Eind);
N = P3(n,m);
while N>0
for i=1:10
C2 = TwistCorners(C,moves{i});
E2 = TwistEdges(E,moves{i});
F = ceil(E2(1,1:8)/4)-1;
Cind = State2Ind(C2(1,:));
Eind = State2Ind(F,2);
n = Clist==Cind;
m = Elist==Eind;
M = P3(n,m);
if M<N
N = M;
C = C2;
E = E2;
sol = [sol moves(i)];
break
end
end
end
Clist = P.ClistP4;
Elist = P.ElistP4;
Cind = State2Ind(C(1,:));
Eind = State2Ind(E(1,:));
n = Clist==Cind;
m = Elist==Eind;
N = P4(n,m);
while N>0
for i=1:6
C2 = TwistCorners(C,moves{i});
E2 = TwistEdges(E,moves{i});
Cind = State2Ind(C2(1,:));
Eind = State2Ind(E2(1,:));
n = Clist==Cind;
m = Elist==Eind;
M = P4(n,m);
if M<N
N = M;
C = C2;
E = E2;
sol = [sol moves(i)];
break
end
end
end
sol = rubopt(sol);