Sunteți pe pagina 1din 58

Departamentul Automatică și Tehnologia Informației

Programul de studii: ROBOTICĂ

TACHE Elvis-Daniel

PROIECT DE DIPLOMĂ

Conducător științific:
conf. dr. ing. MĂCEȘANU Gigel
Brașov 2021
Departamentul Automatică și Tehnologia Informației
Programul de studii: ROBOTICĂ

TACHE Elvis-Daniel

Controlul unei platforme robotice mobile

Conducător științific: conf. dr. ing. MĂCEȘANU Gigel


Cuprins
Cuprins

Lista de figuri, tabele și coduri sursă.................................................................................................5


Lista de acronime...............................................................................................................................6
Capitolul 1 - Introducere....................................................................................................................7
1.1 Importanța și motivația lucrării............................................................................................7
1.2 Obiective..............................................................................................................................8
1.3 Delimitări conceptuale.........................................................................................................9
1.3.1 Roboții mobili..........................................................................................................9
1.3.2 Mecatronică și Robotică.........................................................................................11
1.3.3 Inovațiile specifice domeniului..............................................................................12
2 Arhitectura sistemelor robotice.................................................................................................15
2.1 Istoricul structurilor robotice.............................................................................................15
2.2 Clasificarea roboților..........................................................................................................19
2.3 Mecanismul de direcție al unui robot.................................................................................20
2.3.1 Modelul Geometric................................................................................................21
2.3.2 Modelul Pure Pursuit..............................................................................................22
2.3.3 Modelul Cinematic.................................................................................................23
3 Structura Hardware a platformei robotice................................................................................24
3.1 Structura mecanică.............................................................................................................24
3.2 Elementele de acționare electrică.......................................................................................26
3.2.1 Puntea H bazată pe circuitul integrat L298N.........................................................27
3.2.2 Motor de current continuu......................................................................................28
3.3 Schema bloc a sistemului de acționare..............................................................................28
3.4 Modul de control bazat pe Raspberry Pi............................................................................29
3.5 Pi Camera...........................................................................................................................30
3.6 Modul de detecție temperatură și umiditate DHT22/AM2302..........................................31
3.7 Platforma Arduino..............................................................................................................32
3.8 Modul analogic de achiziție de date Arduino....................................................................33
3.9 Metoda de alimentare a platformei....................................................................................34
4 Structura software a proiectului................................................................................................35
4.1 Arhitectura sistemului........................................................................................................35
4.2 Tehnologii folosite.............................................................................................................36
4.2.1 Python....................................................................................................................36
4.2.2 Javascript................................................................................................................37
4.2.3 Cayenne..................................................................................................................38
4.3 Interfața cu utilizatorul.......................................................................................................39
5 Testarea și evaluarea rezultatelor..............................................................................................42
5.1 Realizarea practică a modelului.........................................................................................42
5.2 Testarea comunicației........................................................................................................44
5.2.1 Protocoale de comunicare......................................................................................44
5.2.2 Conectarea la rețeaua locală...................................................................................44
5.2.3 Configurare interfeței de rețea...............................................................................45
5.2.4 Dezvoltare de aplicații prin rețea...........................................................................45
5.3 Testarea deplasării..............................................................................................................47
6 Concluzii...................................................................................................................................48
6.1 Contribuții personale..........................................................................................................48
6.2 Etape Viitoare....................................................................................................................49
Bibliografie......................................................................................................................................50
ABSTRACT.....................................................................................................................................51
Anexa 1 - DataSheets.......................................................................................................................52
Anexa 2 – packpages & Linux Setup...............................................................................................53
Anexa 3 - Modules...........................................................................................................................54
LISTA DE FIGURI, TABELE ȘI CODURI SURSĂ

FIGURI
FIGURĂ 2.1 ROBOT EXPLORATOR 19
FIGURĂ 2.2 PĂSITOR NAO 19
FIGURĂ 2.3 AUTONOMOUS CAR 19
FIGURĂ 2.4 ROBOT SCARA 19
FIGURĂ 2.5 ROBOT INDUSTRIAL KR 6-2 19
FIGURĂ 2.6 ROBOT CASNIC 19
FIGURĂ 2.2.7 MODELUL 21
FIGURĂ 2.8.2 MODELUL PURE PURSUIT 22
FIGURĂ 2.9.3 MODELUL CINEMATIC 23
FIGURĂ 3.1 REPREZENTARE SIMBOLICĂ SISTEM DE VIRARE ACKERMAN CU TRACȚIUNE PE SPATE 24
FIGURĂ 3.2 EXPLICATIVĂ LA ECUAȚIA FUNDAMENTALĂ A MIŞCĂRII DE ROTAȚIE 26
FIGURĂ 3.3 MOTOR DRIVE DUAL H-BRIDGE MULTIWATT15 (L298) 27
FIGURĂ 3.4 MOTOR DE CURENT CONTINUU 28
FIGURĂ 3.5 SCHEMA BLOC A SISTEMULUI DE ACȚIONARE 28
FIGURĂ 3.6 RASPBERRY PI PINOUT 29
FIGURĂ 3.7 CAMERĂ PENTRU RASPBERRY PI V2 30
FIGURĂ 3.8 DATE CULESE DE LA GEOMETRIC SENZORUL DHT ȘI VIZUALIZATE IN INTERFAȚA WEB
CAYENNE 31
FIGURĂ 3.9 ARDUINO UNO PINOUT 32
FIGURĂ 3.10 DETECTORUL DE GAZE MQ-135 33
FIGURĂ 3.11 ALIMENTARE ÎN PARALEL. ALIMENTARE ÎN SERIE 34
FIGURĂ 4.1 DEVICES.CAYENNE.COM - PANOU DE CONTROL RASPBERRY PI 38
FIGURĂ 4.2 APLICAȚIE MOBILĂ IN BROWSER-UL TELEFONULUI 39
FIGURĂ 4.3 SNAPSHOT AL ROBOTULUI ȘI TELENONULUI PE CARE RULEAZĂ STREAMING-UL 41
FIGURĂ 5.1 SCHEMATICA DE CONECTARE COMPONENTE FIZICE 42
FIGURĂ 5.2 COMPONENTE FIZICE 43
FIGURĂ 5.3 3-WAY HANDSHAKE 45
FIGURĂ 5.4 REMOTE DEVELOPMENT VIA MOBAXTERM 46

TABELE
TABEL 2 COMPARATIV SENZORI DHT 39

CODURI SURSĂ
appCam.py

LISTA DE ACRONIME
abs – absolut;
dpdv – din punct de vedere;
CPU – Central Proccesor Unit
EEPROM - electrically erasable programmable read-only memory
GPIO - general-purpose input/output
HTML – HyperText Markup Language
I2C – Inter Integrated Circuit
IDE – Integrated Development Environment
LAN – Local Area Network
PWM - Pulse Width Modulation
RAM – Random Acces Memory
rpm – rotații pe minut;
SSH – Secure Shell
UART – Universal Asynchronous Receiver Transmitter
URL – Unified Resource Locator
USB – Universal Serial Bus
venv – Virtual Environment
CAPITOLUL 1 - INTRODUCERE
Importanța și motivația lucrării
Obiective
Delimitări conceptuale

1.1 IMPORTANȚA ȘI MOTIVAȚIA LUCRĂRII


Într-o lume a schimbărilor, a inovațiilor de tot felul, a informațiilor și tehnologiilor noi, robotica
a devenit necesară. Fără a înlocui cu totul mintea și forța omului, roboții și-au dovedit utilitatea într-un
spectru larg, de la industrie la domeniul casnic. Acesta este și unul dintre motivele pentru care am
urmat această specializare și am întocmit lucrarea de față. Pasiunea pentru robotică și tehnologia
informației este o pasiune veche. Încă din copilărie visam să creez mijloace care să-i elibereze pe
oameni de munca asiduă pentru a-și redirecționa eforturile spre alte activități sau pentru a observa mai
liberi spectacolul vieții.
Cercetarea pe care am realizat-o, a urmărit realizarea unui aparat teoretic necesar părții practice.
Am identificat bibliografia în domeniul cercetării, dezvoltării roboticii industriale, managementului și
marketingului în domeniu. Am structurat bibliografia în funcție de interesul pe care îl am în acest
domeniu. Am fost interesat să descopăr unde s-a ajuns în lume în domeniul roboticii industriale și dacă
la noi în țară există un interes în acest sens din partea statului sau al agenților economici. Cu
surprindere, am observat ca multe firme cumpără de pe piața externă tehnică nouă, dar am identificat o
firmă care proiectează și produce roboți industriali la comandă.[ CITATION Mar19 \l 1033 ]
Lucrarea are ca scop general conceperea, realizarea și valorificarea de sisteme și procese de
integrare finalizată și eficientă a științei și a tehnologiei. Scopul aplicat este dezvoltarea unui robot
mobil comandat de la distanță, capabil să se deplaseze în medii cunoscute sau necunoscute pentru om,
în timp ce redă imagini în timp real. Robotul va fi comandat printr-o aplicație web și printr-un modul
Wi-Fi, integrat într-o placă Raspberry Pi, iar pentru deplasarea acestuia se vor folosi 2 motoare de
curent continuu comandate de un driver L298N H-Bridge.
1.2 OBIECTIVE
Obiectivul principal al lucrării este de a construi o platformă robotică mobilă capabilă să se
deplaseze prin conectarea (Wi-fi) la distanță pentru a culege informații diverse din mediul înconjurător.
Aceste informații sunt temperatura și umiditatea aerului cât și informații legate de concentrația gazelor.
Obiectivele particulare de implementare a lucrării sunt:
• identificarea soluțiilor optime de proiectare a roboților comandați de la distanță;
• Construcția unui robot care presupune cunoștințe din domenii diferite și însusirea acestora pe
termen mediu și lung
• implementarea unei aplicații web care să ofere comanda robotului.
• promovarea și aplicarea unor decizii optimale în utilizarea roboților casnici
• oferirea de răspunsuri și soluții pentru nevoia oamenilor de a interacționa eficient și durabil cu
mediului natural și social
• redactarea și comunicarea raportului / sintezei cercetării efectuate, într-un format consacrat de
lucrare științifică

Structura lucrării științifice


Având la bază obiectivele, am structurat lucrarea pe cinci capidole, după cum urmează
Lucrarea este structurată pe trei capitole. Prima parte este destinata părții teoretice, urmând ca în
continuarea lucră să dezbat unele subiecte aplicative.
Primul capitol, fiind partea introductivă este destinată explicării necesității și importanței
lucrării, terminologiei de specialitate, a funcțiilor cercetării în societate. Lucrarea nu se refera doar la
cercetarea din domeniul roboticii industriale, ci se refera la multe alte domenii conexe, de aceea le-am
explicat și integrat în cercetare.
Capitolul 2 prezintă istoria și clasificarea roboților cât și mecanismul de direcție Ackerman
Capitolele 3 și 4 prezintă descrierea propriu-zisă a elementelor ce compun platforma robotică
mobilă. Elementele hardware sunt structura mecanică, elementele de acționare electrică, și modulul de
control bazat pe Raspberry PI, modulul analogic de achiziție de date și nu în ultimul rând modulul de
alimentare. Pentru prezentarea structurii software a proiectului voi elabora o schemă a arhitecturii/
designului sistemului, descrie tehnologiile din domeniul IT și modul în care am implementat interfața
cu utilizatorul.
Capitolul 5 se concentrează pe testarea și evaluarea rezultatelor și conține subcapitolele de
Realizare practică a modelului, Testarea comunicației și testarea deplasării.
Ultimul capitol este cel de concluzii personale și direcții viitoare
1.3 DELIMITĂRI CONCEPTUALE
În lucrarea pe care o prezentăm folosim o serie de termeni și concepte de specialitate pe care
suntem datori să îi definim și explicăm, cum ar fi: inovarea, inventica, invenția, inteligență artificială,
tehnologie de proces, tehnologie de produs, robotică etc.
Robotica este știința care studiază proiectarea și tehnica construirii sistemelor mecanice,
informatice, robotice. Inteligența artificială este capacitatea mașinilor de a îndeplini sarcini și atribuții
asociate inteligenței umane.
Mecatronica este știința care se ocupă cu combinația sinergetică și sistematică a mecanicii,
electrotehnicii și informaticii în timp real. Termenul a fost folosit pentru pentru prima de un inginer de
la compania japoneză Yaskawa în 1969, după care a fost folosit oficial în Franța anul 2005.
Vedere artificială este știința mașinilor ce pot vedea, unde a vedea reprezintă capacitatea
sistemului de a extrage din imagini sau din serii de imagini (video) informații ce pot fi folosite la
rezolvarea unei anumite sarcini. Cu alte cuvinte ea este recunoașterea automată a obiectelor în
imaginea 2D și coordonatele lor 3D în spațiul cartezian. Există doua tipuri de Vedere artificiala:
1. Tipul Tradițional: - acesta procesează imaginea prin 2 sau mai multe funcții de extragere
a informațiilor.
2. Recunoașterea formelor (în literatura de specialitate Machine Learning) – transporta
imaginea printr-un „ML Model
Ingineria software (din engleză: software engineering) este un domeniu ce implică proiectarea,
crearea și întreținerea de software aplicând tehnologii și practici din informatică (știința
calculatoarelor), managementul proiectelor, inginerie, proiectarea interfețelor și a altor domenii.

1.3.1 Roboții mobili


Roboții mobili sunt sisteme complexe care pot efectua diferite activități într-o varietate de
situații specifice lumii reale. Robotul mobil este o combinație de dispozitive echipate cu servomotoare
şi senzori care sunt aflate sub controlul unui sistem ierarhic de calcul care operează într-un spațiu real,
marcat de o serie de proprietăți fizice şi care trebuie să planifice mișcările astfel încât robotul să poată
realiza o sarcină în funcție de starea inițială a sistemului şi în funcție de informația existentă, legată de
mediul de lucru.
Problemele specifice care pot apărea la roboții mobili ar fi următoarele: evitarea impactului cu
obiectele staționare sau în mișcare, determinarea poziției şi orientării robotului pe teren, planificarea
unei traiectorii optime de mișcare. În cazul unui sistem robotic automat distribuit, pozițiile spațiale sunt
importante, de ele depinzând îndeplinirea scopurilor, dar şi funcționarea întregului sistem. Robotul
mobil trebuie să fie capabil să-i planifice mișcările, să știe automat ce mișcări să execute pentru a
îndeplini o sarcină. Planificarea mișcărilor constă dintr-un ansamblu de operațiuni. Evitarea coliziunii
cu obstacole fixe sau mobile aflate în spațiul de lucru al robotului se poate face prin realizarea unei
apărători mecanice.
Senzorii sunt dispozitive care pot măsura diferite proprietăți ale mediului precum: temperatura,
distanța, rezistența fizică, greutatea, mărimea etc. În funcție de informațiile primite de la senzori,
robotul mobil se orientează în mediul de lucru.
Senzorii sunt împărțiți în două categorii: senzori de stare internă sunt senzori care oferă informații
despre starea internă a robotului mobil, spre exemplu nivelul bateriei sau poziția roților, senzori de
stare externă sunt senzori care oferă informații despre mediul ambiant în care robotul funcționează.
Senzorii de stare externă se mai pot împărți la rândul lor în două categorii: senzori cu contact, mai
precis acei senzori care culeg informația din mediu prin atingere, senzor tactil, respectiv senzori fără
contact, care preiau informația din mediu de la distanță: cameră video, senzor ultrasonic, senzor
infraroșu. Un senzor poate fi activ sau pasiv. Senzorii activi sunt acei senzori care emit energie în
mediu pentru a putea observa anumite caracteristici ale acestuia, spre deosebire de senzorii pasivi care
primesc energie din mediu pentru a putea prelua informația.
Prin senzori, roboții pot fi comandați, comanda fiind dată de la un calculator, de pe telefonul mobil, caz
în care aceste sisteme beneficiază de aplicații informatice.
Roboții mobili trebuie să devină posibilități de comunicare fie cu alți roboți sau cu un operator
uman. Sistemele de comunicare aferente roboților mobili pot fi de două categorii: cu fir sau fără fir.
Comunicația cu fir este o modalitate simplă de transfer de date între robot şi operator. O serie de
probleme asociate transmisiei fără fir, dispar în cazul comunicației de date cu fir. Avantajul principal al
sistemelor de comunicare cu fir este acela că, pe lângă datele transmise între robot şi operatorul uman,
se mai poate transmite şi curent electric, eliminând astfel necesitatea unei baterii onboard pe robot şi
mărind autonomia robotului.
Sistemele de comunicare fără fir folosesc tehnologii de transmitere a datelor prin aer: transmisia prin
unde în spectrul infraroșu, Bluetooth, radio modem-uri, WiFi şi altele.

1.3.2 Mecatronică și Robotică


Robotica este un domeniu de cercetare nou, este știința care se ocupă cu studiul roboților. Mai
întâi au fost inventați roboții și apoi disciplina care să se ocupe cu studiul acestora. Robotica poate fi
divizată în trei mari domenii și anume: percepție, cogniție şi acțiune. Un robot este construit în funcție
de modelul uman, un robot trebuie în general să ”simtă”, pentru a primi informații despre mediul
înconjurător, dar informațiile în sine însă nu folosesc. De aceea, robotul trebuie să ``înțeleagă'' ce se
petrece, să construiască planuri, să evalueze situații, etc. Aceasta este partea de cogniție. Un robot este
cu totul ineficient dacă nu ar putea să facă ceva: să se deplaseze, să transforme în mod intenționat
mediul înconjurător, să exploreze, să acționeze exact ca modelul său uman. Se poate elimina cogniția,
obținând teleoperarea, adică operarea de la distanță. In acest caz nu există decizie autonomă la nivelul
robotului.
Robotica a revoluționat toate domeniile de activitate. Cea mai cunoscută aplicație a roboticii este în
medicină. Roboții pot efectua o serie de operații de mare finețe. In industrie, de asemenea, liniile de
producție sunt automatizate.
Roboții sunt tot mai eficienți în foarte multe activități. De exemplu robotul software tip RPA
(Robot Process Automation) dotat cu un soft care citește interfața computerului și acționează asupra ei
ca un utilizator uman. Prin dezvoltare a soft-ului, robotul poate accesa butoane ale sistemului de
operare sau ale programelor implicate în operațiunile zilnice repetitive ale angajaților unei companii
(Excel, de exemplu), copiază, transferă, verifică și transmite date din aceeași sfera de activitate.
Un robot software setat ca atare poate citi și valida emailuri, poate gestiona formularele
electronice cu care operează o bancă sau o companie. Un robot poate realiza și transferuri de bani, sau
poate înregistra intrările și ieșirile de bunuri și de bani a unei companii. Domeniile de aplicabilitate sunt
vaste: de la finanțe sau achiziții, la resurse umane, servicii clienți, sau chiar sănătate publică.
• În mare, robotica poate fi divizată în trei domenii: percepție, cogniție și acțiune. Această diviziune e
naturală: un robot trebuie în general să ``simtă'', pentru a primi informații despre mediul
înconjurător. Informațiile în sine însă nu folosesc la nimic: robotul trebuie sa „înțeleagă” ce se
petrece, să construiască planuri, să evalueze situații, etc. Aceasta este partea de cogniție. Un robot
ar fi inutil dacă nu ar putea să facă ceva: să se deplaseze, să transforme în mod intenționat mediul
înconjurător, să exploreze, într-un cuvânt, să acționeze. În anumite cazuri putem elimina cogniția,
obținând fie ceea ce se numește teleoperare (operare de la distanță), în care caz nu există decizie la
nivelul robotului, fie celebrii roboți lucrători la o linie de asamblare. Sa studiem deci fiecare
domeniu în parte.
• Mecatronica este o tehnologie compatibilă cu societatea informațională. Este știința care s-a
dezvoltat după cea de-a doua mare revoluție industrială care a marcat saltul de la societatea
industrializată la societatea informațională, generând un val de înnoiri tehnologice care a schimbat
cu totul lumea în care trăim. Japonezii au brevetat această știință în deceniul VIII al sec. XX.
Mecatronica a realizat fuziunea dintre tehnologiile mecanice și cele informatice. Dezvoltarea
microelectrotehnicii a facilitat integrarea electromecanicii. Ulterior s-au integrat microprocesoarele
în structurile electromecanice astfel încât acestea au devenit inteligente și astfel s-a ajuns la
mecatronică.

Astăzi mecatronica este o știință avansata care studiază noile tehnologii informaționale și
comunicaționale.

1.3.3 Inovațiile specifice domeniului


Inovarea este un proces sau o acțiune de a inovare care se finalizează cu realizarea unui program
sau produs original care se numește inovație. Termenul provine din limba latina – „movus” care
înseamnă nou. Activitatea de inovare reprezintă deci procesul determinat în timp caracterizat de
conceperea unor informații, tehnologii sau produse noi într-un anumit domeniu sau de demersul
întocmirii unei schimbări (reforme) cu privire la un sistem sau produs. Conceptul de inovare include:
• inovare tehnologică de proces
• inovare tehnologică de produs.

Astfel, prin inovare tehnologică de produs se înțelege punerea la punct ori comercializarea unui
produs mai performant cu scopul de a furniza consumatorului servicii noi Prin inovare tehnologică de
proces se înțelege punerea la punct ori adoptarea de metode de producție sau de distribuție noi,
sau în bună măsură ameliorate. Ea poate face să intervină schimbări care afectează separat sau
simultan materialele, resursele umane sau metodele de lucru. [ CITATION Man05 \l 1048 ]
Așadar există termini conecși: inventică, invenție, inventivitate, inovare tehnică etc. Invenția
reprezintă o noutate sau un progres față de stadiul cunoscut până atunci și constituie o rezolvare sau
realizare tehnică dintr-un domeniu al cunoașterii. Inventica este disciplina care studiază sistematic
procesul invenției și condițiile stimulării creativității. [ CITATION Man05 \l 1048 ]
Inovarea tehnică poate fi definita ca fiind utilizarea cunoștințelor pentru crearea și aplicarea
unei noi tehnologii legate de produse sau procese. [1] Inventivitatea este însușirea de a fi inventiv, de a
avea imaginație creatoare, ingeniozitate, iar inventatorul este persoana care a realizat o invenție.
Inovația poate însemna rezolvarea unor probleme de organizare a muncii cu scopul îmbunătățirii
productivității și/sau soluționarea unor probleme de tehnică prin raționalizarea soluțiilor aplicate și/sau
perfecționare tehnică. Procesul de inovare este compus din două părți: generarea unei idei sau invenții
și transformarea acelei idei într-o afacere.1 Inovațiile se împart în următoarele categorii și anume :
• inovații incrementale,
• inovații discontinue,
• inovații arhitecturale,
• inovații de sistem,
• inovații radicale,
• inovații disruptive.
Inovația incrementală (progresivă) este de bază constând în modificări, adaptări, rafinări,
simplificări consolidări și îmbunătățiri aduse produselor, proceselor, serviciilor și activităților de
producție și distribuție existente.
Inovația discontinuă constă in realizarea unui salt față de produsele existente și este
caracterizată prin consecințe drastice. Inovația arhitecturală constă în reconfigurarea sistemului de
componențe care constituie un produs, proces sau serviciu. Inovarea sistemelor include activități care
necesită resurse semnificative din mai multe discipline diferite și care se desfășoară pe parcursul mai
multor ani[10]. Inovarea radicală (breakthrough innovation - l. engl.) implică introducerea de noi
produse sau servicii care se dezvoltă ulterior în noi afaceri majore sau care dau naștere unor noi
domenii industriale ori produc modificări semnificative în întreaga industrie și creează noi
valori[ CITATION Wik201 \l 1033 ]. Inovarea disruptivă propune noi valori și are câteva caracteristici
specifice[ CITATION Chr97 \l 1033 ].
Matricea inovării este alcătuită din tipurile de inovații și din activitățile legate de acestea,
asigurând mijloacele de determinare a problemelor legate de fiecare categorie[ CITATION Wik201 \l
1033 ]. Conceptul de tehnologie poate fi definită ca știința metodelor și a mijloacelor de prelucrare a
materiilor prime, a materialelor și a datelor, ansamblul proceselor, metodelor, operațiilor etc. pentru
realizarea unui anumit produs, deci tehnologia ca sumă de procese, metode și activități[ CITATION
Pop06 \l 1033 ]. Tehnologiile sunt de mai multe tipuri și anume: fundamentale, generice sau
aplicative[ CITATION GÂF \l 1048 ]. Tehnologiile fundamentale reprezintă un model de auto-
cuprindere a volumului transformărilor și adiționărilor de valoare pentru produsele care parcurg un
1
traseu concentrat, de la stadiul de materie primă la produs finit. Tehnologiile aplicative sunt formate
din lanțuri tehnologice aplicative. Cercetarea este un proces activ și sistematic pentru a descoperi,
interpreta sau revizui fapte, evenimente, comportamente sau teorii, sau să facă aplicațiile practice cu
ajutorul unor astfel de fapte, legi sau teorii. În anul 1963, Organizația de Cooperare și de Dezvoltare
Economică (O.C.D.E.) în cadrul unei reuniuni desfășurate în Frascati (Italia) a unor experți din
domeniul statisticii cercetării-dezvoltării s-a elaborat Metoda tip propusă pentru anchete asupra
cercetării şi dezvoltării sau Manualul Frascati. Astfel, “Cercetarea și dezvoltarea experimentală
înglobează lucrările de creație făcute în mod sistematic în vederea îmbogățirii ansamblului de
cunoștințe, inclusiv cunoașterea omului, a societății și a culturii, precum și utilizarea acestor cunoștințe
pentru noi aplicații”.
De asemenea Steve Jobs i-a spus lui Parker că a avea focus înseamnă să spui ‘nu’ la sute de idei
bune. El a adăugat `I’m actually as proud of the things we haven’t done as the thinks I have done.
Innovation is saying ‘no’ to 1,000 thinks. You have to pick carefully.”
Inovarea în orice domeniu necesită adesea un efort inteligent, blând și continuu de a transforma
ideile noi în ceva ce poate fi înțeles.[ CITATION Ora20 \l 1048 ]
Termenul cercetare-dezvoltare acoperă: cercetarea fundamentală, cercetarea aplicativă și
dezvoltarea experimentală[ CITATION Aur \l 1048 ]. Cercetarea fundamentală se referă la acele lucrări
experimentale și teoretice realizate în principal în vederea dobândirii de noi cunoștințe asupra bazelor
fenomenelor și faptelor observabile. Cercetarea aplicată se îndreptă spre realizarea unui obiectiv sau
scop practic. Dezvoltarea experimentală constă în lucrări sistematice bazate pe cunoștințe existente
obținute prin cercetare și/sau experiență practică, cu scopul de a lansa fabricarea de noi materiale,
produse sau dispozitive, de a stabili noi procedee, sisteme și servicii sau de a le ameliora considerabil
pe cele deja existente.[8] Proiectarea tehnologică reprezintă totalitatea informațiilor, datelor și
concepțiilor care oferă o imagine virtuală a unei noi tehnologii. Omologarea reprezintă validarea
tehnologiei și posibilităților de aplicare. Procesele tehnologice au rolul de a transforma materiile prime
în bunuri destinate consumului, în mijloace de producție sau complexe de activități finale cu rol de
servicii. [ CITATION GÂF \l 1033 ]
Managementul inovării constă în implementarea și exploatarea economică a noilor idei și
descoperiri și ca orice altă activitate managerială, procesul de inovare trebuie să fie planificată,
organizată, coordonată, dirijată. [ CITATION Wik202 \l 1048 ]
2 ARHITECTURA SISTEMELOR ROBOTICE
Istoricul structurilor robotice
Clasificarea roboților
Mecanismul de direcțiel unui robot

2.1 ISTORICUL STRUCTURILOR ROBOTICE


Termenul robot provine din limba cehă și se poate traduce prin: muncă, clacă sau muncă silnică.
Termenul a fost utilizat prima dată de către Josef Čapek şi Karel Čapek în lucrările lor de Science
Fiction, Roboții universali ai lui Rossum, scrise la începutul sec. XX.
Inteligența artificială este mai veche decât am crede la prima vedere. Ea datează de sute de ani
sau chiar de mii de ani de când anticii au construit primele sisteme de calcul care se bazau pe algoritmi
și care astăzi ni se par a fi ceva cu totul normal. Ideea de logică, de algoritm a fost baza care a dus la
atâtea descoperiri și invenții, de la cele mai simple, până la inventarea roboților capabili să preia sarcini
pe care numai oamenii le pot îndeplini.
Mult mai târziu, calculatorul era un simbol al inteligenței artificiale, iar astăzi calculatorul a
intrat deja în viața noastră normală. Inteligența artificială este în esență un sistem capabil să ia decizii
autonome[ CITATION Amy \l 1048 ]. Inteligența artificială copiază sau imită inteligența umană prin
aceea că recunoaște sunete, recunoaște obiecte, rezolvă probleme diferite, se deplasează, execută
comenzi diferite, imită vocea umană, face calcule, înțelege un limbaj ori folosește o strategie pentru
atingerea unor obiecte etc. S-au construit roboți care fac milioane de calcule rapid, ceea ce mintea
umană nu ar putea face.
Primul robot capabil să ia decizii, să fie autonom, a fost călugărul inventat în anul
1560[ CITATION Amy \l 1048 ] de către un ceasornicar Juanelo Turriano. Robotul era capabil să
meargă pe masă, să ridice un crucifix, să se bată în piept în semn de penitență, sa-și miște buzele ca și
cum s-ar ruga. Era o reprezentare mecanică a lumii vii. In anul 1738 Jaques de Vaucanson a construit
automate, printre care o rață complexă care imita mișcările unei rațe vii, dădea din aripi, mânca boabe,
imitând și digestia[ CITATION Amy \l 1048 ].
In anul 1830 Ada Lovelace și Charles Babbage au inventat motorul analitic care folosea niște
etape prestabilite pentru calcule matematice. Intre timp s-au făcut progrese remarcabile pe cale
explicării logicii umane și a dezvoltării unor teorii logice care să probeze matematic ideea de adevăr în
relație cu falsul. De exemplu, George Boole a realizat teorii matematice numite algebra booleană
bazată pe antiteza adevărat/fals. Calculele lui Boole au ajutat, mai târziu, calculatoarele să treacă de la
automatizarea unor calcule aritmetice la calcule mai complexe. Acest salt s-a produs pe la 1930 când
calculatoarele au început să imite gândirea umană. Vannevar Bush a construit un motor analitic avansat
pe baza motorului lui Lovelace și Babbage, iar studentul său, Shannon a aplicat logica lui Boole
circuitelor electrice și si-a dat seama că logica simbolică a lui Boole asupra circuitelor electric ar putea
fi folosită pentru crearea unui circuit în care să se adauge 1 și 0. Iar pentru un calculator Shannon și-a
dat seama că e nevoie de două straturi:
fizic - recipientul și logic- codul[ CITATION Amy \l 1048 ]. Alan Turing testa o mașină universal care
putea conține toată cunoașterea matematică științifică. Astfel si-a dat seama că un program și datele
acestuia ar putea fi stocate într-o mașină. Recipientul, programul și datele puteau constitui o singură
entitate.
Dezvoltarea electrotehnicii în secolul XX a adus şi dezvoltarea roboticii. Printre primii roboți
mobili se numără sistemul Elmer şi Elsie construit de William Grey Walter în anul 1948. Roboții erau
niște triciclete care se puteau îndrepta spre o sursă de lumină şi puteau să recunoască coliziuni în
împrejurimi.
In anul 1941 scriitorul SF Isaac Asimov a elaborate trei legi ale roboticii și anume: un robot nu
poate răni un om, sau prin inacțiune să permit ca un om să sufere, un robot trebuie să asculte ordinele
unui om, mai puțin în cazurile în care s-ar încălca prima lege, un robot trebuie sa-și protejeze existența
atâta timp cât aceasta nu intră în conflict cu celelalte două legi. Ulterior a adăugat o lege zero și anume:
un robot nu poate face rău omenirii sau prin inacțiune să permit ca omenirea să sufere. John von
Neumann în anul 1944 a dezvoltat un calculator electric cu instrucțiuni inserat fizic în sistem. Fiecare
reprogramare presupunea recreerea fizică a conexiunilor, iar Turing lucra la o rețea neurală alcătuită
din calculatoare cu programe stocate pe sistemele respective. Allen Newell, Herbert Simon, Cliff Shaw
au realizat un program care mima aptitudinile omenești de rezolvare a problemelor – Teoreticianul
Logic.
După o reuniune a oamenilor de știință din 1955, atelierul de la Dartmouth, s-au pus bazele
inteligenței artificial prin trei practici: inteligența artificială avea să fie concepută, construită, testată,
perfecționată de o colaborare între marile companii din domeniul informaticii și cercetători academici,
progresul inteligenței artificiale este o activitate costisitoare fiind necesară comercializarea activității
prin parteneriate cu agenții guvernamentale sau cu armata sau prin construirea de produse sau sisteme
care să poată fi vândute, cercetarea și construirea inteligenței artificial se bazează pe o rețea
interdisciplinară de cercetători care presupune înființarea unui domeniu academic[ CITATION Amy \l
1048 ].
Frank Rosenblatt a construit prima rețea neural artificial, un program care să reacționeze la un
feedback. Până la această dată, calculatoarele erau doar sisteme de calcule, dar din acel moment s-a
făcut trecerea la computere programabile.
Inteligența artificială s-a dezvoltat foarte mult ulterior, astfel că aceasta devenise în anii 60 parte
a lumii, a spiritului veacului. S-au construit și vândut jocurile pe calculator, calculatoarele au devenit
din ce în ce mai rapide. Calculatoarele erau simbolul inteligenței artificiale, chiar dacă nouă astăzi ni se
pare paradoxal pentru că nu putem să ne mai desfășurăm activitățile fără calculatoare și aplicațiile lor
multiple.
Un robot este tot un calculator numai că arată ca un om, ca o mașină sau altfel, acestea fiind
doar forme ale inteligenței artificiale. Automatizarea producției a impus inventarea roboților industriali.
In anii 50 s-au construit primii roboți capabili să lucreze în locul oamenilor. Primul robot industrial a
fost construit de George Charles Devol în anii 50 după care robotica a început să se dezvolte uimitor.
In anii 80 industria roboților a explodat. Roboții erau dotați cu senzori și viziune mecanică.
Ceva mai târziu, pe măsura dezvoltării sistemelor informatice, roboții erau dotați cu soft. Inteligența
artificială (AI), în diferitele sale forme s-a dezvoltat uimitor, iar granițele capabilităților roboților au
fost revoluționate. Astfel roboții pot să ia și decizii, fără a fi ghidate de oameni.
Robotul Greenman a fost primul model umanoid manipulator asamblat în 1983. Sistemul vizual
era asigurat de 525 camere video, fiecare având posibilitatea de rotire cu 35 de grade. Monitorizarea se
făcea cu ajutorul unei căști de pilot. Acest sistem de manipulare a fost dezvoltat pentru lucrul în medii
ostile, mai puțin în mediul marin şi submarine.
Roboții industriali moderni dispun, de obicei, de o mulțime de senzori pentru a aduna date, care
pot fi introduse în programe avansate de analiză și de învățare automată. Aceasta permite roboților să
interpreteze ceea ce detectează senzorii lor și, prin urmare, să schimbe ceea ce fac, într-un mod care îi
ajută să-și îndeplinească mai bine sarcina sau să o facă mai sigur. Iar această modalitate de a oferi
roboților o ‘inteligență reală’ este un obiectiv esențial pentru cei implicați astăzi, în robotică. Datorită
progreselor imense din domeniul electronicii și al software-ului, roboții inteligenți pot funcționa în
condiții de siguranță alături de oameni și pot realiza o serie tot mai mare și diversificată de sarcini, de la
pictură și sudură până la intervenții chirurgicale.
Roboții industriali sunt fie linii de producție complet automatizate sau roboți care efectuează
operațiuni în locul oamenilor. S-au construit astfel mai multe tipuri de roboți și anume: robot mobil,
robot autonom, robot umanoid, robot industrial, robot de servicii, robot jucărie, robot explorator, robot
pășitor, robot militar.
Unul din obiectivele esențiale ale roboticii este elaborarea roboților autonomi. Astfel roboți ar
putea executa anumite sarcinile fără alte intervenții umane. Comenzile primite vor preciza ce dorește
utilizatorul şi nu modul în care robotul să execute comenzile. Roboții capabili să îndeplinească aceste
operații vor fi echipați cu senzori de percepere a mediului înconjurător, aflate sub controlul unui sistem
de calcul.

2.2 CLASIFICAREA ROBOȚILOR


Dacă împărțim roboții în funcție de utilizarea lor, aceștia sunt de mai multe categorii. Astfel, în
funcție însă de mediul în care operează se disting trei categorii de roboți:
• Roboți tereștri;
• Roboți marini;
• Roboți zburători.

În funcție de utilizarea lor, roboții pot fi:


• Roboți industriali;
• Roboți casnici; -

Roboți militari;
• Roboți exploratori;
• Roboți de companie (robot umanoid);
• Roboți de divertisment (jucării, roboți utilizați Figură 2.2 Autonomous car
în competiții etc.).

Dpdv al gradului de libertate există


două categorii:
• Roboți ficși;
• Roboți mobili.

Dpdv al sistemului de locomoție, Figură 2.3 SCARA ROBOT


roboții mobili pot fi:
• Roboți cu roți;
• Roboți cu șenile;
• Roboți pășitori;
• Roboți târâtori.

Figură 2.1 Robot Figură 2.1 Robot explorator


umanoid și păsitor
NAO

Figură 2.4 Robot


industrial KR 6-2
2.3 MECANISMUL DE DIRECȚIE AL UNUI ROBOT
În etapa design-ului de proces a unui robot mobil se află multe decizii de concept ce se iau
primordial găsirii unei soluții optimă pentru fiecare aspect ținând cont și de cerințele clientului. Una din
cele mai importante decizii este alegerea tipului de sașiu.
În domeniul roboților mobili se utilizează numeroase concepte de sașiu, dar de departe cel mai
adesea observăm sistemul de conducere diferențial. El este renumit pentru simpla sa utilizare și pentru
gradul ridicat de manevrabilitate. Cu toate acestea nu poate excela in eficiență. In timp ce un robot cu
un astfel de mecanism se rotește, poate lovi unele suprafețe mai puțin rezistente. Alt tip de sistem îl
reprezintă șașiul omnidirecțional. Acesta din urma oferă o excelentă manevrabilitate, dar randament dă
numai pe o suprafață solida și plată ce asigura o comportare bună și previne mișcarea necontrolată.
În timp ce tipurile de sașiu prezentate anterior sunt alegeri avantajoase pentru roboții mobili,
pentru celelalte tipuri de vehicule (cu excepția unora pentru muncă sau a mașinilor militare) cum ar fii
autoturismele, se utilizează cu precădere șașiul cu patru roți și mecanismul de virare Ackerman. Acesta
se comportă foarte bine la viteze de deplasare mari printr-o operare eficientă, dar și o secvență de
manevrabilitate relativ scăzută la constrângerea nonholonomică2.
Pentru a simplifica construcția generală, au fost efectuate mai multe modificări ale șasiului
clasic pentru automobile. Cea mai mare se aplică lipsei suspensiei roților. Întrucât acesta este un simplu
robot domestic (ce se deplasează in mare parte prin casă sau într-o firma, nici nu este nevoie ce
existența unui sașiu cu suspensii.
În continuare vor fi prezentate 3 modele și moduri de abordare ale problemei roboților mobili,
Acestea sunt modelul geometric, al urmăririi pure și cinematic. Alegerea unuia pentru implementare în
viața reală depinde de tipul de aplicație.

2.3.1 Modelul Geometric3

Figură 2.2.5 Modelul Geometric


2
Sistem nonholonomic, în fizică, un sistem a cărui stare depinde de calea parcursă pentru realizarea lui
3
Așa cum se subînțelege, acest model ia în calcul numai elementele geometrice ale sistemului, unghiuri și distanțe
În continuare, va fi prezentat modelul geometric al sistemului de tip bicicletă [ CITATION
Sni09 \l 1048 ]care este o simplificare pertinentă a sistemului de virare Ackerman folosit în urmărirea
traseului. În scopul acesta, este necesar să se precizeze ca date de intrare doar că modelul bicicletei
simplifică vehiculul cu 4 roți prin contopirea celor 2 roți din față într-o singură roată directoare, și a
celor 2 din spate într-o roată cu scopul de tracțiune, exact cum este concepută o bicicletă. A doua
simplificare constă în faptul că vehiculul se poate deplasa numai pe un plan. Din aceste simplificări
rezultă o relație geometrică intre unghiul virării roții din față curba pe care axul inferior îl urmează.
Ca și în Figura 1, această relație geometrică se scrie cu formula (1)
L (0)
tan ( δ )= ,
R
unde δ reprezintă unghiul de virare, L este ampatamentul, iar R este raza cercului pe care roata din
spate îl va străbate cu unghiul de virare dat.
Acest model aproximează deplasarea vehiculului rezonabil la viteze mici.
2.3.2 Modelul Pure Pursuit

Această metodă împreună cu


variațile sale sunt printre cele mai comune
abordări în probleme de urmărire a
traiectorie a roboților mobile[ CITATION
Sni09 \l 1048 ]. Ea presupune calcularea
curburii unui arc de cerc ce conectează axul
inferior al robotului la un punct țintă de pe
drum. Acest punct are coordonatele ¿ ¿ și
împreună cu unghiul α(unghiul de viraj) se
poate afla unghiul virajului necesar pentru a
Figură 2.6. Modelul Pure Pursuit
ajunge la acest punctδ. Aplicând regula
sinus la Figura 2, rezultă:

ld R (0)
=
sin ( 2α ) π
sin −α
2( )
ld R
=
2sin ( α ) cos ( α ) cos ( alpha )
ld
=2 R
sin ( α )
sau
2 sin ( α ) (0)
K=
ld

unde K este curbura arcului descris de deplasarea robotului. Folosind modelul geometric de la
Secțiunea 2.5.1 unghiul de virare poate fi scris astfel:

2 Lsin ( α ( t ) )
δ ( t )=tan−1 ( ld ) .

O mai bună înțelegere a acestei legi de control este obținută prin definirea unei noi variabile, e l d, ca
fiind distanța laterală dintre vectorul direcției înainte și punctul țintă ¿ ¿. Rezultă:

e ld
sin ( α )=
ld
Ecuația (0) poate fi scrisa și astfel:
2 (0)
k= 2 eld
ld
Ecuația (4) demonstrează că modelul de urmărire pură (Pure Pursuit) este un controler proporțional al
2
unghiului de virare ce are gain-ul de 2 reprezentat de distanța de vedere înainte. În practică acesta este
ld
reglat independent stabil la viteze constante. Astfel aflăm foarte ușor valoare lui l d care este un
parametru al funcției vitezei.
Modelul Pure Pursuit este robust la tulburări și este ideal pentru viteze scăzute.
2.3.3 Modelul Cinematic
Modelul cinematic este adoptat pentru parcările autonome.

Figură 2.9 Modelul cinematic

Modelul cinematic tip bicicletă reduce de asemenea cele două roți intr-una singură aflată in
centrul ecartamentului[ CITATION Sni09 \l 1048 ]. Totodată se asumă faptul că nu există alunecare
laterală și virajul doar din față. A treia condiție este restricționarea mișcării pe un singur plan. Ecuațiile
de constrângere nonholonomică pentru cele două roți ale modelului bicicletă sunt:
x f sin ( θ+δ )− y ˙ f cos ( θ+δ )=0 (
0)
x ˙ sin (θ)− y ˙ cos(θ)=0 (
0)
unde ( x , y ) sunt coordonatele globale ale roții din spate, ( x f , y f ) ale roții din față, θ orientarea robotului
în sistemul de coordonate global, iar δ unghiul de virare. Cum distanța dintre cele două roți este L,
( x f , y f ) se exprimă astfel:
x f =x+ Lcos (θ )
y f = y + Lsin ( θ )
Constrângerea nonholonomică a roții din spate (Ecuația (7)), este satisfăcută prin egalitatea
x ˙=cos (θ) și y ˙=sin(θ) și a oricărui scalar cu care se înmulțește. Scalarul este reprezentat de viteza
longitudinala v.

3 STRUCTURA HARDWARE A PLATFORMEI ROBOTICE


Structura mecanică
Elementele de acționare electrică
Modul de control bazat pe Raspberry Pi
Modul analogic de achiziție de date
Medota de alimentare a platformei

3.1 STRUCTURA MECANICĂ


Structura mecanică de bază a robotului este bazată pe reîntrebuințarea unei mașini cu telecomandă ce
are o vechime de 10 ani iar cipul integrat al acesteia nu mai funcționează. De la ea s-a inlăturat capacul
de deasupra, prins cu șuruburi, pentru a căpăta o mai bună dexteritate în cazul depanării noilor
elemente fizice montate. S-au păstrat cele 2 motoare ce intră în sistemul de acționare electrică (SAE)
actual, schimbânduse cablurile de alimentare ale acestora cu altele care pot fi conectate la noul driver
de motoare cu punte H (L298).
Dimensiunile sale sunt de 190 x 270 mm. Masa finală platformei robotice este de 1100g. Viteza
de deplasare pe teren plat este de până la 3 km/h.
Figură 3.7 Reprezentare simbolică sistem de virare Ackerman cu tracțiune pe spate

Acest tip de platformă este una din cele mai simple sisteme de locomoție (și des întâlnite) în
care motoare separate se ocupă de de partea de translație și de virare. Stabilitatea este avantajul in fața
sistemului de control diferențial. Raza de virare este totuși mai mică ICR-ul se află la o distanță de
două sau chiar trei ori mai mare decât lungimea vehiculului la momentul virării în funcție de viteza de
deplasare și incărcare.

Model Nume componentă hardware Cantitate

Raspberry Pi 3B+ Placă de dezvoltare 1

L298 (Multiwatt 15 included) Driver Motoare 1

DC Motor Motor de Curent Continuu 2

80mm Wheel Roata de cauciuc 4

Ralink RT5370 Wireless 4 Antenă conexiune Wi-fi 1

8mp camera Cameră web pentru streaming 1

Battery Holder Suport pentru 4 baterii 2

Sașiu Dimensiune 190x270 mm 1

Raspberry Pi 3 Case Carcasă neagră 1

DHT22/ AM2302 Senzor temperatură și umiditate (big case) 1

Power supply Module 5v-3.3v Împreună cu breadbord pentru prototipare 1

Baterii externe Acumulatori reîncărcabili (20Ah) 4

întrerupător Întrerupător cu 2 faze electrice 1

4
Wireless-Wi-fi 802.11bgn, 150Mbps
Arduino UNO Microcontroller 1

MQ-135 – Gas Sensor Senzor de fum 1

Set Fire (m-m; f-f; f-m) Fire prototipare ardu/rpi `

Tabel 3.1 Listă componente hardware


3.2 ELEMENTELE DE ACȚIONARE ELECTRICĂ
Motoare și sisteme de acționare electrice
Progresul tehnic făcut secolul trecut a făcut traziția de la mașiniile electrice de current continuu
la cele de current alternativ. Ele au fost folosite mai întâi ca generator și apoi ca motor.
Chiar dacă ecuațiile sistemelor de acționare alimentate de c.a. sunt mai complicate, ele pot fi folosite
astăzi cu ușurință datorită dezvoltării sistemelor de mediului de lucru Simulink ce permit reglarea
vectoriale sau reglare după câmp care au rolul de a echivala regimul nestaționar cu unul staționar, ca
urmare a analogiei matematice dintre o mașină de c.a. și una de c.c. complet compensată.
În domeniul electromecanicii se identifică 4 mari clase de motoare electrice, cu aplicații în
reglarea vitezei:
• Motoare de curent continuu:
- Cu excitație separate, in deviație, mixtă)
- Cu magneți permanenți, fără perii și comutație electronică
• Motoare de current alternative
- Asincrone, cu rotor bobinat
- Sincrone, cu magneți permanenți
• Motoare pas-cu-pas
• Motoare cu reluctanță variabilă

Platforma robotică are propriile caracteristici mecanice, întregul șașiu este astfel antrenat de
către un motor de c.c. cu magneți permanenți, fără perii și comutație electronică.
Sarcina este caracterizată de către dependența dintre cuplu și turație. Cuplul de sarcină este variabil cu
drumul parcurs.
Acționarea electrică este individual (un singur motor, o singură mașină). Motorul electric rotativ
și transmisia mecanică constituie sistemul de putere iar celelalte dispositive compun subsistemul de
comandă și reglare.

d dω dJ
m−m s= ( J ω )=J +ω
dt dt dt
m ❑este cuplul de acționare
ms este cuplul rezistent de sarcină
ω=2 πn este viteza unghiulară
J este momentul de inerție față de axa de
rotație Jω este impulsul de rotație

Figură 3.8 Explicativă la ecuația fundamentală a mişcării de rotație

3.2.1 Puntea H bazată pe circuitul integrat L298N


Acesta este un driver de motoare bidirectional bazat pe circuitul integrat L298. este un circuit
monolitic integrat, ce conține un circuit Multiwatt cu 15 pinuri și un PowerSO20. Este un dual driver
full-bridge de înaltă tensiune și intensitate. Poate fi interfațat cu switches manuale sau cu relee și porți
logice. Acesta livrează moatoarelor pănă la 2A fiecare, fiind ideal pentru conectarea unui
microcontroller pentru realizarea unor aplicații în robotică
Două intrări de activare au rolul să activeze sau să dezactiveze independența semnalului de la
intrare. Emițătorii tranzistorilor inferiori ai fiecărui bridge sunt conectați astfel încât terminalul extern
poate comunica cu un senzor.
O alimentare adițională (5V direct de la Raspberry Pi) poate să fie conectată.

Figură 3.9 Motor Drive Dual H-Bridge Multiwatt15 (L298)

3.2.2 Motor de current continuu


Pentru acționarea electrică sunt folosite 2 motoare identice, cu următoarele specificațiile:
Motor Specifications
 Standard 130 Type DC motor
 Operating Voltage: 4.5V to 9V
 Recommended/Rated Voltage: 6V
 Current at No load: 70mA (max)
 No-load Speed: 9000 rpm
 Loaded current: ~250mA
 Rated Load: 10g*cm
 Motor Size: 27.5mm x 20mm x 15mm
 Weight: 17 grams

Figură 3.10 Motor de curent continuu

3.3 SCHEMA BLOC A SISTEMULUI DE ACȚIONARE


Sistemul de acționare cuprinde subsistemul de comandă și cel de putere.

Figură 3.11 Schema bloc a sistemului de acționare

3.4 MODUL DE CONTROL BAZAT PE RASPBERRY PI


Raspberry este o serie de minicomputere dezvoltate în Marea Britanie de către firma Raspberry
Pi Foundation cu scopul de a promova învățarea informaticii de bază in scoli. Primul model de
Raspberry Pi a devenit de departe mai popular decât se anticipase, fiind vândut chiar și in afara pieței
ținta pentru folosiri in diverse arii cum ar fii robotica. Un lucru deosebit de important este faptul ca
aceasta mini placă de bază vine așa cum o vedeți in imaginea de mai jos, fără să includă periferice sau
carcase. Aceste vor trebui achiziționate de către programator. 5

Figură 3.12 Raspberry Pi Pinout

Versiunea pe care eu am folosit-o pentru a realiza o platforma robotică mobilă este Raspberry Pi
3 Model B+ ce are 1GB RAM, un procesor quad core tactat la viteza de 1.4 GHz. Interfața Ethernet de
la Gigabit permite viteză de download de până la 420 Mbps. Wireless pe benzile 802.11 a/b/g/n/ac. Am
lipit un disipator de căldură pe CPU, ceea ce va îndepărta situațiile de thermal throttling. Procesorul
este mai rapid cu 200MHz decât versiunea anterioară, ceea ce duce la un consum cu 170 mAh mai
mare în regim de idle, și cu până la 500mAh mai mult in activități de procesare.6
Pentru a avea acces la pinii GPIO ca și utilizator am introdus comanda gpio -v. Am instalat
librăria WiringPi ce include programul gpio. Cu acesta, utilizatorul unui RPi poate gestiona cei 40 de
pini atât prin scripturi Python cât și prin shell-script.

3.5 PI CAMERA
Camera pentru Raspberry Pi v2 dispune de 8 megapixeli, un senzor Sony IMX219 și este
proiectată în special pentru plăcile Raspberry Pi, dotată cu un obiectiv cu focalizare fixă. Este capabilă
de imagini statice de 3280 x 2464 pixeli și suportă, de asemenea, video 1080p30, 720p60 și 640
480p60 / 90. Se atașează la plăcile Pi printr-unul dintre prizele mici de pe suprafața superioară a plăcii
și utilizează interfața dedicată CSi, concepută special pentru interfața cu camerele.

5
https://www.raspberrypi.org/blog/raspbian-jessie-is-here/
6
How Much Power Does Raspberry Pi 3B+ Use? Power Measurements (projects-raspberry.com)
Figură 3.13 Cameră pentru Raspberry PI V2

Placa în sine este mică, aproximativ 25mm x 23mm x 9mm și cântărește puțin peste 3g, ceea ce
o face perfectă pentru aplicații mobile sau în alte aplicații, unde mărimea și greutatea sunt un criteriu
important. Se conectează la Raspberry Pi printr-un cablu panglică scurt. Senzorul de imagine Sony
IMX219 de înaltă calitate are o rezoluție nativă de 8 megapixeli și un obiectiv de focalizare fixă la
bord. În ceea ce privește imaginile, aparatul foto este capabil de imagini statice de 3280 x 2464 pixeli și
acceptă, de asemenea, imagini video de 1080p30, 720p60 și 640x480p90.
Pentru utilizări de bază ale camerei sunt preinstalate 3 instrumente din linia de comandă
Taking photo using using Raspbian Terminal
• raspivid – capture video
• raspistill – captură foto jpg
• raspiyuv – captură foto, fișiere.
De exemplu putem face o fotografie cu o întârziere de 2000ms (2 sec) la rezoluția VGA de
640x480 pixeli pe care să o salvăm ca image.jpg:
raspistill -t 2000 -o image.jpg -w 640 -h 480 -v
Similar, o captură video se realizează astfel:
raspivid -t 10000 -o video.h264
Atunci cand dorim să construim o camera de securitate sau o camera pentru streaming de pe un
robot mobil vom utiliza librăria PiCamera7.

7
Getting Started with Raspberry Pi Camera (projects-raspberry.com)
3.6 MODUL DE DETECȚIE TEMPERATURĂ ȘI UMIDITATE DHT22/AM2302

În cadrul proiectului s-a folosit un modul Am2302/DHT22 cu carcasă mare și fire. AM2302 scoate la
ieșire semnal digital calibrat. Elementele senzoriale (de temperatură și umiditate) sunt conectate cu un
computer de tip single-chip de 8-bit. Fiecare senzor este compensat iar coeficientul compensației este
salvat in memoria OTP8 care apoi va fi citat . Senzorul poate fi folosit în locuri mult mai precare
datorită consumului mic și al distanței maxime de transmitere (wire) – 100m.
Tensiunea de alimentare este cuprinsă între 3.3 – 5V. Între VDD și GND poate fi montat un
condensator de 100mF pentru filtrarea fluctuaților de tensiune. Comunicația între MCU și AM2302 se
face printr-o magistrală de date 1-wire (incompatibilă cu Maxim/Dallas. 9
Senzorul citeste nivel de umiditate al aerului cuprins intre 20-80% și temperatura dacă se află în
intervalul valorilor -40 și 80°C

Figură 3.14 Date culese de la senzorul DHT și vizualizate in interfața web Cayenne

8
OTP Memory – OneTime Programmed memory
9
https://lastminuteengineers.com/dht11-dht22-arduino-tutorial/
3.7 PLATFORMA ARDUINO
Arduino este o platformă de prototipare bazată pe hardware și software ușor de folosit.
Aceasta constă într-o placă de circuit, ce poate fi programată direct prin calculator utilizând cablul USB
serial COM3 (este identificată și ca un microcontroller).
Microcontrollerul este un microcircuit care incorporează o unitate centrală de prelucrare și
memorie împreună cu resurse care să îi permită interacțiunea cu mediul exterior. Primordial Arduino
UNO în dotare următoarele resurse:
- O unitate central (CPU) cu un oscillator intern;
- memorie locală tip ROM/PROM/EPROM/FLASH/RAM;
- un sistem de întreruperi;
- intrări/ieşirinumerice (de tip port paralel);
- un sistem de timere-temporizatoare/numărătoare programabile;
- un port serial de tip asincron şi/sau sincron, programabil;
- ieşiri PWM (cu modulare în durată);
- sistem de conversie analog numerică și comparator analogic;
- memorie de date nevolatilă de tip EEPROM;

Figură 3.15 Arduino UNO Pinout

Mai mult, platforma Arduino se diferențiază prin faptul că singurul cod care rulează este cel scris de
către programator în Arduino IDE, neexistând un interpretor, un sistem de operare sau firmware. Codul
C este compilat in Ansemble Language (un limbaj low level) și apoi este trimis către Arduino.

3.8 MODUL ANALOGIC DE ACHIZIȚIE DE DATE ARDUINO


Senzori detectori de gaze. MOS (Metal Oxide Semiconductor)
Acesti senzori au o importanță deosebită în sistemele de monitorizare ale încăperilor.

Figură 3.16 Detectorul de gaze MQ-135

Numiți și cemirezistori, detecția acestora este bazată pe schimbarea rezistenței materialului


atunci când gazul intră în contact. Folosind o rețea de diviziune a tensiunii, concentrațiile gazului se pot
detecta. MQ-135 necesită o tensiune de alimentare de 5V iar consumul său este în jur de 800mW. Plaja
de concentrații detectabile se află între 200 și 10000 ppm.
Termenul de concentrație este folosit pentru a descrie cantitatea de gaz (volumul) din aer, iar
unitatea de măsură ppm arată numărul de particile la 1 milion.
Mod de funcționare
Atunci când semiconductorul incorporat (ce are in componență particule de dioxid de staniu (
SnO2)) este încălzit, oxigenul (O2) este absorbit pe suprafață. În aerul curat, electronii donatori din
particulele de staniu sunt atrași de O2 care este absorbit pe suprafața materialului senzorului. Acest
lucru previne consumul excesiv de curent electric.
Din punct de vedere hardware acest senzor are două ieșiri specifice. Prima pe care majoritatea
senzorilor o au este de tip digital (D0), iar a doua este de tip analog (A0). Ieșirea analogică trimite date
culese de către senzorul incorporat iar valoarea acestora este proporțională cu concentrația in ppm
(particule pe milion). Semnalul analog este apoi trimis către un comparator de mare precizie LM393
ce are rolul de convertor A/D. Lângă comparator se află și un mic potențiometru ce permite ajustarea
sensibilității senzorului. Astfel, comparatorul verifică în mod continuu dacă pinul analogic (A0) a atins
valoarea de threshold, setată de potențiometru. Atunci când a trecut de ea, pinul digital (D0) trece pe
valoarea logică 1, iar LED-ul se aprinde.

3.9 METODA DE ALIMENTARE A PLATFORMEI

Sistemul este comandă este alimentat de un ansamblu de acumulatori legați în serie.


Acumulatorii ajung la tensiunea dorită prin conectarea mai multor cellule in serie pentru că fiecare
celulă adaugă voltajul potential la cel total. Metoda conectării acumulatorilor conectate in parallel
contribuie la atingerea unei intensități ale curentului electric superioare.
Având în vedere că pentru platforma noastră robotică este comandata de 2 motoare de c.c.
brushless, (unul pentru controlul direcției de deplasare, iar celălalt pentru tracțiune) s-a optat pentru
prima variant ce presupune legarea in serie a acumulatorilor pentru o tensiune nominală crescută.
Astfel s-a ajuns la valoarea de 11.50 [V], o tensiune similar vechiului ansamblu de alimentare (8 baterii
de tip AA de câte 1.2 [V], dar ce beneficiază de o încărcare ușoară prin cablu.
In cadrul bateriilor cele mai multe reacții ale substanțelor chimice au loc atunci când sunt
conectate în serie. De aceea am folosit (foste) acumulatori ce au tensiuni și capacități egale. Legarea în
serie a circuitelor electrice se aseamănă foarte mult cu un lanț. Astfel o celulă slabă poate cauza un
dezechilibru. Prin urmare, bateria este atât de puternică pe cât cea mai slabă legătură ce celule este.
O celulă slabă nu va ceda din prima, dar se va epuiza cel mai timpuriu la o încărcare. Aceasta
pentru că celula slabă (mică) se umple de electroni înaintea celei mai puternice (mari) pentru că are
mai puțin spațiu pentru ei și se supraîncarcă adesea. La descărcare, celula slabă se goleste prima, și,
pentru că electronii trec la fel ca apa într-un canal, acestea sunt lovite de descărcarea celulelor
puternice.10
Alegerea unei configurații de baterii este un pas important in design-ul de proces al proiect.
Dimensiunile, tensiunea, greutatea și metoda de reîncărcare a ansamblului de baterii creează restricții
(mai mici sau mai mari și determină în mod direct autonomia robotului.
În cazul de față considerația mea este că s-a ales varianta optimă pentru tensiunea nominală.
12V reprezintă cifra cea mai întâlnită în aplicații robotice de scară mica. Totuși, în viitor se
preconizează că industria automobilelor are intenția să crească tensiunea la 24V sau chiar 36 datorită
avansului electronicii din habitaclu.

Figură 3.17 Alimentare în Paralel. Alimentare în Serie

4 STRUCTURA SOFTWARE A PROIECTULUI


Arhitectura sistemului
Tehnologii software folosite
Interfața cu utilizatorul

4.1 ARHITECTURA SISTEMULUI

10
Serial and Parallel Battery Configurations and Information (batteryuniversity.com)
f
Figure 4- 1 Software architecture

Aplicația de control al platformei robotice este realizată prin modern-web-framework-ul Flask 11


trimite comenzi prin intermediul protocolului de comunicare HTTP către webserverul ce rulează
automat în sistemul de operare Raspian. Pentru aceasta este necesar ca ambele să fie conectate in
permanență la rețeaua Wireless din casă. Pentru ca să o putem folosi trebuie să introducem adresa IP a
robotului sau indicativul raspberrypi.local in browser.
Aplicația propriuzisă este stocată pe memoria Flash USB și gestionată de sistemul de operare al
microcalculatorului.

4.2 TEHNOLOGII FOLOSITE


4.2.1 Python
Python este un limbaj de programare folosit în zone de activitate variate dezvoltat inițial de
către programatorul olandez Guido van Rossum la sfârșitul anilor ”80. Numele lui nu vine de la specia
de șarpe python ci vine de la populara emisiune Monty Python. Acest limbaj are o sintaxă deosebit de
curată, uniformă și ușor de citit, principalele diferențe față de celelalte fiind lipsa acoladelor și a
punctului și virgulei ( ; ).

11
https://pypi.org/project/Flask
În ziua de azi, Python este unul din cele mai populare limbaje de programare la nivel mondial
conform TIOBE INDEX[ CITATION The20 \l 1033 ] numărul programatorilor specializați cunoscând
o creștere liniară continuă din anul 2018. Totul se datorează numărului larg de aplicații posibile,
amintind aici: dezvoltarea aplicațiilor web, știința datelor, recunoașterea formelor12, aplicații embedded.
până la automatizarea sarcinile de zi cu zi. În acest proiect am implementat o aplicație pentru desktop
cu ajutorul modulului PyQt513.
Din punct de vedere al tipului de programare, Python poate fi folosit atât în programarea
orientate pe obiect şi funcțională cât şi în cea procedurală ce este folosită în specială pentru sistemele
embbeded. Administrarea memoriei se face că şi la Java prin intermediul unui serviciu de colectare
numit "garbage collector" ce se ocupă automat de ștergerea din memorie a variabilelor ce nu mai sunt
folosite spre deosebire de C.
Conceptul Batteries Included, în informatică se referă la faptul că orice limbaj de programare
vine la pachet cu un set de biblioteci care să ii dea aplicativitatea practică. API-urile 14 Python oferă o
gamă largă de funcționalități precum cele de bază (modificarea unui șir de caractere) până la lucrul cu
procese şi fire de execuție15. Modelele folosite în scripturile Python16 sunt de regulă trecute in headerul
acestora cu sintaxa:
import module_name sau from Module.name import submodule

4.2.2 Javascript
JavaScript este un limbaj de programare interpretat pentru computer formalizat în standardul de
limbaj ECMAScript. Motoarele JavaScript interpretează și execută JavaScript. Motoarele JavaScript
pot fi proiectate pentru a fi utilizate ca interpreți independenți, încorporate în aplicații, sau ambele.
Primul motor JavaScript a fost creat de Netscape pentru a fi încorporat în browserul lor web. V8 este
un motor JavaScript creat pentru utilizare în Google Chrome și poate fi utilizat și ca interpretor
independent. Adobe Flash utilizează un motor JavaScript numit ActionScript pentru dezvoltarea
programelor Flash.
Un lucru important de stiut este că Javascript nu derive deloc din Java ci din C. Totuși față de
majoritatea limbajelor de programare acesta nu dispune de clase. Ele pot fi simulate procesul de
învățare va deveni mai greu. Obiectele defines limbajul ca fiind Object-Oriented-Programming.
Funcțiile sunt obiecte, avand proprietăți și metode proprii.
Cea mai des întâlnită utilizare a JavaScript este în scriptarea paginilor web. Programatorii web
pot îngloba în paginile HTML script-uri pentru diverse activități cum ar fi verificarea datelor introduse
de utilizatori sau crearea de meniuri și alte efecte animate.
Browserele rețin în memorie o reprezentare a unei pagini web sub forma unui arbore de obiecte
și pun la dispoziție aceste obiecte script-urilor JavaScript, care le pot citi și manipula. Arborele de
obiecte poartă numele de Document Object Model sau DOM. Există un standard W3C pentru DOM-ul
12
Acest curs este recunoscut în limba engleză ca ”Machine Learning”
13
PyQt5 este un set complex de asocieri Python pentru Qtv5. Acest modul este folosit ca o alternativă la dezvoltare
aplicațiilor GUI cu C++.
14
Un API este un set de funcții și proceduri ce permit crearea aplicațiilor ce accesează date de la OS, altă aplicație sau
serviciu. Aceste API-uri sunt distribuite atât open-source cât și contra-cost.
15
Cunoscute de programatori ca ”thread-uri”
16
Un script Python este un fișier text cu extensia *.py
pe care trebuie să îl pună la dispoziție un browser, ceea ce oferă premiza scrierii de script-uri portabile,
care să funcționeze pe toate browserele. În practică, însă, standardul W3C pentru DOM este incomplet
implementat. Deși tendința browserelor este de a se alinia standardului W3C, unele din acestea încă
prezintă incompatibilități majore, cum este cazul Internet Explorer.
O tehnică de construire a paginilor web tot mai întâlnită în ultimul timp este AJAX, abreviere
de la „Asynchronous JavaScript and XML”. Această tehnică constă în executarea de cereri HTTP în
fundal, fără a reîncărca toată pagina web, și actualizarea numai anumitor porțiuni ale paginii prin
manipularea DOM-ului paginii. Tehnica AJAX permite construirea unor interfețe web cu timp de
răspuns mic, întrucît operația (costisitoare ca timp) de încărcare a unei pagini HTML complete este în
mare parte eliminată. JavaScript este cu adevărat un limbaj dinamic.
Rar este necesar să utilizați operatorul de evaluare pentru lucruri de genul acesta, pentru că,
practic, puteți scrie orice doriți, dacă sintaxa este corectă și dacă ceea ce ați scris nu există, veți primi o
eroare de execuție. [ CITATION Wik20 \l 1048 ]
4.2.3 Cayenne

Cayenne este un panou de control și vizualizare online a sistemelor


embedded și IoT (ex. SmartHome) ce diminuează complicațiile programării
orientate pe hardware. Inițial a putut fi folosită cu Raspberry Pi, însă a apărut
posibilitatea integrării cu microcontrollerul Arduino și multe altele.
Fiind un sistem de programare drag-and-drop, Cayenne ca și platformă IoT știe să standardizeze
conectarea dispozitivelor periferice cum ar fi senzorii, motoarele și verifică faptul că driverele sunt
instalate. Pot fi realizate (iar acest lucru îl am în vedere pentru direcții viitoare) și aplicații măsurare a
calității aerului din înterior, sisteme de siguranță a muncitorilor, mentenanță preventivă pentru diverse
instituții

Pentru a instala Cayenne pe Raspberry:


wget https://cayenne.mydevices.com/dl/rpi_y1kjskq6mq.sh
sudo bash rpi_y1kjskq6mq.sh -v

Pentru a instala plugin-ul senzorului DHT22


cd /etc/myDevices/plugins
sudo git clone https://github.com/myDevicesIoT/cayenne-plugin-dht.git
cd cayenne-plugin-dht/
sudo pip3 install .
chmod 777 cayenne_dht.plugin
În acest fișier se for schimba numele senzorului (din 11 în 22 și se va trece pinul 10
sudo nano cayenne_dht.plugin
sudo service myDevices restart

Figură 4.18 devices.cayenne.com - Panou de control Raspberry pi


4.3 INTERFAȚA CU UTILIZATORUL

Aplicația de control al platformei robotice este realizată prin modern-web-framework-ul Flask 17


trimite comenzi prin intermediul protocolului de comunicare HTTP către webserverul ce rulează
automat în sistemul de operare Raspian. Pentru aceasta este necesar ca ambele să fie conectate in
permanență la rețeaua Wireless din casă.

User-ul va introduce în bara de căutare a browserului adresa raspberrypi.mshome.net

Figură 4.19 Aplicație web pentru control

În momentul în care un buton este apăsat acesta declansează o funcție ce primește date JSON
printr-un request AJAX.

//functie apelata la apasarea butonului Inainte
               $(function() {
                 $('a#inainte').bind('click', function() {
                   $.getJSON('/background_inainte',
                       function(data) {
                     //do nothing
                   });
                   return false;
                 });
               });

17
https://pypi.org/project/Flask
Aceste date se află în rout-ul specific din fișierul .py ce controlează pinii GPIO.
#randeaza raspunsurile JSON
@app.route('/json')
def json():
    return render_template('json.html')

#primeste comanda de a merge inainte
@app.route('/background_inainte')
def background_inainte():
    print ("inainte")
    GPIO.output(motor_en1, GPIO.HIGH)
    GPIO.output(motor_in1, GPIO.HIGH)
    GPIO.output(motor_in2, GPIO.LOW)
    GPIO.output(motor_in3, GPIO.LOW)
    GPIO.output(motor_in4, GPIO.LOW)
    GPIO.output(motor_en2, GPIO.LOW)
    return ("nothing")

Există 5 @app.routes definite ca cea de mai sus, specifice celorlalte tipuri de comenzi pe care le-am
implementat pentru robotul comandat prin GPIO și L298.
Acestea se pot vizualiza în secțiunea de cod din anexă.

Serverul Flask este specializat în streaming-ul secvențelor de fotografii independente JPEG. Acest
lucru se numeste Motion JPEG și este astăzi implementat în majoritatea camerelor IP. Această metodă
oferă o latență redusă, dar calitatea nu excelentă întrucât compresia fișierelor *.jpg nu influențează
calitatea videoclipurilor în mișcare.

def gen(camera):
while True:
frame = camera.get_frame()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')

#ruta pentru steamingul video. Aceasta ruta este pusa intr
un tag img din index.html pentru a afisa streamul video
@app.route('/video_feed')
def video_feed():
    return Response(gen2(Camera()),
                    mimetype='multipart/x-mixed-replace; boundary=frame')

Aplicația importa clasa Cameră, construită cu ajutorul modulului picamera care are rolul de a oferi
secvențe video. Ruta /video-feed returnează răspunsul streamului de la camera video. Pentru că ea,
în particular, returnează o secvență de imagini, ce vor fi afisate in pagina HTML, URL-ul acestei rute
se află in atributul src al tagului de imagine <img. Elementul de imagine rămâne actualizat în browser
atât timp cât serverul, camera și microcontrolerul funcționează.
gen() este funția generatoare folosită in /video-feed. Aceasta ia ca și argument o instanță a
clasei camera. Al doilea rgument al răspunsului funcției de streaming video, mimetype, are
definit tipul de conținut multipart/x-mixed-replace.

4.3.1 Flask server


Atunci când nu există conexiune la internet sau la o rețea privată se scrie răspunsul pe disk și se
trimite ulterior prin metoda flask.send_file().
Fiecare bucățică (eng. chunk) apare într-un webpage înlocuiește anteriorul. Astfel o imagine inointă in
continuu devine un videoclip, al cărei dimensiuni depinde de timpul/ durata request-ului către server.
Pentru aceste acualizări continue se folosesc „multipart responses” care reprezintă niște headere ce
conțin tipul de content urmat de chunks, despărțiți de benzi limitatoare (eng. boundary markers). Pentru
ceea ce am descris anterior, acest multipart se foloseste multipart/x-mixed-replace.

Limitări privind stream-ul camerei video prin Flask


Când aplicația Flask servește solicitări regulate, ciclul de solicitare este scurt. Lucrătorul web primește
cererea, invocă funcția de gestionare și în cele din urmă returnează răspunsul. Odată ce răspunsul este
trimis înapoi clientului, lucrătorul este liber și gata să accepte o altă cerere.
Când se primește o cerere care utilizează streaming, web-workerul18 rămâne atașat clientului pe durata
fluxului. Când lucrează cu fluxuri lungi, fără sfârșit, cum ar fi un flux video de la o cameră, un lucrător
va rămâne blocat la client până când acesta se deconectează. Asta înseamnă efectiv că aplicația poate
deservi numai atâți clienți câți web-workeri sunt. Acest lucru este valabil și în cazul debugging-ului 19
așa că dezvoltatorii nu pot testa streamingul din două zone geografice diferite. De aceea există o
extensie pentru Flask, complet compatibilă: Gevent.
Obs. În proiect nu s-a folosit decât Flask.

Figură 4.20 Snapshot al robotului și telenonului pe care rulează streaming-ul

18
JavaScript care rulează în fundal, independent de alte scripturi și fără a afecta performanța paginii web.
19
proces de identificare și înlăturare a erorilor software sau hardware
5 TESTAREA ȘI EVALUAREA REZULTATELOR
Realizarea practică a modelului
Testarea comunicației
Testarea deplasării

5.1 REALIZAREA PRACTICĂ A MODELULUI

Având ca bază domeniile care se interconectează în mecatronică și robotică, tratate pe larg în capitolele
de mai sus, am pus mașina în funcțiune prin metode proprii de abordare dar inspirit din surse online,
cum ar fi Revista MagPi, canale de Youtube, tutorial și pagina Wikipedia.

Legarea componentelor hardware s-a realizat conform schemei:

Figură 5.21 Schematica de conectare componente fizice

Driverul L298 se conectează prin pinii EN1, IN1, IN2, colectează


informații cu privier la controlul și polaritatea motorului M1; iar IN3,
IN4, EN2 motorului M2. Aceste informații se transmit prin OUT1,
OUT2 și respective OUT3, OUT4.
Alimentarea se face prin porturturile VS (pozitiv) și VSL (negative). S-au folosit câte 2 fire pentru
fiecare port pentru a nu se produce o supraincărcare de tensiune. Bateriile fac posibilă alimentarea
ansamblului cu 12V, o tensiune nominală optima pentru platforma mobile în cauză.
Figură 5.22 Componente fizice

5.2 TESTAREA COMUNICAȚIEI


5.2.1 Protocoale de comunicare
Telnet este un protocol de rețea care permite conectarea de la distantă la un echipament de rețea
(Router, Switch, Firewall, etc.) sau la un server. Este foarte răspândit, aflându-se instalat pe marea
majoritate a device-urilor. Conexiunea este nesecurizată, prin urmare comunicația dintre 2 dispozitive
este trimisa  în clear text și poate fi interceptată de către un atacator.
SSH permite conectarea de la distanta într-o rețea de calculatoare în mod securizat. Are aceeași
funcționalitate și în același timp fluxul de comunicare este transmis în mod criptat și nu poate fi
descifrata sau modificata de catre atacatori.
Conexiunea SSH la dispozitivul linux o realizez prin comanda în terminal: ssh pi@raspberrypi

5.2.2 Conectarea la rețeaua locală


Pentru a se face conexiunea microcontroller-ul la wireless, atunci cand aceasta se schimbă se va
introduce cardul microSD sau stick-ul USB în laptop. Imediat Windows recunoaște o partiție non-
Linux (FAT32) cu numele „boot”. Aceasta cuprinde diverse fișiere de configurare la pornire, pentru
kernel-ul (miezul) microcontroll-erului care odată ce sunt citite, sunt transmise in sistemul de fișiere
proprietar Linux. Astfel, pentru ceea ce se propune în aceasta subsecțiune, vom defini fișierul
„wpa_supplicant.conf”:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=RO

network={
ssid="Daniel ... digi 5G"
psk=""
}

Atunci când butează, RPI va copia conținutul de mai sus în locația corectă adică în
/etc/wpa_supplicant.conf. După primul boot, conectarea la rețeaua Wi-Fi poate dura până la 5
minute.
Modulul Wireless (Antena) conectată la unul din porturile USB de pe placa de dezvoltare
Raspberry Pi se conectează la rețeaua Wireless locală20 prin tehnologia Wi-fi 2.4 / 5 Ghz.
Modulul Wifi se conectează la router-ul wireless care deține o antenă pentru o arie mai mare de
acoperire.

20
Am precizat de la începutul lucrării că acesta este un robot destinat in genere uzului casnic. Totuși, el poate fi comandat și
în momentul deplasărilor, creând un hotspot Wi-fi de pe telefonul mobil. La acest lucru nu am apelat date fiind condițiile de
anul acesta de susținere a examenului acasă.
5.2.3 Configurare interfeței de rețea
Detaliile despre configurația interfeței de rețea apar prin comanda ifconfig
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.43.83 netmask 255.255.255.0 broadcast 192.168.43.255
inet6 fe80::c6fe:3e5:e03c:3add prefixlen 64 scopeid 0x20<link>
ether b8:27:eb:2f:1b:61 txqueuelen 1000 (Ethernet)
RX packets 7134 bytes 1058325 (1.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5898 bytes 2691933 (2.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Aici ne interesează în mod special secțiunea a doua wlan0, care este subrețeaua robotului, mai
exact ne asigurăm că avem o adresă de ip statică (inet), o mască (netmask) și statusul pachetelor din
rețea: RX (pachete recepționate) și TX (pachete transmise)

Fiecare pachet (sau grup de pachete) are asociate un numar de secventa. Daca destinatarul


primeste un anumit numar de pachete (definit de numarul de secventa), atunci acesta va trimite inapoi
un mesaj de confirmare (ACK) pentru aceste pachete primite:

Figură 5.23 3-Way Handshake

Astfel, destinatarul constată ce pachete au ajuns către el și ce pachete trebuie să fie retransmise În
cazul în care clientul nu primește o confirmare (ACK) pentru vreun pachet, atunci el va retransmite
acele pachete.
5.2.4 Dezvoltare de aplicații prin rețea
Deoarece experiența de dezvoltare a programelor soft cu ajutorul Raspberry Pi nu este tocmai
bună fie ori datorită rezoluției restrânse a ecranului vizualizat prin vnc fie din cauză că programul
preinstalat pentru programare in Python (care se numeste Thronny) nu prezente funcții avansate (cum
ar fi completare automată) am decis să inițializez o conexiune directă dintre
Laptop și Raspberry. Cel mai avansat pentru aceasta este, după părerea mea, MobaXterm.
MobaXtrem este o aplicație Windows ce dispune de un client SSH, un server X11 și multe alte
instrumente de rețea pentru accesul de la distanță. Pot fi rulate mai multe sesiuni în terminal.
Funcțiile sale sunt:
 Full X server and SSH support
 Remote desktop (RDP, VNC, Xdmcp)
 Remote terminal (SSH, telnet, rlogin, Mosh)
 X11-Forwarding
 Automatic SFTP browser
 Plugins support
 Portable and installer versions
 Full documentation
 Max. 12 sessions
În mod particular am experimentat beneficiile față de aplicația Putty. Sesiunile pot fi grupate în tab-uri,
pot fi detașate în ferestre separate. Este o aplicație portabilă ce nu necesită instalare și oferă acces rapid
de la distanță într-un mod intuitive pentru microcontrollerele Pi

Figură 5.24 Remote development via MobaXterm


5.3 TESTAREA DEPLASĂRII

În acest capitol voi face o mică analiză a platformei implementate în ultimele luni.
Având în vedere că rolul ei primordial este să se deplaseze prin medii domestice, nu am supus-o
testelor pe diferite suprafețe deoarece într-un domiciliu podelele sunt acoperite cu mochetă sau gresie.
Viteza de deplasare este influențată direct de greutatea (1100g) și de baterii. Nivelul de
încărcare al acestora este de până la 11.9 V pentru ca puntea H să distribuie suficientă putere pe ambele
punți
În urma unui test cu bateriile încărcate la maxim (de la 220V, prin încărcătorul telefonului) în care
mașina se deplasa cu aproximativ 4kmph (1m/s), motorul a învârtit roțile aproape 20 min.
Platforma pleacă greu de pe loc datorită înegalității greutății. Puntea spate este incărcata de presiunea
bateriilor.
Însă dacă utilizăm abraziv mașina pe trasee care necesită viraje multiple, atunci autonomia va scădea la
jumătate. Motorul responsabil cu virarea Ackerman este de același tip ca si cel de tracțiune, prin urmare
el rămâne alimentat și consumă curent electric atât timp cât virează.
De aceea una dintre imbunătățiri este fără îndoială achiziția unui servomotor care este și mai precis. La
virare, centrul instantaneu de rotație se află la 35 cm dinstanță.
Contribuții personale
Etape viitoare

6 CONCLUZII

6.1 CONTRIBUȚII PERSONALE


Primul capitol, fiind partea introductivă este destinată explicării necesității și importanței
lucrării, terminologiei de specialitate, a funcțiilor cercetării în societate. Lucrarea nu se refera doar la
cercetarea din domeniul roboticii industriale, ci se refera la multe alte domenii conexe, de aceea le-am
explicat și integrat în cercetare.
Capitolul 2 prezintă istoria structurilor robotice, clasificarea roboților și mecanismul de direcție
al robotului.
Capitolele 3 și 4 prezintă descrierea propriu-zisă a elementelor ce compun platforma robotică
mobilă. Elementele hardware sunt structura mecanică, elementele de acționare electrică, și modulul de
control bazat pe Raspberry PI, modulul analogic de achiziție de date și nu în ultimul rând modulul de
alimentare. Pentru prezentarea structurii software a proiectului voi elabora o schemă a arhitecturii/
designului sistemului, descrie tehnologiile din domeniul IT și modul în care am implementat interfața
cu utilizatorul.
Capitolul 5 se concentrează pe testarea și evaluarea rezultatelor și conține subcapitolele de
Realizare practică a modelului, Testarea comunicației și testarea deplasării.

Contribuțiile personale aduse pentru realizarea proiectului de control al robotului sunt:


• Analiza literaturii de specialitate referitoare la stadiul actual din domeniul roboților mobili
• Testarea robotului mobil PiCar într-un spațiu de lucru aflat in domiciliul propriu în vederea culegerii
datelor senzorului de temperatură și umiditate
• Testarea robotului mobil din punct de vedere al abaterii de la traiectorie, analiza datelor obținute și
remedierea defectelor găsite la sistemele de locomoție prin strângerea șuruburilor.
• Amenajarea unor medii de lucru cu suprafețe de rulare diferite (parchet, covor și nisip)
pentru analiza comportamentul robotului din punct de vedere al vitezei de înaintare.
6.2 ETAPE VIITOARE
O serie de aplicații viitoare ce pot fi realizate utilizând ca punct de plecare ansamblul dispozitivelor
prezentat în această lucrarea sunt :
• Îmbunătățirea aplicației web Javascript
• Rezolvarea problemei distribuției de tensiune între cele 2 motoare
• Reducerea vitezei in momentul virajelor prin schimbarea Duty Circle (PWM)
• Utilizarea unui convertor A/D pentru a interfața potențiometre, thermistory sau senzori de gaze
ale căror semnale analogice nu pot comunica cu interfața GPIO a Raspberry
• Implementarea unei metode cu ajutorul căreia să pot urmări streaming-ul video de oriunde și să
pot controla robotul de la distanță.
BIBLIOGRAFIE

[1] M. Ford, Ascensiunea roboților - Tehnologia și viitorul fără joburi, Silicon Valley: Corint Future,
2019.
[2] Manualul Oslo, 2005.
[3] Wikipedia, „Wikipedia,” [Interactiv]. Available: https://ro.wikipedia.org/wiki/Inovație. [Accesat
Aprilie 2020].
[4] C. M. Christensen, The innovator`s dilemma, New York: HarperBusiness,, 1997, p. 25.
[5] D. G. N. I. Popescu, Tehnologie și inovare, București: Editura Fundației României de Mâine,
2006.
[6] M. GÂF-DEAC, „Tehnologiile Moderne,” Fundația România de Mâine, p. 40.
[7] Orange, „Vânzări - Informații Generale,” 2020. [Interactiv].
[8] E. D. Aurel Pisochi, „Definiții prifind cercetarea, dezvoltarea, inovarea,” p. 2.
[9] Wikipedia, „Managementul Inovării,” [Interactiv]. Available:
https://ro.wikipedia.org/wiki/Managementul_inovării. [Accesat Mai 2020].
[10] A. Webb, Cei nouă titani tech. Cum va schimba inteligența artificială cursul omenirii, Gobbo.
[11] J. M. Snider, „Automatic Steering Methods for Autonomous Automobile Path Tracking,” pp. 8-
11, 2009.
[12] „The Python Programming Language,” 06 2020. [Interactiv]. Available:
https://www.tiobe.com/tiobe-index/python/.
[13] Wikipedia, „Javascript - Wikipedia,” 9 October 2020. [Interactiv]. Available:
https://ro.wikipedia.org/wiki/JavaScript#cite_note-FOOTNOTEFlanaganFerguson20061-5.
[14] L. Hattersley, „How to set up Raspberry Pi 4,” 06 2019. [Interactiv]. Available:
https://magpi.raspberrypi.org/articles/set-up-raspberry-pi-4.
[15] A. AI, „alwaysai.com,” 2020. [Interactiv]. Available:
https://alwaysai.co/docs/getting_started/edge_device_setup.html.
[16] „SunFounder - About Us,” 2020. [Interactiv]. Available: https://www.sunfounder.com/about-
magento-demo-store/.
[17] M. M. Cristian Bănică, „Despre Inovare - Workingpaper,” 2012.
ABSTRACT
I carried out a bachelor project for the Department of Automation and Information Technology,
Curriculum: ROBOTICS with the theme Control of a modern robotic platform.
I chose this theme because I am passionate about the field of robots and how to control them
remotely through applications on mobile technologies. The project consists of five chapters, divided
into two parts, the theoretical part and the practical part. The theoretical part comprises two chapters.
The first chapter is an introduction in which we explained the importance of the topic, the motive of its
choice, the project objectives, the project methodology, conceptual delimitations in which we explained
the specialized terms used in the project. The second chapter is intended for a brief history of robotics,
robot categories and notions related to the field of mobile robotics.
The third chapter and the forth chapter are the practical parts in which I took care of the actual
project. I described the hardware and software architectures and its components..
To the already existing mobile robotic platform, we made some extensions, namely we attached
a camera to film during the movement of the robot and smoke sensors, which can have the domestic
utility to detect smoke and prevent a fire.
In the project we made a description of the mobile robotic platform with all the physical and software
components, the web application that controls the robot, we described the extensions installed on the
robot. We have also included the diagrams of the robot's motherboard.
I later included the research conclusions, with my personal contribution, namely:
• Analysis of the literature on the current state of the field of mobile robots
• Testing the PiCar mobile robot in a workspace located in my home in order to collect data of
temperature and humidity
• Testing of the mobile robot in terms of deviation from the trajectory, analysis of data obtained and
repair of defects found in locomotion systems by tightening the screws.
• Arranging work environments with different tread surfaces (parquet, carpet and sand)
to analyze the robot's behavior in terms of forward speed.
• Analysis of data obtained from distance measurements in terms of errors
measurement.

ANEXA 1 - DATASHEETS

1) AM2302/ DHT22 - DIGITAL HUMIDITY AND TEMPERATURE SENSOR


Digital+humidity+and+temperature+sensor+AM2302.pdf (adafruit.com)
2) LNB298N – H-BRIDGE MOTOR DRIVE
L298 datasheet(1/13 Pages) STMICROELECTRONICS | DUAL FULL-BRIDGE DRIVER
(alldatasheet.com)
3) MQ-135 Semiconductor Gas Sensor
china-total.com/Product/meter/gas-sensor/MQ135.pdf · PDF file
ANEXA 2 – PACKPAGES & LINUX SETUP
.bashrc_history
sudo raspi-config
sudo apt-get update
sudo apt-get upgrade
gpio -v
hash -r
cd /tmp
wget https://unicorn.drogon.net/wiringpi-2.46-1.deb
sudo dpkg -i wiringpi-2.46-1.deb
sudo dpkg --configure -a
sudo apt-get install wiringpi
sudo apt-get install python-RPi.GPIO
source ~/.bashrc
python --version
raspistill -o /Desktop/image.png
sudo apt-get install build-essential python-dev python-openssl git
git clone https://github.com/adafruit/Adafruit_Python_DHT.git && cd
Adafruit_Python_DHT
sudo python3 setup.py install
cd examples
sudo ./AdafruitDHT.py 22 10 //setez senzorul pt pinul 10

cd Documents/camWebServer
sudo python3 appCam.py

crontab -e
@reboot sudo python3 /home/pi/Documents/camWebServer/appCam.py

cat /etc/hostname
sudo reboot
ANEXA 3 - MODULES
appCam.py – Python Script

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
from flask import Flask, render_template, Response, jsonify
import RPi.GPIO as GPIO
from camera_pi import Camera
import _thread
import Adafruit_DHT

#creare server Flask


app = Flask(__name__)

#configurare pini senzor DHT


sensor = Adafruit_DHT.DHT22
pin = 10
output_dht = "setup"

#salvare timp start pentru a fi folosit la citirea temperaturei o data la 3 secunde


ultima_citire = time.time()

#setare pini driver motoare


GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
motor_en1 = 13
motor_in1 = 19
motor_in2 = 26
motor_in3 = 17
motor_in4 = 27
motor_en2 = 22
#setare pini in mod iesire
GPIO.setup(motor_en1, GPIO.OUT)
GPIO.setup(motor_in1, GPIO.OUT)
GPIO.setup(motor_in2, GPIO.OUT)
GPIO.setup(motor_in3, GPIO.OUT)
GPIO.setup(motor_in4, GPIO.OUT)
GPIO.setup(motor_en2, GPIO.OUT)
#setare pini pe 0V
GPIO.output(motor_en1, GPIO.LOW)
GPIO.output(motor_in1, GPIO.LOW)
GPIO.output(motor_in2, GPIO.LOW)
GPIO.output(motor_in3, GPIO.LOW)
GPIO.output(motor_in4, GPIO.LOW)
GPIO.output(motor_en2, GPIO.LOW)

#returneaza pagina principala ce contine steamul video si butoanele


@app.route('/')
def index():
return render_template('index.html')

#returneaza o noua imagine citita de la camera


def gen2(camera):
while True:
frame = camera.get_frame()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')

#randeaza raspunsurile JSON


@app.route('/json')
def json():
return render_template('json.html')

#primeste comanda de a merge inainte


@app.route('/background_inainte')
def background_inainte():
print ("inainte")
GPIO.output(motor_en1, GPIO.HIGH)
GPIO.output(motor_in1, GPIO.HIGH)
GPIO.output(motor_in2, GPIO.LOW)
GPIO.output(motor_in3, GPIO.LOW)
GPIO.output(motor_in4, GPIO.LOW)
GPIO.output(motor_en2, GPIO.LOW)
return ("nothing")

#primeste comanda de a merge inapoi


@app.route('/background_inapoi')
def background_inapoi():
print ("inapoi")
GPIO.output(motor_en1, GPIO.HIGH)
GPIO.output(motor_in1, GPIO.LOW)
GPIO.output(motor_in2, GPIO.HIGH)
GPIO.output(motor_in3, GPIO.LOW)
GPIO.output(motor_in4, GPIO.LOW)
GPIO.output(motor_en2, GPIO.LOW)
return ("nothing")

#primeste comanda de a merge in stanga


@app.route('/background_stanga')
def background_stanga():
print ("stanga")
GPIO.output(motor_en1, GPIO.HIGH)
GPIO.output(motor_in1, GPIO.HIGH)
GPIO.output(motor_in2, GPIO.LOW)
GPIO.output(motor_in3, GPIO.HIGH)
GPIO.output(motor_in4, GPIO.LOW)
GPIO.output(motor_en2, GPIO.HIGH)
return ("nothing")

#primeste comanda de a merge dreapta


@app.route('/background_dreapta')
def background_dreapta():
print ("dreapta")
GPIO.output(motor_en1, GPIO.HIGH)
GPIO.output(motor_in1, GPIO.HIGH)
GPIO.output(motor_in2, GPIO.LOW)
GPIO.output(motor_in3, GPIO.LOW)
GPIO.output(motor_in4, GPIO.HIGH)
GPIO.output(motor_en2, GPIO.HIGH)
return ("nothing")

#primeste comanda de a opri


@app.route('/background_stop')
def background_stop():
print ("stop")
GPIO.output(motor_en1, GPIO.LOW)
GPIO.output(motor_in1, GPIO.LOW)
GPIO.output(motor_in2, GPIO.LOW)
GPIO.output(motor_in3, GPIO.LOW)
GPIO.output(motor_in4, GPIO.LOW)
GPIO.output(motor_en2, GPIO.LOW)
return ("nothing")

#primeste comanda de a trimite o noua temperatura


@app.route('/background_DHT')
def background_DHT():
global ultima_citire
global output_dht
#daca au trecut mai mult de 3 secunde de la ultima citire, facem o noua citire de temperatura
if(time.time() - ultima_citire>3):
ultima_citire = time.time()
_thread.start_new_thread(background_citire_DHT, ());
#afisam in linia de comanda citirea curenta
print ("DHT: " + output_dht)
#returnam ce am citit de la senzorul de temperatura/umiditate
return jsonify(output_dht)

#functie de citire date noi de la senzor


#functia salveaza datele direct in mod JSON pentru o folosire usoara a lor
mai departe
def background_citire_DHT():
global sensor
global pin
global output_dht
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
output_dht = 'Temp:\"{0:0.1f}°C\", Humidity:\"{1:0.1f}%\"'.format(temperature, humidity)
output_dht = '{' + output_dht + '}'

#ruta pentru steamingul video. Aceasta ruta este pusa intr-un tag img din index.html pentru a afisa streamul
video
@app.route('/video_feed')
def video_feed():
return Response(gen2(Camera()),
mimetype='multipart/x-mixed-replace; boundary=frame')

#pornim serverul pentru a asculta orice request pe portul 80


if __name__ == '__main__':
app.run(host='0.0.0.0', port =80, debug=True, threaded=True)

gas_monitor.ino
#define gasPin (0)
#define Buzzer (9)

float gasValue; //variabila ce stochează valoarea senzorului

void setup()
{
Serial.begin(9600); // setează frecv pt serial 9600
delay(5000);
}
void loop()
{
gasValue = analogRead(gasPin); // citeşte intrarea analogică

Serial.print("Gas Level: ");


Serial.print(gasValue);

if(gasValue > 300)


{
Serial.print(" | Smoke detected!");
tone(Buzzer, 1000);
noTone(Buzzer);
delay(1000);
}
Serial.println("");
delay(2000); }

telegram_bot.py
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
ser_msg=serial.Serial("/dev/ttyACM1",9600)
ser_msg.baudrate=9600

now = datetime.datetime.now()

def action(msg):
chat_id = msg['chat']['id']
command = msg['text']
print ('Received: %s' % command)

read_ser = ser_msg.readline()
if read_ser == "Fum detectat acasa!":
telegram_bot.sendMessage(chat_id, read_ser)

h,t = dht.read_retry(dht.DHT22, DHT)


dht_info = 'Temp={0:0.1f}C Humidity={1:0.1f}%'.format(t,h)
if command == "dht":
telegram_bot.sendMessage(chat_id, dht_info)
if command == 'status':
telegram_bot.sendMessage(chat_id, read_ser)

telegram_bot =
telepot.Bot('1543047953:AAHBdhB9cEVvJUlXTPEBXeto6_Rbsp4oT2A')
print(telegram_bot.getMe())

MessageLoop(telegram_bot, action).run_as_thread()
print("Up and Running...")
while (1):
time.sleep(10)

bot.message_loop(handle)

S-ar putea să vă placă și