Documente Academic
Documente Profesional
Documente Cultură
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
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
Astăzi mecatronica este o știință avansata care studiază noile tehnologii informaționale și
comunicaționale.
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
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.).
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.
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.
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.
4
Wireless-Wi-fi 802.11bgn, 150Mbps
Arduino UNO Microcontroller 1
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
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;
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.
10
Serial and Parallel Battery Configurations and Information (batteryuniversity.com)
f
Figure 4- 1 Software architecture
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
Î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.
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
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.
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)
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
Î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
[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
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
#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')
gas_monitor.ino
#define gasPin (0)
#define Buzzer (9)
void setup()
{
Serial.begin(9600); // setează frecv pt serial 9600
delay(5000);
}
void loop()
{
gasValue = analogRead(gasPin); // citeşte intrarea analogică
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)
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)