București, 2015 [615488]
București, 2015
Universitatea Politehnica din București
Facultatea de Automatică și Calculatoare
Departamentul de Automatică și Ingineria Sistemelor
LUCRARE DE LICENȚĂ
Platforma „Bilă pe roată”
Construcție și sinteză de regulator
Absolvent: [anonimizat]
2
CUPRINS
1.Introducere ………………………….. ………………………….. ……………. 3
1.1.Prezentarea problemei ………………………….. ……………………. 3
1.2.Prezentarea soluției problemei ………………………….. ………… 3
2.Prezentare elemente platformă ………………………….. ……………… 5
2.1.Cadrul metalic ………………………….. ………………………….. …… 5
2.2.Motorul de curent continuu ………………………….. ……………… 5
2.3.Camera ………………………….. ………………………….. ……………. 6
2.4.Roata ………………………….. ………………………….. ………………. 6
2.5.Bila ………………………….. ………………………….. …………………. 7
2.6.Raspberry PI ………………………….. ………………………….. …….. 7
3.Detalierea soluției problemei ………………………….. ………………… 8
3.1.Identificarea modelului procesului ………………………….. ……. 9
3.2.Calculul comenzii lansate de regulatorul de poziție ……….. 18
3.3.Identificarea poziției bilei în raport cu roata …………………. 21
3.4.Colectarea informațiilor despre roată ………………………….. 27
4.Structura Algoritmului ………………………….. ……………………….. 33
5.Rezultate Experimentale ………………………….. …………………….. 34
5.1.Identificarea poziției bilei ………………………….. ……………… 34
5.2.Urmărirea obiectului identificat ………………………….. ……… 36
5.3.Comunicația cu microcontrolerul ………………………….. ……. 37
6.Concluzii ………………………….. ………………………….. ……………… 38
7.Anexe ………………………….. ………………………….. ………………….. 39
Bibliografie ………………………….. ………………………….. …………….. 40
3
1.Introducere
1.1.Prezentare a problem ei
Reglarea reprezintă o p roblemă importantă a zilelor noastre prezentă atât
la nivelul tuturor pr oceselor industriale cât și la nivelul tuturor dispozitivelor cu
care interacționam fie că acestea se numesc telefoane mobile, aparate de aer
condiționat sau frigidere. Reglarea proceselor poate fi o problemă dificilă dacă sunt
impuse restricții de resurse utilizate respectiv performanțe tranzitorii severe ,
restricții și performanțe care odată nerespectate duc la consecințe nedorite ș i
extrem de periculoase.
Privind problema din acest p unct de vedere putem observa că proiectarea
unui regulator este influe nțată de foarte mulți factori de care trebuie ținut cont.
Dacă pe hârtie un supra -reglaj de 5 % nu înseamnă decât un număr, în realitate
acesta poate însemna riscul apariției unor evenimente provocatoare de distrugeri
materiale sau chiar provocatoare de pi erderi de vieți omenești. Făcând un efort de
imaginație putem deduce cu ușurință cât de grave ar fi consecințele dacă spre
exemplu în timpul reglării presiunea dintr -un cazan ar creste cu 5 % peste limita
admisă.
Chiar dacă ținem cont de toate aceste as pecte, î n orice proces de reglare,
pe lângă realizarea unui regulator robust și performant, măsurarea mărimii ce se
dorește a fi controlată reprezintă o etapă foarte impor tantă î ntrucât precizia și
timpul destinat măsurării influențează performanțele reglă rii. Astfel, identificarea
valorilor mărimii reglate prin analiza unor imagini captate cu o cameră video
constituie o problemă care netratată corespunzător va conduce la degradarea
performanțelor reglării.
Cu toate acestea, noțiunile dobândite pe parcursul anilor de studiu ne
oferă încrederea necesară că putem rezolva astfel de probleme de reglare
indiferent de complexitatea acestora. Problema ce se va încerca a fi rezolvată în
următoarele pagini este dată de menținerea în echilibru a unei bile pe o roată,
problemă cuprinsă în titlul lucrării de licență: „Platforma „Bilă pe roată” –
Construcție și sinteză de regulator ”.
1.2.Prezentarea soluției problemei
Rezolvarea problemei propuse mai sus presupune atât dispunerea de
anumite componente hardware suficien t de puternice dar și implementarea unor
algoritmi de identificare și reglare eficienți nu doar din punct de vedere al preciziei
comenzilor lansate cat și din punct de vedere al timpului de răspuns .
Pentru rezolvarea problemei propuse am folosit o placă R aspberry PI
completată de o cameră web, un motor de curent continuu, actorii negativi ai
acestui proiect intitulați drept bila ș i roata, precum și cadrul prin care s -a realizat
susținerea fiecărei componente. În plus, pentru scrierea algoritmilor s -au folo sit
dispozitive periferice (mouse, tastatură, monitor) conectate la Raspberry PI.
4
Drept resurse software, am folosit Raspbian -ul, acesta fiind sistemul de
operare corespunzător plăcii , Geany, un mediu de dezvoltare care permite
scrierea, compilarea și rula rea programelor scrise în C respectiv C++ plus câteva
biblioteci aferente manipulării camerei web, prelucrării de imagini re spectiv
transmiterii de informații către și dinspre alte dispozitive.
Într-o primă etapă, cu ajutorul camerei web, are loc identifi carea poziției
bilei f ață de roată. Imaginile transmise de cameră în mod continuu sunt preluate
de Raspbbery PI și apoi prelucrate cu ajutorul unor funcții astfel încât să se poată
identifica mult mai ușor obiectul urmărit. Poziția acestuia va fi calculată în timp
real și va fi disponibilă în orice moment algoritmului de reglare.
Într-o a doua etapă are loc colectarea celorlalte informații necesare reglării,
poziția roții respectiv viteza de rotație a acesteia. Acest lucru este realizat prin
comunicația cu un microcontroler, microcontroler care se va ocupa și de
transmiterea comenzii către motor. Așadar comunicația cu microcontrolerul este
bidirecțională, acest lucru însemnând atât transmitere dinspre microcontroler a
informațiilor necesare algoritmului de reglare cât și transmitere către
microcontroler a referinței de curent ce trebuie aplicată motorului. Configurația
microcontrolerului împreună cu implementarea algoritmului de reglare a curentului
aplicat motorului nu fac însă obiectul de studiu al aceste i teme, rezolvarea acestei
probleme revenin d altei persoane și astfel considerăm problema ca fiind deja
rezolvată.
Odată obținute toate datele n ecesare algoritmului de reglare, acestea vor
fi folosite împreună cu alte constante( constantele bilei, roții respectiv motorului )
pentru a calcula comanda necesară ce trebuie aplicată motorului pentru a duce
bila în poziția dorită. Această comandă reprezintă mai exact referința regulatorului
de curent implementat pe microcontroler , referință ce va fi transmisă către
microcontroler la viitorul schimb de informații.
Succesiunea de procese identificare poziție bilă, colectare informații despre
poziție și viteză roată, calcul de comandă și transmitere de referința către
microcontroler va fi reluat ă ciclic pană când bila va ajunge în poziția dorită dar și
apoi. Dacă regulatorul de curent continuu scris pe microcontro ler a fost
implementat corect, dacă informațiile introduse în regulatorul de poziție sunt valide
și referința de curent a fost corect calculată atunci ar trebui ca la fiecare pas al
algoritmului bila sa -si schimbe poziția, apropiindu -se de poziția dorită.
5
2.Prezentare elemente platformă
2.1.Cadrul metalic
Pentru a putea impleme nta proiectul propus este necesar ca toate
elementele fizice, constituente acestuia, să fie montate pe un suport astfel încât
acestea să poată îndeplini funcțiile dorite dar și să poată interacționa corect între
ele. Cadrul este realizat din aluminiu oferind atât susținere pentru fiecar e dintre
celelalte componente cât ș i o stabilitate ridica tă a întregii platforme .
Acesta este prevăzut cu un suport pentru motorul de curent continuu, suport
ce oferă posibilitatea menținerii motorului la o distanță de aproximativ 10
centimetri față de suprafața de sprijin a platformei . În plus cadrul dispune ș i de un
spațiu destinat depozitării sursei de curent necesară alimentării motorului
respectiv celorlalte componente electrice.
Datorită modului în care a fost realizat, cadrul conține și un braț de susținere
pentru cameră. Braț ul oferă posibilitatea de a ajusta atât înălțimea la care este
situată camera câ t și zona de captură în plan orizontal, fiind posibilă o mișcare de
„înainte – înapoi” a acestuia. Astfel se poate oferi o imagine de ansamblu a
platformei sau, după preferinț e, o imagine concentrată pe z ona de interes.
Întrucât este destul de puțin probabil ca algoritmul de reglare să meargă
perfect de la prima implementare fără să ii fie făcute ajustări , cadrul dispune și
de doua bariere ce împiedică bila să cadă pe jos în cazul în care reglarea eșuea ză.
2.2.Motorul de curent continuu
Unul din elementele de bază ale platformei este motorul de curent continuu.
Prin caracteristica sa de a converti energia electrică în energie mecanică, motorul
devine un element cheie al ansamblului . Acesta oferă posibilitatea de a roti într-o
anumită direcție și cu o anumită viteză roata amplasată pe axul său. Acest lucru
se poate realiza extrem de simplu variind tensiunea de alimentare a motorului .
Principiul de funcționare al motorului electric este unul simplu. În urma
mișcării curentului printr -un conductor electric în cadrul unui câmp magnetic se
formează un câmp electromagnetic. Acest câmp electromagnetic declanșează
forțe electromagnetice care acționează asupra conductorului. Forțele nu reprezintă
decât conver sia energiei electrice în energie mecanică. [1] [2]
Componentele principale ale acestui motorului sunt: elementul fix numit
stator, elementul variabil numit rotor și înfășurările . Statorul este const ruit din
magneți si reprezintă închiderea câmpului magnetic. În plus el poate cuprinde
înfășurări de cupru transformându -se in electromagnet. Rotorul reprezintă partea
mobilă a motorului el fiind situat în capătul statorului. De asemenea rotorul
cuprinde î nfășurări de cupru având rolul de a genera forțe magnetice atunci când
sunt străbătute de curent electric. Înfășurările sunt prezen te atât la nivelul
statorului cât ș i la nivelul rotorului acestea având funcția de a genera câmp
magnetic respe ctiv funcția de a genera forțe î n cadrul câmpului magnetic. [1]
În plus, motorul pe care îl avem la dispoziție pentru realizarea proiectului
6
dispune și de un encoder ce are ca scop identificarea depla sării axului motorului
față de poziția inițială precum și viteza de rotație a acestuia calculată î n timp real.
Motorul de curent continuu folosit în cadrul acestui proiect este unul cu
excitație separată. Acesta are rezistența internă egală cu 0,346Ω(ohmi) ,
inductanța egală cu 0.121mH , const anta de cuplu egală cu 29.3 mN*m/A și
momentul de inerție egal cu 96.6 *10-7 g*cm2, informații ce vor servi mai târziu în
proiectarea regulatorului.
2.3.Camera
Camera reprezintă un element important al proiectului întrucât prin
intermediul acesteia se va furniza informația necesară identificării poziției bil ei în
raport cu platforma. Camera va capta î n continuu im agini pe care le va transmite
către modulul de calcul unde vor fi prelucrate.
Aceasta este amplasată deasupra roții astfel încât fiecare dintre i maginile
transmise să ofere informația suficientă identificării poziției bilei. Poziția camerei
poate fi reglată în raport cu roata aceasta putând fi mișcată atât în plan orizontal
cât și în plan vertical.
Imaginea de mai jos prezinta amplasarea ideală a c amerei în scopul
identificării corecte a poziției bilei. În această situație camera surprinde doar partea
superioara a roții.
Figura 2.3.1.Amplasarea ideală a camerei [3]
2.4.Roata
Roata este un alt element important din componența platformei deoarece
prin intermediul acesteia se poate deplasa bila în poziția dorită. Roata va fi
7
acționată de motor și învârtită într -o anumită direcție forțând bila să se deplaseze
în direcția vrută.
Pentru a împiedica distrugerea roții d atorită bruștelor schimbări de rotație
ale motorului s -a decis ca aceasta să fie confecționată dintr -un material dur,
respectiv plexiglas.
2.5.Bila
Bila este elementul în jurul căruia se învârt majoritatea informațiilor d in
proiect deoarece poziția acesteia în raport cu celelalte componente ale platformei
reprezintă scopul implementării proiectului.
Întrucât aceasta reprezintă furnizorul principalei informații, informație ce
trebuie sa fie cat mai exacta, este indicat ca bila sa aibă o culoare diferită de cea
a roții respectiv a cadrului. Astfel se pot folosi bile cu caracteristici (greutate,
dimensiune, culoare) variabile, aceste variații implicând în mod normal schimbări
ale valorilor parametrilor de intrare în algoritm ii de detecție și reglare.
2.6.Raspberry PI
Elementul central al acestui proiect este de departe placa Raspberry PI
întrucât prin intermediul acesteia își pot asigura funcționalitatea și celelalte
elemente din sistem. În cazul de față s -a utilizat o plac ă Raspberry PI model B+.
Aceasta dispune de un procesor cu un singur nucleu, BCM2835 ,util pentru
a realiza aplicați și este completat de o memorie de 512 RAM. Procesorul rulează
la o frecvența de 700 MHz în modul standard însă frecvența acestuia poate fi m ărită
până la 1 GHz în modul turbo. [4]
Drept sistem d e operare s -a utilizat Raspbian ul, un sistem de operare
special conceput pentru aceste plăci și care a fost integrat în Raspberry PI prin
intermediul unui card micro SD. Sistem ul de operare oferă interfață grafică ușor
utilizabilă asemănătoare Windows -ului ce facilitează accesul la resursele sistemului
precum și posibilitatea de a instala diferite compilatoare însoțite de pachete de
funcții utilizabile pentru diferite aplicații.
Placa este alimentată la 5V prin intermediul unui încărcător cu mufă µUSB
și poate fi conectată la internet oferind o viteză de până la 100Mbits/s. Aceasta se
poate conecta la un monitor printr -o mufă HDMI oferind o ieșire video cu rezoluția
de până la 1 900 x 1200 pixeli. În plus placa dispune și de 4 porturi USB prin care
pot fi conectate la aceasta diferite periferice, în cazul de față mouse și tastatură.
[4]
Pe aceasta placă se găsesc și nu mai puțin de 40 de pini care pot fi
configurați drept intrări sau ieșiri. O parte din acești pini au fost utilizați pentru a
realiza comunicația SPI (Serial Peripheral Interface) cu un microcontroler. [4]
8
3.Detalierea soluției problemei
Așa cum am specificat și î n capitolele precedente, pentru a soluționa
problema propusă este necesară parcurgerea câtorva etape importante. Aceste
etape principale sunt structurate sugestiv sub forma diagramei de mai jos urmând
ca în secțiunile următoar e sa fie detaliată fiecare eta pă în parte.
Figura 3.1 . Schema de rezolvare a problemei
Așa cum se poate și observa din Figura 3.1 , obiectivul principal al plăcii
Raspberry PI este implementarea regulatorului de poziție în vederea calculării
comenzii ce trebuie aplicată motorului as tfel încât acesta să ducă bila în poziția
dorită. Comanda ce trebuie aplicată motorului va fi transmisă către microcontroler
sub forma unei referințe pentru regulatorul de curent.
Pentru implementarea regulatorului de poziție vom avea nevoie de :
– poziția bilei
– poziția roții
– viteza roții
Poziția bilei va fi obținută așa cum am și sugerat în schemă, prelucrând
imaginile preluate continuu cu ajutorul camerei. Așadar , o parte importantă din
resursele Raspberry PI -ului vor fi concentrate către parcurgerea algor itmului de
identificare a centru lui unui obiect dintr -o imagine, algoritm ce va fi parcurs ciclic
pentru fiecare imagine captată.
Poziția respectiv viteza roții vor fi obținute în urma schimbului de informații
cu microcontrolerul. Așadar vom aloca o secți une separată și pentru prezentarea
felului cum este configurat modulul de transmitere serială a informațiilor. Tot aici
vom prezenta si modul cum se realizează recepționarea informații lor.
9
3.1.Identificarea modelului procesului
Pentru a putea implem enta algoritmul de reglare a poziției bilei va trebui ca
mai întâi să identificam modelul matematic al acestui sistem „Bilă pe Roată”. În
cele ce urmează va fi prezentată schema sistemului , schemă ce va ilustra
caracteristicile importante ale sistemului ca mai apoi, plecând de la această
reprezentare a sistemului să de ducem ecuațiile matematice care î l caracterizează.
Figura 3.2.Schema sistemului „Bilă pe roată” [5]
Identificarea modelului matematic pentru sistemul „Bilă pe roată” se va face
utilizând Ecuația Euler – Lagrange:
𝑑
𝑑𝑡( 𝜕𝐿
𝜕𝑞̇𝑖 )− 𝜕𝐿
𝜕𝑞𝑖=𝑄
(3.1)
10
În ecuația de mai sus L reprezintă funcția Lagrange, Q reprezintă vectorul
forțelor generalizate iar q este vectorul variabilelor de stare. Funcția Lagrange se
definește ca fiind diferența dintre Energia Cinetică (T) și Energia Potențială(V) a
sistemului :
𝐿=𝑇−𝑉 (3.2)
Pentru a calcula Funcția Lagrange va trebui să explicităm Energia Cinetică
respectiv Energia Potențială a sistemului însă, înainte de a face acest lucru, vom
devia de la drumul propus pentru a defini notațiile pentru fiecare mărime din
sistem.
Notații generale :
– g – accelerația gravitațională
– τ – cuplul exercitat asupra roții
Notațiile introduse pentru bilă :
– Ob – Centrul bilei
– Cb – Punctul de contact pe bilă
– mb – Masa bilei
– rb – Raza bilei
– Ib – Momentul de inerție al bilei
– Tb – Energia Cinetică a bilei
– Vb – Energia Potențială a bilei
– Θ3 – Deplasarea unghiulară a centrului bilei relativ la direcția verticală
– Θ1 – Deplasarea unghiulară față de axa Oy a liniei dintre O b și O r
– vb – Viteza tangențială a bilei
– ωb – Viteza unghiulară a bilei
Notațiile introduse pentru roată;
– Or – Centrul roții
– Cr – Punctul de contact pe roată
– mr – Masa roții
– rr – Raza roții
– Ir – Momentul de inerție al roții
– Tr – Energia Cinetică a roții
– Vr – Energia Potențială a roții
– Θ2 – Deplasarea unghiulară a roții
– vr – Viteza tangențială a roții
– ωr – Viteza unghiulară a roții
11
Notațiile intr oduse pentru motor:
– Tm – Energia Cinetică a motorului
– Vm – Energia Potențială a motorului
– Im – Momentul de inerție al motorului
– RA – Rezistența armăturii motorului
– Km – Constanta de cuplu a motorului
Așadar : 𝑞= [ 𝜃1
𝜃2 ] și 𝑄= [ 0
𝜏 ]
Înlocuind q si Q î n ecuația Euler – Lagrange și egalând termen cu termen
se vor obține următoarele ecuații:
𝑑
𝑑𝑡( 𝜕𝐿
𝜕𝜃̇1 )− 𝜕𝐿
𝜕𝜃1=0
(3.3)
𝑑
𝑑𝑡( 𝜕𝐿
𝜕𝜃̇2 )− 𝜕𝐿
𝜕𝜃2=𝜏
(3.4)
Energia cinetică a sistemului este egală cu suma dintre energia cinetică a
bilei și energia cinetică a roții. Așadar, pentru a putea calcula energia cinetică a
întregului sistem va trebui să explicităm mai întâi energia cinetică a fiecărei
componente a sistemului.
Energia cinetică a bilei este :
𝑇𝑏=1
2𝑚𝑏(𝑟𝑏+ 𝑟𝑟)2𝜃̇12+1
2 𝐼𝑏𝜃̇32
(3.5)
Energia cinetică a roții este :
𝑇𝑟=1
2 𝐼𝑟𝜃̇22
(3.6)
Din ecuațiile 3.5 și 3.6 rezultă ca Energia Cinetică totală a sistemului este:
𝑇=𝑇𝑏+ 𝑇𝑟= 1
2𝑚𝑏(𝑟𝑏+ 𝑟𝑟)2𝜃̇12+1
2 𝐼𝑏𝜃̇32+ 1
2 𝐼𝑟𝜃̇22
(3.7)
Ajungând la aceasta ecuație va trebui să impunem condiția ca roata și bila
să se rotească și să se rostogolească una peste alta. 𝑣𝐶𝑟/𝑂𝑟 indică viteza punctului
de contact Cr relativ la centrul roții O r și observată din punctul de ref erință al
motorului. Formula respectivei viteze este dată de ecuația :
𝑣𝐶𝑟 /𝑂𝑟= 𝜃2̇𝑟𝑟j (3.8)
12
unde j este un vec torul unitate tangent la roată î n punctul de contact C r și
indică în direcția creșterii lui θ2. De asemenea 𝑣𝐶𝑏/𝑂𝑏 indică viteza punctului de
contact C b relativ la centrul bilei O b și observată din punctul de referință al
motorului. Formula acestei viteze este dată de ecuația :
𝑣𝐶𝑏/𝑂𝑏= 𝜃3̇𝑟𝑏j (3.9)
Pornind de la ipoteza că rostogolirea se face fără alunecare rezultă că,
privind dinspre punctul de referință al motorului, punctul de contact C b este
instantaneu în poziție de repaus față de punctul de contact C r. Așadar viteza
punctulu i de contact C b relativă la punctul de contact C r este dată de formula:
𝑣𝐶𝑏/𝐶𝑟= 0 (3.10)
Viteza centrului bilei relativ la centrul roții este:
𝑣𝑂𝑏/𝑂𝑟= 𝜃1̇(𝑟𝑏+ 𝑟𝑟)𝑗 (3.11)
Aceeași viteză se poate scrie ca :
𝑣𝑂𝑏/𝑂𝑟= 𝑣𝑂𝑏/𝐶𝑏+ 𝑣𝐶𝑏/𝐶𝑟+ 𝑣𝐶𝑟 /𝑂𝑟 (3.12)
Înlocuind în relația 3.12 , 𝑣𝑂𝑏/𝐶𝑏, 𝑣𝐶𝑏/𝐶𝑟 și 𝑣𝐶𝑟 /𝑂𝑟 cu formulele
corespunzătoa re din relațiile 3.8, 3.9 și 3.10 se obține:
𝑣𝑂𝑏/𝑂𝑟= − 𝜃3̇𝑟𝑏j+ 𝜃2̇𝑟𝑟j (3.13)
Apoi se va înlocui 𝑣𝑂𝑏/𝑂𝑟 cu formula identificată la 3.9 și vom obține :
𝜃1̇(𝑟𝑏+ 𝑟𝑟)𝑗= − 𝜃3̇𝑟𝑏j+ 𝜃2̇𝑟𝑟j (3.14)
Simplificând prin j și separând 𝜃3̇𝑟𝑏 vom obține :
𝜃2̇𝑟𝑟− 𝜃1̇(𝑟𝑏+ 𝑟𝑟)= 𝜃3̇𝑟𝑏 (3.15)
Ținând cont că 𝜃3̇ nu poate fi direct măsurat pentru calculul buclei de
reacție acesta poate fi calculat din relația de mai sus. Odată ce am obținut expresia
lui 𝜃3̇, acesta poate fi înlocuit în expresia energiei cinetice totale (ecu ația 3.5) și
se obține :
𝑇= 1
2𝑚𝑏(𝑟𝑏+ 𝑟𝑟)2𝜃̇12+1
2 𝐼𝑏[𝜃2̇𝑟𝑟− 𝜃1̇(𝑟𝑏+ 𝑟𝑟)]
𝑟𝑏22
+ 1
2 𝐼𝑟𝜃̇22
(3.16)
Știind că centrul roții reprezintă refer ința sistemului de axe rezultă că
energia potențială a roții este 0. Astfel energia potențială totală este dată doar de
energia potențială a bilei dată de formula:
13
𝑉= 𝑉𝑏=𝑚𝑏𝑔(𝑟𝑏+ 𝑟𝑟)cos𝜃1 (3.17)
Din ecu ațiile 3.16 si 3.17 rezultă formula funcției Lagrange :
𝐿= 1
2𝑚𝑏(𝑟𝑏+ 𝑟𝑟)2𝜃̇12+1
2 𝐼𝑏[𝜃2̇𝑟𝑟− 𝜃1̇(𝑟𝑏+ 𝑟𝑟)]
𝑟𝑏22
+ 1
2 𝐼𝑟𝜃̇22− 𝑚𝑏𝑔(𝑟𝑏+ 𝑟𝑟)cos𝜃1
(3.18)
În cont inuare se vor calcula derivatele funcției Lagrange în raport cu 𝜃1 și
𝜃2 precum și 𝑑
𝑑𝑡 din derivatele funcției Lagrange în raport cu 𝜃1̇ și 𝜃2̇.
Derivând Funcția Lagrange în raport cu 𝜃1 se obține :
𝜕𝐿
𝜕𝜃1 = 𝑚𝑏𝑔(𝑟𝑏+ 𝑟𝑟)sin𝜃1
(3.19)
Derivând Funcția Lagrange în raport cu 𝜃1̇ se obține :
𝜕𝐿
𝜕𝜃̇1=𝑚𝑏(𝑟𝑏+ 𝑟𝑟)2 𝜃1̇− 𝐼𝑏(𝑟𝑏+ 𝑟𝑟)[𝜃2̇𝑟𝑟− 𝜃1̇(𝑟𝑏+ 𝑟𝑟)]
𝑟𝑏2
(3.20)
Desfăcând parantezele se obține :
𝜕𝐿
𝜕𝜃̇1=𝑚𝑏(𝑟𝑏+ 𝑟𝑟)2 𝜃1̇− 𝐼𝑏(𝑟𝑏+ 𝑟𝑟)𝜃2̇𝑟𝑟
𝑟𝑏2+ 𝐼𝑏𝜃1̇ (𝑟𝑏+ 𝑟𝑟)2
𝑟𝑏2
(3.21)
Grupând după 𝜃1̇ și 𝜃2̇ se va obține:
𝜕𝐿
𝜕𝜃̇1=[ 𝑚𝑏(𝑟𝑏+ 𝑟𝑟)2+ 𝐼𝑏 (𝑟𝑏+ 𝑟𝑟)2
𝑟𝑏2 ]𝜃1̇− 𝐼𝑏(𝑟𝑏+ 𝑟𝑟)𝑟𝑟
𝑟𝑏2𝜃2̇
(3.22)
Astfel calculând 𝑑
𝑑𝑡( 𝜕𝐿
𝜕𝜃̇1 ) va rezulta :
𝑑
𝑑𝑡( 𝜕𝐿
𝜕𝜃̇1 )=[ 𝑚𝑏(𝑟𝑏+ 𝑟𝑟)2+𝐼𝑏 (𝑟𝑏+ 𝑟𝑟)2
𝑟𝑏2 ]𝜃1̈−𝐼𝑏(𝑟𝑏+ 𝑟𝑟)𝑟𝑟
𝑟𝑏2𝜃2̈
(3.23)
14
Derivata Funcției Lagrange in raport cu 𝜃2 este :
𝜕𝐿
𝜕𝜃1 =0
(3.24)
Derivata Funcției Lagrange in raport cu 𝜃2̇ este :
𝜕𝐿
𝜕𝜃̇2=𝐼𝑟𝜃̇2+𝐼𝑏𝑟𝑟𝜃2̇𝑟𝑟− 𝜃1̇(𝑟𝑏+ 𝑟𝑟)
𝑟𝑏2
(3.25)
Desfăcând parantezele și grupând după 𝜃2̇ și 𝜃1̇ se obține :
𝜕𝐿
𝜕𝜃̇2=(𝐼𝑟+𝐼𝑏𝑟𝑟2
𝑟𝑏2)𝜃̇2−𝐼𝑏𝑟𝑟 (𝑟𝑏+ 𝑟𝑟)
𝑟𝑏2𝜃1̇
(3.26)
Astfel calculând 𝑑
𝑑𝑡( 𝜕𝐿
𝜕𝜃̇2 ) va rezulta :
𝑑
𝑑𝑡( 𝜕𝐿
𝜕𝜃̇2 )=(𝐼𝑟+𝐼𝑏𝑟𝑟2
𝑟𝑏2)𝜃2̈−𝐼𝑏𝑟𝑟 (𝑟𝑏+ 𝑟𝑟)
𝑟𝑏2𝜃1̈
(3.27)
Incluzând relațiile 3.19 și 3.23 în ecuația Euler – Lagrange prezentată în
relația 3.3 vom obține :
[ 𝑚𝑏(𝑟𝑏+ 𝑟𝑟)2+𝐼𝑏 (𝑟𝑏+ 𝑟𝑟)2
𝑟𝑏2 ]𝜃1̈− 𝐼𝑏(𝑟𝑏+ 𝑟𝑟)𝑟𝑟
𝑟𝑏2𝜃2̈
− 𝑚𝑏𝑔(𝑟𝑏+ 𝑟𝑟)sin𝜃1=0
(3.28)
Incluzând relațiile 3.24 și 3.27 în ecuația Euler – Lagrange prezentată în
relația 3.4 vom obține :
−𝐼𝑏𝑟𝑟 (𝑟𝑏+ 𝑟𝑟)
𝑟𝑏2𝜃1̈+ (𝐼𝑟+𝐼𝑏𝑟𝑟2
𝑟𝑏2)𝜃2̈=𝜏
(3.29)
Conform definiției, momentul de inerție al unei sfere este egal:
𝐼𝑠𝑓𝑒𝑟ă= 2
5 𝑚𝑎𝑠ă𝑠𝑓𝑒𝑟ă∗𝑟𝑎𝑧ă𝑠𝑓𝑒𝑟ă2 [6]
(3.30)
15
Folosind această formulă se va înlocui momentul de inerției a l bilei î n
expresia ecuațiilor Euler – Lagrange prezentate mai sus (3.28 și 3.29) și se vor
obține ur mătoarele ecuații:
[ 𝑚𝑏(𝑟𝑏+ 𝑟𝑟)2+2
5 𝑚𝑏𝑟𝑏2 (𝑟𝑏+ 𝑟𝑟)2
𝑟𝑏2 ]𝜃1̈
− 2
5𝑚𝑏𝑟𝑏2(𝑟𝑏+ 𝑟𝑟)𝑟𝑟
𝑟𝑏2𝜃2̈− 𝑚𝑏𝑔(𝑟𝑏+ 𝑟𝑟)sin𝜃1=0
(3.31)
−2
5 𝑚𝑏𝑟𝑏2𝑟𝑟 (𝑟𝑏+ 𝑟𝑟)
𝑟𝑏2𝜃1̈+ (𝐼𝑟+2
5 𝑚𝑏𝑟𝑏2𝑟𝑟2
𝑟𝑏2)𝜃2̈=𝜏
(3.32)
Simplificând 𝑟𝑏2 se vor obține următoarele ecua ții:
[ 𝑚𝑏(𝑟𝑏+ 𝑟𝑟)2+2
5 𝑚𝑏(𝑟𝑏+ 𝑟𝑟)2]𝜃1̈− 2
5𝑚𝑏(𝑟𝑏+ 𝑟𝑟)𝑟𝑟𝜃2̈
− 𝑚𝑏𝑔(𝑟𝑏+ 𝑟𝑟)sin𝜃1=0
(3.33)
−2
5𝑚𝑏𝑟𝑟(𝑟𝑏+ 𝑟𝑟)𝜃1̈+ (𝐼𝑟+2
5 𝑚𝑏𝑟𝑟2)𝜃2̈=𝜏
(3.34)
Se prelucrează ecuația 3.33 înmulțind -o cu 5 pentru a elimina numitorii.
Astfel se obține ecuația:
[ 5𝑚𝑏(𝑟𝑏+ 𝑟𝑟)2+2 𝑚𝑏(𝑟𝑏+ 𝑟𝑟)2]𝜃1̈− 2𝑚𝑏(𝑟𝑏+ 𝑟𝑟)𝑟𝑟𝜃2̈
− 5𝑚𝑏𝑔(𝑟𝑏+ 𝑟𝑟)sin𝜃1=0
(3.35)
Se observă că în ecuația prezentată mai sus se poate da factor comun
produsul : 𝑚𝑏(𝑟𝑏+ 𝑟𝑟) .Ținând cont că cele 2 raze, a bilei respectiv a roții precum
și masa bilei, exprimă niște valori pozitive rezultă că produsul dintre masa bilei și
suma celor doua raze nu poate fi egal cu 0. Astfel se poate face simplificarea
ecuației 3.35 prin 𝑚𝑏(𝑟𝑏+ 𝑟𝑟) obținând următ oarele ecuații ce exprimă cele două
ecuații Euler – Lagrange de la care am plecat :
7(𝑟𝑏+ 𝑟𝑟)𝜃1̈− 2𝑟𝑟𝜃2̈− 5𝑔sin𝜃1=0
(3.36)
−2
5𝑚𝑏𝑟𝑟(𝑟𝑏+ 𝑟𝑟)𝜃1̈+ (𝐼𝑟+2
5 𝑚𝑏𝑟𝑟2)𝜃2̈=𝜏
(3.37)
16
Ecuațiile 3.36 și 3.37 sunt valide doar când forța centripetă este suficient
de mare încât să mențină roti rea circulară a bilei pe roată, a ltfel bila poate părăsi
suprafața roții. Considerând schema bilei separată , schemă prezentată în figura
3.3, și folosindu -ne de Principiul al III -lea al Mecanicii vom explicita ecuația de
forțe corespunzătoare deplasării unghiulare. [5]
Figura 3.3 Schema bilei
Principiul al III -lea al Mecanicii spune că dacă un corp acționează asupra
altui corp cu o forță, cel de -al doilea acționează asupra celui dintâi cu o forță de
aceeași valoare, pe aceeași direcție, dar de sens opus. [7]
Aplicând acest principiu pent ru bilă se obține:
𝑚𝑏𝑔𝑐𝑜𝑠𝜃1−𝑁=𝑚𝑏(𝑟𝑏+𝑟𝑟)𝜃1̇2 [5]
(3.38)
unde N = forța de reacțiune normală . Forța dată de 𝑚𝑏𝑔𝑐𝑜𝑠𝜃1−𝑁 este
răspunzătoare pentru m enținerea mișcării de rotație a bilei pe roată. Dacă N =0
atunci înseamnă ca nu mai există contact între bilă și roată
Explicitând N din egalitatea de mai sus vom obține :
𝑁=𝑚𝑏𝑔𝑐𝑜𝑠𝜃1−𝑚𝑏(𝑟𝑏+𝑟𝑟)𝜃1̇2 [5]
(3.39)
Astfel, pentru a menține bila pe roată trebuie impusă condiția ca N > 0.
Aceasta inecuație este echivalentă cu inecuația următoare:
𝑚𝑏𝑔𝑐𝑜𝑠𝜃1−𝑚𝑏(𝑟𝑏+𝑟𝑟)𝜃1̇2>0 [5]
(3.40)
Un semnal de tensiune, generat în conformitate cu legea de control
enunțată mai jos alimentează un motor de curent continuu pentru a controla roata.
17
Deoarece constanta de timp a părții electrice este mu lt mai mică decât constanta
de timp a părții mecanice iar valoarea coeficientului de frecare vâscoasă este
neglijabilă atunci modelul matematic al motorului de curent continuu este dat de
ecuația următoare : [5]
𝜏=𝐾𝑚
𝑅𝐴𝑢− 𝐾𝑚2
𝑅𝐴𝜃2̇
(3.41)
unde, așa cum am precizat anterior :
– 𝜏 este cuplul controlat
– u este tensiunea controlată
– 𝑅𝐴 este rezistenta armăturii motorului
– 𝐾𝑚 este constanta de cuplu a motorului
Vectorul de stare este definit ca fiind :
𝑥=[𝑥1
𝑥2𝑥3
𝑥4]=
[ 𝜃1
𝜃̇1
𝜃2
𝜃̇2]
(3.42)
Din relațiile 3.36, 3.37 și 3.41 , reprezentarea pe stare a sistemului „Bilă
pe roată” este dată de ecu ația de mai jos:
𝑥̇=𝑓(𝑥)+𝑔(𝑥)𝑢
(3.43)
unde :
𝑓(𝑥)=[𝑥2
𝑎𝑥4+𝑏𝑠𝑖𝑛(𝑥1)
𝑥4
𝑑𝑥4+𝑒𝑠𝑖𝑛(𝑥1)]=
[ 𝜃̇1
𝑎𝜃̇2+𝑏𝑠𝑖𝑛(𝜃1)
𝜃̇2
𝑑𝜃̇2+𝑒𝑠𝑖𝑛(𝜃1)]
(3.44)
𝑔(𝑥)=[0
𝑐
0
𝑓]
(3.45)
18
Pentru a reduce încărcătura ecuațiilor 3.44 si 3.45 s-a procedat la
înlocuirea coeficienț ilor cu a, b, c, d, e și f , expresiile acestora fiind expuse în
egalitățile de mai jos: [5]
𝑎=2𝑟𝑟𝐾𝑚2
𝑅𝐴(7𝐼𝑟+2𝑟𝑟2𝑚𝑏)(𝑟𝑏+𝑟𝑟)
(3.46)
𝑏=𝑔(7𝐼𝑟+2𝑟𝑟2𝑚𝑏)
(7𝐼𝑟+2𝑟𝑟2𝑚𝑏)(𝑟𝑏+𝑟𝑟)
(3.47)
𝑐=2𝑟𝑟𝐾𝑚
𝑅𝐴(7𝐼𝑟+2𝑟𝑟2𝑚𝑏)(𝑟𝑏+𝑟𝑟)
(3.48)
𝑑=7𝐾𝑚2
𝑅𝐴(7𝐼𝑟+2𝑟𝑟2𝑚𝑏)
(3.49)
𝑒=2𝑔𝑟𝑟𝑚𝑏
7𝐼𝑟+2𝑟𝑟2𝑚𝑏
(3.50)
𝑓=7𝐾𝑚
𝑅𝐴(7𝐼𝑟+2𝑟𝑟2𝑚𝑏)
(3.51)
3.2.Calculul comenzii lansate de regulatorul de poziție
Îmbinând noțiunile de Fizică cu cele de Matematică s -a reușit în cadrul
secțiunii anterioare obținerea modelului matematic al procesului, model ce a putut
fi etalat chiar printr -o reprezentare pe stare : [5]
𝑥̇=𝑓(𝑥)+𝑔(𝑥)𝑢
𝑦=ℎ(𝑥)
(3.52)
unde funcțiile f(x) și g(x) au fost definite tot in cadrul aceleiași secțiuni iar
h(x) este o funcție scalară.
19
Sistemul este în echilibru atunci când vectorul de stare x este de forma :
𝑥𝑠𝑜𝑙= [0
0
𝜃2
𝜃̇2]
(3.53)
Existenta lui 𝑥𝑠𝑜𝑙 de forma prezentată mai sus înseamnă ca :
– bila să fie poziționată fix deasupra roții (unghiul dintre axa verticală și
dreapta desemnată de 𝑂𝑏 ș𝑖 𝑂𝑟 să fie de 0° asta însemnând 𝜃1=0 )
– bila să nu se învârtă ( 𝜃̇1 =0 )
– roata să aibă orice poziție fată de poziția inițială
– roata să se învâ rtă
Condițiile de mai sus arată că problema reglării poate avea o infinitate de
soluții din punct de vedere al plasării vectorului de stare în starea de echilibru.
Înlocuind 𝑥𝑠𝑜𝑙 în ecuația de stare se va obține :
[0
0
𝜃̇2
𝜃2̈]=
[ 0
𝑎𝜃̇2+𝑏𝑠𝑖𝑛(𝜃1)
𝜃̇2
𝑑𝜃̇2+𝑒𝑠𝑖𝑛(𝜃1)]
+ [0
𝑐
0
𝑓]∗𝑢
(3.54)
Știind ca 𝜃1=0 din egalitatea de mai su s rezultă:
𝑎𝜃̇2+𝑐∗𝑢=0 (3.55)
𝜃2̈= 𝑑𝜃̇2+𝑓∗𝑢 (3.56)
Rezolvând prima ecuație se obține formula pentru viteza roții în punctul
de echilibru :
𝜃̇2= −𝑐∗𝑢
𝑎 = −𝑢
𝐾𝑚
(3.57)
După cum se poate observa, aceasta nu are o valoare fixă, poziția roții
depinzând de tensiunea u.
După cum se poate vedea din expresia lui f, sistemul „Bila pe Roată ” este
un sistem neliniar. Așadar, pentru a calcula co manda ce trebuie aplicată procesului
trebuie ca mai întâi să liniarizăm sistemul.
După liniarizarea sistemului în jurul punctului de echilibru se obține
expresia lui u de forma: [5]
𝑢=𝑣−𝐿𝑓4ℎ(𝑥)
𝐿𝑓𝑔𝐿𝑓34ℎ(𝑥)
(3.58)
20
unde
𝐿𝑓4ℎ(𝑥)= −(𝑏𝑓−𝑐𝑒)𝜃1̇2sin 𝜃1+
(𝑏𝑓−𝑐𝑒) (𝑎𝑥4+𝑏𝑠𝑖𝑛𝜃1) cos𝜃1 [5]
(3.59)
𝐿𝑔𝐿𝑓3ℎ(𝑥)=10𝑟𝑟𝐾𝑚2𝑔
𝑅𝐴(7𝐼𝑟+2𝑟𝑟2𝑚𝑏)(𝑟𝑏+𝑟𝑟)2 [5]
(3.60)
𝑣= −𝐾1𝜁1−𝐾2𝜁2−𝐾3𝜁3−𝐾4𝜁4 [5] (3.61)
Coeficienții 𝐾1, 𝐾2, 𝐾3, 𝐾4 pot fi identificați prin metoda plasării polilor
pentru a plasa polii în buclă închisă î n semiplanul stâng. [5]
Coeficienții 𝜁1, 𝜁2, 𝜁3, 𝜁4 au următoarele valori : [5]
𝜁1=𝑓𝜃1−𝑐𝜃2 (3.62)
𝜁2=𝑓𝜃̇1−𝑐𝜃̇2 (3.63)
𝜁3=(𝑏𝑓−𝑐𝑒)𝑠𝑖𝑛𝜃1 (3.64)
𝜁4=(𝑏𝑓−𝑐𝑒)𝜃̇1𝑐𝑜𝑠𝜃1 (3.65)
Până în acest moment s -a reușit găsirea unui model matematic pentru
sistemul „Bilă pe Roată” precum și o formulă de calcul pentru comanda ce trebuie
aplicată procesului. În capitolele următoare s e va detalia modul în care au fost
culese informațiile necesare implementării regulatorului.
Figura 3.4 de mai jos prezintă în mod schematic ingredientele necesare
conceperii regulatorului.
Figura 3.4.Intrările și ieșirea regulatorului
21
3.3.Identificarea poziției bilei în raport cu roata
În această secțiune se va prezenta procedeul prin care una din intrările
regulatorului este identificată. Intrare a ce se vrea a fi identificată î n acest capitol
este reprezentată de „poziția bilei” în raport cu centrul roții . Identificarea acesteia
s-a făcut prin scrierea unui algoritm ce prelucrează imaginile captate de cameră.
Algoritmul de identificare a poziției bilei este rulat ciclic, poziția bilei fiind
actualizată în continuu. Acest mod de abordare dă posibilitatea regulatorului să
acceseze valorile cele mai recente ale poziției bilei mărind performanțele reglării.
Identificarea obiectelor dintr -o imagine se bazează pe detecția unei
anumite culori dintr -o imagine iar algoritm ul de detecție cuprinde urm ătorii pași
structurați sugestiv în figura 3.5:
– captare imagine
– convertire imagine din formatul RGB în formatul HSV
– obținerea imaginii în binar
– filtrare imagine
– identificarea obiectului din imagine
– calculul centrului acestuia și memorarea lui
În figura d e mai jos sunt reprezentate și funcțiile care au fost apelate
precum pentru a trece imaginea dintr -o stare în alta, funcții ce vor fi detaliate în
paragrafele următoare.
Figura 3.5 Etapele prelucrării imaginii
22
Imaginile ce conțin informația necesară identifică rii poziției bilei au fost
capturate cu o cameră web. Rezoluția de 5MP a acesteia a permis capturarea unor
imagini clare favorizând dete cția în timp util a obiectului. Imaginile captate sunt
prelucrate cu ajutorul unor funcții disponibile odată cu importar ea bibliotecii
„opencv”. Funcțiile utilizate pentru identificarea obiectului sunt detaliate in
paragrafele de mai jos.
VideoCapture cap(0);
Deschiderea camerei s-a realizat creând obiectul „cap” de tipul clasei
VideoCapture. Clasa „VideoCapture” împreuna cu toate atributele și metodele ei a
fost deja creată, utilizarea acesteia fiind posibilă prin importarea biblioteci i de
funcții. După declararea obiectului s -a testat dacă acesta a fost creat apelând
funcția cap.isOpened() . Raspunsul negativ al apelului a cestei funcții sugerează
faptul ca nu s -a putut crea obiectul și implicit nu s -a putut deschide camera.
cap.read(imgOriginal );
Capturarea imaginilor s -a realizat utilizând funcția read() bineînțeles pe
obiectul cap. Funcția read() este apelată cu un para metru de tip Mat& în care se
va memora imaginea capturată și returnează un parametru de tip boolean, acesta
specificând dacă funcția și -a îndeplinit obiectivele sau nu.
cvtColor(imgOriginal, imgHSV, COLOR_BGR2HSV);
Această funcție are scopul de a tran sforma imaginea din formatul RGB
(Red- Green – Blue) în formatul HSV(Hu e- Saturation – Value = Culoare – Saturație –
Valoare). Funcția cvtColor este apelată cu trei parametri:
– imaginea sursă în format RGB, în cazul de față imgOriginal
– imaginea destinație ce v a fi în format HSV, în cazul de față imgHSV
– codul reprezentând tipul de transformare, în cazul de față din BRG -> HSV
Funcția nu returnează nimic.
inRange(imgHSV, Scalar(0,0,0), Scalar(179,255,30), imgBinary);
După transformarea imaginii în format HSV se dorește trecerea imaginii în
format binar. Acest lucru î nseamnă verificarea faptului că valorile pixelilor din
imagine au Culoarea, Saturația și Valoarea într -un interval desemnat. Dacă cei
trei parametri se află in intervalul specificat atunci pixelului i se va atribui valoarea
1, în caz contrar valoarea 0. Atribuirea pixelului valoarea 1 înseamnă în mod vizual
culoarea alb în timp ce atribuirea valorii 0 înseamnă in mod vizual culoarea negru.
Parametri cu care se apelează funcția inRange() sunt :
– un vect or/matrice sursă , în cazul de față imgHSV
– un vector cu valori sau un scalar ce desemnează capătul inferior al
intervalului, în cazul de față Scalar (0,0,0)
– un vector cu valori sau un scalar ce desemnează capătul superior al
intervalului, în cazul de față S calar (179,255,30)
– un vector/matrice destinaț ie, în cazul de față imgBinary
23
erode(imgBinary,imgBinary,getStructuringElement(MORPH_ELLIPSE,
Size(5,5)) );
dilate(imgBinary,imgBinary,getStructuringElement(MORPH_ELLIPSE,
Size(5,5)) );
Transformarea imaginii o riginale într -o imagine binară în care valoarea 1 a
unui pixel indică faptul ca acesta este de culoarea dorită iar valoarea 0 indică
inversul nu este suficient. Imaginile captate cu camera pot fi ușor perturbate de
intensitatea respectiv direcția luminii, aceasta fiind direct răspunzătoare de
crearea umbrelor. Așadar sistemul de detecție al obiectelor poate fi dus în eroare
de aceste umbre posibil considerându -le obiecte de dimensiuni mai mic i. În plus,
obiectele care trebuie detectate pot fi și ele mascat e sub zonele umbrite sau
iluminate prea puternic.
Prin urmare se utilizează funcția erode() împreună cu funcția dilate()
pentru a elimina din imagine acele obiecte identificate ca fiind obiecte de culoarea
dorită dar de dimensiuni mult mai mici decât dime nsiunile obiectului ce se dorește
a fi identificat precum și evidențierea obiectelor ce se doresc a fi identificate.
Scopul utilizării funcției erode() este acela de a elimina obiectele mici
detectate în imagine dar nedorite. Prin apelarea acestei funcții se parcurge
imaginea în binar și un pixel din această imagine, indiferent ca este 1 sau 0, va fi
transformat în 1 doar dacă acesta este centrul unui nucleu cu pixeli ce au doar
valoarea 1 ,altfel va fi 0. Prin urmare zonele de pixeli cu valoarea 1 dar insuf icient
de mari vor fi eliminate (valorile pixelilor vor fi trecute în 0)
Parametrii cu care se apelează funcția erode() sunt urmă torii:
– imaginea sursă pe care se face prelucrarea , în cazul de fața imgBinary
– imaginea destinație în care sunt vizibile modifi cările, imaginea destinație
este de aceeași dimensiune cu imaginea sursă, în cazul de față, matricea
destinație este aceeaș i matrice cu sursă , respectiv imgBinary
– o structură de tip element care reprezintă nucleul folosit pentru erodare.
În figura de mai j os este prezentat un exemplu în care se poate observa
efectul pe care îl are funcția asupra unei imagini.
Figura 3.6.Efectul funcției erode() asupra unei imagini [8]
24
După cum se poate și observa în figura de pe pagina anterioa ră, din păcate
funcția erode() are și efecte negativ e, bineînțeles nedorit e. Funcția erode()
lucrează asemenea unui râu eliminând din calea ei bucățile mici de sol dar atacând
în același timp bucățile mari de sol provocând distrugeri nedorite. Așadar funcț ia
erode() prelucrează și obiectele ce se doresc a nu fi erodate ,micș orându -le
dimensiunea.
În plus funcția erode() mărește și dimensiunea zonelor de pixeli cu valoare
0 din interiorul zonelor mari de pixeli cu valoare 1, bineînțeles acesta fiind un luc ru
nedorit.
În întâmpinare a acestor efecte negativ e se poate veni cu funcția dilate().
Această funcție are scopul de a m ări dimensiunea obiectelor din imagine. La fel ca
funcția erode(), funcția dilate() parcurge matricea corespunzătoare imaginii în
binar și transformă valorile pixelilor în 1 daca cel puțin un pixel din nucleu are
valoarea 1. Concret, un pixel de valoare 1 din imaginea originală va transforma
toți vecinii în pixeli de valoare 1.
Funcția dilate() se apelează cu următorii parametri:
– imagine a sursă pe care se face prelucrarea, în cazul de fața imgBinary
– imaginea destinație în care sunt vizibile modificările, imaginea destinație
este de aceeași dimensiune cu imaginea sursă, în cazul de față, matricea
destinație este aceeași matrice cu sursă, r espectiv imgBinary
– o structură de tip element care reprezintă nucleul folosit pentru dilatare.
Efectul pe care îl are funcția dilate() asupra unei imagini se poate observa în
figura de mai jos.
Figura 3.7 Efectul funcției dilate () asupra unei imagini
Analizând efectele pe care le are aplicarea celor două funcții asupra unei
imagini se poate deduce foarte ușor ca prima funcție ce trebuie aplicată este
erode() pentru a elimina obiectele nedorite. Aplicarea întâi a funcției dilate() nu va
25
face decât sa măre ască suprafața obiectelor nedorite lucru ce nu convine căci
acestea nu vor mai putea fi șterse printr -un singur apel al funcției erode().
După apelul funcției erode() se va face un dublu apel al funcției dilate().
Un prim apel va construi zonele de obiecte deteriorate de funcția erode() în timp
ce un al doilea apel va elimina definitiv zonele de pixeli cu valoare 0 din interiorul
zonelor de pixeli cu valoare 1. Concret se vor elimina punctele negre din interiorul
suprafețelor albe.
În final se va mai face u n apel al funcției erode() pentru a reveni la
dimensiunea normală a obiectelor identificate. Întrucât vorbim despre identificarea
bilei, imaginea filtrată va conține un singur obiect.
Moments oMoments = moments(imgBinary);
În urma apelului celor două func ții, erode() și dilate(), prezentate anterior
am obținut imaginea în binar filtrată, imagine ce conține doar informațiile utile.
În continuare trebuie identificată zona în care apar e obiectul ce s -a dorit a
fi identificat . Pentru a identifica ace astă zonă se apelează funcția moments().
Această funcție este apelată cu un singur parametru, imaginea în binar, și
returnează un obiect de tip Moments ce conține atribute de tipul 𝑚𝑖𝑗. Fiecare
moment se calculează conform formulei următoare:
𝑚𝑖𝑗=∑( 𝑖𝑚𝑔𝐵𝑖𝑛𝑎𝑟𝑟𝑦 (𝑥,𝑦)∗𝑥𝑗∗𝑦𝑖)
𝑥,𝑦
(3.66)
Dintre aceste atribute, pentru identificarea obiectului vom avea nevoie
doar de : 𝑚00 , 𝑚10 și 𝑚01.
𝑜𝑀𝑜𝑚𝑒𝑛𝑡𝑠 .𝑚00 reprezintă zona pe care se întinde obiectul și se
calculează conform formulei :
𝑚00=∑𝑖𝑚𝑔𝐵𝑖𝑛𝑎𝑟𝑟𝑦 (𝑥,𝑦)
𝑥,𝑦
(3.67)
Practic 𝑚00 este egal cu numărul pixelilor de valoare 1 prezenți în imagine și
reprezintă dimensiunea obiectului.
𝑜𝑀𝑜𝑚𝑒𝑛𝑡𝑠.𝑚10 reprezintă suma coordonatelor de pe axa Ox a pixelilor
de valoare 1 și se calculează conform formulei:
𝑚10=∑(𝑖𝑚𝑔𝐵𝑖𝑛𝑎𝑟𝑟𝑦 (𝑥,𝑦)∗𝑥)
𝑥,𝑦
(3.68)
𝑜𝑀𝑜𝑚𝑒𝑛𝑡𝑠 .𝑚01 reprezintă suma coordonatel or de pe axa Oy a pixelilor
de valoare 1 și se calculează conform formulei:
𝑚01=∑(𝑖𝑚𝑔𝐵𝑖𝑛𝑎𝑟𝑟𝑦 (𝑥,𝑦)∗𝑦)
𝑥,𝑦
(3.69)
26
Pentru a calcula poziția centrului obiectului identificat se va împărți
𝑚01 𝑙𝑎 𝑚00 respectiv 𝑚10 𝑙𝑎 𝑚00 conform formulei de mai jos și rezultatele vor
fi memorate in două variabile sugestive.
𝑥𝑐𝑒𝑛𝑡𝑟𝑢=𝑚01
𝑚00
(3.70)
𝑦𝑐𝑒𝑛𝑡𝑟𝑢=𝑚10
𝑚00
(3.71)
Probleme întâmpinate în procesul de identificare a obiectului
Identificarea poziției bilei în raport cu centrul roții nu a fost o problemă
ușor de rezolvat. Ținând seama că s -a dorit realizarea unei aplicații care să
funcționeze în timp real, al goritmul de identificare a poziției roții trebuie sa
funcționeze cu un minim de resurse și într -un timp cat mai scurt.
Algoritmul de detecție a obiectului respectiv a poziției acestuia este
îngreunat de dimensiunea imaginii, astfel procesarea unei imagini mari va fi
consumatoare de timp introducând întârzieri în algoritm. De aceea, încă de la
început s -a setat ca dimensiunea imaginilor capturate sa nu fie mai mare decât
diametrul bilei în înălțime și nu mai mare decât diametrul roții în lățime.
Pentru setar ea dimensiunilor imaginilor capturate s -au folosit funcțiile
următoare:
cap.set(CV_CAP_PROP_FRAME_WIDTH, latime);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, inaltime);
unde „latime” și „inaltime” reprezintă doi întregi pozitivi ce specifică dimensiunile
imaginil or.
Această abordare scoate în evidență în mod indirect încă un avantaj, acela
că limitând imaginea la anumite dimensiuni, imaginile capturate nu vor ilustra
decât bila respectiv o parte din roată. Așadar algoritmul de identificare va fi
vizibil fluidizat întrucât se evită riscul apariției în imagine a unui obiect de aceeași
culoare cu a obiectului ce se dorește a fi identificat. În plus imaginea captată va
conține doar doua nuanțe de culori, o nuanță de culoarea roții și o nuanță de
culoarea bilei.
Una di n problemele peste care am dat la implementarea algoritmului de
identificare a poziției obiectului ur mărit a fost aceea că imaginea prelucrată era
foarte mult întârziată de imaginea captată. Astfel nu se putea vorbi despre o
detecție în timp real a poziți ei bilei. În urma unor documentări am constatat că
această problemă era datorată driverului de cameră, fiind utilizat unul neoficial.
27
3.4.Colectarea informațiilor despre roată
Celelalte informații de care are nevoie regulatorul pentru calculul comenzii
sunt poziția r oții și viteza unghiulară cu care se deplasează aceasta. Aceste
informații sunt deținute de către microcontroler și pentru a le putea utiliza va trebui
ca mai întâi să fie configurată comunicația dintre Raspberry PI și microcontroler.
Comunicația dintre Ra spberry PI și microcontroler se realizează prin
intermediul unei magistrale SPI ( Serial Peripheral Interface ) . Raspberry PI -ul este
echipat cu o magistrala SPI care are doua chip select –uri. În cadrul schimbului de
informații placa Raspberry PI ocupă fun cția de master în timp ce microcontrol erul
este folosit pe post de slave.
Comunicația dintre cele două dispozitive se realizează prin intermediul a
patru fire așa cum este sugerat și în figura de mai jos.
Figura 3.8. Semnalele de c omunicaț ie dintre un ma ster și un slave
SCLK – Acest semnal reprezintă semnalul de ceas dat de către master.
Știind că masterul selectează frecvența la care are loc transmisia trebuie ținut cont
că frecvența ceasului nu trebuie sa fie mai mare decât frecventa la care lucrează
microcontrolerul. Frecvența la care are loc transmisia de date va fi setată prin
intermediul unei funcții despre care se va vorbi ceva mai târziu.
MOSI – Master Out Slave In – Prin intermediul acestui semnal se transmit
informațiile de la Master către Slave .
MISO – Master In Slave Aut – Prin intermediul acestui semnal Master -ul
recepționează informații de la Slave
SS – Slave Select – Acest semnal este folosit în cazul în care are loc o
comunicație între un dispozitiv Master și mai multe dispozitive Slave și are rolul de
a semnala Slave ul cu care se face comunicația la un moment dat. În cazul de față,
fiind vorba doar de un singur Slave semnalul SS poate fi setat pe nivel logic „low”.
Pe lângă aceste patru fire folosite pentru transmiterea semnalelor
prezenta te mai sus, se mai folosesc și fire pentru a realiza masa comună.
Transmisia prin SPI este full duplex, astfel în timpul unui ciclu de ceas SPI:
– Master ul trim ite un bit pe linia MOSI, Slave ul îl citește de pe aceeași linie
– Slave ul trimite un bit pe lini a MISO, Masterul îl citește de pe aceeași linie
[9]
28
În mod normal transmisia invocă doi regiștri de șiftare, ambii de aceeași
dimensiune de 8 biți unul în Master și unul în Slave conectați sub forma unei
topologii inelare prin int ermediul semnalelor MOSI și MISO. Transmiterea datelor
are loc șiftând spre dreapta biții ambilor regiștri, astfel din fiecare registru pleacă
bitul cel mai puțin semnificativ mergând în celălalt registru pe poziția cea mai
semnificativă. Procedeul se reia până când toți biții din cei doi regiștri sunt
interschimbați. În cazul în care se dorește transmisia unei informații mai
consistente, după interschimbarea primilor 8 biți, informația din cei doi regiștri se
memorează apoi regiștrii sunt goliți în vederea alimentării acestora cu o nouă
informație ce trebuie transmisă. Transmisia informațiilor între un Master și un
Slave este evidențiată și în figura de mai jos. [9]
Figura 3.8. Tr ansmiterea informațiilor prin ș iftarea regiștrilo r
Când toate informaț iile au fost transmise Masterul oprește semnalul de
ceas și bineînțeles conexiunea cu Slave ul.
Pe lângă set area frecvenței de ceas, Master ul trebuie să configureze de
asemenea și polaritatea respectiv faza ceasului prin setarea a două opțiuni: CPOL
și CPHA.
Dacă CPOL =0 atunci valoarea de bază a ceasului este zero:
– dacă CPHA =0 -> datele sunt capturate pe tranziția low -high a ceasului și
transmise pe tranziția high -low
– daca CPHA =1 -> datele sunt capturate pe tranziția high -low a ceasului
și transmise pe tranziția low -high
Daca CPOL = 1 atunci valoarea de bază a ceasului este unu :
– daca CPHA =0 -> datele sunt capturate pe tranziția high -low a ceasului
și transmise pe tranziția low -high
– dacă CPHA =1 -> datele sunt capturate pe tran ziția low -high a ceasului și
transmise pe tranziția high -low
29
În funcție de combinațiile dintre valorile lui CPOL și CPHA se obțin modurile
de transmisie ale SPI -ului. Acestea sunt reprezentate în tabelul de mai jos.
MOD CPOL CPHA
MOD0 0 0
MOD1 0 1
MOD2 1 0
MOD3 1 1
Tabelul 3.1. Modurile de transmisie ale SPI -ului
În figura de mai jos este prezentat în mod grafic interacțiunea dintre
valorile lui CPOL și CPHA.
[9]
Figura 3.9. Diagramă de timp sugerând interacțiunea dintre CP OL și CPHA
Frecvența la care se transmit datele se calculează împărțind frecvența
ceasului intern al Raspberry PI -ului la un „Clock Divider”(CDIV). Divizorul de ceas
trebuie sa fie o putere de -a lui 2 , în caz contrar acesta este rotunjit la cea mai
apropiată putere inferioară. În cazul în care CDIV =0 atunci se va considera că
divizorul este 65536. [10]
În funcție de valorile divizorului de ceas vom avea diferite viteze de
transmisie a informațiilor conform următorului tabel.
CDIV 2 4 8 16 32 64 128 256
VITEZA 125
MHz 62.5
MHz 31.2
MHz 15.6
MHz 7.8
MHz 3.9
MHz 1953
kHz 976
kHz
Tabelul 3.2 De pendența vitezei de transmisie î n funcție de divizorul de ceas
CDIV 512 1024 2048 4096 8192 16384 32768
VITEZA 488kHz 244kHz 122kHz 61kHz 30.5kHz 15.2kHz 7629Hz
Tabelul 3.3 Dependența vitezei de transmisie î n funcție de divizorul de ceas
30
În paragrafele ce urmează va fi detaliat modul în care informațiile despre
poziția respectiv viteza roții au fost colectate. Pentru a putea obține acest e
informații a fost necesar ă parcurgerea pașilor următori evidențiați și în diagrama
de mai jos.
– conectarea fizică a celor două magistrale SPI
– inițializare transmisie
– configurarea magistralei SPI
– semnalarea Slave -ului ca începe transmisia
– recepționarea poziției roții
– recepționarea vitezei roții
– închiderea transmisiei
Figura 3.9. Comunicația prin SPI
Conectarea fizică a celor două magistrale s -a realizat prin intermediul unor
conectori de tip mamă -mamă. S -au folosit 6 conectori, unul pentru SCLK, unul
pentru MOSI, unul pentru MISO și doi conectori pentru GND.
Pentru configurarea SPI -ului s -a utilizat o bibliotecă de funcții scrise în C
care oferă funcții pentru citirea intrărilor digitale si setarea ieșirilor digitale si
pentru accesul la timerele sistemu lui. Această bibliotecă este compatibilă și cu C++
astfel s -a putut intercala codul utilizat pentru recepționarea informațiilor despre
roata cu codul utilizat pentru identificarea obiectului.
bcm2835_spi_begin();
Această fun cție este folosită pentru a iniț ializa comunicația. Prin apelul
acesteia se pornesc operațiile SPI -ului și se setează pinii utilizați in transmitere.
Pinul 19 este folosit pentru SPI_MOSI, pinul 21 pentru SPI MISO, pinul 23 pentru
SPI_SCLK și pinul 24 pentru SPI_SS.
31
bcm2835_spi_setBitOrd er(BCM2835_SPI_BIT_ORDER_MSBFIRST);
Această funcție a fost utilizată pentru a seta ordinea in care sunt trans miși
biții. După cum se poate ș i vedea din apelul acesteia, s -a stabilit ca biții sa fie
trimiși începând cu cel mai semnificativ și terminând cu cel mai puțin semnificativ.
bcm2835_spi_setDataMode(BCM2835_SPI_MODE0);
Pentru a putea sincroniza comunicația între cele două dispozitive este
esențial ca acestea sa aibă același mod de transmisie respectiv recepție a
informațiilor. S -a stabilit ca modul de transmisie sa fie MODE0, mod ale cărui
caracteristici au fost detaliate în paragrafele anterioare.
bcm2835_spi_setClockDivid er(BCM2835_SPI_CLOCK_DIVIDER_12
8);
O altă funcție importantă ce trebuie apelată în procesul de configurare al
SPI-ului este aceea de setare a divizorului de ceas. Aceasta are scopul de a genera
semnal de ceas la o anumită frecvență. S -a ales valoarea de 128 pentru divizorul
de ceas acest lucru însemnând o viteză de pană la 2Mbit/s.
bcm2835_spi_chipSelect(BCM2835_SPI_CS0);
bcm2835_sp i_setChipSelectPolarity(BCM2835_SPI_CS0, LOW);
Aceste două funcții au rolul de selecta Slave ul cu care se face comunicația
și de a -i seta polaritatea. În cazul de față, lucrând cu un singur Slave s -a ales ca
Chip Select CS0 și drept polaritate Low.
inform atie_citita = bcm2835_spi_transfer(informatie_expediata);
Funcția spi_transfer() are rolul de a transfera informațiile dintre Master și
Slave . Aceasta este apelată cu un parametru pe 8 biți ce reprezintă informația
transmisă și returnează un parametru tot pe 8 biți ce reprezintă informația primită
prin intermediul magistralei. Informația transmisă este scrisă pe MOSI în timp ce
informația recepționată este citită de pe MISO.
Întrucât apelul acestei funcții declanșează simultan transmiterea spre și
dinspre microcontroler, microcontrolerul nu știe când începe transmiterea fapt
pentru care nu are pregătită informația ce trebuie transmisă. Prin urmare este
necesar ca microcontrolerul sa fie anunțat atunci când se dorește furnizarea unor
informații pentru a și l e pregăti din timp.
Așadar s -a folosit un prim apel al acestei funcții pentru a an unța
microcontrolerul c ă Master ul dorește furnizarea informațiilor despre roată. În acest
prim apel, parametrul cu care este apelată funcția poate fi sau nu o informație
importantă în timp ce parametrul returnat de funcție cu siguranță că nu deține o
informație utilă.
Ținând cont că valorile poziției respectiv vitezei roții sunt reprezentate pe
16 biți și că funcția spi_trasfer() returnează un parametru reprezentat pe 8 biți a
fost necesar ca pentru transmiterea fiecărei informații, funcția să fie apelată de
câte două ori. Funcția a fost apelată o dată pentru recepționarea părții high a
informației și o dată pentru recepționarea părții low a informației. Făcând niște
calcule simple se poate observa că pentru transferul efectiv al informațiilor dorite
funcția spi_transfer() a fost apelată de încă patru ori.
Referința de curent ce trebuie transmisă microcontrolerului este o variabilă
reprezentată tot pe 16 biți de aceea două di n cele patru apeluri ale funcției au fost
utilizate și pentru transmiterea pă rții high respectiv low a referinței. Celelalte două
apeluri ale funcției vor transmite informații inutile microcontrolerului.
32
După apelul celor 4 funcții spi_transfer() va trebui să fie reformate valorile
pe 16 biți ale poziției respectiv vitezei roții. Calculul c elor două variabile s -a făcut
șiftând cu 8 biți la stânga partea high și apoi adunând la aceasta partea low
conform instrucțiunilor de mai jos :
pozitie_roata = pozit ieHigh << 8 + pozitieLow;
viteza_roata = vitezaHigh <<8 + vitezaLow;
Valorile pentru poziția respectiv viteza roții au fost memorate în două
variabile cu nume sugestiv. Informațiile din variabile sunt actualizate constant, de
fiecare dată când s e face comunicația cu microcontrolerul.
După ce informațiile utile fiecărui dispozitiv au fost trimise, se închide
comunicația apelând funcția de mai jos :
bcm2835_spi_end();
Probleme întâmpinate în procesul de implementare a comunicației SPI
O primă p roblemă peste care am dat î n procesul de implementare a
comunicației SPI a fost legată de modul de transmisie a informațiilor . Dacă în
Raspberry PI modul este calculat în funcție de valorile lui CPOL și CPHA , în
microcontroler modul este calculat î n func ție de CPOL și 𝐶𝑃𝐻𝐴 . Astfel chiar dacă
atât în Raspberry PI cât și în microcontroler este setat Modul 0, acestea nu se pot
sincroniza.
Prin urmare pentru a rezolva problema întâmpinată s -a setat în Raspberry
PI Modul 0 acest lucru însemnând CPOL = 0 și CPHA =0 și apoi s -a verificat cărui
mod din microcontroler îi corespund valorile de 0 pentru CPOL și 1(0 negat) pentru
CPHA.
Cu toate că în urma documentărilor s-a reușit trecerea ambelor dispozitive
pe un mod comun, transmisia tot nu a fost sincr onizată. Informațiile citite de pe
MISO dădeau impresia că microcontrolerul nu are timp să actualizeze informațiile
din buffer. Pentru rezolvarea acestei pro bleme s -a recurs la utilizarea a încă unui
semnal car e să anunțe Masterul dacă Slave ul a actualizat sau nu informația din
buffer.
Astfel a fost amplasat un conector între un pin al Raspberry Pi -ului și un
pin al microcontrolerului. Pinul Raspberry PI -ului a fost setat drept canal de intrare
prin comanda:
bcm2835_gpio_fsel(PIN,BCM2835_GPIO_FSEL_INPT);
S-a convenit ca starea de Low a semnalului de pe acest fir să indice
disponibilitatea microcontrolerului pentru schimbul de informații în timp ce starea
de high a semnalului să indice faptul că microcontrolerul încă nu a actualizat
bufferul SPI. Inițial, se mnalul este p e Low indicând faptul ca Master ul poate iniția
transmisia. După primul apel al funcției spi_transfer() semnalul va fi mutat pe
high pană când microcontrolerul schimbă datele ce trebuie transmise pe canalul
MISO.
Așadar înainte de fiecare apel al funcției spi_transfer() se așt eaptă ca
semnalul de pe pinul respectiv să fie trecut î n starea Low .
33
4.Structura Algoritmului
În schema de mai jos este prezentat modul cum funcționează algoritmul
de reglare a poziției bilei. Pe lângă implementarea modulelor pr incipale prezentate
în paginile anterioare a mai fost implementat un timer care să ofere întreruperi din
200ms în 200ms, aceasta fiind perioada de eșantionare a algoritmului de reglare.
Algoritmul de identificare a poziției bilei rulează ciclic, poziția ac esteia fiind
actualizată în continuu însă la fiecare perioada de eșantionare (200ms ) acest
algoritm este întrerup t. Întreruperea are rolul de a calcula comanda în funcție
poziția actuală a bilei și în funcție de poziția respectiv viteza roții obținute anterior.
Această comandă este transmisă prin SPI drept referință către microcontroler,
timp în care sunt achiziționate poziția și viteza roții necesare calculului comenzii
viitoare.
Chiar și în momentul în care bila ajunge în poziția dorită algoritmul tot
funcționează calculând poziți a bilei si furnizând comenzi către regulatorul de
curent. Oprirea acestui algoritm se realizează doar atunci când programul este
întrerupt.
Figura 4.1. Schema algoritmului de reglare a poziției bilei
34
5.Rezultate Experimentale
5.1.Identificarea pozi ției bilei
În vederea verificării faptului că algoritmul de identificare a poziției bilei
funcționează corect s-au adus câteva modificări programului. În mod normal acest
algoritm are drept țintă memorarea poziției bilei într -o variabilă, variabilă ce este
utilizată ori de câte ori este nevoie de către algoritmul de calculare a comenzii ce
trebuie transmisă regulatorului de curent.
Modificările ce au fost aduse algoritmului nu influențează strategia de
identificare a poziției bilei, modificările fiind bazat e pe afișarea imaginii originale
surprinsă în diferiți pași ai algoritmului de identificare. Aceste modificări au doar
scopul verificării cor ectitudinii algoritmului ele nefiind vizibile î n forma finală a
algoritmului întrucât introduc întârzieri vizibile în program.
Pentru verificarea corectitudinii algoritmului de identificare și calculare a
poziției bilei s-a folosit un obiect de culoare neagră așa cum se observă și în
imaginea de mai jos, imagine ce reprezintă imaginea originală preluată de cameră.
Figura 5.1.Imaginea originala preluată de cameră
Următorul pas al algoritmului, acela de a trece imaginea din format RGB în
format HSV este ilustrat în figura de mai jos.
Figura 5.2 .Imaginea în format HSV
35
Următorul pas al algoritmului a constat în tre cerea imaginii din formatul
HSV în binar. Această trecere este evidențiată în figura de mai jos prin prezentarea
imaginii în format binar.
Figura 5.3 .Imaginea în format binar
După cum se și vede în figura de mai sus, obiectul nu este pe deplin
identifica t și în plus sunt identificate si alte obiecte de dimensiuni mult mai mici.
Prin urmare imaginea trebuie trecută prin următorul pas al algoritmului, pas in
care are loc filtrarea acesteia.
În figura de mai jos se pot observa foarte bine efectele pe care -l are funcția
erode() asupra imaginii. Aceasta elimină obiectele de dimensiuni mici din imagine
dar din păcate mărește și punctele negre din interiorul obiectului detectat.
Figura 5.4 .Imaginea în format binar după aplicarea funcției erode()
În continuare algoritmul trebuie să refacă obiectul, prin urmare imaginea
trece prin dublul apel al funcției dilate() și încă o dată prin apelul funcției erode().
După acest pas imaginea arată conform figurii de mai jos.
Figura 5.4 .Imaginea în format binar filtrată
36
O ultimă etapă a algoritmului de identificare constă în calculul centrului
obiectului identificat. Acest pas este ilustrat sugestiv în figura 5.5. unde peste
imaginea originală a fost marcat centrul obiectului identificat respectiv scrise
coordonatele acestui a.
Figura 5.5 .Imaginea în format binar filtrată
5.2.Urmărirea obiectului identificat
Dacă în secțiunea anterioară am demonstrat ca algoritmul de identificare
al obiectului dorit funcționează, în paragrafele următoare se va ilustra faptul că
prin inter mediul algoritmului, obiectul identificat este urmărit și ii este calculată
corect poziția centrului.
Figura 5.6.Urmarirea obiectului detectat
37
După cum se poate observa în imaginile anterioare, algoritmul
implementat este capabil să urmărească obie ctul identificat și îi calculează corect
coordonatele centrului.
5.3.Comunicația cu microcontrolerul
Așa cum am precizat în capitolele anterioare, pentru obținerea informațiilor
despre roată trebuie utilizată interfața SPI. Pentru verificarea corectitudinii
transmiterii datelor respectiv corectitudinea refacerii acestora s -au transmis
diferite informații dinspre microcontroler spre Raspberry PI.
S-a observat că indiferent de informația trimisă, comunicația prin SPI dă
rezultate furnizând corect destinatarului informațiile transmise de expeditor. S -a
testat funcționalitatea acesteia trimițând inițial variabile cu valori constante ca mai
apoi variabilele sa -și modifice valorile înainte de a fi transmise către destinatar.
Un ultim test al comunicației prin SPI a fost transmiterea dinspre
microcontroler către Raspberry PI a vitezei de rotație a roții în funcție de un factor
de umplere dat PWM -ului. S -au citit de pe SPI următoarele valori ale vitezei
corespunzătoare unui anumit factor de umplere conform tabelului de mai jos.
Factor de
umplere (%) 2 4 6 8 10 15 20 25 30
Viteza (rad/sec) 2.24 7.26 12.08 16.44 20.7 31.8 43.1 53.9 65
Tabelul 5.1 Dependența Factor de umplere – Viteză
Figura 5.7 . Dependența Factor de umplere – Viteză
Așa cum se p oate observa și din graficul de mai sus , vitez a este
propor țională cu factorul de umplere, în consecinț ă informațiile trimise prin SPI
sunt relevante.
0,005,0010,0015,0020,0025,0030,0035,0040,0045,0050,0055,0060,0065,0070,00
0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32Dependența Factor de umplere -Viteză
38
6.Concluzii
Platforma „Bila pe roată ” este un sistem neliniar co mplex ce necesită mult
efort dacă se doreș te reglarea acestuia. Așa cum se și desprinde din capitolele
precedente, pentru a menține bila în echilibru deasupra roții a fost necesară
identificarea modelului matematic al sistemului precum și identificarea comenzii
ce trebuie lansată regulatorului de curent. Această etapă a necesitat cunoș tințe
consistente de analiză Matematic ă și Fizică .
Odată identificată expresia comenzii a trebui t să obținem ingredientele
necesare calculului acesteia . Identificarea poziției centrului bilei a constituit o etapă
foarte importantă dar ș i foarte costisitoare d in punct de vedere al timpului
respectiv al resurselor folosi te. Pentru a identifica obiec tul dorit a fost necesară
aplicarea unor funcț ii asupra imaginilor capturate. Aplicarea acestor funcții a
necesitat deținerea unor cunoș tințe minime de Programare O rientată pe Obiecte
în timp ce î nțelegerea modului cum lucrează aceste funcții a fost susținută de
experiența lucrului cu mat rici.
Obținerea informațiilor despre poziția respectiv viteza roții a necesitat
comunicația cu un microcontroler prin intermediul SPI. Pentru a realiza această
comunicație au fost necesare c âteva cu noștințe despre T ransmiterea D atelor
precum și reprezentarea acestora pe biți. Și această etapă a f ost susținută de
existența unor cunoș tințe de programare .
Prin urmare, implem entarea algoritmului de stabilizare a bilei deasupra
roții necesită deținerea unor cuno ștințe minime din diferite domenii, cunoș tințe ce
au fost acumulate în timpul celor patru ani de studiu.
Din păcat e scopul proiectului, stabilit î ncă de la î nceputul lucră rii nu a fost
pe deplin ati ns ceea ce lasă o urmă de dezamă gire pe chipul muncitorului dar
rezultatele ce au fost obț inute până în acest moment î mi oferă î ncrederea ca în
viitorul apropiat pot să duc la bun sf ârșit ceea ce am început.
Până în acest moment s -au implemen tat algoritmii de obținere a
informațiilor necesare algoritmului de reglare a poziției aceștia fiind constituiți i din
preluarea și prelucrare a de imagini, identificarea obiectelor precum și comunicația
cu microcontrolerul urmând ca p ână la atingerea obiectivului să mai fie fă cuți
câțiva pași concretizați în identifi carea parametrilor sistemului și implementarea
expresiei comenzii .
Această lucrare, prin complexitatea ei, mi -a pus la î ncercare cunoș tințele
dobândite î n acest domeniu al automatiză rilor, mi -a arătat limitele p e care le am
în diferite arii și mi-a testat capacitatea de a mă descurca în diferite situaț ii
delicate . Parcurg ând toate etapele e numerate mai sus am putut observa cum
diferit e noțiuni teoretic e sunt implementate î n practică și care sunt diferenț ele intre
teorie ș i practică .
39
7.Anexe
40
Bibliografie
[1] I. Ș. Sacală, „Acționări,” București, 2015.
[2] „Wikipedia – Motorul electric,” [Interactiv]. Available:
www.wikipedia.org/wiki/M otor_electric.
[3] K. Daly, „Implementing the Quotient Method Controller,”
[Interactiv].
[4] „Raspberry PI – Generalități,” [Interactiv]. Available:
www.raspberrypi.org/products/model -b-plus/.
[5] Y.-W. T. H. -S. L. MING -TZU HO, „Controlling a Ball a nd Wheel
System Using Full -State -Feedback Linearization,” 2009. [Interactiv].
[6] C. Schiopu, „Fizică Generală,” [Interactiv]. Available:
http://www.physics.pub.ro/Cursuri/Carmen_Schiopu_ –
_Fizica_generala_1/ANEXA_1_Mecanica_analitica.pdf.
[7] I. I. S. M. Petrescu -Prahova, FIZICĂ – Manual pentru clasa a
VII-a, București: Editura Didactică și Pedagogică, 1998.
[8] „MathWorks – Erode() și Dilate(),” [Interactiv]. Available:
http://www.mathworks.com/help/images/morphology -fundamentals –
dilation -and-erosion.html.
[9] „Wikipedia – SPI,” [Interactiv]. Available:
https://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus.
[1
0] „Raspberry PI – SPI,” [Interactiv]. Available:
www.raspberrypi.org/documentation/hardware/raspberrypi/spi/READ
ME.md.
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: București, 2015 [615488] (ID: 615488)
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.
