aplicaţie pe braţul manipulator owi-007iota.ee.tuiasi.ro/~mpobor/doc/cursuri/ria7.pdf · cele 8...
TRANSCRIPT
Laborator “Roboţi Industriali”
1
Aplicaţie pe braţul manipulator OWI-007
Braţul manipulator ”Robotic Arm Trainer model OWI-007” cuprinde cinci articulaţii
acţionate cu ajutorul a cinci motoare de curent continuu, fiind comandate cu ajutorul unei
interfeţe, realizând funcţii cum ar fi apucarea, eliberarea, ridicarea, coborârea, mutarea laterală
a obiectelor. Mişcarea se realizează pe cinci axe: baza (Base) se poate roti stânga sau dreapta,
unghiul maxim permis este de 350°; umărul (Shoulder) permite un unghi de deschidere de
120°; cotul (Elbow) un unghi de 135°; încheietura (Wrist) se roteşte stânga sau dreapta,
unghiul fiind de 340°, iar dispozitivul de prehensiune (Gripper) permite o deschidere de
maxim 55 de milimetri. Înălţimea robotului OWI-007 este de 510 milimetri, iar distanţa
maximă unde poate muta o piesă faţă de baza lui este de 360 milimetri. Manipulatorul OWI-
007 poate ridica piese cu o greutate maximă de 130 de grame.
Figura 1. Braţul manipulator OWI-007
Braţul manipulator OWI-007 dispune de o interfaţă de comandă care realizează
conexiunea acestuia cu calculatorul în scopul programării lui în diferite secvenţe de acţionare.
Interfaţa care realizează comanda robotului “PC Interface For Robotic Arm Trainer-OWI-007”
se conectează cu calculatorul prin intermediul portului paralel.
Laborator “Roboţi Industriali”
2
Figura 2. Interfaţa de comandă a robotului OWI-007
Interfaţa braţului manipulator OWI-007 are în componenţa ei două circuite integrate,
un port paralel cu 25 de pini pentru realizarea conexiunii cu calculatorul şi încă opt pini prin
care se conectează cu braţul robotic, un comutator pentru închiderea comunicaţiei cu
calculatorul. Motoarele sunt alimentate de la două surse conectate în serie, fiecare furnizând o
tensiune de 3 volţi. Fiecare motor se conectează la un pol cu nodul dintre cele două surse, iar
ceilalţi poli se vor conecta la o plăcuţă care realizează comunicarea cu telecomanda sau
interfaţa prin-un port cu opt pini.
Terminalele bateriilor au fost înlocuite cu surse de alimentare de 3 volţi pentru a avea o
funcţionare continuă şi a nu depinde de durata de viaţă a bateriilor. În partea dreaptă a figurii
putem observa conexiunea celor două surse legate în serie şi cinci fire care se îndreaptă spre
cele cinci motoare, iar un altul care se conectează la plăcuţa ce realizează legătura cu interfaţa.
În partea stângă terminalele bateriilor care au fost înlocuite cu cele de la sursele de alimentare,
iar în partea de sus plăcuţa de conectare cu exteriorul, prin cei opt pini.
Alimentarea motoarelor, modul de conectare şi de comandă a acestora se realizează ca
în figura 3.
Laborator “Roboţi Industriali”
3
Figura 3. Schema de alimentare şi acţionare a braţului manipulator OWI-007
Aici putem observa conectarea celor două surse la un nod comun, cele cinci
întrerupătoare ce acţionează motoarele într-un sens sau în celălalt, motoarele care au câte o
rezistenţă Ri în circuit. Pentru a întelege mai bine schema electrică se va analiza modul de
alimentare a unui singur motor (vezi figura 4).
Figura 4. Schema de alimentare a unui motor
Motorul este conectat iniţial la un nod comun al celor două surse şi la un întrerupător
care este acţionat de telecomandă sau din program. Astfel dacă se închide circuitul în punctul
A, atunci motorul se va roti în sens invers trigonometric (figura 5.a), iar dacă întrerupătorul se
închide pe B motorul se va roti în sens trigonometric (figura 5.b).
Laborator “Roboţi Industriali”
4
Figura 5.a Figura 5.b
Pentru comanda braţului manipulator OWI-007, vom folosi interfaţa acestuia, “PC
Interface For Robotic Arm Trainer-OWI-007”, care este conectată printr-un port paralel cu
portul calculatorului, acest port conţinând nişte circuite de reţinere pentru scurt timp a
informaţiei (comandă) primite de la calculator. Uzual, legătura în vederea comunicării pe
portul paralel al unui calculator cu o imprimantă, în cazul nostru cu robotul OWI-007, se
prezintă ca în figura 6.
Figura 6. Conexiunea portului paralel
Se poate observa cum calculatorul trimite datele pe 8 linii de date şi apoi, setând linia
STROBE pe nivel coborât, va cauza acceptarea caracterului ASCII trimis şi tipărirea sa la
imprimantă, în cazul nostru recunoaşterea acestuia de OWI-007, acesta la rândul lui setând
linia ACKNOWLEDGE pe nivel coborât dacă a acceptat caracterul. În cazul în care nu este
gata să primească un nou caracter va seta linia BUSY pe nivel ”1L”.
Interfaţa paralelă pentru robot utilizează aceleaşi linii de semnale cu diferenţa că dintre
cele 8 linii de date va utiliza doar primele 4 setându-le în ”0L” sau ”1L” funcţie de operaţiile
de realizat: rotire stânga, rotire dreapta a motoarelor. Circuitele generatoare de impulsuri sunt
activate de frontul descrescător al semnalului STROBE. Cel mai important rol îl are
Laborator “Roboţi Industriali”
5
generatorul 1 care furnizează semnalul ENTER (”1L”) suficient timp pentru ca robotul să
poată accepta comanda.
Calculatorul în standard IBM, are definite ca adrese de bază ale porturilor, adresele
0x378 sau 0x278, în general prima adresă fiind cea utilizată ca adresa de bază a portului
paralel la care se conectează imprimanta. Cu convenvenţiile ”-semnal” pentru semnal activ pe
nivel coborât, ”’+semnal” pentru semnal activ pe nivel ”1L” , ”” pentru semnal ce este
trimis de către calculator şi ”” pentru semnal primit de către calculator. Structura pinilor la
un conector cu 25 de pini este:
IN
AUT
DB25 PINI DENUMIRE
SEMNAL
FUNCŢIE
1 -STROBE Setare ”0L” > 0.5 μs pentru trimitere
2-9 DATE D0-D7 Trimitere date
10 -ACK (S6) Setare pe ”0L” 0,5 μs după acceptare
11 +BUSY (S7) ”1L” pentru ocupat
12 +PaperEnd (S5) ”1L” pentru terminare hârtie imprimantă
13 +Select In (S4) ”1L” pentru imprimanta selectată
14 AutoFd (C1) ”0L” pentru autotractare hârtie
15 -Error (S3) ”0L” pentru eroare
16 -Init (C2) ”0L” pentru iniţializare
17 -Select (C3) ”0L” pentru a selecta imprimanta
= 18-25 Masa
Citirea / scrierea acestor date se realizează prin intermediul regiştrilor:
FUNCŢIUNI CITIRE – R
/ SCRIERE - W
ADRESA DE
INTRARE-IEŞIRE
BIŢI
Ieşire date W Baza + 0 D0-D7
Stare IN R Baza + 1 S3-S7
Control OUT W Baza + 2 C0-C5
Calculatorul poate avea pâna la trei porturi paralele fiind notate cu LPT1, LPT2, LPT3.
Pot fi folosite oricare dintre aceste porturi standard atât timp cât ele utilizează adresele uzuale
Laborator “Roboţi Industriali”
6
de bază, care sunt (în hexa) 378, 278 şi respectiv 3BC. Numele şi adresele sunt configurate din
BIOS-ul calculatorului.
Trimiterea comenzilor pe portul paralel
Un exemplu de program în C pentru trimiterea comenzilor către robotul mobil pe
portul paralel la adresa 0x378 este prezentat în cele ce urmează:
#include <stdio.h>
#include <dos.h>
#include <conio.h>
void main (void)
{
Unsigned char byte; byte = 0x01;
Clrscr(); printf(“apăsati orice tastă pentru oprire \n”);
Do {
/*Comanda aprindere LED*/
Outportb(0x378,byte);
Outportb(0x37A,0x01);
Outportb(0x37A,0x00);
Delay(500);
/*Comanda semnal sonor */
Outportb(0x378,byte+1);
Outportb(0x37A,0x01);
Outportb(0x37A,0x00);
Delay(500);
/*Comanda motor dreapta (rotire spre stânga)*/
Outportb(0x378,byte+3);
Outportb(0x37A,0x01);
Outportb(0x37A,0x00);
Delay(500);
/*Comanda motor stânga (rotire spre dreapta)*/
Outportb(0x378,byte+7);
Laborator “Roboţi Industriali”
7
Outportb(0x37A,0x01);
Outportb(0x37A,0x00);
Delay(500);
} while (!kbhit());
}
Calculatoarele care au instalat MATLAB-ul permit lucrul cu portul paralel al
calculatorului, identificat cu notatia LPT1, cu adresa de bază (în hexa) 378. Pentru a crea un
obiect DIO (digital input/output) pentru acest port se foloseşte instrucţiunea:
» parport = digitalio('parallel','LPT1');
Portul paralel poate fi blocat de MATLAB. De aceea alte aplicaţii ori alte programe din
Matlab pot sau nu pot accesa acelaşi port paralel, care poate duce la un conflict.
Atunci când i se atribuie un vector unui obiect DIO (Digital/Input Output), vectorul
face legătura cu portul I/O, si atunci trebuie configurat atât pentru intrare cât şi pentru ieşire.
Se citesc valori de la o linie de intrare şi se trimit valori pe o linie de ieşire. Dacă o linie dintr-
o configuraţie hardware dată este adresabilă pentru intrare sau ieşire aceasta depinde de portul
cu care este pus în corespondenţă.
După capacitatea de a adresa liniile individual porturile digitale I/O pot fi grupate în:
-dipozitive configurabile la nivel de port - nu puteţi adresa individual liniile asociate cu
un dispozitiv configurabil la nivel de port. De aceea trebuie configurate toate liniile fie pentru
intrare fie pentru ieşire. Dacă se încearcă să se amestece cele două configuraţii se returnează o
eroare.
Unui obiect, variabile DIO, i se poate atribui un număr de linii. Dacă de exemplu o
linie este atribuită unui obiect DIO atunci automat obţinem toate liniile.
De aceea dacă un obiect DIO conţine linii ale unui dispozitiv configurabil la nivel de
port şi se trimite o valoare pe una sau mai multe din aceste linii atunci toate liniile sunt scrise
chiar dacă nu sunt conţinute de dispozitiv.
-dispozitive configurabile la nivel de linie - puteţi adresa individual liniile asociate cu
un dispozitiv configurabil la nivel de linie. De aceea puteţi configura individual linii, fie
pentru intrare fie pentru ieşire. Suplimentar putem citi şi trimite valori linie cu linie.
Portul paralel are 8 linii de date, 4 linii de control, 5 linii de monitorizare şi 8 linii de
masă. La utilizarea normală liniile sunt controlate de software-ul computerului gazdă şi de
Laborator “Roboţi Industriali”
8
dispozitivul periferic respectând un protocol cum ar fi IEEE Standard 1284-1994. Protocolul
defineşte procedurile pentru transferul de date cum ar fi stabilirea contactului, returnarea
informaţiilor de monitorizare etc. Oricum toolbox-ul utilizează portul paralel ca un dispozitiv
I/O digital primar, şi nu este nevoie de un protocol. De aceea putem folosi portul pentru a
introduce valori digitale la intrare şi ieşire similar cu un subsistem DIO tipic. Pentru a accesa
liniile de port paralel fizice majoritatea PC-urilor au un conector "mama" de 25 pini care este
prezentat mai jos:
Figura 7. Pinii portului paralel
-8 pini de ieşire- Port de DATE
-5 pini de intrare ( unu l inversat) Port de STARE
-4 pini de ieşire (trei inversaţi) Port de CONTROL
-8 pini de masă
Liniile folosesc nivelurile logice TTL. O linie este HIGH (adevărată sau declarată)
atunci când avem un nivel TTL HIGH, iar dacă o linie este în 0L, atunci când avem un nivel
TTL LOW. Excepţiile sunt pinii 1, 11, 14, 17 care sunt inversaţi hardware.
ID-urile porturilor şi numerele de pini associate sunt date în tabelul de mai jos:
ID-portului Numerele pinilor Descriere ^
0 2-9 Opt linii I/O, pinul 9 fiind MSB (Most Significant Bit)
D0-D7
1 10-13,15 Cinci linii de intrare de
stare S3-S7
2 1, 14, 16, 17 Patru linii I/O de
control C0-C3
Laborator “Roboţi Industriali”
9
În anumite cazuri liniile portului 0 pot fi unidirecţionale şi pot avea doar date de ieşire.
Dacă este posibil din punct de vedere al hardware-ului se pot configura aceste linii atât pentru
ieşire cât şi pentru intrare cu ajutorul BlOS-ului PC-ului selectând un mod bidirecţional cum ar
fi EPP(Enhanced Parallel Port) sau ECP(Extended Capabilities Port).
Se pot obţine caracteristicile liniei şi portului cu funcţia daqwinfo din programul
MATLAB.
Caracteristicile portului paralel pentru obiectul DIO sunt prezentate mai jos:
>> parport=digitalio('parallel’,’LPTl');
»hwinfo = daqhwinfo(parport);
»hwinfo.Port(l)
ans =
ID: 0
LineIDs: [0 1 2 3 4 5 6 7 ]
Direction: ’in/out’
Config: 'port'
»hwinfo.Port(2)
ans =
ID: 1
LineIDs: [0 1 234 ]
Direction: 'in'
Config: 'port'
»hwinfo.Port(3)
ans =
ID: 2
LineIDs: [0 1 2 3]
Direction: 'in/out'
Config: 'port'
Laborator “Roboţi Industriali”
10
Aceste informaţii ne spun că toate cele 17 linii sunt configurabile la nivel de port şi
putem introduce valori de intrare şi ieşire utilizând cele 12 linii asociate cu porturile 0 şi 2 şi
putem introduce doar valoarea de intrare de la cele 5 linii asociate portului 1. Pentru o adresare
mai uşoară proprietatea Line Name este automat populată cu un nume care include numărul de
pin al portului.
Descrierea software
Etapele de realizare a programului şi implicit de transmitere a unor valori digitale '0'
sau ' 1' la ieşirile digitale constau în paşii:
1. construcţia în mediul Matlab a obiectului utilizat pentru transmiterea datelor pe
canale digitale. Se crează obiectul pentru transmiterea datelor pe canale digitale I/O (DIO) cu
funţia digitalio.
>>DIO= digitalio('adaptor',ID);
»DIO= digitalio('parallel',’LPT1’);
2. Obiectului creat i se atribuie numărul de linii digitale de ieşire:
>> lines = addline(obj,hwline,port,'direction')
» Lines0 = addline(dio,0:7,0,'Out'); -pentru portul 0
» Lines2 = addline(dio,0,2, 'Out'); -pentru portul 2
hwline 0:7-obiectului creat i se atribuie toţi cei 8 linii ai portului 0, de la 0 la 7
hwline 2 -obiectului creat i se atribuie numai linia 2
3.Se creează vectorul val_digit cu valorile '0' sau ' 1 'care trebuie transmise pe canale
digitale şi se utilizează funţia putvalue() pentru transmiterea acestora:
>> val_digit = [1 0 0 1 0000 ] ;
Putvalue(obj. Line(index), data)
» putvalue(lines0,val_digit) - pentru portul 0
>> putvalue(lines2,l) - pentru portul 2, pentru bitul de STROBE front
> >putvalue(lines2,0) descrescător
4.Atunci când obiectul DIO nu mai este necesar a fi utilizat, se procedează la
eliminarea acestuia din memoria şi spaţiul Matlab-ului, prin apelarea instrucţiunilor:
»delete(DIO)
Laborator “Roboţi Industriali”
11
»clear(DIO)
Fiecărui motor i se asociază câte un cod binar pentru a fi comandat individual. Astfel
codurile pentru motoare, pentru fiecare sens rotire stânga sau dreapta, deschide sau închide
sunt prezente în urmatorul tabel:
Motor Comandă Codul binar
M1 (gripper) Deschide 0 1 1 1 0 0 0 0
M1 (gripper) Închide 0 0 0 1 0 0 0 0
M2 (wrist - încheietură) Rotire Trigonometrică 0 0 1 0 0 0 0 0
M2 (wrist - încheietură) Rotire Invers Trigonometrică 0 0 0 0 0 0 0 1
M3 (elbow - cot) Coborâre 1 0 0 0 0 0 0 0
M3 (elbow - cot) Urcare 0 1 1 0 1 0 0 0
M4 (Shoulder – umăr) Coborâre 0 1 1 0 0 0 1 0
M4 (Shoulder – umăr) Urcare 1 1 0 0 0 0 0 0
M5 (base - bază) Rotire Trigonometrică 0 1 0 0 0 0 0 0
M5 (base - bază) Rotire Invers Trigonometrică 0 1 1 0 0 1 0 0
Condiţia de oprire a motoarelor este dată de codul binar 1 1 1 0 0 0 0 0.
Modul de lucru
Să de realizeze un program în mediul MATLAB pentru comanda braţului manipulator
OWI-007, în vederea colectării unei piese dintr-un punct A, şi deplasarea acesteia într-un
punct B în spaţiul de lucru.
Comanda robotului se face secvenţial. Combinaţia de valori ale unghiurilor
articulaţiilor conduce la configuraţii spaţiale ale braţului manipulator. Aceste stări
corespunzătoare configuraţiilor spaţiale sunt prezentate în imaginile următoare:
Laborator “Roboţi Industriali”
12
Starea 0
În starea 0 se porneşte programul, robotul
aşteaptă apăsarea unei taste pentru a incepe
mişcarea motoarelor.
Starea 1
Se dă comanda:
putvalue(lines0,[0 1 0 0 0 0 0 0]);
putvalue(lines2,1);
putvalue(lines 2,0);
pause(3.5)
Motorul M5 al robotului, adică motorul bazei,
se va mişca în sens trigonometric timp de 3,5
secunde.
Starea 2
Se transmite comanda:
putvalue(lines0,[0 1 1 0 0 0 1 0]);
putvalue(lines2,1);
putvalue(lines 2,0);
pause(15)”.
Motorul M4 coboară braţul timp de 15
secunde.
După efectuarea ultimei acţiuni se dă comanda de oprire a robotului adică:
“putvalue(lines0,[1 1 1 0 0 0 0 0]);” şi se opreşte programul braţul revenind astfel în repaus.
Folosind o buclă „for” se poate realiza un program continuu, ciclic.
Laborator “Roboţi Industriali”
13
Un exemplu de succesiune a poziţiilor braţului manipulator:
Starea 0 Starea 1 Starea 2
Starea 3 Starea 4 Starea 5
Starea 6 Starea 7 Starea 8