Documente Academic
Documente Profesional
Documente Cultură
Sarcina principal a sistemului de comand este de a transpune programele de aplicaie n micri relative al elementelor cuplelor cinematice conductoare ale dispozitivului de ghidare.
Comanda micrii este prima sarcina a sistemului de comand i const n: coordonarea i supravegherea (controlul) micrii efectorului final prin siturile programate, sau a punctului caracteristic M pe traiectoriile programate; sincronizarea desfurrii micrilor robotului ce evenimentele care au loc la periferia robotului prin prelucrarea semnalelor externe preluate din procesul de producie (maini unelte, dispozitive de lucru etc.) prelucrarea datelor de la senzorii externi (sisteme de prelucrarea imaginilor) i transpunerea rezultatelor prelucrate n reaciile dorite.
Se impune a doua sarcin a sistemului de comand - programarea robotului. Prin programarea robotului se realizeaz n primul rnd dialogul cu operatorul uman, cruia i se pun la dispoziie comenzile i funciile pentru conceperea, corectarea i testarea programului de micare, precum i dispozitivele de: introducere, scoatere i arhivare a programului.
Sarcinile sistemului de comand sunt realizate de cele dou componente ale sale: subsistemul hardware bazat pe microprocesor; subsistemul software.
Programarea n virgul fix. Obinerea preciziei maxime n poziionarea unui robot SCARA
Modul n care se reprezint datele numerice ntr-un calculator are legtur direct cu structura UCP, avnd influen asupra dimensiunii registrelor de uz general locale, al dimensiunii magistralei interne i al complexitii unitii de execuie.
Pentru reprezentarea numerelor pozitive i negative se aloc un bit suplimentar, care indic semnul.
(a)
(b)
Numr cu semn reprezentat n virgul fix (a) interpretat fracionar, (b) interpretat intreg
bitul de semn S partea ntreag partea fracionar, format din Q bii
Notaia utilizata n mod curent pentru reprezentarea n virgul fix n reprezentarea unui numr semn Qi.q, unde: i - numrul de bii al componentei ntregi a numrului, q - numrul de bii al componentei fracionare. Suma i + q + 1 este numrul total de bii disponibil pentru a reprezinta valoarea a lungimii cuvntului. Limitele maxime i minime de reprezentare n virgul fix a unui numr cu semn sunt date de relatia:
2i + q 2i + q 1 q n 2 2q
Pentru reprezentarea unui numr ntreg, pe n bii fr semn se utilizeaz notaia UQi.q, unde U indic o reprezentare fr bit de semn
Exemplificarea reprezentrii unui format care include att parte ntreag ct i fracionar, Q3.12, pentru numerele cu semn
*
32 biti
<< 1
>> 16
rezultat =
nr. 16 biti
32768 32767
Ca prim soluie general, de siguran, se limiteaz forat rezultatul la limita pozitiv sau negativ, operaie numit saturare. n general, procesoarele n virgul fix permit saturarea automat a rezultatului, prin setarea de ctre programator a unui anumit bit de control.
O alt problem este necesitatea transpunerii numerelor din lumea real n formatul specific (nativ) al procesorului numere ntregi pe 8, 16 sau 32 de bii, utiliznd ct mai bine puterea de reprezentare a formatului existent. Soluia este scalarea mrimilor
Reprezentarea n virgul fix cu numere subunitare are avantajul important c prin operaia de nmulire nu se depete capacitatea de reprezentare (produsul a dou numere subunitare este tot subunitar).
Limitele de reprezentare pentru numere pe 16 bii, cu semn
Intervalul de reprezentare la nivelul procesorului, ca numere intregi [-3276832767]
0
( )
16384
(+)
16384
( )
(+ )
0.5
0.5
32768
32767
1 1
Reprezentarea numerelor ntregi cu semn pe 16 bii: (a) cu numere ntregi i (b)formatul echivalent Q.15, n interpretare fracionar
Transformarea de coordonate din sistemul de coordonate cartezian n sistemul de coordonate polar Calcul distanta r1, de la origine pn la punctul caracteristic din planul de lucru
2 2 ri2 = l1 + l2 2l1 l2 cos 2
y
l2
l1 1 2
A( xi , yi )
yi xi
ri
Relaiile ce definesc poziia final a braului robotului reprezint ecuaia ce permite calculul unghiurilor
l 2 l 2 + x2 + y2 xi 1 2 i i 1 = arccos + arccos 2l x 2 + y 2 x2 + y2 1 i i i i
2 2 2 2 l1 + l x y 2 i i 2 = arccos 2 l l 1 2
l2
l1 2
A( xi , yi )
ri xi
yi
x
1 1 r C + = + C2ri 1 i 2l ri 1 1 2 3
C2
2 2 2 l1 + l r 2 i 2 = arccos 2l1l2
coeficienii C1, C2, C3, C4 vor fi folosii n programul scris n NXC, care se va rula pe microcontrolerul robotului
Pasul 2. Aceste rapoarte se pun n eviden n expresia de calcul a ieirii, i se modific coeficienii astfel nct s se pastreze echivalena expresiei (cu cea iniial). ri DIM _ MAX C1 ( ) arg 1 = + C DIM _ MAX = 2 DIM _ MAX DIM _ MAX ri
1 C1 = + (C 2 DIM _ MAX ) rr DIM _ MAX rr
Pasul 3. Noii coeficieni (pentru simplitate nu s-a schimbat notaia), obinui la pasul anterior, se raporteaz la (cel puin) maximul lor, pentru a deveni subunitari. C1 Expresia devine:
(C 2 DIM _ MAX ) DIM _ MAX 1 arg 1 = + rr COEF _ MAX COEF _ MAX r r COEF _ MAX
Se va construi un bra de robot alctuit din cele dou elemente mobile, articulate, acionate separat de cte un motor NXT exemplificarea unei structuri mecanice Se stabilesc originea i cele dou axe ale sistemului de coordonate; Orientarea braului robotului se va realiza n plan; Considernd modelul cinematic al sistemului, se va concepe programul care s permit realizarea pozitionrii braului robotului SCARA n sistemul (XOY). Testarea programului: Pentru fiecare punct de coordonate xi,yi dorit (inta de atins), se compar coordonatele atinse cu cele dorite.
L1 = 12; L2 = 8;
% [cm] Lungimea celui de-al doilea segment %============================================================ % Pasul 1. Stabilirea limitelor maxime in care se pot incadra variabilele de intrare si iesire. % In cazul de fata variabilele de intrare se folosesc in programul NXC pentru calculul % argumentelor functiei arccos. Aceste argumente trebuie sa rezulte in intervalul [-1, 1), % deci nu e nevoie sa le raportam la o limita maxima. %============================================================ % Limita maxima a zonei de acoperire a bratului robotului este un cerc cu raza data % de cele doua brate in prelungire, deci egala cu DIM_MAX = L1+L2.
DIM_MAX = L1 + L2
% Se alege o putere a lui 2 imediat urmatoare: % DIM_MAX = 2^(ceil(log2(DIM_MAX))) % Coef C1 si C2 intra in calculul argumentului arg1 % Prin raportarea variabilelor de intrare x si y la valoarea DIM_MAX, % coeficientii C1 si C2 se modifica astfel:
C1_sc = C1 * 32767/COEF_C1C2; C1_sc = floor(C1_sc + 0.5) % rotunjire C2_sc = C2 * 32767/COEF_C1C2; C2_sc = floor(C2_sc + 0.5) % rotunjire
% pentru C3 si C4:
C3_sc = C3 * 32767/COEF_C3C4; C3_sc = floor(C3_sc + 0.5) % rotunjire C4_sc = C4 * 32767/COEF_C3C4; C4_sc = floor(C4_sc + 0.5) % rotunjire
disp('---------------------------------') %--------------------------------------------------------------------------------------
Program NXC
/**************************************************************************************/ // Constante /*************************************************************************************/ // Valoarea de raportare a marimilor de intrare. // TREBUIE SA FIE IDENTICA CU CEA INTRODUSA IN FISIERUL // IN CARE S-AU SCALAT COEFICIENTII #define DIM_MAX 20 // [cm] // Coeficientii scalati #define C1 5461 #define C2 27306 #define C3 8874 #define C4 17066 #define SH_C1C2 0 #define SH_C3C4 2 //#define COEF_C1C2 1 //#define COEF_C3C4 3 // macro pentru scalarea variabilelor de intrare #define Ks (32767/DIM_MAX) #define SCAL(x) (x*Ks) // "viteza" stabilita pentru rotirea motoarelor #define pwr 20 /************************************************************************************/ // Macrouri pentru multiplicare si impartire in C, pentru formatul Q15 /************************************************************************************/ #define MUL(a,b) ((a*b)>>15) #define DIV(a,b) ((a<<15)/b) // Macro pt trecerea din fractionar Q15 in procente, folosit pentru argumentele functiei acos din NXC #define SCALARE_100(a) (((a*100)>>14)+1*sign(a))>>1 /* cu rotunjire, tinand cont de semn */
BREAKPOINT_AFISARE_VAR("theta2= ",theta2); // calcul theta1 = gama + theta theta1 = gama + theta; BREAKPOINT_AFISARE_VAR("theta1= ",theta1); // Calcul unghiurilor cu care trebuie rotite motoarele, fata de pozitia anterioara D_theta1=theta1-theta1_ant; D_theta2=theta2-theta2_ant; // Miscare brat catre pozitia impusa RotateMotor(OUT_A,pwr,D_theta1); RotateMotor(OUT_B,pwr,-D_theta2); // Actualizare unghiuri coresp. pozitiei anterioare, pentru urmatorul punct de atins (daca e cazul) // Pentru a evita cumularea erorilor de pozitionare de la un punct la altul, unghiurile anterioare // se actualizeaza cu unghiurile cu care s-au rotit efectiv motoarele intre ultimele doua pozitii, // si nu cu ultimele valori calculate ale unghiurilor theta1 si theta2. theta1_ant = MotorTachoCount(OUT_A); theta2_ant = MotorTachoCount(OUT_B); // Numaratoarele asociate trebuie sa fie resetate dupa fiecare pozitionare // ---> de completat in laborator, pentru situatia in care se va face o succesiune de pozitionari. }
// Programul in NXC /***************************************************************************************************************** Prin acest program se pozitioneaza capatul bratului de robot SCARA, format din doua segmente, intr-un punct din planul de lucu. Coordonatele carteziene ale punctului sunt introduse in linii de program in task-ul main(), pentru a fi citite de catre robot in timpul rularii programului. Aceasta pentru a executa pozitionarea si in situatia in care coordonatele ii sunt date din exterior, fara a fi necesara reprogramarea robotului pentru fiecare punct in parte. Programul cuprinde doua parti principale: - Calculul unghiurilor cu care trebuie rotite cele doua segmente ale bratului, in functie de coordonatele introduse - Trimiterea acestor comenzi de miscare catre firmware-ul microcontrolerului, prin intermediul functiilor predefinite. Inainte de a rula programul, trebuie sa se stabileasca orientarea fizica a celor doua axe ale planului de lucru si sa se pozitioneze manual bratul in pozitia initiala stabilita: cu cele doua segmente in prelungire, de-a lungul axei OX. In acest program demonstrativ se pozitioneaza bratul in cadranul I. Precizari referitoare la scalare ----------------------------------------Calculul unghiurilor se va face exclusiv de catre microcontrolerul robotului. Pentru a folosi formatul numeric nativ al acestuia (16 biti, in virgula fixa), trebuie ca toate marimile de intrare, precum si coeficientii din expresiile in care apar marimi de intrare sau de iesire sa fie scalate. Se va lucra cu numere intregi pe 16 biti, cu semn, in interpretarea fractionara Q15, explicata in partea introductiva a platformei. Pentru scalare s-a folosit o dimensiune maxima, notata DIM_MAX, la care s-au raportat marimile de intrare - coordonatele punctului tinta. Marimile de iesire nu s-au raportat la nimic, fiind argumente ale functiei arccos. Procedeul de scalare este explicat in platforma lucrarii. Tinand cont raza de actiune a bratului, se poate alege DIM_MAX cel putin egala cu suma lungimilor celor doua brate. Este recomandat sa se aleaga o putere a lui 2. Pentru acest program: - Coeficientii introdusi trebuie sa fie scalati separat. Desi se pot scala si in programul NXC, la preprocesare, este recomandat sa fie scalati separat, in afara programului, pentru a-i putea vedea si valida (daca se incadreaza pe 16 biti, daca au semnul asteptat), inainte de a fi introdusi in program. Coeficientii sunt scalati fisierul MATLAB "scalare_SCARA.m". - Marimile de intrare, introduse in orice unitate de masura (stabilita de la inceput), sunt scalate in timpul executiei, imediat ce sunt citite.
Precizari referitoare la operatiile aritmetice in virgula fixa ------------------------------------------------------------------------------Depasirile -------------------------Depasirile sunt specifice programarii in virgula fixa, indiferent daca numerele intregi cu care lucreaza microcontrolerul sunt interpretate de catre programator ca fractionare sau intregi. Totusi, se poate elimina problema depasirii la inmultire daca se foloseste interpretarea fractionara, subunitara, prin formatul Q15 ( produsul a doua numere subunitare este tot subunitar si nu apare nici o depasire). Scrierea operatiilor in acest format: - Operatiile de adunare si scadere se scriu direct - Pentru operatiile de inmultire si impartire se vor folosi macro-urile definite la inceputul programului Depasirile posibile ramase sunt cele date de adunare, scadere si impartire. Acestea trebuie avute permanent in vedere si pe cat posibil evitate. O metoda generala este aranjarea convenabila a ordinii operatiilor in expresii. In acest program sunt comentate liniile unde s-a procedat astfel. Nota: Compilatorul NXC folosit de BricxCC poate sa nu "inteleaga" expresiile complexe semnaland o eroare la compilare: "error parsing expression". Din acest motiv e nevoie ca astfel de expresii sa se descompuna in expresii simple si sa se faca in mai multi pasi.*/
Prin analogie cu o situaie real, n care o sarcin cerut unui robot SCARA este manipularea unor obiecte, se va completa structura mecanic a braului de robot cu un element terminal care s permit mutarea unor obiecte n spaiul de operare. Se va ataa construciei mecanice un al treilea motor NXT care va permite deschiderea i nchiderea efectorului Se poate construi un element efector de tip clete; Se aleg puncte de coordonate int din spaiul de lucru, n care se va muta piesa Micrile braului robotului se vor executa n plan; Se va adaug o secven de cod care va deschide i respectiv nchide cletele n funcie de necesiti; Paii de executat de braul robotului:
n poziia iniial braul este aliniat dup o ax, iar cletele deschis; Se deplaseaz braul robotului ctre obiectul de mutat. Braul s-a poziionat la o distan minim de obiect, astfel nct piesa nu este lovit. Micarea de prindere a obiectului din spaiul de operare se va realiza cu o vitez redus. Cletele apuc piesa i se nchide. ATENTIE: Pentru a nu suprasolicita motorul n poziia blocat s se opreasc rotirea acestuia n momentul n care nu se mai citete nicio variaie a unghiului acestuia, de la encoder (adic atunci cnd cletele este strns). Cletele va transfera obiect n punctul de coordonate dorit Se deschide cletele, braul se retrage cu o distan minim fa de obiect i se nchide.