RobotEye

September 5, 2009

RobotEye este un sistem real-time hibrid, ce are ca scop urmarirea punctelor luminoase. Pe scurt, robotul “observa” o sursa de lumina, ii analizeaza traiectoria, si in functie de cum a fost programat, reactioneaza ca atare. Pentru observarea punctului luminos am folosit o camera web obisnuita, plasata pe un sistem mobil cu 2 grade de libertate (RobotHead). Fluxul de imagini preluat de camera web este transmis la un PC, unde se proceseaza si se decide actiunea (motorie): deplasarea sistemului intr-una din pozitiile sus, jos, stanga, dreapta; acest fapt simuleaza reactia robotului la lumina: el se va indrepta in directia indicata de punctul luminos. Pentru generarea punctului luminos e de preferat sa se utilizeze lumina laser, pentru o cat mai buna detectie a spotului luminos.

Asadar, RobotEye este format din 3 componente:

  • sistemul hardware de deplasare (RobotHead)
  • programul software de procesare a imaginii
  • circuit electronic de conditionare a semnalului (driver)

Sistemul hardware de deplasare trebuie sa permita deplasari atat in planul orizontal (pentru directiile stanga-dreapta) cat si in planul vertical (sus-jos); de acest lucru se ocupa 2 motorase, eventual trecute printr-un angrenaj. Personal am utilizat 2 motorase extrase din casetofoane vechi. Angrenajul este util atat pentru reducerea vitezei motorului cat si pentru cresterea fortei de lucru. Si da, este nevoie de un pic de forta: daca motorul planului vertical are doar sarcina deplasarii senzorului optic(a camerei web), motorul de jos – pentru planul orizontal – trebuie sa roteasca intreg planul motorului vertical, incluzand camera web. Sistemul hardware nu este greu de realizat, e
nevoie doar de rabdare.

Programul software de procesare a imaginii utilizat in proiect este tip Motion Detector (open-source) pe care l-am modificat, introducand partea de reactie a robotului (directia de deplasare functie de directia spotului luminos). Mai jos este linkul de download al programului executabil, cat si al codului sursa.

[RobotEye_bin],
[RobotEye_src]

Principiul pe care se bazeaza interpretorul e simplu: imaginile primite de la camera web sunt analizate color, se ignora fundalul si se retine traiectoria luminoasa a punctului luminos (care la un moment dat devine o linie <rosie, daca se utilizeaza lumina laser>); aceasta este parametrizata, cunoscandu-i-se punctul de inceput si cel de sfarsit. Daca linia parametrizata este de la Nord la Sud de exemplu, este generata o miscare in jos capului robotului. Idem pentru celelalte directii. Generarea miscarii presupune furnizarea unui impuls de iesire circuitului electronic driver. Pentru cele 4 directii este nevoie de un registru de 4 biti: in acest scop a fost utilizat portul paralel al PC-ului, anume primii 4 biti din registrul de date (D0-D3). La fiecare directie a spotului detectata, programul raspunde, deci, prin “aprinderea” unuia din cei 4 biti.

Circuit electronic driver are rolul de a prelua comanda transmisa de PC prin portul paralel, si de a o transforma in miscare fizica (va actiona motorul corespunzator in directia corespunzatoare). Circuitul este format din 2 circuite in punte H si eventual circuite de izolare electrica. (pentru izolare se poate folosi circuitul prezentat in cadrul articolului Controler GSM pentru actionari la distanta). In functie de puterea motoraselor, circuitele in punte difera prin tipul de tranzistori utilizati. Pentru motorase de putere mica se poate utiliza schema de aici

Bolt_smokeless_Hbridge

Pentru fiecare din cele 2 motoare se va construi un astfel de circuit. Aplicarea unui potential 5v (‘1′ logic) pe una din intrarile A sau B si potentialul masei (‘0′ logic) pe cealalta echivaleaza cu rotirea motorului intr-o directie; inversarea potentialelor inverseaza si directia de deplasare a motorului. Asadar, daca notam A1,B1 intrarile pentru primul motor (A1-stanga, B1-dreapta) si A2, B2 intrarile pentru al doilea motor, combinatiile de 4 biti pentru A1 B1 A2 B2 au urmatoarea insemnatate:

0 0 0 0 – stationare totala
0 0 0 1 – motorul 1 stationeaza, motorul 2 se misca la dreapta
0 0 1 0 – motorul 1 stationeaza, motorul 2 se misca la stanga
0 0 1 1 – stationare totala
0 1 0 0 – motorul 1 se misca la dreapta, motorul 2 stationeaza
0 1 0 1 – ambele motoare se misca la dreapta
0 1 1 0 – motorul 1 se misca la dreapta iar motorul 2 la stanga
0 1 1 1 – motorul 1 se misca la dreapta, motorul 2 stationeaza
1 0 0 0 – motorul 1 se misca la stanga, motorul 2 stationeaza
1 0 0 1 – motorul 1 se misca la stanga iar motorul 2 la dreapta
1 0 1 0 – ambele motoare se misca la stanga
1 0 1 1 – motorul 1 se misca la stanga, motorul 2 stationeaza
1 1 0 0 – stationare totala
1 1 0 1 – motorul 1 stationeaza, motorul 2 se misca la dreapta
1 1 1 0 – motorul 1 stationeaza, motorul 2 se misca la stanga
1 1 1 1 – stationare totala

Ex. Daca dorim deplasarea oblica SV-NE, copiem in registrul paralel de date valoarea 5 (z) = 0101 (b)


Conversatie formala cu o masina de calcul

July 15, 2009

Appletul de la aceasta pagina demonstreaza posibilitatea intretinerii unui dialog formal intre un subiect uman si un calculator, sau masina de calcul cu suport Java. Aplicatia a fost programata integral in Java, si reprezinta o portare pe WEB a unui sistem ce combina doua module (disponibile free pe internet): un sistem text-to-speech (FreeTTS) si un sistem de recunoastere vocala (Sphinx4). Pe scurt, calculatorul simuleaza un partener de discutii: asculta ce ii se spune, analizeaza expresiile si in functie de ele incearca sa dea un raspuns (vocal).


Functionare

Dupa ce appletul se downloadeaza si se incarca in memeorie, un buton start apare in partea de sus a paginii web, indicand ca robot este gata de discutii. Daca totul a fost incarcat si configurat cu succes, robotul ar trebui sa se comporte in felul urmator: dupa apasarea butonului de start, dureaza cateva secunde pentru incarcarea in memorie a engine-ului de recunoastere vocala. Dupa incarcarea completa, robotul intra in starea de ascultare, si asteapta sa ii se spuna ceva conform cu baza sa de cunostiinte. Imediat dupa faza e ascultare incepe faza de analiza, cand robotul cauta in baza sa de cunostiinte un raspuns adecvat intrebarii primite. Dupa gasirea raspunsului, in faza de pronuntie se furnizeaza raspunsul.

Mai jos este prezentata scurta baza de cunostiinte a robotului (demonstrativ):

(Good morning | Hello | How are you | What is | Who is) (Computer | Today | Your name | Your master)

Se pot concatena cuvinte din primul grup cu cuvinte din al doilea grup; exemple de expresii acceptate de robot:

“Good morning computer”
“What is your name”
“How are you today”


Cerinte minime de sistem

- Placa audio standard, cu boxe si microfon atasate

- 512 MB de memorie RAM

- Browser WEB (Internet Explorer, Mozilla)

- Masina virtuala Java – JRE (vezi mai jos)


Rulare applet

Daca appletul nu s-a incarcat complet, asteapta pana se incarca. Daca esti sigur ca s-a incarcat complet si ca exista un JRE activ in sistemul tau, si totusi appletul nu functioneaza, este posibil ca appletul sa nu aiba suficienta memorie pentru rulare. Limita implicita de 64MB de memorie disponibila pentru appleturi Java este insuficienta pentru rularea din browser a unui engine de TTS si speech-recognition. Verifica sectiunea Configurare (pasul 3) de mai jos pentru incrementarea limitei de memorie; o valoare de 384MB este suficienta (chiar si 256 MB in unele browsere)

Daca appletul ruleaza si este afisat in timp real jurnalul robotului, dar nu se aude nimic in boxe, este posibil sa nu fi setat inca cerintele de securitate pentru applet in JRE-ul curent. Sintetizatorul vocal FreeTTS are nevoie de accesarea unor fisiere de pe disc, precum si de acces la placa audio, accesul fiind interzis implicit de catre sistem pentru appleturi. Pentru a rezolva acest lucru, trebuie editat fisierul de configurare securitate al masinii Java (vezi sectiunea Configurare, pasul 2). Daca si dupa configurare inca nu se aude nimic in boxe, verifica urmatoarele:

- verifica sunetul sistemului, volumul pe fiecare canal, daca driverele audio sunt instalate etc.

- verifica daca sunt pozitionate corect cablurile de audio output si microfon

- seteaza linia de microfon ca linie activa de inregistrare


Configurare

1. Asigura-te ca exista o masina virtuala Java (Java Runtime Environement JRE) instalata in sistemul tau. Poti verifica existenta unui JRE activ la acest link. Daca un JRE e instalat in sistem, vor fi afisate cateva informatii. Verifica si retine numarul de versiune (java version). Pentru o performanta buna recomand ultima versiune de JRE (disponibila aici).

2. Setare cerinte de securitate Java

2.1 Descarca fisierul talkRobot.policy si copiaza-l undeva, de exemplu in C:\

2.2 Aplica fisierul de securitate JRE-ului activ. Mergi in dosarul radacina al JRE-ului (JAVA_HOME) de obicei aflat in interiorul dosarului C:\Program Files\Java sub Windows; mergi la calea [java_home]\lib\security (de exemplu C:\Program Files\Java\jre1.6.0\lib\security). Deschide fisierul java.security folosind un editor de texte (ex. Notepad) si localizeaza liniile de text ce incep cu “policy.url”. Fiecare din acestea contin un numar, in genul urmator:

policy.url.1=[some dir]
policy.url.2=[some dir]


Dupa ultima din aceste linii, adauga linia urmatoare:

policy.url.3=file:/C:/talkRobot.policy


presupunand ca in C:\ ai copiat fisierul de la pasul 2.1. Salveaza modificarile si inchide fisierul java.security. In momentul acesta appletul are privilegiile necesare rularii pe sistemul tau.

3. Incrementeaza memoria heap pentru JRE. Deoarece appletul foloseste sisteme puternice si mari consumatoare de memorie, cum sunt sistemul de recunoastere vocala si sistemul de voce sintetizata, este nevoie de alocarea unei zone de memorie mai mari decat cea implicita.

Pentru incrementarea memoriei, merci in panoul de control al sistemului (Control Panel), optiunea Java. Selecteaza tab-ul Java si apoi apasa butonul View din cadrul Java Applet Runtime Settings. O noua fereastra se va deschide, unde sunt afisate toate mediile JRE instalate in sistem. Localizeaza JRE-ul activ (vezi pasul 1) – de exemplu 1.6.0 – si editeaza campul Java Runtime Parameters; tasteaza -Xmx384m ,salveaza si inchide fereastra. Ai alocat in acest moment un maxim de memorie de 384MB RAM, suficient pentru applet. Tutorialul de la acest link ar putea fi de ajutor, deasmenea.

4. Selecteaza microfonul ca linie principala de inregistrare. Mergi la Control Panel > Sounds and Audio Devices. Apasa butonul Advanced din cadrul tab-ului Volume. Audio mixerul se lanseaza in acest moment. Selecteaza Options>Properties , apoi Adjust Volume for Recording si apsa OK. Activeaza checkbox-ul Select de sub coloana Microphone. Deasemenea seteaza volumul de inregistrare al microfonului la un nivel ridicat, pentru o acuratete buna a inregistrarii. Pentru a activa mixerul de Playback, urmeaza aceiasi pasi: click la Options>Properties si apoi Adjust Volume for Playback.

In momentul acesta robotul este configurat si gata de utilizare. Felicitari!


SimOne

July 13, 2009

simone

SimOne este un robot simulator al unei persoane umane (femeie-robot); este capabila sa vorbeasca si sa imite anumite gesturi umane (clipire, miscari ale capului, miscari ale buzelor). Este usor de interactionat cu ea, poate pronunta ora si data curenta, poate apela numere de telefon pentru tine, poate sa te trezeasca dimineata, sau poate sa te anunte cand ai ajuns la destinatia dorita (in varianta in limba romana, necesita serviciul SMSCB CellID 50 disponibil in Romania prin Vodafone).

Aplicatia ruleaza pe orice dispozitiv mobil (telefon mobil, smartphone, pda) cu suport Java: CLDC 1.1, MIDP 2.0

Download link: SimOne Romana / SimOne English