Lucrare laborator - BRAŢUL MOBIL LYNX 6 Braţul mobil Lynx 6 poate realiza o mişcare rapidă, precisă şi repetabilă. Robotul prezintă următoarele caracteristici de mişcare: rotirea bazei, mişcarea umărului (shoulder), mişcarea cotului (elbow), mişcarea încheieturii (wrist), rotirea încheieturii şi un dispozitiv de apucare funcţional (grip). Braţul cuprinde 4 tipuri de servomotoare Hitec, HS-422 pentru rotirea bazei, HS-475HB pentru mişcarea umărului, cotului şi încheieturii, HS-85BB pentru rotirea încheieturii şi HS-81 pentru închiderea şi deschiderea dispozitivului de prindere. Fig. 1. Exemplu - Servomotor HS-475HB Controlul braţului mobil RIOS (Robotic arm Interactive Operating System) este un program Windows pentru controlul braţului mobil Lynx 6 cu ajutorul regulatorului SSC-32 pentru servomotoare. Cu RIOS, robotul poate învăţa secvenţe de mişcare cu ajutorul mouse-ului. Acest program utilizează intrări externe digitale şi analogice pentru a influenţa mişcarea braţului în buclă închisă. Bucle de tipul If-Then, For-Next şi Do-While pot fi programate pentru diverse succesiuni de mişcări. Dacă se doreşte o funcţionare autonomă RIOS/SSC- 32 poate crea efectiv codul BASIC pentru controlul braţului mobil. Specificaţii braţ mobil Lynx 6 Nr. axe = 5 DOF + dispozitiv de apucare Controlul mişcării servomotoarelor = buclă închisă locală Înălţime (braţ în repaus) = 14 cm Înălţime (braţ ridicat) = 45.5 cm Rază de acţiune (înainte) = 37 cm Deschidere apucător = 5 cm Raza de mişcare pe axe = 180 Precizia mişcării pe axe = dependentă de regulatorul servomotorului (SSC32=0.09 ) Tensiune alimentare servomotoare = 6 V c.c.
Fig. 2. Braţul mobil Lynx 6 Servomotorul Înainte de a ilustra cum se foloseşte regulatorul SSC-32 pentru a controla mai multe servomotoare, vom explica ce este un servomotor şi vom defini modalităţile de control. Servomotorul este un dispozitiv la care arborele poate fi poziţionat într-o poziţie bine stabilită prin transmiterea unui semnal codat către acesta. Atât timp cât semnalul codat este prezent pe linia de comandă, acesta va menţine poziţia unghiulară cerută. Semnalul contă din impulsuri pozitive cu o durată variind între 0.9 şi 2.1 ms (cazul poziţionării între -45 o şi +45 o figura de mai sus, stânga), repetate de 50 de ori pe secundă (deci la fiecare 20 ms). Servomotorul îşi poziţionează axul proporţional cu durata pulsului. Servomotoarele au în general o rază mecanică de acţiune mai mare de 90, putând efectua o mişcare pe un domeniu de 180. Totuşi, unele servomotoare pot fi 2
avariate când sunt comandate peste limitele lor mecanice. SSC-32 permite utilizarea acestei raze suplimentare de acţiune. Valoarea unei poziţii de 500 corespunde unui impuls de 0,50 ms (unghi de -90 o ), iar o valoare de 2500 corespunde unei durate a pulsului de 2,50 ms (unghi de +90 o ). Schimbarea unei unităţi în valoarea poziţiei produce o schimbare de 1 μs în durata pulsului. Rezoluţia poziţionării este de 0,09 (180 /2000). Un servomotor conţine motorul propriu-zis, circuite de control şi reductor, toate încapsulate în aceeaşi carcasă (figura 3). Circuitul de control monitorizează unghiul la arbore. Dacă este cel corect, atunci motorul este oprit în acea poziţie. Fig. 3. Construcţia unui servomotor de tip Futaba S-148 Construcţia braţului presupune iniţial ca servomotoarele să fie poziţionate în centrul domeniului lor de rotaţie. Există două modalităţi pentru efectuarea acestui lucru cu SSC-32. Se poate folosi interfaţa LynxTerm prin scrierea unei comenzi simple: #0 P1500. Aceasta activează servomotorul conectat pe canalul 0. A doua modalitate este utilizarea butonului "All=1.5 ms" în RIOS SSC-32. Centrarea unui servomotor necesită generarea unui impuls pozitiv de 1.5 ms care se repetă la fiecare 20 ms. Un servomotor prezintă la ieşire 3 cabluri identificate prin culori: negru (masa), roşu (alimentare la +5V) şi galben (control Pulse Coded Modulation). Dispozitivul de apucare Pentru o funcţionare mai bună a acestuia a fost necesară utilizarea unui microservomotor HS-81, instalat direct pe apucător, pentru menţinerea unei greutăţi minime. Aceste micro-servomotoare sunt uşoare, dar pot fi avariate dacă nu sunt utilizate cu atenţie. Cea mai frecventă problemă constă în ruperea unui angrenaj (pinion) în interiorul 3
servomotorului. Pentru menţinerea unei bune funcţionări a micro-servomotoarelor se recomandă următoarele: Ajustarea poziţiilor de minim şi maxim pentru a împiedica programul să încerce mişcarea micro-servomotorului dincolo de capacitatea sa mecanică. Ajustaţi poziţia încet, şi când micro-servomotorul nu se mai mişcă a fost găsit punctual final. Faceţi acest lucru pentru ambele direcţii. Nu mişcaţi angrenajul final al micro-servomotorului cu mâna. Servomotoarele sunt angrenate puternic şi angrenajele pot fi rupte dacă sunt acţionate în sens invers. Pentru a preveni apucarea unui obiect prea mare prescrieţi poziţiile minim şi maxim astfel încât apucătorul să nu poată fi închis prea strâns pe obiectul de ridicat de către braţul mobil. Utilizaţi doar 6 V c.c. pentru alimentarea micro-servomotoarelor. Tensiunea de 7.2 V c.c. poate fi utilizată, în general, pentru cele mai multe tipuri standard de servomotoare, însă micro-servomotoarele pot fi avariate la această tensiune. Regulatorul SSC-32 SSC-32 este un regulator cu 32 de canale având o rezoluţie de 1 μs care asigură o poziţionare precisă şi mişcări fine ale servomotoarelor, cu o gamă cuprinsă între 0.50 ms şi 2.50 ms pentru un domeniu de rotaţie de aproximativ 180. Controlul mişcării poate fi de tip răspuns imediat, controlat în viteză, cu control al duratei mişcării, sau o combinaţie între acestea. Aplicaţia soft disponibilă pentru controlul servomotoarelor prin intermediul regulatorului SSC-32 este LynxTerm a cărui secvenţă de comandă are următoarea formă generală, pentru mişcarea unui servomotor sau grup de servomotoare: # <ch> P <pw> S <spd>... # <ch> P <pw> S <spd> T <time> <CR> unde: <ch> = numărul canalului de comandat, 0-31. <pw> = durata pulsului în microsecunde, 500-2500. <spd> = viteza de mişcare în μs pe secundă pentru un canal (opţional). <time> = timpul în ms pentru întreaga mişcare, afectează toate canalele, max. 65535 (opţional). <esc> = anulează comanda curentă, ASCII 27. <CR> = apăsare tastă ENTER. Exemplu pentru mişcarea unui servomotor: #5 P1600 S750. Această comandă va mişca servomotorul de pe cananlul 5 la poziţia identificată cu 1600 (aproximativ +9 o, dacă poziţia de mijloc 0 o se obţine pentru valoarea prescrisă de 1500). Mişcarea se va efectua cu o viteză de 750 μs/s până se va atinge destinaţia prescrisă. Pentru o mai bună înţelegere a argumentului viteză se consideră că în 1000 μs de mişcare rezultă o rotaţie de aproximativ 90. Pentru o valoare a vitezei de 100 μs/s ar înseamna că 4
servomotorul s-ar mişca 90 în 10 secunde. Viteza maximă pentru aceste tipuri de servomotoare ar putea fi 3500 μs/s. Instrucţiunea poate conţine referiri la mai multe canale care se doresc a fi controlate în acelaşi timp. De exemplu: #1 P1600 #3 P1200 #4 P2200 T2500 <CR> Servomotorul 2 va fi poziţionat la poziţia 1600, servomotorul 3 la poziţia 1200 iar servomotorul 4 la poziţia 2200 (poziţiile corespund unor unghiuri diverse care se pot calcula ca mai sus), toată mişcare efectuându-se în 2,5 secunde. Toate servomotoarele pornesc şi se opresc în acelaşi timp. Alimentarea echipamentului Figura 4 prezintă modul de funcţionare al comutatorului şi pinii utilizaţi pentru alimentare. Fig. 4. Diagrama de conectare pentru SSC-32 Figura 4 prezintă schema de alimentare, care permite servomotoarelor să fie alimentate independent de partea electronică. Aceasta poate fi folositoare pentru testare, în caz de defectare sau când controlăm robotul virtual în RIOS. 5
Fig. 5. Schema de alimentare pentru SSC-32 Cablurile sunt conectate în VS1 cu negru la (-) şi roşu/galben la (+), ca în figura 6. Asiguraţi-vă că jumper-ul VL=VS1 este instalat! Această variantă alimentează atât servomotoarele cât şi microcontrolerul SSC-32(VL) de la adaptorul de 6V c.c./2a. Dacă braţul mobil se mişcă neregulat, atunci microcontroller-ul poate fi alimentat separat, ca în figura 7. Fig. 6. Alimentarea SSC-32 Pentru a alimenta microcontroller-ul de la o baterie de 9V c.c., se conectează cablurile la intrarea VL cu negru la (-) şi roşu la (+). Scoateţi jumper-ul VL=VS1! Astfel se separă alimentarea servomotoarelor de alimentarea microcontroller-ului. Fig. 7. Alimentarea microcontroller-ului de la o baterie de 9V 6
Soclurile cu 3 pini corespunzătoare fiecărui segment acţionat de servomotoare sunt indicate în tabelul de mai jos. Socluri SSC-32 Soclu 0 Soclu 1 Soclu 2 Soclu 3 Soclu 4 Soclu 5 Servomotor Bază Umăr Cot Încheietură Graifăr Rotire încheietură Soclu 6 Extra Servo 7 Soclu 7 Extra Servo 8 Socluri SSC-32 Intrări / Ieşiri Soclurile 8-15 Ieşire 1-8 Soclurile A la D Intrare 1-4 Fig.8 Schema SSC-32 7
Probleme de rezolvat: 1. Daţi comenzi simple din mediul de lucru LynxTerm. Consultaţi documentaţia din manualul SSC-32 pus la dispoziţie. 2. Familiarizaţi-vă cu mediul de control RIOS-SSC32. 3. Programaţi limitele maxime şi minime de mişcare din mediul RIOS. Atenţie! manevraţi mouse-ul cu viteză mică. 4. Executaţi proiecte tip demo. 5. Executati mişcări complexe între 2 puncte cu apucarea unei piese şi deplasarea acesteia, cu diverse viteze. 6. Realizaţi un proiect care va consta într-o înlănţuire de mişcări. Utilizati mediul Matlab pentru a programa diverse miscari. 7. Utilizati mediul Matlab pentru a implementa controlul bazat pe modelul cinematic invers la robotul planar cu 2 grade de libertate. 8. Utilizati mediul Matlab pentru a implementa controlul bazat pe modelul cinematic invers la robotul Lynx6. 8
Anexa: Secvente de comenzi Matlab: fprintf(robot,'#0 P1100 #1 P1500 #2 P1500 #3 P1500 #4 P1500 #5 P1500 T2000') fprintf(robot,'#0 P1600 #1 P1500 #2 P1500 #3 P1500 #4 P1500 #5 P1500 T2000') fprintf(robot,'#0 P1600 #1 P1150 #2 P1990 #3 P1900 #4 P1900 #5 P1500 T2000') % apucare obiect fprintf(robot,'#0 P1600 #1 P1150 #2 P1990 #3 P1900 #4 P1400 #5 P1500 T2000') % deplasare intr-un alt punct fprintf(robot,'#0 P2200 #1 P1500 #2 P1700 #3 P1300 #4 P1400 #5 P1100 T2000') fprintf(robot,'#0 P1600 #1 P1500 #2 P1500 #3 P1500 #4 P1400 #5 P1500 T2000') fprintf(robot,'#0 P1600 #1 P1150 #2 P1990 #3 P1900 #4 P1400 #5 P1500 T2000') % eliberare obiect fprintf(robot,'#0 P1600 #1 P1150 #2 P1990 #3 P1900 #4 P1800 #5 P1500 T2000') % retragere intr-o pozitie mediana fprintf(robot,'#0 P1600 #1 P1500 #2 P1500 #3 P1500 #4 P1800 #5 P1500 T2000') va comanda robotul Lynx6 pentru a efectua o operatie de deplasare a unei piese intre 2 pozitii (figuri de mai jos) Secvenţe filmate pe durata efectuarii unei operatii de mutare a unui obiect 9