Documente Academic
Documente Profesional
Documente Cultură
susinut de
Inginer (B.Sc.)
GRAD / DEGREE
EXAMINATORI LUCRARE / THESIS EXAMINERS Dinu COLUC Felix ALBU Dan-Constantin PUCHIANU Nicoleta ANGELESCU Florian ION
Thesis Supervisor: HENRI - GEORGE COANDA Associate professor, Ph.D. Eng., Electronic, Telecommunication and Power Energy Department Electrical Engineering Faculty University VALAHIA of Targoviste
UNIVERSITATEA VALAHIA DIN TARGOVISTE FACULTATEA DE INGINERIE ELECTRICA Specializarea: Electronic aplicat
Anexa 1
Anul universitar 2012 - 2013
2. Tema proiectului:
CONDUCATOR TIINIFIC Conf.dr.ing. Henri-George COAND Tema a fost data spre mplinire la data NUMELE si SEMNATURA STUDENTULUI Simion Alin Cezar 4
List figuri
FIGURA 1 ......................................................................................................................................................... 8 FIGURA 2 ......................................................................................................................................................... 8 FIGURA 3 ......................................................................................................................................................... 8 FIGURA 4 ....................................................................................................................................................... 10 FIGURA 5 ....................................................................................................................................................... 11 FIGURA 6 ....................................................................................................................................................... 14 FIGURA 7 ....................................................................................................................................................... 15 FIGURA 8 ....................................................................................................................................................... 15 FIGURA 9 ....................................................................................................................................................... 16 FIGURA 10 ..................................................................................................................................................... 16 FIGURA 11 ..................................................................................................................................................... 17 FIGURA 12 ..................................................................................................................................................... 18 FIGURA 13 ..................................................................................................................................................... 19 FIGURA 14 ..................................................................................................................................................... 19 FIGURA 15 ..................................................................................................................................................... 20 FIGURA 16 ..................................................................................................................................................... 22 FIGURA 17 ..................................................................................................................................................... 23 FIGURA 18 ..................................................................................................................................................... 24 FIGURA 20 ..................................................................................................................................................... 25 FIGURA 21 ..................................................................................................................................................... 25 FIGURA 22 ..................................................................................................................................................... 26 FIGURA 23 ..................................................................................................................................................... 26 FIGURA 24 ..................................................................................................................................................... 27 FIGURA 25 ..................................................................................................................................................... 27 FIGURA 26 ..................................................................................................................................................... 27 FIGURA 27 ..................................................................................................................................................... 28 FIGURA 28 ..................................................................................................................................................... 28 FIGURA 29 ..................................................................................................................................................... 29 FIGURA 30 ..................................................................................................................................................... 29 FIGURA 31 ..................................................................................................................................................... 30 FIGURA 32 ..................................................................................................................................................... 31 FIGURA 33 ..................................................................................................................................................... 32 FIGURA 34 .................................................................................................................................................... 32 FIGURA 35 ..................................................................................................................................................... 33 FIGURA 36 ..................................................................................................................................................... 33 FIGURA 37 ..................................................................................................................................................... 34
List tabele
Tabel 1 Piese i preuri............................................................................................................................... 13
Simboluri i abrevieri
HMM DTW Hidden Markov Model Dynamic Time Warping
Cuprins
INTRODUCERE ................................................................................................................................................... 8 CAPITOLUL 1- RECUNOATEREA VOCAL ..................................................................................................................10 1.1- GENERALIZARE .................................................................................................................................................. 10 1.2- METODOLOGIA SISTEMELOR VOCALE .............................................................................................................. 11 1.3- DEFORMAREA DINAMIC A TIMPULUI (DTW) ............................................................................................... 11 1.4- MODELUL MARKOV ASCUNS (HMM) .............................................................................................................. 11 CAPITOLUL 2- UTILIZAREA RECUNOATERII VOCALE ..................................................................12 2.1- PERSPECTIVE ...................................................................................................................................................... 12 2.2- DEFECTE ALE RECUNOATERII VOCALE .......................................................................................................... 12 CAPITOLUL 3- PREZENTARE HARDWARE .............................................................................................13 3.1- PIESE I PREURI ............................................................................................................................................... 13 3.2- PREZENTARE PIESE............................................................................................................................................ 14 CAPITOLUL 4- MICROCONTROLERUL ATMEGA 328 .........................................................................21 4.1- CARACTERISTICI: ............................................................................................................................................... 21 4.2- CONFIGURAIA PINILOR .................................................................................................................................... 22 4.3- SCHEMA BLOC .................................................................................................................................................... 23 CAPITOLUL 5- ASAMBLAREA ROBOTULUI ...........................................................................................24 CAPITOLUL 6- PROGRAMAREA ROBOTULUI .......................................................................................30 CAPITOLUL 7- REZULTATE I CONCLUZII ............................................................................................35
Introducere
Noi, ca i fiine umane avem 5 simuri dintre care unul este auzul. Am specificat asta doarece cel mai utilizat mijloc de comunicare dintre doi oameni este cea verbal adic pe cale vocal. Desigur vorbitul nu nseamn nimic dac oamenii nu se pot nelege unul cu cellalt, de aceea pe lng faptul de a putea vorbii este necesar un alfabet i un vocabular. Dei nimeni nu i nva pe copiii mici s vorbeasc, pot nva uor. Este adevrat c recunoaterea vocal este uoar pentru noi. Dar nvtura vorbirii i recunoaterii vocale, a fost subestimat de secole. Multe progrese n tehnologie au dus la implementarea tehnicii de vorbire i a recunoaterii vocale n anumite aparate. n majoritatea filmelor SF din 1980-1990, vedeam oameni care vorbeu cu roboi i computere ns n ziua de astzi aceste lucruri au devenit posibile. De i recunoaterea vocal este o sarcin foarte dificil, acesta poate fi folosit n multe aplicaii de pn la un anumit grad. Sistemele automate de recunoatere vocal pot fi puse n aplicare n calculatoare pentru a fi utilizate n dictare i n controlul programelor, care pot fi foarte utile persoanele cu handicap. Utilizri ale recunoaterii vocale cu un computer: 1. Recunoaterea vocal are scopul de a cunoate coninutul vorbirii.
Figura 1
Figura 3 8
Tema aleas a fost structurat pe capitole i sub-capitole distincte. Scopul final al acestui proiect este acela de a putea controla vocal un robot. Pentru a putea realiza asta, am studiat bibliografia recomandat de profesorul ndrumtor i m-am folosit de materiile studiate n cei patru ani petrecui la ,,Facultatea de Inginerie Electric a ,,Universitii Valahia din Trgovite.
Figura 5: Model Markov Ascuns Majoritatea sistemelor de recunoatere vocal moderne sunt bazate pe acest sistem care ofer modele statice din care ies o secven de simboluri sau cantiti. Din HMM ies o secve de vectori cu valori reale de n dimensiuni astfel nct fiecare din aceti vectori se compun din coeficieni, care se obin lund o transformat Fourier dintr-o fereastr scurt de timp de vorbire i decolernd spectrul folosind transformata cosinusului, lund apoi primii coeficieni. n fiecare stadiu, HMM va avea tendina s aib o distribuie static, care estre un amestec de diagonale covariate Gaussiene care vor oferii probabilitate pentru fiecare vector observat. Fiecare cuvnt sau fiecare fenomen va avea o distribuie de ieire diferit. Un HMM pentru o secven de cuvinte sau fenomene se face prin concatenarea individual a unui HMM instruit pentru cuvinte i fenomene separate. Decodarea cuvintelor se va face, probabil cu algoritmul Viterbi pentru a gsi cea mai bun cale i aici exist o alegere ntre a crea dinamic o combinaie de HMM care include att informaii modele acustice i de limb, sau combinndu-l static n prealabil. 11
2.1- Perspective
1. Medicale Persoanele cu handicap pot beneficia de programe de recunoatere vocal. Recunoa terea vocal este util mai ales pentru persoanele care au dificulti n utilizarea minilor, n astfel de cazuri programele de recunoatere vocal sunt mult mai benefice i pot fi folosite calculatoare de operare. 2. Militare Programele de recunoatere vocal sunt importante din punct de vedere militar, pentru Forele Aeriene, recunoaterea vocal are un potenial clar de reducere a volumului de munc al pilotului. Pe lng Forele Aeriene astfel de programe pot fi, de asemenea instruite pentru a fi utilizate n managementul de lupt i alte aplicaii. 3. Educaionale Persoanele cu dizabiliti de nvare, care au probleme de comunicare (n esen, ei se gndesc la o idee, dar ea este procesat ntr-un mod incorect determinnd-o s ajung n mod diferit pe hrtie), pot beneficia de pe urma unui software de recunoatere vocal. De asemenea recunoaterea vocal poate fi folosit n cadrul unui proiect pentru studiul roboticii.
12
Numele piesei
Preul piesei
300 Ron
38 Ron
6 Ron
13
14
15
Driver-ul de motor tip shield L298 Acest driver de motoare poate comanda dou motoare de curent continuu, de un curent maxim de 2 amperi. Driverul este complet asamblat sub forma unui shield Arduino, facilitnd astfel utilizarea simpl.
Figura 11: Driver de motor tip shield L298 Shield-ul de recunoatere comenzi vocale- EASYVR Shield-ul EasyVR este proiectat pentru a permite adugarea de comenzi vocale. Modulul ofer funcii de recunoatere vocal pentru o serie de comenzi stocate din fabric (care sunt independente de vorbitor adic recunoscute automat), i pn la 32 de comenzi definite de utilizator (care sunt dependente de vorbitor).
17
Specificaii: - dispune de o serie de comenzi deja configurate, independente de vorbitor; - suport pn la 32 de comenzi configurabile de ctre utilizator; - interfa grafic simpl care permite programarea comenzilor vocale cu uurin; - utilizeaz portul serial pentru comunicare.
Kit conectori Arduino R3 Kit-ul conine 2 conectori de 8 pini, un conector de 6 pini i un conector de 10 pini . Este compatibil cu placile Arduino Uno V3 i Arduino Leonardo. Acest kit mi-a fost necesar pentru a putea conecta Shieldul de recunoatere vocal n stiv cu placa Arduino i driver-ul de motor. 18
Bateria LIPO 7.4V 1000MA Specificaii: -7.4V -1000 mAh -2 Celule -Rata de descrcare 25C
Placa Arduino Uno V3 Arduino UNO este o platform de procesare open-source, bazat pe software i hardware flexibil i simplu de folosit. Const ntr-o platform de mici dimensiuni (6.8 cm / 5.3 cm n cea mai des intlnit variant) construit n jurul unui procesor de semnal i este capabil de a prelua date din mediul nconjurator printr-o serie de senzori i de a efectua aciuni asupra mediului prin intermediul luminilor, motoarelor, servomotoarelor, i alte tipuri de dispozitive mecanice. Procesorul este capabil s ruleze un cod scris ntr-un limbaj de programare care este foarte similar cu limbajul C++. Placa Arduino UNO se conecteaz la portul USB al calculatorului folosind un cablu de tip USB A-B. Poate fi alimentat extern (din priz) folosind un alimentator extern. Specificaii : -Microcontroler: ATmega328; -Tensiune de lucru: 5V; -Tensiune de intrare (recomandat): 7-12V; -Tensiune de intrare (limit): 6-20V; -Pini digitali: 14 (6 PWM output); -Pini analogici: 6; -Intensitate de ieire: 40 mA; -Intensitate de ieire pe 3.3V: 50 mA; -Flash Memory: 32 KB (ATmega328) 0.5 KB pentru bootloader; -SRAM: 2 KB (ATmega328); -EEPROM: 1 KB (ATmega328); -Clock Speed: 16 MHz.
20
-0-20 Mhz Putere mic consum la 1Mhz de 1,8V la 25 C: -mod activ: 0,2mA; -mod Power-down: 0,1 A; -mod Power-save: 0,75 A (inclusiv 32 kHz RTC).
Etapa urmtoare a constat n conectarea rotiei metalice la asiu pentru stabilitate cu ajutorul uruburilor, piulielor i al celor dou cadre metalice.
Dup asamblarea acestui kit a fost necesar lipirea firelor pentru motoarele de curent continuu cu ajutorul unui letcon.
Figura 22: Fire lipite de motoare n continuare am fixat circuitul pe asiu ncepnd cu placa Arduino Uno cu ajutorul a dou uruburi i a dou piulie.
Am ales conectarea pieselor n stiv pentru a putea lucra mai uor, pinii de pe placa Arduino fiind identici cu cei de la driver-ul de motor care l-am conectat peste placa Arduino Uno.
Figura 24: Conectarea driver-ului de motor Pentru c acest driver nu permitea conectarea direct n stiv a shield-ului de comand vocal a fost nevoie de a ataa kit-ul de conectori Arduino R3.
Figura 26: Conectarea firelor de la motoare la driver-ul de motoare A urmat conectarea n stiv a shield-ului de comand vocal avnd grij ins, deoarece configuratia pinilor este uor diferit fa de cea a placii Arduino Uno i al driver-ului de motor.
28
Toate piesele au fost cumprate de pe site-ul www.robofun.ro i au fost asamblate cu ajutorul urmtoarelor ustensile: -urubelni stea; -urubelni dreapt; -letcon; -imbus.
29
De pe site-ul http://arduino.cc/en/Main/Software am descrcat arhiva: Arduino IDE 1.0.5, menionnd c am ales aceast variant pentru c este destul de stabil. Programul de interfa cu placa Arduino Uno nu necesit instalare fiind nevoie doar de dezarhivare. Pentru asta am folosit programul WinRAR versiunea 3.80. Urmtorul pas a fost s conectez placa Arduino Uno la laptop prin intermediu cablului A-B. Fiind prima interaciune a plcii Arduino cu acest laptop a fost necesar s instalez driverele n urmtorul mod: -click dreapta pe iconia ,,My Computer de pe Desktop ; -din acel set de optiune am ales ,,Manage; -din acea fereastr nou deschis am ales seciunea ,,System Tools subcategoria ,,Device Manager; -n subcategoria ,,Other devices cu denumirea de ,,Unknown device este placa Arduino Uno; -am dat click dreapta pe aceasta i am ales opiunea ,,Update Driver Software; -am ales opiunea ,,Browse my computer for driver software alegnd apoi folderul ,,drivers din fiierul dezarhivat ,,Arduino 1.0.5 avnd bifat opiunea ,,Include subfolders dup care am apsat butonul ,,Next i am lsat instalarea s ruleze. Pasul urmtor a fost s instalez programul pentru interaciunea cu shield-ul EasyVR. Acesta se numete EasyVR Commander i l-am descrcat de pe site-ul: http://www.robofun.ro/shields/modul_recunoastere_comenzi_vocale_easyvr .
30
Pentru a putea interaciona cu laptopul i programul EasyVR Commander am mutat jumpper-ul de pe shieldul EasyVR din poziia SW n poziia PC.
Figura 31: Jumpper conectat la modul PC Dup mutarea jumperului n poziia ,,PC am deschis programul EasyVR Commander.
Am schimbat portul pentru a fi identic cu cel pe care am instalat placa Arduino Uno.
Figura 33: Alegerea portului Urmtorul pas a fost conectarea shieldu-lui EasyVR la programul EasyVR Commander
Dup conectarea shield-ului a urmat introducerea a cinci noi comenzi n grupul 1 i anume: FORWARD, REVERSE, RIGHT, LEFT, STOP i un cuvnt n seciunea Trigger respectiv: MOVE. Pentru ca shield-ul s neleag aceste noi cuvinte a fost nevoie de antrenarea lor n 2 etape.
Antrenarea acestor comenzi n dou etape, a fost necesar pentru ca aceste comenzi s nu intre n conflict n momentul n care utilizatorul rostete comanda. Etapa final n programul EasyVR Commander a fost generarea codului pe care l-am salvat cu extensia .ino, dup care am mutat din nou jumperul de pe shield-ul EasyVR de pe poziia ,,PC pe poziia ,,SW A fost necesar modificarea cod-ului n programul Arduino IDE 1.0.5 pentru a putea aciona driver-ul de motor.
Figura 37: Interfaa Arduino IDE 1.0.5 Am ncrcat codul modificat pe placa Arduino Uno dup verificare.
34
Contribuiile autorului sunt: analiza stadiului n domeniu (circa 5 articole de limb englez din care 5 au fost citate); asamblarea pieselor hardware dup propria schi fiind inspirat de un tutorial pentru kit-ul EZ-ROBOT; antrenarea comenzilor vocale; programarea robotului;
Cercetrile vor continua n cadrul studiilor de masterat fiind ndreptate spre: reuirea implementrii comenzilor vocale utiliznd module Xbee; implementarea senzorilor i a camerelor video pe roboi; testarea altor platforme precum EasyPic, Raspberry, EZ-B pentru creearea i testarea roboilor; perfecionarea unui sistem de recunoatere vocal.
35
Bibliografie
Cri i articole de specialitate
[A1] [A2] [A3] [A4] [A5] Fundamentals of Speech Recognition, L. Rabiner & B. Juang, 1993; Speech Recognition, InTech, 2008; New Developments in Robotics Automation and Control, InTech, 2008; Modern Speech Recognition Approaches with Case Studies, S. Ramakrishnan, 2012; Practical and Experimental Robotics, Ferat Shain & Pushkin Kachroo.
Site-uri web
[C1] [C2] [C3] [C4] [C5]
36
Anexa
#if defined(ARDUINO) && ARDUINO >= 100 #include "Arduino.h" #include "SoftwareSerial.h" SoftwareSerial port(12,13); #else #include "WProgram.h" #include "NewSoftSerial.h" NewSoftSerial port(12,13); #endif #include <EasyVR.h> EasyVR easyvr(port); int MOTOR1_PIN1 = 3; int MOTOR1_PIN2 = 5; int MOTOR2_PIN1 = 6; int MOTOR2_PIN2 = 9; //Groups and Commands enum Groups { GROUP_0 GROUP_1 }; enum Group0 { G0_MOVE = 0, }; enum Group1 { G1_FORWARD = 0, G1_REVERSE = 1, G1_RIGHT = 2, G1_LEFT = 3, G1_DANCE = 4, 37 = 0, = 1,
G1_LONG_FORWARD = 5, G1_LONG_REVERSE = 6, G1_STOP = 7, }; EasyVRBridge bridge; int8_t group, idx; void setup() { pinMode(MOTOR1_PIN1, OUTPUT); pinMode(MOTOR1_PIN2, OUTPUT); pinMode(MOTOR2_PIN1, OUTPUT); pinMode(MOTOR2_PIN2, OUTPUT); // bridge mode? if (bridge.check()) { cli(); bridge.loop(0, 1, 12, 13); } // run normally Serial.begin(9600); port.begin(9600); if (!easyvr.detect()) { Serial.println("EasyVR not detected!"); for (;;); } easyvr.setPinOutput(EasyVR::IO1, LOW); Serial.println("EasyVR detected!"); easyvr.setTimeout(5); easyvr.setLanguage(0); group = EasyVR::TRIGGER; //<-- start group (customize) } void action(); void loop() 38
{ easyvr.setPinOutput(EasyVR::IO1, HIGH); // LED on (listening) Serial.print("Say a command in Group "); Serial.println(group); easyvr.recognizeCommand(group); do { // can do some processing while waiting for a spoken command } while (!easyvr.hasFinished()); easyvr.setPinOutput(EasyVR::IO1, LOW); // LED off idx = easyvr.getWord(); if (idx >= 0) { // built-in trigger (ROBOT) // group = GROUP_X; <-- jump to another group X return; } idx = easyvr.getCommand(); if (idx >= 0) { // print debug message uint8_t train = 0; char name[32]; Serial.print("Command: "); Serial.print(idx); if (easyvr.dumpCommand(group, idx, name, train)) { Serial.print(" = "); Serial.println(name); } else Serial.println(); easyvr.playSound(0, EasyVR::VOL_FULL); 39
// perform some action action(); } else // errors or timeout { if (easyvr.isTimeout()) Serial.println("Timed out, try again..."); int16_t err = easyvr.getError(); if (err >= 0) { Serial.print("Error "); Serial.println(err, HEX); } } } void Move2(){ analogWrite(MOTOR1_PIN1, 255); analogWrite(MOTOR1_PIN2, 0); analogWrite(MOTOR2_PIN1, 0); analogWrite(MOTOR2_PIN2, 255); } void Move(){ analogWrite(MOTOR1_PIN1, 0); analogWrite(MOTOR1_PIN2, 255); analogWrite(MOTOR2_PIN1, 255); analogWrite(MOTOR2_PIN2, 0); } void forward(){ analogWrite(MOTOR1_PIN1, 255); analogWrite(MOTOR1_PIN2, 0); analogWrite(MOTOR2_PIN1, 255); } void reverse(){ analogWrite(MOTOR1_PIN1, 0); 40
analogWrite(MOTOR1_PIN2, 255); analogWrite(MOTOR2_PIN1, 0); analogWrite(MOTOR2_PIN2, 255); } void right(){ analogWrite(MOTOR1_PIN1, 0); analogWrite(MOTOR1_PIN2, 255); analogWrite(MOTOR2_PIN1, -255); analogWrite(MOTOR2_PIN2, 0); } void left(){ analogWrite(MOTOR1_PIN1, -255); analogWrite(MOTOR1_PIN2, 0); analogWrite(MOTOR2_PIN1, 0); analogWrite(MOTOR2_PIN2, 255); } void stop(){ analogWrite(MOTOR1_PIN1, 0); analogWrite(MOTOR1_PIN2, 0); analogWrite(MOTOR2_PIN1, 0); analogWrite(MOTOR2_PIN2, 0); } void action() { switch (group) { case GROUP_0: switch (idx) { case G0_MOVE: Move(); delay(1500); forward(); delay(500); reverse(); 41
delay(250); stop(); // write your action code here group=GROUP_1; // group = GROUP_X; <-- or jump to another group X for composite commands break; } break; case GROUP_1: switch (idx) { case G1_FORWARD: forward(); delay(3000); stop(); // write your action code here // commands break; case G1_REVERSE: reverse(); delay(3000); stop(); // write your action code here // commands break; case G1_RIGHT: right(); delay(500); stop(); // write your action code here // commands break; case G1_LEFT: left(); delay(500); stop(); // write your action code here 42 group = GROUP_X; <-or jump to another group X for composite group = GROUP_X; <-or jump to another group X for composite group = GROUP_X; <-or jump to another group X for composite
// commands
group
GROUP_X;
<--
or
jump
to
another
group
for
composite
break; case G1_DANCE: Move(); delay(2000); reverse(); delay(500); Move2(); delay(1000); forward(); delay(500); left(); delay(1000); right(); delay(500); forward(); delay(250); Move(); delay(2000); stop(); // write your action code here // commands break; case G1_LONG_FORWARD: forward(); // write your action code here // commands break; case G1_LONG_REVERSE: reverse(); // write your action code here // commands break; case G1_STOP: stop(); // write your action code here 43 group = GROUP_X; <-or jump to another group X for composite group = GROUP_X; <-or jump to another group X for composite group = GROUP_X; <-or jump to another group X for composite
// commands
group
GROUP_X;
<--
or
jump
to
another
group
for
composite
break; } break; } }
44