Licență Bobeica Marius 2 [303325]
CONTROLUL BRAȚULUI ROBOTIC
PROIECT DE DIPLOMĂ
Autor: Marius BOBEICA
Conducător științific: Prof.dr.ing. Clement FEȘTILĂ
Autor : Marius BOBEICA
Controlul brațului robotic
Enunțul temei: [anonimizat]-[anonimizat].
Conținutul proiectului: [anonimizat], [anonimizat], Introducere, [anonimizat], proiectare, implementare, Concluzii, Bibliografie.
Locul documentației : [anonimizat]: dr.ing. Eva Dulf
Data emiterii temei:
Data predării:
Semnătura autorului
Semnătura conducătorului științific
Declarație pe proprie răspundere privind
autenticitatea proiectului de diplomă
Subsemnatul(a) [anonimizat](ă) cu CI/BI seria nr. , CNP ,
autorul lucrării:
CONTROLUL BRAȚULUI ROBOTIC
elaborată în vederea susținerii examenului de finalizare a [anonimizat] ,
[anonimizat],
sesiunea A anului universitar 2016-2017,
[anonimizat], [anonimizat], și în bibliografie.
Declar, [anonimizat] a convențiilor internaționale privind drepturile de autor.
Declar, [anonimizat] a mai fost prezentată în fața unei alte comisii de examen de licență.
In cazul constatării ulterioare a [anonimizat], respectiv, anularea examenului de licență.
Data Prenume NUME
(semnătura)
SINTEZA
proiectului de diplomă cu titlul:
Controlul brațului robotic
Autor: Marius BOBEICA
Conducător științific: Prof.dr.ing. Clement FESTILA
1. Cerințele temei: Cerința temei este controlul unui braț robotic prin două metode de control.
2. Soluții alese: Prima metodă de control a brațului robotic aleasă a fost cea analogică iar cea de a doua metodă este cea digitală.
3. Rezultate obținute: Am reușit controlul brațului robotic prin cele două metode iar acestea au fost dezvoltate și personalizate.
4. Testări și verificări: S-au făcut testări iar rezultatele obținute confirmă că metodele de control funcționează conform cerințelor.
5. Contribuții personale: [anonimizat], [anonimizat].
6. Surse de documentare: Internet, [anonimizat], Cursuri
Semnătura autorului
Semnătura conducătorului științific
Introducere
Context general
Unul dintre cele mai importante roluri pe care le au roboții este acela de a simplifica munca umană sau altfel spus de a ajuta oamenii să execute unele munci mai dificile.
Un robot avansat este un sistem care îmbină cele mai de vârf descoperiri ale mai multor domenii precum: automatica, mecatronica, infromatica și sistemele de acționare
Obiective
În acestă lucrare de licență voi încerca realizarea controlului unui braț robotic. Brațul robotic pe care voi încerca metode de control se numește KSR10 și este produs de compania belgiană de electronice Velleman.
Pentru a controla brațul robotic m-am gândit la două metode de control. Prima este o metodă analitică cu ajutorul unui regulator tripozițional. Cea de a doua metodă este una digitală unde voi folosi un microcontroller Arduino Uno și o cameră web.
Specificații
Structura proiectului:
Capitolul 1. Introducerea
În acest capitol este prezentată o scurtă descriere în domeniul roboticii, care este scopul roboților în viața noastră și o structurare a proiectului de licență pentru a familiariza cititorul cu lucrarea.
Capitolul 2. Studiu bibliografic
În capitolul 2 se găsește un studiu referitor la originile roboților, tipuri de roboți, calsificarea acestora din punct de vedere constructiv și de funcționalitate dar și o prezentare mai detaliată a robotului industrial. Brațul robotic pe care s-a realizat această lucrare de licentă este asemănător unui robot industrial.
Capitolul 3. Analiză, proiectare și implementare
În acest capitol sunt prezentate modelele de control a brațului robotic. Sunt descrise materialele și procedurile folosite. Aici sunt prezentate cele două metode, una analogică iar cealaltă digitală, cu care este controlat robotul.
Tot în acest capitol sunt descrise și aplicațiile software folosite dar și partea hardware a proiectului cum ar fi microcontrollerul și motoarele de curent continuu ale robotului.
Capitolul 4. Concluzii
În capitolul concluzii este prezentată o idee generală asupra la ce s-a realizat, asupra rezultatelor obținute și prezintă ce alte direcții de dezvoltare sunt posibile în continuare pentru această lucrare.
Studiu bibliographic
Roboți
Cuvântul „robot” provine din cehă (robota) si a fost folosit de către Karel Čapek și fratele său Josef Čapek în piesele lor de teatru science-fiction, mai precis în piesa R.U.R (Robotul Universal al lui Rossum) din anul 1921. Robot însemna pentru Karel un muncitor umanoid care trebuie să înlocuiască munca umană.
Ceva mai târziu este folosit termenul de „robotică” de către scriitorul de literatură american Isaac Asimov, in povestea sa science-fiction „Runaround”. Aici Isaac definește cele trei legi ale roboticii.
Cele trei principii enunțate de Asimov sunt:
„Un robot nu poate să rănească o ființă umană, sau prin inacțiunea sa, să permită ca unei ființe omenești să i se facă un rău”
„Un robot trebuie să respecte comenzile date de către o ființă umană atâta timp cât acestea nu contrazic prima lege”
„Un robot trebuie să se protezeje, atâta timp cât acest lucru nu intră în contradicție cu primele două legi”
Putem spune că un robot este o mașinărie proiectată să efectueze automat una sau mai multe sarcini cu o viteză și o precizie superioară omului.
Tipuri de roboți
În present sunt mai multe tipuri de roboți, fiecare dezvoltat în funcție de necesitatea lui, cum ar fi:
Robot umanoid
Robot industrial
Robot medical
Robot militar
Robotul umanoid
Modelul pentru robotul umanoid a apărut pentru prima dată în viziunea lui Isaac Asimov. Însă în aceea perioadă a fost aproape imposibil de realizat deoarece erau multe probleme ce țin de tehnică și încă nu se deținea răspunsul la ele.
La mijlocul anilor 1980 cei de la Honda încep să lucreze la un model revoluționar de robot umanoid și anume la ASIMO. Aceștia au reușit să rezolve multe dintre problemele tehnice ce stăteam împotriva dezvoltării de roboți umanoizi și nu numai.
Japonezii de la Honda au avut în plan să creeze un robot mobil, adica un robot cu două picioare, capabil sa mearga, să urce și să coboare pe orice tip de teren pe care se deplasează omul. În anul 1986, a apărut primul robot biped funcțional din lume, E0, strămoșul lui Asimo.
După multe cercetări asupra locomoției, au apărut următoarele prototipuri de roboți. Între anii 1987 și 1991 a fost înregistrat succes cu modelele E1, E2 și E3 urmând ca între anii 1991 și 1993 să se prefecționeze prin modelele E4, E5 și E6. Cu toate ca E6 a fost un robot rapid și care avea un mers natural, asemănător cu cel uman, celor două picioare tot le lipsea un corp și o minte care să le controleze. Astfel, în următorul ciclu au aparut roboții P1, P2 și P3, produși între anii 1993 și 1997. Aceștia din urmă au corectat micile neajunsuri, devenind primii roboți umanoizi din lume.
În anul 2000 a fost prezentat pentru prima dată publicului larg ASIMO (Advanced Step in Innovative Mobility) iar de atunci dezvoltarea și perfectionarea roboților umanoizi s-a desfășurat într-un ritm alert. Toată lumea fiind impresionată de caracteristicile robotului.
Ultima versiune a robotului merge și aleargă cu o naturalețe uimitoare, urcă scările, sare într-un picior și chiar dansează. În plus este foarte sociabil, poate să salute, să rețină numele persoanei cu care vorbește și să o recunoască ulterior.
Figura 2.1. Robotul umanoid ASIMO
Robotul industrial
Roboții industriali trebuie să corespundă necesitătilor mediului industrial, astfel ei sunt caracterizați prin: flexibilitate (pentru a putea fi supuși diferitelor serii de fabricație), fiabilitate, productivitate, cost cât mai mic. Roboții industriali sunt folosiți în acele munci industriale unde importante sunt repetabilitatea, cadența foarte mare sau în mediile nocive.
Principalele aplicații în care utilizarea roboților industriali are avantaje sunt: încărcarea și descărcarea mașinilor unelte, sudură prin puncte sau pe contur, operații de asamblare, vopsire, turnarea în forme a pieselor mari, controlul calității.
După cum spune dr. ing. Cezar Dumitru Popa în lucrarea „Roboți industriali” robotul industrial este definit în prezent ca și un manipulator tridimensional, multifuncțional, reprogramabil care este capabil să deplaseze materiale după traiectorii programate, în scopul efectuării unor operații diversificate de fabricație.
Principalele caracteristici ale roboților industriali se pot enumera pe mai multe categorii:
Geometrie
Spațiu de lucru
Configurația articulațiilor
Numărul de grade de libertate
Încărcătură
Capacitatea de ridicare și manipulare
Cinematică
Viteza și accelerația
Viteza pe traiectorie
Timpul de mișcare
Precizia
Repetabilitatea
Precizia de poziționare
Controller
Hardware
Software
Interfață
Programare
Figura 2.2 Roboți industriali
Robotul medical
Introducerea roboților în domeniul medicinii a fost un real ajutor și un mare pas în dezvoltarea acestui domeniu. Primii roboți folosiți în medicină au fost experimentați prin anii 1980, în domeniul urologiei, unde aceștia erau folosiți pentru realizarea operațiilor de prostată. După anii 1980, cei de la NASA au fost conștienți de acest potențial ridicat, anume al roboților folosiți în medicină, și au cercetat și dezvoltat roboți care să efectueze operații și tratamente de la distanță. Astfel medicul nu este nevoit să se deplaseze în zonele izolate sau unde timpul în care acesta ajunge acolo este crucial pentru pacient. Un alt avantaj pentru folosirea de la distanță a roboților este în cazul asistenței medicale pe câmpul de luptă.
Un mare dezavantaj al roboților medicali este costul ridicat. Prețul unui astfel de robot poate ajunge la un milion de dolari iar costurile de întreținere la 100.000 de dolari pe an.
Există mai multe tipuri de roboți medicali fiecare specializat pe o anumită latură a medicinii, cum ar fi:
Roboți chirurgicali, care sunt folosiți pentru ajutoare medicale, terapie cu radiații, ghidare și poziționare sau tele-roboții, care sunt controlați de om și oferă o precizie mult mai ridicată și un risc redus de apariție a complicațiilor.
Figura 2.3 Da Vinci robot chirurgical
Nanoroboți, roboți de dimensiuni foarte reduse capabili să calătorească prin interiorul organismului uman. Aceștia sunt roboți microscopici folosiți pentru a curăța vasele de sânge și pentru a întări sistemul imunitar.
Tot odată roboți detectează cauza problemei și se deplasează spre locul cel mai apropiat pentru a insera o doză de medicament exact în zona afectată.
Nanomedicina folosește acești roboți și îi introduc în organismul uman pentru a repara sau a detecta problemele și infecțiile.
Mărimea unui astfel de robot este între 0.5 și 3 micrometri, deoarece aceasta este mărimea maximă admisă pentru ca robotul să poată traversa prin capilarele foarte mici.
Când un nanorobot și-a îndeplinit scopul în interiorul organismului uman acesta poate părăsi corpul uman, exectându-se prin canalele sistemului excretor.
Figura 2.4 Nanorobot care curăță vasele de sânge
Robotul militar
Armata a avut mereu parte de cea mai avansată tehnologie, acest lucru este valabil și în cazul roboților militari.
Cei mai avansați roboți din lume sunt construiți cu scopuri în aplicații militare. Ei au fost dezvoltați foarte mult pentru a prelua sarciniile din mediul periculos de muncă al soldațiilor și pentru a reduce, în acest mod, pierderea de vieți omenești. Ei sunt autonomi și sunt conduși să meargă în locurile periculoase precum câmpurile minate, în zonele de conflict, sau în taberele inamice. În acest mod dacă ceva nu merge conform planului nu este riscată atât de mult viața soldaților ci se pierd doar banii investiți în acel robot.
Figura 2.5 Robot militar
Fie ei roboți industriali care deplasează, sudează, vopsesc și ridică, astfel înlocuind munca fizică a zeci de muncitori și lucrând în medii periculoase pentru om, roboți medicali care lucrează cu o precizie și o finețe superiară, roboți militari care sunt folosiți în acțiuni periculoase de salavare sau de atac sau roboți de cercetare a spațiului extraterestru, acolo unde nu este posibilă cercetarea umană. Aceștia sunt tot mai prezenți în viața noastră și nu mai reprezintă doar o viziune science fiction, ci o realitate tot mai răspândită.
Robotul industrial
Robotul industrial a fost conceput ca mecanisme care să preia o parte semnificativă din efortul fizic uman sau să îndeplinească o varietate de sarcini. Sunt folosiți pentru a îndeplinii sarcini repetitive, în medii cu siguranță scăzută sau neplăcute.
Aceste automate de mișcare complexă, numiți în mod obișnuit roboți industriali, au apărut la fuziunea dintre automatică și acționări electrice. Deși sunt numeroși roboți cu acționare pneumatică și hidraulică, totuși cea mai bună perspectivă a implementării roboților este cea electromecanică, din cauza avantajlor programării infromatice, care aduce un nivel ridicat de flexibilitate și integrabilitate.
Un robot este de regulă un mecanism care prin succesiunea mai multor articulații în lanțul cinematic, sunt obținute mai multe grade de libertate la efectuorul final, căruia îi este atribuită o anumită sarcină.
Astfel cerințele de lucru specifice implementării automatizării unui robot sunt:
Executarea unei sarcini repetitiv și cu o mișcare complexă, în general în liniile de fabricație în serie mare
Acolo unde condițiile de lucru sunt grele pentru om, toxicitate mare, temperatară extremă sau radiație electromagnetică, de exemplu in turnătoriile de oțel, vopsitorie, furnale
Alegerea linilor de producție automatizate într-o fabrică se face raportând costul necesar pentru forța de muncă dacă se folosesc muncitori la costurile ce sunt implicate în cazul în care se dorește folosirea roboților. Pentru o linie de asamblare in masă este de preferat sistemul robotizat spre deosebire de linia de asamblare a unui produs unicat sau care se produce în unități mici și necesită îndemânarea și atenta supraveghere umană, spre exemplu producția de mașini de lux.
Din perspectiva inginerească/managerială, în implementare roboților industriali, este foarte mult pus accentul asupra termenului de sistem flexibil de producție sau SFP. Când un robot este flexibil pentru sistemele de producție atunci el se poate adapta mult mai ușor la schimbările ce apar în proces, la trasee, viteze, gabarite, stări. Astfel trăsăturile esențiale pentru un sistem flexibil de producție sunt: eficiența, controlabilitatea și siguranța.
Multe alte cerințe inginerești pot aparea în implementarea unui robot industrial, precum: gabaritul și masa proprie a robotului, batiul (fix sau mobil), precizia de lucru, viteza de lucru, consumul de energie, timpul de acționare la un ciclu, numărul de cicluri fără oprire pentru revizie/mentenanță, capabilitățile de programare și anume sistemul de control și eventual integrabilitatea în echipe de roboți și nu în ultimul rând rezistența la condițiile de lucru. La rândul lor fiecare dintre aceste caracteristici dezvoltă o serie de probleme, spre exemplu pentru precizia de lucru a unei mișcări care se repeta de mii sau sute de mii de ori depinde de o multitudine de condiții tehnice: sensibilitatea structurală la dificultăților din mediul de operare(temperatura, impurități, vibrații etc), stabilitatea elementelor (traductori, conductori, codificatoare, decodificatoare, senzori, actuatoare etc), fiabilitatea cinematică a articulațiilor (toleranțe de asamblare). Un bun exemplu fi ca pentru a obține o acuratețe coborând la sutimi de milimentru liniar sau la o zecime de grad rotațional, encoderele digitale vor avea nevoie de o rezoluție de 16 biți.
Un obiectiv al roboticii este de a construi roboți autonomi, ei trebuie să ia singuri decizii în funcție de informațiile primite și să execute comenzi fără alte intervenții umane.
Dezvoltarea masivă a roboților industriali a dus la apariția a diferite forme si funționalități a acestora. În principal roboții se clasifică în roboți seriali sau paraleli. Totuși clasificările acestora pot varia după mai multe criterii:
După structura mecanică:
Principiul și structura cinematică a acestor tipuri de roboți se poate vedea in Figura 2.6
Figure 2.6 Structura cinematică a roboților
Robot de tip cartezian sau roboții liniari
Sunt acei roboți care pot efectua 3 mișcări de translație folosind spațiul
tridimensional X, Y, Z. În schimb nu pot efectua mișcări de rotație. Unghiul între fiecare dintre cele 3 axe este de 90 de grade și astfel de mișcări corespund mutării încheieturii sus-jos, față-spate și înăuntru-afară.
Avantajul lor este că pot fi programați mai ușor decât celelalte tipuri de roboți din acest motiv sunt cei mai folosiți în aplicațiile de control numeric, la mașinile CNC sau la imprimante 3D. În figura 2.7 este reprezentat atât principiul de funcționare al robotului liniar cât și o fotografie cu acesta.
Figure 2.7 Roboți cartezieni
Robotul de tip SCARA
Acronimul SCARA provine de la Selective Compliance Assembly Robot Arm sau Selective Compliance Articulated Robot Arm, sunt folosiți ambii termeni. Robotul de tip SCARA are două articulați pe axe paralele, lucru care îi oferă posibilitatea de operare într-un anumit punct din plan, de exemplu pentru inserarea unui pin într-o gaură.
Roboții industriali au fost folosiți până în prezent pentru producția în masă dar precum tehnologia avansează foarte rapid în domeniul electronicii și electrotehnicii iar piesele se schimbă mult mai repde, este nevoie de o precizie foarte ridicată și de un robot ușor de implementat și adaptat noilor producții, aici roboții de tip SCARA oferă un avantaj major față de roboții liniari.
Există roboți de tip SCARA cu două brațe, care oferă o rapiditate mai mare și de asemnea și o funcționalitate mai variată, putânduse folosi mai multe tipuri de scule în același timp.
În figura 2.8 este prezentat un robot de tip SCARA cu un singur braț, lucrând într-o linie de asamblare.
Figura 2.8 Robot de tip SCARA
Robotul articulat
Este robotul care poate să își poziționeze unealta în orice poziție având 3 axe de translație și 3 axe de rotație. El poate avea una sau mai multe articulații în funcție de cerința ce trebuie să o îndeplinească. Acest tip de robot este folosit în special în linile de producție, unde ei își folosesc flexibilitatea pentru a ajunge în mai multe direcții, acest lucru se poate observa in figura 2.9, unde este prezentat un robot cu 3 articulații și o baza fixă.
Pentru aplicațiile mai avansate sunt folosiți roboți cu mai multe brațe, astfel se obține un control mai bun și se pot realiza mai multe sarcini în același timp. Articulațiile pot fi programate astfel încât acestea să interacționeze una cu cealaltă, permițând robotului să obțină un grad și mai ridicat de control iar pe acest lucru este pus accentul în dezvoltarea viitorilor roboți deoarece permit un nivel mai înalt de funcționalitate.
Robotul articulat poate avea chiar și așa zise picioare, care să îi permită să se deplaseze, defapt el este o consolă mobilă cu brațe care se deplasează pe roți sau pe senile.
Figura 2.9 Robot articulat
Pentru a realiza acest tip de robot, fiecare braț al său este acționat cu motoare electrice, toate fiind coordonate astfel încât mișcarea efectuorului final să fie cea dorită. Fiecare coordonare a brațelor se realizează cu ajutorul unui controller, un sistem hardware și software. Avantajul major al acestui sistem este faptul că se poate modifica rapid și astfel nu apar întârzierile în producție.
Robotul paralel
Este un sistem mecanic cu lanț cinematic închis care suportă o platformă, sau element final. Cel mai cunoscut tip de robot paralel este cu 6 actuatoare liniare care conduc la actionarea platformei. Unul dintre avantajele acestui robot este că eroarea nu se propagă de la un actuator la altul ca și în cazul roboților seriali, deoarece fiecare actuator se mișcă conform gradului său de libertate si se raportează la bază nu la un alt braț.
Sunt foarte populare pentru viteza și acuratețea foarte mare, într-un spațiu limitat, pe care o au și mai sunt supranumiți și sisteme în buclă închisă.
Cele mai importante aplicații pe care le au roboții paraleli sunt:
Simulatoare de zbor (figura 2.10)
Simulatoare de automobile
Alinierea fibrei fotonice sau optice
Figura 2.10 Simulator de zbor(robot paralel)
Roboți se clasifică după mai multe criterii, clasificarea după o parte dintre aceste criterii este:
Dupa informația de comandă:
Manipulator manual
Un mecanism articulat, acționat direct de către om. Este folosit în general pentru ridicarea și transportarea obiectelor grele.
Robot secvențial
Acest tip de robot lucrează după o procedură predeterminată de instrucțiuni seriale.
Robot repetitor
Robotul repetitor memorează procedura de lucru, pe care trebuie să o urmeze, înregistrand secvențele primite de la manipularea sa de către om.
Robot cu control numeric
Pentru acest tip de comandă, robotul primește comenzile de lucru de la o unitate de control, care îi transmite informații referitoare la poziție, deplasare și succesiuni de manevre, însă fără citirea informațiilor din spațiul de lucru, de aceea este nevoie de o programare atentă pentru a nu avea loc coliziuni
Robot inteligent
Acest tip de robot este superior celorlanți din punct de vedere al informației de comandă. El primește obiective și le îndeplinește după un algoritm implementat primind informații din spațiul său de lucru, informațiile venind de la senzori.
După nivelul inteligenței artificiale(AI):
Prima generație, unde programul software al robotului nu se poate schimba în timpul lucrului și doar de către programator
A doua generație robotul avansează iar codul acestuia se poate modifica în mică măsură pe baza unor reacții cu mediul de lucru
În a treia generație a inteligenței artificiale a roboților aceștia își pot adapta sinuri programul de lucru pe baza unor algoritmi logici interne, ce iau în calcul condițiile concrete ale mediului de lucru.Logica lor de operare poate implica aloritmi vizuali precum: „2D image recognition” (recunoașterea formelor) sau „3D mapping” (cartografierea mediului).
Matlab
Matlab este un mediu de lucru interactiv unde utilizatorul poate să execute operații matematice foarte complexe cu doar câteva comenzi. Este dezvoltat la început de către Cleve Muller, șeful departamentului de informatică de la Universitatea din New Mexico, în anii 1970. Programul conceput initial a fost gândit în limbajul Fortran iar peste timp mulți și-au dat seama despre potențialul său și a evoluat în mod continuu. Ultima versiune a programului folosește limbajul C.
Matlab este un mediu de dezvoltare specific pentru calcul numeric și analiză Matlab permite plotarea funcțiilor, implementarea de algoritmi, procesarea de imagini, manipularea matricilor și poate să interacționeze cu programe scrise in alte limbaje, cum ar fi: C.C++,C#, Java. Pyton.
Matlab oferă sprijinul a multor funcții și librării ceea ce elimină programarea cerințelor de rutină și astfel ușurează munca utilizatorului. Rezultatatele calculelor pot fi vizualizate atât numeric cât si în formă 2D sau chiar grafice 3D.
Figura 2.11. Funcția sinus
Modul de programare în Matlab se realizează prin fișiere script numite script „m”. Un script se poate apela prin numele său dar și prin apelul din alt fișier script. Iar prin acest fel o serie de fișiere sunt apelate în spate, acest lucru permite executarea unor comenzi mult mai ușor.
Analiză, proiectare, implementare
Asamblarea brațului robotic
Brațul robotic pe care s-a realizat aceasta lucrare de licență se numește KSR10 de la producătorul și distribuitorul belgian de electronice Velleman. Compania Velleman a fost înființată în anul 1975.
Brațul robotic KSR10 este format din 5 motoare DC și 5 articulații, pentru a alimenta aceste motoare este nevoie de 4 baterii de tip D. Kit-ul vine cu un control manual al robotului cu ajutorul unei telecomenzi cu 5 butoane, fiecare dintre aceste butone controlează un anumit motor, lucru care este responsabil de o anumită mișcare a robotului. Motorul 1 deschide sau închide gripper-ul, acesta se poate deschide la o distanță de aproximativ 4,5 cm. Motorul 2 este responsabil pentru rotirea ultimei articulații la un unghi de 120 de grade. Motorul 3 realizează rotirea celei de a treia articulații sau a cotului, dacă se face comparație cu anatomia brațului uman, acesta se poate rotii la un unghi de 300 de grade. Motorul 4 rotește brațul robotic la un unghi de 180 de grade pe planul orizontal. Iar motorul 5 rotește brațul la un unghi de 270 de grade în jurul bazei. Toate aceste mișcări pot fi vizualizate în figura 3.1.
Figura 3.1 Braț robotic KSR10
Robotul poate acționa pe o rază de 32 cm în jurul bazei iar brațul se poate întinde până la o înălțime de 38 cm.
Materialele necesare pentru asamblarea robotului sunt:
Șurubelniță
Cutter
Patent
Sfic
Clește cu nas lung
Lista cu materialele mecanice folosite pentru asamblarea este listată în manualul de utilizare cu care vine brațul robotic și se poate consulta în figura 3.2.
Figura 3.2 Componentele brațului robotic
Primul pas este asamblarea locașurilor unde se asează motoarele și printr-un mecanism de roți dințate amplasate pe tije de metal se amplifică puterea acestora, putere care este transferată articulațiilor.
Principiul de funcționare este simplu, motoarele DC, care prin conversia energiei electrice în cuplu mecanic pun în mișcare roțiile dințate.
Apoi după ce au fost asamblate cele 4 mecanisme, se trece la construcția bazei, care a constat în suprapunerea unor platane de distanțiere, iar în mijlocul acestora se asează unul dintre cele 4 mecanisme, reprezentând motorul 5 de pe telecomanda de control.
La baza robotului se mai află și lăcașul pentru așezarea celor 4 baterii.
Pentru fixarea pieselor de plastic s-au folosit mai multe tipuri de șuruburi și piulițe.
După ce s-a terminat de asamblat toate acestea, s-a trecut la unirea elementelor între ele și formarea articulațiilor.
Următorul pas reprezintă construcția elementului de prindere, unde este încapsulat ultimul motor și la fel ca și la celellalte, printr-un sistem de roți dințate se acționează gripper-ul. Acest sistem se poate vedea în figura 3.3
Figura 3.3 Gripper
Ultimul pas este legarea firelor de placuța care face conexiunea cu telecomanda și a firelor ce vin de la baterii. Firele ce vin de la baterii sunt legate înseriat astfel încât sa putem obține 6V ( sunt 4 baterii de 1.5 V) dar și -3 V, respectiv 3 V, pentru schimbarea direcției de rotație a motoarelor și respectiv a articulațiilor. Pentru alimentarea placuței se folosește mufa cu fire roșu si negru iar mufa cu un singur fir portocaliu este folosita pentru a obține diferența de potențial -3 V, +3 V.
Asamblarea brațului robotic nu a fost concepută să fie foarte grea, ci a fost gândită să poată fi realizată chiar și de un copil cu ajutorul părinților. Toate instrucțiunile de asamblare, cu detalii amănunțite, vin odată cu robotul și sunt afișate în manualul de utilizare.
După asamblarea tuturor componentelor robotul realizat arată ca în figura 3.4.
Figura 3.4 Brațul robotic KSR10 asamblat
În continuare, deoarece se dorește un control automat al brațului robotic în defavoarea celui manual, am realizat acest lucru printr-un microcontroller Arduino Uno și o punte H dublă, anume circuitul integrat L293D.
Microcontrollerul Arduino UNO
Arduino Uno are la bază microcontrollerul Atmega328. Plăcuța este dotată cu 14 pini de intrări sau ieșiri digitale, dintre care 6 pot fi folosiți ca și ieșiri PWM, dar și cu 6 intrări analogice. Totodată mai dispune si de un cristal oscilator de 16 MHz, un buton de reset, o mufă de alimentare și o conexiune USB. Microcontrollerul se conectează la calculator printr-un cablu USB și se poate alimenta de la o sursă de curent continuu sau de la o baterie.
Caracteristicile tehnice ale microcontrollerului Arduino Uno se pot vedea în tabelul 3.1
Tabelul 3.1 Caracteristici Arduino Uno
Pe plăcuță, pe langă pinii analogici și cei digitali, mai sunt și pini de putere, și anume:
5 V – Tensiune de alimentare a componentelor microcontrollerului. Această tensiune se poate obține fie de la pinul V-IN printr-un regulator de tensiune fie de la USB sau altă sursa de tensiune care furnizează 5 V
3.3 V – La pinul de 3.3 V este generată acestă tensiune de către regulatorul de pe placă
V IN – Reprezintă tensiune ce se află la intrarea plăcuței Arduino, atunci când se folosește o sursă de alimentare externă
GND – Sunt 2 pini de ground
Pentru a folosii cei 14 pini digitali se apelează funcțiile pinMode(), digitalWrite() și digitalRead(). Aceștia funcționează la o tensiune de 5 V și fiecare pin poate oferi sau primi maxim 40 mA, fiind dotați cu un rezistor de siguranță de 20 -50 kOhm.
O parte dintre acești pini au și funcții particulare:
Seriali – pinul 0 (RX) și pinul 1 (TX) sunt folosiți pentru primirea și transmiterea de date seriale TTL.
PWM – pinii 3, 5, 6, 9, 10, 11 pot fi folosiți ca și pini de ieșire PWM cu rezoluția pe 8 biți. Pentru acest lucru se apelează funcția analogWrite() iar acești pini sunt marcați pe plăcuță printr-un semn sinusoidal în dreptul numărului respectiv
Comunicația SPI – pinul 10 (SS), pinul 11(MOSI), pinul 12(MISO), 13 (SCK)
Pinul 13 – are particularitatea că la acest pin este conectat LED-ul integrat pe plăcuță.
Cât despre pinii analogici, ei au o rezoluție de 10 biți și măsoară o tensiune cuprinsă între 0 și 5 V. Pe plăcuță sunt numerotați de la A0 la A5, iar pinii A4 și A5 au o funcționalitate particulară și anume comunicația I2C (A4 – SDA, A5 – SCL)
Chip-ul Atmega328 dispune de o memorie de 32 KB, 2 KB de memorie SRAM și 1 KB de memorie EEPROM.
Când vine vorba despre comunicație, Arduino Uno oferă posibilitatea de comunicare cu un calculator, o altă placă Arduino sau un alt tip de microcontroller. Pe pinii digitali 0 și 1 (RX și TX), Arduino furnizează comunicație serială UART TTL (5 V). Un microcontroller Atmega8U2 direcționează comunicația serială către USB și de aceea apare ca un port serial virtual pe calculator, de aceea nu mai este nevoie de un driver din exterior. Software-ul Arduino recunoaște și prelucrează date de tip text în comunicația cu placa Arduino. Microcontrollerul Atmega328 suportă pe langă comunincația serială și comunicație I2C și SPI. Software-ul Arduino include o bibliotecă de conexiuni pentru a simplifica ulizarea și acestor două tipuri de comunicație.
Microcontrollerul Arduino Uno se programează cu ajutorul aplicației software Arduino, care este disponibilă pentru descărcare pe site-ul oficial. Pentru a seta tipul de placă Arduino pe care se va lucra, din meniul Tools se selectează Board și apoi tipul de placă corespunzător.
Microcontrollerul Atmega328 de pe placa Arduino Uno are un program de bootare, anume bootloader, care permite încărcarea unui nou program fără a fi nevoie de utilizarea unui compilator. Comunicația se face folosind protocolul STK500.
Arduino Uno dispune de o resetare automata, pentru a nu fi nevoie de o resetare manuală înainte de a încărca un nou program. Principiul de funcționare a acestei resetări este că una din liniile de control a funcționării hardware a microcontrollerului Atmega8U2 este conenctată la linia de reset a microcontrollerului Atmega328 iar atunci când această linie este activată se activează și linia de reset. Această capacitate permite încărcarea unui cod prin simpla apăsare a unui buton din software-ului Arduino.
Această funcționalitate a microcontrollerului poate fi dezactivată în două moduri. Primul este prin întreruperea unui traseu și anume RESET_EN, iar pentru reactivare, acel traseu se lipește din nou. Cel de al doilea mod este prin conectarea unui rezistor de 110 ohm între linia de 5V și linia de reset.
Arduino Uno oferă o protecție la scurtcircuit și suprasarcină, care protejează porturile USB ale computerului. Dacă este detectat un curent mai mare de 500 mA, conexiunea va fi întreruptă până la îndepărtarea suprasarcinii sau supracurentului.
Figura 3.5 Microcontrollerul Arduino Uno
După cum poate fi observat în figura 3.5, plăcuța Arduino Uno are 4 orificii cu ajutorul carora se poate atașa la o carcasă sau într-un alt loc unde este nevoie.
Schema electrică a microcontrollerului Arduino Uno poate fi consultată în figura 3.6
Figura 3.6 Schema electrică a microcontrollerului Arduino Uno
Motorul de curent continuu
Un motor electric transformă energia electrică primită de la sursă în energie mecanică. Dacă procesul se efectuează invers, adică o transformare a energiei mecanice în energie electrică, atunci dispozitivul care realizează acest lucru poartă numele de generator electric. Același dispozitiv poate să îndeplinească amândouă funcțiile.
Motoarele electrice funcționează pe baza forțelor electromagnetice ce acționează asupra unui
Motor de curent alternativ
Motor de inducție asincron
Motor de inducție(sincron)
Principalele părți constructive ale unui motor sunt statorul și rotorul. Rotorul este partea mobilă a motorului și de obicei este plasată în interior. Acesta este format dintr-un ax și o înfășurătură rotorică. Statorul reprezintă partea fixă a motorului care de obicei este plasată la exterior și include carcasa, bornele de alimentare și înfășurătura statorică.
Între stator și rotor există o porțiune de aer care este numită întrefier și care permite mișcarea rotorului. Performanțele motorului sunt stabilite în mare măsură și de către grosimea întrefierului.
Figura 3.7 Motor de curent continuu, vedere de ansamblu
Motorul de curent continuu are pe polii magnetici și bobine polare care creează un câmp magnetic de excitație. Sensul curentului prin înfășurarea rotorică se schimbă astfel încât câmpul magnetic să exercite în permanență o forță față de rotor.
După modul de conectarea înfășurării de excitație clasificăm motoarele de curent continuu în felul următor:
Motor cu excitație independentă – la acest tip de motor înfășurarea rotorică este conectată la o sursă de tensiune diferită față de înfășurarea statorică
Motor cu excitație paralelă – unde înfășurarea rotorică este conectată la aceași sursă de tensiune în paralel cu înfășurarea statorică
Motor cu excitație serie – unde înfășurarea rotorică este conectată la aceași sursă de tensiune în serie cu înfășurarea statorică
Motor cu excitație mixtă – unde înfășurarea statorică este divizată în două înfășurări, una conectată în paralel și una în serie
Modul de funcționare este următorul, rotorul se deplasează în câmpul magnetic până în momentul în care polii rotorici se aliniază cu polii statorici opuși. În acest moment, colectorul schimbă sensul curenților rotorici astfel încât polaritatea rotorului se inversează iar rotorul va continua să se deplaseze până când se produce următoarea aliniere a polilor.
Dacă nu este nevoie de motoare de putere mare, se folosesc în loc de înfășurările statorice, magneți permanenți.
Pentru un motor electric turația este direct proporțională cu tensiunea aplicată și invers proporțională cu câmpul magnetic de excitație. Pentru reglarea turației unui motor se variază tensiunea iar pentru a obține turații mari se scade câmpul magnetic de excitație.
Totuși scăderea câmpului magnetic de excitație produce și diminuarea cuplului dezvoltat de motor, deoarece acesta este direct proporțional cu curentul electric si cu câmpul magnetic de excitație.
Pentru motoarele serie înfășurarea de excitație și înfășurarea rotorică sunt străbătute de același curent iar acest lucru produce următoarele două consecințe:
Pentru încărcări reduse, cuplul motorului depinde de pătratul curentului electric absorbit
Pentru a evita ambalarea motorului electric până în pragul de autodistrugere, acesta nu trebuie lăsat să opereze în gol. Motivul este acela că valoarea intensității curentului și implicit a câmpului magnetic de excitație sunt foarte mici
Pentru a schimba sensul de rotație a motorului se pot folosi două variante:
Prin schimbarea polarității tensiunii de alimentare
Prin schimbarea sensului câmpului magnetic de excitație
Pentru motorulul serie, dacă se schimbă polaritatea tensiunii de alimentare se schimbă ambele mărimi iar sensul de rotație rămâne neschimbat. Din acest motiv, motorul serie se poate folosi și la tensiune alternativă, acolo unde polaritatea se inversează odată cu decursul unei perioade. Din acest motiv un astfel de motor se folosește și în aplicații casnice unde este nevoie de turații mari, spre exemplu aspiratorul sau mixerul.
Sistem de reglare tripozițional
Despre sitemele de reglare
Regulatoarele automate au rolul de a prelua semnalul de eroare, obtinut in urma comparatiei marimii de intrare cu cea masurata si de a produce la iesire un semnal de comanda pentru elemental de executie.
Clasificarea regulatoarelor:
Figura 3.8
Dupa tipul actiunii realizate:
Regulatoare cu actiune continua
Regulatoare cu actiune discreta
Dupa structura constructive
Regulatoare unificate
Regulatoare specializate
Dupa sursa de energie
Regulatoare indirecte
Regulatoare directe
Dupa agentul purtator de energie
Electronice
Pneumatice
Hidraulice
Viteza de raspuns a procesului
Procese rapide
Procese lente
După sensul mărimi de comandă în raport cu parametrul măsurat
Regulatoare cu actiune directa
Regulatoare cu actiune inversa
Regulatoare tripoziționale
Spre deosebire de regulatoarele bipoziționale unde nu sunt cerute performanțe ridicate pentru măsura de ieșire y și sunt acceptate variații între două limite ale acesteia, regulatoarele tripoziționale oferă posibilitatea stabilirii unei valori suplimentare între mărimiile de comandă –u și +u.
Figura 3.9 caracteristica ideală
În figura 3.9 se poate vedea caracteristica ideală a regulatorului tripozițional.
Figura 3.10 caracteristica reală
În figura 3.10 este prezentată caracteristica reală a regulatorului tripozițional.
Relația dintre intrarea și ieșirea regulatorului se poate scrie astfel:
Întervalul de variație a erorii (), este numit zona moartă a regulatorului.
Controlul brațului robotic printr-un regulator tripozițional
Prezentare circuit
Am ales controlul brațului robotic, KSR10, printr-un sistem de reglare tripozițional. Pentru realizarea acestui sistem de reglare am avut nevoie de următoarele componente:
PCB
2 relee mici de 12V
2 LED-uri
2 potențiometre de 1K, unul cu knob iar celălat fară
Un tranzistor BC107
Un tranzistor BC177
8 rezistențe
O rezistență variabila rotundă
Primul lucru care s-a realizat a fost montarea rezistenței variabile rotunde pe robot. Aceasta se poate vedea în figura 3.11, prinderea ei de baza brațului robotic s-a realizat prin două șuruburi. După cum se poate observa această rezistență are 3 fire, doua fixe și unul mobil. Cel roșu, din față este cel mobil care se conectează la Ground cum o să observăm imediat în schema electrică.
Figura 3.11 Rezistență variabilă rotundă
Schema electrică după care s-a realizat plăcuța este următoarea:
Figura 3.12 Schemă electrică regulator
Semnificația componentelor este următoarea:
12V – alimentare pentru primul circuit
R1, R2, R3, R4 – rezistențele de 1kOhm
P2 – reprezintă rezistența variabilă ce a fost montată pe brațul robotic, firul conectat la GND reprezintă firul roșu, cel mobil. Celelalte două fire, care se conectează la R1 și R2 reprezintă firele fixe de pe rezistența variabilă rotundă
P1 – este un potențiometru de 1K
+24V/-24V – sursa de tensiune pentru al doilea circuit
R5, R6 – rezistențe de 1kOhm
R8, R9 – rezistențe mici pentru LED-uri
L1, L2 – LED roșu și albastru
R7 – rezistență variabilă de 1K
Q1 – tranzistor BC107
Q2 – tranzistor BC177
-3.3V/+3.3V – alimentare pentru motor
RY1,RY2 – cele două relee de 12V
M1 – motorul responsabil pentru mișcarea bazei brațului robotic
Construcția plăcuței
Apoi după primul pas în care am pregătit rezistența variabilă la baza robotului și am realizat schema electrică, urmatorul pas a fost pregătirea plăcuței pe care se lipesc componentele electronice.
Am desenat pe o foaie așezarea componentelor și am trasat legături între pinii lor conform cu schema electrică. Apoi am trasat pe placuța de cupru același desen pentru a putea realiza circuitul imprimat.
Figura 3.13 Plăcuță imprimată
Apoi a urmat trasarea liniilor cu un marker. Pentru ca după acest pas, să pun plăcuța de cupru în clorură ferică pentru corodare.
Figura 3.14 Plăcuță imprimată
După 15 minute clorura ferică a dizolvat tot materialul care nu a fost acoperit de stratul de marker. Rezultatul obținut este o plăcuță cu circuite de cupru, căruia i-am dat găuri cu un burghiu de 1 mm pentru a putea lipii componentele electronice.
Rezultatul obținut după lipirea componentelor se poate vedea în figura 3.15
Figura 3.15 Plăcuță imprimată cu componente
Principiul de funcționare
Prima parte a circuitului formată din rezistența variabila montată pe brațul robotic și potențiometrul de 1K poate fi privită ca partea de feedback și comandă. Prin rotirea potențiometrului se setează o rezistență de referință pe care am numit-o în figura 3.16, P_ref. Dacă aceasta rezistenă este diferită de ceea a rezistenței rotunde de pe brațul robotic atunci apare o diferență de tensiune, numită Ve.
Figura 3.16 Prima parte a schemei electrice
Tensiunea Ve poate fi negativă sau pozitivă. Pentru cazul în care această tensiune este negativă, se deschide tranzistorul BC177 sau cum este notat în Q2, iar dacă tensiunea de eroare Ve este pozitivă atunci se v-a deschide tranzistorul Q1.
În continuare să privim aceasta schemă împărțită pe jumatate, pentru partea de sus, caz în care tensiunea de eroare Ve este pozitivă și tranzistorul conduce, se închide circuitul reprezentat cu linie albastră, în acel moment LED-ul de culoare albastră se aprinde iar releul RY1 închide contactul și conduce -3.3V de la borna de alimentare la motor.
Pentru cazul de jos, în care tensiunea este negativă, procesul este identic, tranzistorul Q2 se deschide iar circuitul reprezentat cu linie roșie se deschide, moment în care LED-ul de culoare roșie se aprinde iar releul închide circuitul care furnizează 3.3V la motor.
Prin rotirea motorului se modifică rezistența de la baza brațului robotului și automat și diferența de tensiune Ve pană când cele două tensiuni se egalează iar tranzistorul se închide și releul se deschide iar, automat, motorul se oprește.
Figura 3.17 A doua parte a schemei electrice
Mai există și al treilea caz în care tensiunea de eroare Ve se află în zona moartă, caz în care niciunul dintre relee nu este închis iar motorul este oprit.
Putem spune că acest regulator este unul de copiere a poziției potențiomentrului.
Aceste tipuri de regulatoare sunt folosite la o scară mai mare și în circuite cu o precizie mult mai ridicată, de exemplu în fabricile de prelucrare a metalului, unde se dorește copierea exactă a unui material. Un alt exemplu ar fi în industria textilă unde se dorește copierea unui șablon. Aplicațiile unde se folosesc aceste tipuri de regulatoare nu se opresc aici și pot fi mult mai vaste și cu funcționalități multiple.
Acest tip de control al brațului robotic ține mai mult de domeniul analogicului, iar în continuare voi prezenta și un tip de control digital al brațului robotic cu ajutorul unui driver de motoare controlat cu plăcuță Arduino care obține feedback de la o cameră web.
Driver de motoare L293D
Pentru controlul digital al motoarelor am folosit driver-ul de motoare L293D care este capabil să conducă două motoare de curent continuu simultan. Tensiunea la care funcționează motoarele este cuprinsă între 3V și 6V.
În cazul acestui braț robotic este nevoie de comanda motoarelor în ambele sensuri și din această cauză driver-ul L293D este potrivit deoarece acesta folosește două punți H capabile de a conduce două motoare în ambele sensuri.
Puntea H este un circuit cu patru întrerupătoare, care sunt acționate două câte două pe diagonală. Dacă sunt acționate două câte două pe diagonală atunci se poate schimba sensul motorului. În figura 3.18 se poate vizualiza principiul de funcționare al porții H.
Figura 3.18 Principiul de funcționare al unei porți H
Circuitul integrat L293D, figura 3.19, este o punte H dublă care acționează ca și amplificator de curent pentru motoare, el preia un semnal de curent mic și oferă motorului un curent mai mare, deci prin acest lucru driver-ul poate fi comandat cu ajutorul pinilor PWM ai microcontrollerului pentru a controla turația motoarelor.
Figura 3.19 Driver de motoare L293D
Descrierea pinilor driver-ului:
1 – pin de enable pentru motorul 1, este activ pe high
2 – intrarea 1 pentru motorul 1
3 – ieșirea 1 pentru motorul 1
4 – ground sau 0V
5 – ground sau 0V
6 – ieșirea 2 pentru motorul 1
7 – intrarea 2 pentru motorul 1
8 – alimentare pentru motorul 1
9 – pin de enable pentru motorul 2, activ pe high
10 – intrarea 1 pentru motorul 2
11 – ieșirea 1 pentru motorul 2
12 – ground sau 0V
13 – ground sau 0V
14 – ieșirea 2 pentru motorul 2
15 – intrarea 2 pentru motorul 2
16 – alimentare pentru motorul 2
Pentru a simplifica legăturile dintre pinii driver-ului și pinii plăcuței Arduino am lipit un suport de integrate de un PCB cu găuri și 3 terminale cu șurub la care se conectează firele de la alimentare și de la motor. Acest suport se potrivește exact pe pinii de 5V și GND ai microcontrollerului, respectiv pinii de PWM 3, 9, 10, 11.
Figura 3.20 Montaj modul Arduino
Apoi pe partea cealaltă a plăcuței cu găuri am făcut legăturile dintre pinii driverului L293D și cei ai microcontrollerului Arduino, lipind fire între acestea în felul următor:
Pe pinul 1 și 9 de la integrat la 5V
Pinii 2, 7, 10, 15 la ieșirile PWM ale microcontrollerului 3, 9, 10, 11
Pinii 3, 6 și 11, 14 la cele 2 fire de la primul motor respectiv al doilea motor
Pinii 4, 5, 12, 13 la GND
8 și 16 la borna plus a celor 4 baterii de tip D, care însumează 6V
Figura 3.20 Montaj modul Arduino
Astfel am creat un modul care poate fi foarte ușor integrat pe Arduino și cu ajutorul căruia se pot controla foarte ușor 2 motoare. Dezavantajul driver-ului de motoare L293D este faptul că se încălzește foarte repede și nu are sistem de răcire propriu.
Figura 3.21 Montaj modul Arduino
Detecția culorii și urmărire de obiect
După ce partea de control a motoarelor a fost pregătită, am avut nevoie de un feedback pentru a știi când și ce comandă să dăm robotului. Am gândit un sistem format dintr-o cameră web cu ajutorul căruia se achiziționează imagini din fața robotului. După care aceste imagini sunt prelucrate într-un mediu software complex, MatLab iar apoi în funcție de poziția obiectului, microcontrollerul trimite o comandă motoarelor.
Multe dintre aplicațile de detecție a mișcării, de detecție a unui obiect sau cele de detecție a culorii folosesc procesare a imaginii in timp real. În această parte a lucrării am folosit o metodă de detecție în timp real a culorii unui obiect folosind o camera web și un program în MatLab.
O imagine poate fi definită ca o funție bidimensională fxy(), unde x și y sunt coordonatele spațiale(plane), iar amplitudinea f este intensitatea imaginii în orice pereche de coordonate.
Dacă privim o imagine din perspectiva tehnică, avem 4 tipuri de imagini și anume:
alb-negru (Gray-scale)
imagine binară (Binary image)
imagine indexată (Indexed image)
imagine adevărată sau mai cunoscut imagine RGB
Imaginea alb negru este o matrice de date a carui valori sunt reprezentate în nuanțe de gri. Elementele acestui tip de imagine pot fi reprezentate în clasa uint8 sau uint16, ele având valori întregi cuprinse între [0, 255] respectiv [0, 65535].
Imaginea binară este specifică computerelor. Acest tip de imagine este defapt o matrice logică de 0 și 1. Totuși o matrice de 0 și 1 ale căror valori sunt de clasă să zicem 8, nu este considerată o imagine binară în MatLab. O matrice este convertită la matrice binară folosind o funcție logică. De exemplu dacă avem matricea A formată din valori ale lui 0 și 1, vom creea o altă matrice B folosind instrucțiunea B=logic(A). Doar matricea B este considerată în MatLab o matrice binară. Spre exemplu dacă o matrice A conține alte valori decât 0 sau 1 atunci toate valorile egale cu 0 sunt transformate în logicul 0 iar toate valorile non-zero sunt transformate în 1 logic. Pentru a testa dacă o matrice este logică putem folosi funcția islogical(B), iar dacă matricea este logică atunci funcția returnează 1, în caz contrar returnează 0.
Imaginile indexate sunt formate dintr-o matrice de date X, și o matrice numită “hartă de culori”. Colormap este o matrice de m pe 3 a de clasă dublă care conține valori reale cuprinse între [0, 1]. Fiecare rând din matrice este specific unei culori roșu, verde și albastru. O imagine indexată folosește “mapare directă” a valorilor pixelilor la valorile din “hartă de culori”. Culoare fiecărui pixel din imagine este determinată prin utilizarea valorii corespunzătoare acelui pixel din matricea “hartă”. Spre exemplu valoare 1 corespunde primului rând, valoarea 2 la al doilea rând și tot așa.
Imaginile RGB sunt denumite și imagini cu culori adevărate. O imagine RGB este stocată în calculator ca și o matrice de date m pe n pe 3. Care definește culorile roșu, verde și albastru pentru fiecare pixel în parte. Culoarea fiecărui pixel este determinată de combinația intensităților de roșu, verde și albastru. Imaginile RGB sunt stocate în calculator în fișiere grafice pe 24 de biți, în care componentele roșu, verde și albastru sunt pe câte 8 biți fiecare. Acest lucru oferă o varietate de 16 milioane de culori(255^3=16,777,216). Precizia acestei tehnici de reprezentare a imaginilor, în care o imagine reală poate fi reprodusă a dus la denumirea de imagine adevărată. În MatLab culoarea unui pixel este stocată într-un vector tridimensional, de exemplu pentru pixelul (7,4) componenta roșu, verde și albastru este stocată ca și triplet (7,4,1:3). Să presupunem că (7,4,1) conține valoarea 0,5176, (7,4,2) conține valoarea 0.1608, iar (7,4,3) conține valoare 0.0627. Atunci culoarea pentru pixelul (7,4) este: 0.5176 0.1608 0.0627.
Algoritmul de detecție a culorii
Metoda de a detecta un obiect de o culoare prima, precum roșu, verde sau albastru (RGB), este relativ ușoară iar algoritmul folosit pentru această metodă este exemplificat în pași următori:
Se achiziționează o captură a obiectului cu ajutorul camerei web
Imaginea originală se convertește într-o imagine alb negru
Din imaginea originală se extrage componenta culorii dorite, în cazul meu am ales culoarea albastru
Se scade componenta culorii albastru din imaginea alb negru iar după acest pas se obține încă o imagine alb negru
Apoi pentru a îndepărta zgomotul din noua imagine alb negru obținută este nevoie să aplicăm un filtru peste aceasta
După acest pas se convertește imaginea filtrate într-o imagine binară
Iar ultimul pas efectuat în procesarea de imagine este să se măsoare parametrii acesteia și să se deseneze un dreptunghi care înconjoară obiectul de culoare albastru, acest dreptunghi se află după calcule matematice.
Un procedeu similar este și pentru culorile roșu sau verde, putem detecta aceste culori dacă, la fel, extragem component de culoare pe care dorim iar apoi procedeul este identic.
Procesare de imagine în MatLab
Procesarea de imagine este o tehnică care convertește o imagine în forma sa digitală și execută un set de operații pentru a o îmbunătății sau pentru a extrage un set de informații folositoare din acea imagine.
Cele mai multe tehnici de procesare a imaginii tratează imaginea ca și un semnal bidimensional și aplică tehnici de calcul standard.
Primul lucru care l-am făcut în procesarea de imagini a fost să aflu informații despre camera web și anume ce ID de dispozitiv are. Cu ajutorul comenzii imaqhwinfo am aflat detalile de care am nevoi. După cum se poate vedea în figura 3.22 sunt conectate două camere web la calculator, prima este camera web fixată pe brațul robotic iar cea de a doua este camera web integrată a calculatorului.
Figura 3.22 Codul programului
Următorul pas, după cum se poate vedea în secvența de cod de din figura 3.23, am inițializat o variabila cu numele “vid” care este un obiect de tipul “videoinput”. Parametrii “winvideo” și 1 reprezintă dispozitivul video cu care se capturează imaginile. Apoi am setat proprietățile video, și anume la câte milisecunde să captureze un cadru și în ce format să il salveze, RGB în cazul acesta. După acestea se startază camera video.
Figura 3.23 Codul programului
Apoi am folosit o buclă care iterează până când sunt 100 de cadre achiziționate cu imaginea care urmează să fie prelucrată.
Câteva funcții importante folosite în parte de procesare a imaginii sunt:
data = getsnapshot(vid) care returnează un singur cadru cu imaginea achiziționată și îl salvează ca și imagine de tip RGB în variabila data.
imshow(data) arată pe ecran imaginea salvată în variabila data după cum se poate observa în figura 3.24
rgb2gray(data) transformă imaginea RGB în imagine alb negru
diff_im=imsubtract(data(:,:,3),rgb2gray(data)) transformă imaginea RGB în imagine alb negru și extrage componenta albastră. Noua imagine o salvează în variabila diff_im. Cu ajutorul comenzii imsubtract se poate face conversia în imagine alb negru și apoi extragerea componentei dorite dintr-o singură comandă. Dacă dorim de exemplu sa extragem componenta de culoare roșie din imagine ca mai apoi să detectăm obiectele de culoarea roșu, trebuie doar sa modificăm ultima coloană pe care MatLab o citește din variabila data, adică în loc de 3 să punem 1, respectiv 2 pentru culoarea verde.
Figura 3.24 Captură obiect de culoare albastră
După ce am extras componenta albastră, din imagina originală transformată în imagine alb negru, cu ajutorul comenzii imsubtract noua imagine obținută arată ca în figura 3.25
Figura 3.25 Imagine alb negru(stânga) componenta albastră din imagine(dreapta)
medfilt2(diff_im,[3 3]) aplică un filtru median pentru imaginea diff_im pentru a filtra zgomotul de pe imagine. Parametrul [3 3] reprezintă valoarea vecinătății, cu cât este mai mare cu atât filtrul este mai extins.
im2bw(diff_im,0.18) această funcție convertește imaginea alb negru (cu diferite nuanțe de gri) în imagine binară. Cea ce returnează este o imagine în care toți pixeli care erau înainte valori non-zero au valoarea 1 și sunt luminați (albi) în noua imagine iar ceilalți pixel cu valoarea 0 și sunt cei negrii din imagine. Rezultatul se poate observa în figura 3.26.
Figura 3.26 Imagine binară
După ce am obținut imaginea binară folosesc proprietățile pe care MatLab le oferă și anume regionprops , care măsoare un set de proprietăți impuse de noi, pentru fiecare obiect de culoare albastră găsit în imagine. Proprietățile care se doresc sunt BoundingBox și Centroid.
BoundingBox gasește toți pixeli care sunt cu valoarea binară 1 și după o formulă matematică returnează un dreptunghi care înconjoară obiectul de culoare albastră.
Centroid calculează centrul acestui dreptumghi tot printr-o formulă matematică.
În pasul următor am creat o buclă for în interiorul buclei while care se apelează doar dacă sunt obiecte de culoare albastră găsite. Dacă bucla for este apelată atunci am salvat datele returnate de proprietățile boundingbox și centroid în două variabile bb și bc. Apoi cu funcția rectangle se desenează un dreptunghi în coordonatele salvate în variabila bb iar cu funcția plot se desenează centrul ale cărui coordonate sunt salvate în variabila bc.
Figura 3.27 Bucla “for“
Linia 66 din codul reprezentat în figura 3.27 este responsabilă pentru desenarea dreptunghiului. Parametrul “EdgeColor” setează culoarea (red) iar parametrul “LineWidth” setează grosimea liniei. Pe linia 68, respectiv 69 am setat textul care să apară în dreptul punctului de pe centru, mai exact coordonatele pe axa X respectiv coordonatele pe axa Y și culoare respectiv fontul cu care este afișat textul.
La final toate aceste proprietăți se vor afișa peste imaginea originală și nu peste cele prelucrate iar aceasta va arăta precum în figura 3.28.
Figura 3.28
Urmărire obiectului
Programarea microcontrollerului Arduino se face în software-ul cu același nume, în schimb procesarea de imagini a fost realizată în MatLab. Din fericire există o librărie care se importează în MatLab și conține toate funcțiile ce le are software-ul Arduino, astfel atât comanda microcontrollerului cât și procesarea de imagini se face în același software. Din acest motiv citirea și transmiterea de informații este mult mai rapidă iar programarea software este simplificată.
Pentru a instala librăria Arduino în Matlab este nevoie de parcurgerea următorilor pași:
1) În MatLab se merge pe tabul “HOME”, apoi din secțiunea “RESOURCES” se apasă pe “Add-Ons” iar de aici se selectează “Get Hardware Support Packages”
2) Se va deschide o fereastră “Support Package Installer”, se selectează acțiunea “Install from Internet” și se apasă pe butonul „Next”
3) Se va deschide o nouă fereastră iar în lista de packete suport se alege Arduino apoi se apasă butonul “Next”
4) Apoi se acceptă termenii și condițiile și se apasă butonul “Next” iar apoi “Install”
Pașii de mai sus au fost elaborați pe versiunea MatLab R2014a, pe alte versiuni există posibilitatea ca pașii să difere puțin.
După ce am identificat obiectul de culoarea dorită, am vrut să comand motoarele astfel încât să urmărească obiectul în cazul în care acesta se miscă dreapta-stânga sau sus-jos, iar pentru acest lucru va trebui să comand două dintre motoarele robotului.
Mărimea totală a imaginii este 480×640 pixeli.
Figura 3.29 Imagine hașurată
Principiul de funcționare al urmăririi de obiecte este în felul acesta, dacă, la o mișcare a obiectului albastru, centrul dreptunghiului intră în zona hașurată atunci un anumit motor va primi o comandă iar acest lucru o să întoarcă robotul spre locul unde s-a mutat obiectul albastru, astfel urmărindu-l. Camera web fiind prinsă pe vârful robotului și este conectată la calculator prin USB.
Figura 3.30 Inițializarea obiectului arduino în MatLab
Am inițializat un obiect de tip arduino (figura 3.30) pe care l-am denumit „ard” iar ca parametri am setat „COM4” care înseamnă că microcontrollerul Arduino este conectat la calculator pe canalul de comunicație 4 și respectiv numele plăcuței Arduino. Canalul de comunicație la care se conectează microcontrollerul diferă de la caz la caz și trebuie verificat la fiecare nouă conectare și eventual schimbat numărul acestuia în cod. Apoi am inițializat 4 variabile (right, left, up, down) cu valori numerice care reprezintă numărul pinilor digitali ce i-am folosit.
Am implementat principiul stabilit cu ajutorul a mai multor “if-uri”, împărțind fiecare mișcare pe o axa, verticală sau orizontală. Dacă obiectul se mișcă dreapta/stânga/sus/jos și centrul dreptunghiului intra in zona hașurată, atunci microcontrollerul primește cu ajutorul funcției writePWMVoltage, din MatLab, un semnal de tip PWM iar acesta trimite la motoare, prin driverul de motoare, o tensiune cuprinsă între 0 și 5V. Astfel mișcând robotul și camera web în direcția unde s-a mutat obiectul. Când centrul dreptunghiului ajunge inapoi în zona nehașurată atunci motoarele se opresc. Codul prin care s-au implementat aceste mișcări se poate vedea în figura 3.31, atât pentru axa verticală cât și pentru cea orizontală.
Figura 3.31 Mișcări pe ambele axe
În acest timp camera face alte capturi și tot procedeul se repetă.
Alte condiție impusă este ca atunci când niciun obiect nu este găsit motoarele să fie oprite, astfel sunt evitate situațiile în care obiectul iese din cadru iar robotul se rotește fără a-l mai găsi.
Concluzii
Rezultate obținute
În această lucrare de licență am urmărit realizarea a două moduri de control pentru un braț robotic. Brațul robotic pe care am realizat metodele de control este unul de plastic, o miniatură a unui braț robotic real dar principiul de funcționare și control este același. Brațul robotic este echipat cu un control manual cu ajutorul unei telecomenzi, lucru care implică necesitatea operării manuale de către om. Astfel am încercat dezvoltarea a două metode de control automate.
Prima metodă este cea analogică, unde am ales utilizarea unui regulator tripozițional pentru a comanda doar un singur motor a robotului și anume motorul care este responsabil de rotirea în jurul baze robotului. Bine-înteles că această metodă se poate dezvolta și implementa controlul a mai multor motoare astfel încât să fie controlate toate motoarele. În cazul de față tot este nevoie de acțiunea umană pentru rotirea potențiometrului dar se poate înlocui acel potențiometru cu alte dispozitive care să citească și să copieze spre exemplu alte aparate.
Cea dea doua metodă de control implementată este cea digitală, unde am folosit un microcontroller Arduino Uno, un driver pentru comanda motoarelor și o cameră web pentru primirea de feedback din mediul robotului.
Am folosit circuitul integrat L293D deoarece acesta este capabil să comande două tipuri de motoare și anume motoarele de curent continuu și motoarele pas cu pas. Cu un singur circuit integrat L293D se pot comanda două motoare de curent continuu fapt ce îl face ideal pentru scopul propus în lucrare. Driverul L293D folosește porți H duble care pot comanda motoarele în ambele direcții.
Pentru simplificare am construit un modul care se asează pe pinii microcontrollerului astfel nu mai este nevoie de a realiza legături între pinii microcontrollerului și pinii driverului de motoare cu fire. Apoi pe acel modul am lipit un suport pentru circuite integrate în care am așezat circuitul integrat L293D. Sub modul am lipit firele astfel încât să fac legaturile conform cu specificaților de funcționare ale driverului de motoare. Fiind lipite sub modul iar modulul se așează pe microcontroller, aceste fire nu se văd. După ce am realizat comanda motoarelor am avut nevoie și de un feedback de la robot pentru că dacă nu acesta nu era precis și nu știam în ce poziție se află. Astfel camera web face câte o captură de ecran la fiecare 5 milisecunde iar această captură este procesată în MatLab. Am optat pentru detecția de culoare pentru a găsi un obiect iar apoi după ce acesta este detectat am ales urmărirea acestuia de către brațul robotic. Și aici doar două dintre cele 5 motoare ale robotului sunt folosite deoarece acestea sunt necesare pentru a realiza mișcările sus-jos și dreapta-stânga. Mișcările pot fi și combinate de exemplu dacă obiectul se mișcă în dreapta și în sus, robotul să il poată urmări pe ambele direcții simultan.
Direcții de dezvoltare
Aceste metode de control a brațului robotic pot fi implementate în linii de producție sau în aparate de copiere a unui șablon. Spre exemplu dacă se dezvoltă regulatorul tripozițional realizat în lucrare se pot realiza linii de de producție care prelucrează un anumit material, copiind forma unui material model. La liniile de prelucrare a materialelor textile se folosesc, sau la liniile de prelucrarea a metalelor. Totuși regulatorul realizat de mine în lucrare nu are sensibilitatea și precizia necesară pentru a fi folosit într-o linie de producție dar se pot realiza variante complexe și îmbunătățite.
În cazul controlului digital, acesta se poate folosi în liniile de sortare unde este nevoie de deosebirea unor obiecte în funcție de culoarea acestora. Spre exemplu dacă trebuie sortate obiectele de culoare roșie de cele de culoare albastră, atunci se poate implementa o cameră web care să facă captură de imagini iar această imagine sa fie prelucrată într-un mediu software, care apoi să trimită o comandă motoarelor în funcție de cum se dorește să fie făcută sortarea.
O altă aplicație unde se poate folosi sistemul cu cameră video este la roboții militari. Se poate construi un robot care să urmeze soldații în luptă, și să transmită imagini video la baza militară sau să transporte pentru aceștia provizii. Robotul fiind la un nivel mult mai avansat și care ar fi capabil, nu doar să recunoască o culoare ci să recunoască o persoană.
O altă utilizare a unui robot echipat cu o cameră video ar fi într-un proces de verificare a calității unui produs, unde robotul preia o captură de imagine cu produsul și verifică dacă corespunde culorii dorite, se pot verifica pixeli iar dacă aceștia se încadrează între anumite limite atunci produsul este bun pentru a trece mai departe. Spre exemplu verificarea culorii unor fructe într-o linie de ambalare.
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Licență Bobeica Marius 2 [303325] (ID: 303325)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
