București, 2018 [615489]

Universitatea Politehnica din București
Facultatea de Automatică și Calculatoare
Departamentul de Automatică și Informatică Industrială
București, 2018

LUCRARE DE LICENȚĂ

Platforma “Bilă pe roată”
Contrucție și sinteză de regulator

Absolvent: [anonimizat]

2
Cuprins

1. Introducere ………………………….. ………………………….. ………………………….. ………………………….. ………… 3
1.1 Descrierea problemei ………………………….. ………………………….. ………………………….. ……………… 3
1.2 Descrierea soluției problemei ………………………….. ………………………….. ………………………….. ….. 3
2. Prezentarea platformei hardware ………………………….. ………………………….. ………………………….. …….. 4
2.1 Raspberry PI ………………………….. ………………………….. ………………………….. …………………………. 5
2.2 Camera ………………………….. ………………………….. ………………………….. ………………………….. …….. 6

3

1.Introducere

1.1 Descrierea problemei

4

2. Prezentarea platformei hardware

2.1 Raspberry Pi
Raspberry Pi este un computer de dimensiuni reduse, aproximativ cele ale unei cărți de
credit. Acesta este “creierul” întregii platforme, fiind locul în care este executată , spre exemplu,
procesarea imaginii primite de la camera video . Pe lângă asta, aici se realizează calculul distanței
reale parcurse de bilă pe roată și se implementează algoritmul de reglare automată având ca suport
informațiile primite de la cameră și informațiile despr e roată recepționate de la microcontroller pe
magistrala serială.
Din punct de vedere tehnic, placa este un Raspberry Pi 3 model B . Ca și dotări dispune de
un procesor Quad Core 1.2GHz Broadcom BCM2837 pe 64 de biți, 1GB memorie RAM, adaptor
wireless LAN s i Bluethoot Low Energy, 40 de biți GPIO, 4 porturi USB 2.0, port HDMI, port CSI
pentru cameră video Rasperry Pi, port Ethernet, jack de 3.5mm, port Micro SD și port de alimentare
Micro USB de 2.5A. Sistemul de operare utilizat este Raspbian Jessie, care es te o distribuție de
Linux realizată special pentru plăcile Raspberry Pi. Sistemul de operare a fost încarcat pe cardul
de memorie Micro SD.
Perifericele utilizate în cadrul proiectului au fost un mouse și o tastatură conectate prin
intermediul porturilor U SB, monitorul conectat prin intermediul portului HDMI și camera video
conectată pe portul CSI. Portul serial este folosit pentru comunicația cu microcontrollerul.

2.2 Camera video
Camera video este un Raspberry P I Camera Module v2 și are un senzor de 8 megapi xeli
produs de Sony. Aceasta reprezintă elementul platformei care urmărește mișcarea bilei pe roată și
transmite în timp real imaginile către Raspberry P I.
Camera este situată pe suportul metalic deasupra roții la o distanță potrivită pentru a putea
inform ații suficiente în vederea identificării poziției bilei. În imaginea de mai jos avem amplasarea
camerei în raport cu bila și roata.

5

2.3 Microcontroller
Microcontrollerul este utilizat pentru a comanda motorul de curenti continuu. Din punct de
vedere tehnic, acesta este un Microchip dsPIC33EP512MC502 pe 16 biți. Acesta mai are în
componență un compilator de C cu set optimizat de instrucțiuni, iar arhitectura pe care este realizat
este Harvard.
Din punct de vedere al conectivității, dsPIC33EP512MC502 are ca interfețe de comunicare:
două module UART, două module 4 -wire pentru SPI și două module I2C. În cadrul proiectului
modulul de comunicație utilizat este cel UART.

2.4 Motor de curent continuu
Motorul de curent continuu are ca obiectiv generarea energiei mecanice din energie
electrică pentru a mișca roata amplasata pe axul său în direcția și cu viteza comandate de
microcontroller. Din punct de vedere teoretic, acesta este un element electromecanic al cărui rol
este de a convertii energia electrică în energie mecanică. Operațiunea inversă este realizată de
elementele electromecanice numite generatoare.
Din punct de vedere constructiv, motorul este alcătuit din două componente: stator și rotor.
Statorul este partea fixă a motorului, iar rotorul este partea mobilă. Statorul este alcătuit în general
din carcasă, armătură feromagnetică statorică, borne de alimentare și înfășurare s tatorică, iar rotorul
este alcătuit dintr -un ax și o armătură rotorică. Între stator și rotor există o porțiune de aer numită
întrefier ce permite mișcarea rotorului față de stator, iar grosimea s a este un indicator pentru
performanțele motorului. [1]
Motorul utilizat în cadrul proiectului este unul cu excitație separate. Acesta poate identifica
deplasarea axului față de poziția inițială și viteza de rotație a acestuia prin intermediul unui encoder .
Figura 2.2.1. Amplasarea camerei [2]

6
Această componentă este esențială în vederea obiectivului principal al platformei, și anume
implementarea regulatorului de poziție al bilei.

2.5 Cadrul de suport metalic
Din punct de vedere fizic, cadrul are rolul de a fixa și ține împreună toate componentele
platformei hardware. El are un rol foarte important, iar precizia construcției a fost esențială pentru
realizarea proiectului. Materialul din care a fost construit este aluminiu.
Cadrul oferă suport pentru sursa electrică necesară alimentării motorului de current
continuu, motorul de current continuu și roata. Pe lângă acestea, mai este prevăzut și cu un braț de
susținere pentru camera video. Acesta are realizată o fantă pentru a facilita captarea imaginii video
de ansamblu de la o distanță pot rivită.
Pentru a preveni căderea bilei de pe roată la pornirea sistemului, cadrul mai este prevăzut
și de două bariere de o parte și cealaltă a roții.

2.6 Roata
Roata este confecționată din plexiglas. Aceasta este rotită în ambele sensuri de către
motorul de current continuu cu anumite viteze pentru a deplasa bila în direcția potrivită.

2.7 Bila
Bila este elementul central al platformei deoarece ea este urmărită prin intermediul camerei
video, iar roata este învârtită pentru a o menține sus.
Deoarece imaginea pre luată de la camera video este procesată pe bază de culoare, este
indicat ca bila să aiba o culoare diferită față de roată astfel încât să fie identificată și urmărită cu
precizie maximă.

3. Implementarea soluției problemei

Pentru a putea ajunge la o soluție pentru problema de reglare trebuie ca, în primul rând, să
privim schematic structura sistemului și modul în care componentele sistemului ar trebui să
interacționeze între ele.
Un mod intuitiv de a realiza acest lucru este prin crearea unei scheme b loc a sistemului, schemă
ce ar trebui să fie suficient de sugestivă pentru a putea înțelege părțile componente ale platformei
și rolul lor în sistem.

7

După cum se poate observa în Figura 3.1, funcționarea platformei este următoarea:
– Camera video captează imaginile cu bila pe roată și le trimite către Raspberry PI;
– Raspberry PI recepționează imaginile de la cameră și, cu ajutorul bibliotecilor Open
CV, prelucrează imaginea pentru a obține poziția roții;
– Raspberry PI primește poziția roții și viteza roții de la microcontroller pe interfața
serială;
– Algoritmul de reglare implementat pe Raspberry PI folosește aceste informații și
calculează referința de curent, care va fi transmisă microcontroller -ului pe inter fața
serială;
– Microcontroller -ul primește referința de curent de la Raspberry PI , informațiile despre
viteză și poziție roată de la encoder și măsurătoarea de curent de la motor;
– Pe baza informațiilor din microcontroller, acesta trimite comanda de reglare la motorul
de curent continuu;
– Se repetă procedura de mai sus cu date actualizate.
Camera video dă informații în mod continuu către Raspberry PI, informații cu ajutorul
cărora se calculează poziția bilei, iar viteza și poziția roții sunt preluate de la mic rocontroller.
Acestea sunt variabilele necesare pentru ca regulatorul de poziție să fie implementat.

3.1 Biblioteca OpenCV
OpenCV (Open Source Computer Vision Library) este o bibliotecă licențiată open -source
care include o multitudine de algoritmi utilizați în computer vision. [3]
În cadrul proiectului am utilizat OpenCV 3.x API, care este practic un API C++.
Func ționalitățile OpenCV sunt următoarele:
Figura 3.1. Arhitectura sistemului de reglare

8
– Funcționalitatea de bază, care este un modul compact ce definește structuri de date de
bază, cum ar fi ve ctorul multidimensional Mat, care vor fi utilizate de toate celelalte
module.
– Procesarea de imagine, care este un modul ce include filtrări de imagine liniare și non –
liniare, transformări geometrice, conversie a spațiului de culoare, histograme și altele.
– Video, care este un modul de analiză video care include estimări de mișcare, substracția
fundalului și algoritmi de urmărire a obiectului.
– Calib3d, modul care conține elemente de reconstrucție 3D, algoritmi de vizualizare
geometrică multiplă, algoritmi de calibrare ai camerei și altele.
– Features2d, modul care conține detecție a caracteristicilor proeminente și descriptori.
– Objdetect, care oferă capabilități de detecție a obiectelor și instanțelor claselor
predefinite (de exemplu, fețe, ochi, persoane, mașin i și altele).
– Highgui, care este o interfață vizuală pentru capablități user -interface.
– Video I/O, care este o interfață vizuală pentru capturi și codecuri video.
– Gpu, care reprezintă algoritmi de accelerare GPU pentru diverse module OpenCV. [3]
Toate f uncțiile și clasele sunt situate în C/C++ în namespace -ul cv. Pentru utilizarea
propriu -zisă într -un program C/C++ a funcționalităților OpenCV se va utiliza specificatorul „cv::”
sau se va utiliza directiva „using namespace cv;”. [3]
Din punct de vedere al alocării de memorie, OpenCV se ocupă automat de aceasta. De
asemenea, acesta se ocupă și de dezalocarea dinamică de memorie . OpenCV are și funcționalități
de manipulare a erorilor prin intermediul instanțelor „cv::Exception”. Implementarea OpenCV este
reentrabilă, adică instanțele constante și non -constante ale unei clase sau aceași funcție pot fi
apelate din fire de execuție diferite. [3]

3.2 Descrierea metodei de identificare a poziției bilei pe roată
Achiziția imaginilor de la camera video este primul pas în identificarea în timp real a
poziției bilei pe roată. Mai departe în acest subcapitol va fi detaliat modul în care se identifică și se
urmărește bila pe roată.
Identificarea bilei pe roată se realizează pe b ază de culoare cu ajutorul bibliotecii OpenCV,
iar algoritmul de identificare urmează următorii pași:
– Captare imagine RGB cu ajutorul camerei video;
– Imaginea RGB este convertită în format HSV;
– Imaginea HSV este convertită ulterior în format binar;
– Imaginea binară este filtrată;
– Se identifică obiectul din imagine, se calculează și memorează centrul obiectului din
imagine.
Pentru a ob ține informațiile se folosește un modul video Raspberry PI Camera Module v2
și înregistrează imaginea video cu ajutorul unui se nzor de 8MP la un framerate de 90fps. Imaginile
sunt prelucrate pe placa Raspberry PI cu ajutorul bibliotecilor OpenCV importate într -un fișier
C++. Implementarea propriu -zisă a funcțiilor OpenCV de prelucrare a imaginii de la camera video
începe prin util izarea funcției VideoCapture, care are rolul de a deschide camera și crea un obiect
„cap”. În C++ avem:
VideoCapture cap(0);

9
Ulterior, se testează dacă operațiunea a fost realizată cu succes și camera s -a deschis
utilizând un bloc „if” și testând obiectul „cap” astfel :
if(!cap.isOpened ()){

}
În situația în care funcția „cap.isOp ened() ” returnează „false” , vom returna un mesaj de eroare.
Acest rezultat ne indică faptul c ă nu s-a putut deschide camera.
În cazul în care s -a trecut cu succes de test ul func ției isOpened() , se va începe captarea
imaginilor de la camera video pri n intermediul funcției read(). Această funcție va fi ap elată cu un
argument de tip Mat& ce va reprezenta o variabilă locală în care se memoreaz ă un cadru capturat
(o singură imagine de la camera video). În timpul rulării programului , această variabilă va primi
90 de valori într -o secundă.
cap.read(img) ;
După ce se captează imaginea de la cameră și se memorează în variabila „img ”, se execută
pașii enumerați mai sus , și anu me, imaginea va fi transformată din formatul RGB în formatul HSV
cvtColor(img, hsvImg, COLOR_BGR2HSV);
unde funcția cvtColor are următorii parame trii la ap elare :
– img – imag inea sursă în format RGB;
– hsvImg – imaginea rezultată în format HSV;
– COLOR_BGR2HS V – codul de transf ormare.
Ulterior, imaginea HSV rezultată va fi trecută în format bina r. Proce dura de transformare implică
utilizarea funcției inRange după cum urmează :

Bibliografie

[1] „Wikipedia – Motor electric”. https://ro.wikipedia.org/wiki/Motor_electric

[2] „Implementing the Quotient Method Controller on the Ball -on-a-Wheel System ” (K.
Daily)

[3] „OpenCV”. https://docs.opencv.org/3.4.1/d1/dfb/intro.html

[4] „”

Similar Posts