aplicaţie pe braţul manipulator owi-007iota.ee.tuiasi.ro/~mpobor/doc/cursuri/ria7.pdf · cele 8...

14
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.

Upload: others

Post on 24-Feb-2020

2 views

Category:

Documents


0 download

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

Laborator “Roboţi Industriali”

14

Starea 9 Starea 10 Starea 11

Starea 12 Starea 13 Starea 14

Starea 15 Starea 16 Starea 17