Sunteți pe pagina 1din 61

Algoritmi de Calcul Natural în Robotică Asistivă

CUPRINS

1. INTRODUCERE ............................................................................................................................. 5
2. STADIUL ACTUAL IN DOMENIU .............................................................................................. 7
2.1 Limbajul swarmish ........................................................................................................................ 7
2.2 Constrângeri cinematice ................................................................................................................ 8
2.3 Aspecte cooperative....................................................................................................................... 9
2.4 Înteracţiunea om-swarm .............................................................................................................. 10
2.5 Guardians ..................................................................................................................................... 11
3. ALGORITMI DE OPTIMIZARE (PSO) îN ROBOTICă ASISTIVĂ .......................................... 13
3.1 Algoritmi de optimizare............................................................................................................... 13
3.1.1. Algoritmul PSO ................................................................................................................... 13
3.1.2 Comparaţie între algoritmi.................................................................................................... 16
3.2 Robotica swarm ........................................................................................................................... 17
3.2.1 Divizarea sarcinilor............................................................................................................... 18
3.2.2 Analiza problemei................................................................................................................. 19
3.2.3 Heterogeneitatea ................................................................................................................... 22
3.2.4 Comunicarea în sisteme multirobot ...................................................................................... 23
3.2.5 Căutarea ................................................................................................................................ 25
3.2.6 Modulul PSO ....................................................................................................................... 27
3.2.7 Modulul de control al roboţilor............................................................................................ 28
3.3 Robotica asistivă .......................................................................................................................... 32
3.3.1 Comparaţie intre interfeţe om-robot ..................................................................................... 34
3.3.2 Înteracţiunile între om şi sisteme multirobot ........................................................................ 35
3.3.3 Modulul de control pe stări ................................................................................................... 36
4. SIMULăRI, REZULTATE, COMPARAţII, DISCUţII ................................................................. 38
4.1 Mediul de simulare ...................................................................................................................... 38
4.2 Înterpretarea rezultatelor............................................................................................................. 40
5. CONTRIBUţIA PROPRIE ............................................................................................................ 42
6. CONCLUZII.................................................................................................................................. 43
6.1 Extinderi şi îmbunătăţiri .............................................................................................................. 43
7. BIBLIOGRAFIE ........................................................................................................................... 44
8. ANEXE.......................................................................................................................................... 46
1
8.1 Dinamica populatiei..................................................................................................................... 46
8.2 Primul Ajutor ............................................................................................................................... 46
8.2.1 Criza astmatica. .................................................................................................................... 46
8.2.2 Atac de cord sau infarct miocardic ....................................................................................... 47
8.2.3 Hipoglicemia ........................................................................................................................ 48
8.3 Caracteristi E-puck ...................................................................................................................... 49
8.4 Codul Sursa ................................................................................................................................. 50
8.4.1Modul PSO ............................................................................................................................ 50
8.4.2 Modul de control pe stări ...................................................................................................... 54
8.4.3 Modulul de control poziţie ................................................................................................... 57

2
LISTA DE FIGURI

Figura 2.1 Aplicaţia Swarmish ................................................................................................................................ 8


Figura 2.2 Maparea caracteristicilor între algoritmul PSO şi căutarea de tip swarm ............................................... 9
Figura 2.3 Sistem de comunicaţie localizat ........................................................................................................... 10
Figura 2.4 Patrularea în jurul unui pompier ........................................................................................................... 12
Figura 3.1 Stol de pasari, sursă de inspiraţie pentru PSO ...................................................................................... 14
Figura 3.2 Calcularea următoarei poziţii pe baza optimelor locale ,globale şi vitezei ........................................... 14
Figura 3.3 Diagrama de stare pentru soluţia propusă ............................................................................................. 21
Figura 3.4 Protocolul de primire a mesajelor ......................................................................................................... 24
Figura 3.5 Diagrama de stări pentru controlerul unui robot ................................................................................... 30
Figura 3.6 Calcularea unghiului diferenţa în funcţie de orientarea robotului ........................................................ 31
Figura 3.7 Evitarea de obstacole; cazul vitezei pivot=0 ........................................................................................ 32
Figura 3.8 Diagrama de stări pentru acţiunile posterioare căutarii ........................................................................ 37
Figura 4.1 Simulatorul Webots .............................................................................................................................. 38
Figura 4.2 Robotul E-puck..................................................................................................................................... 39
Figura 4.3 Mediu complex de simulare ................................................................................................................. 41

3
ABSTRACT

Imbătranirea populatiei genereaza dezvoltarea unei soluţii neasteptate la intersecţia


a doua domenii revoluţionare: tehnologiile asistive şi robotica de tip swarm.

4
1. INTRODUCERE

Robotica reprezintă astăzi unul dintre cele mai dinamice domenii ale tehnologiilor
avansate. Conform (Dictionar Oxford English n.d.),”robotica este domeniul tehnologic care
are ca obiect de studiu proiectarea, construcţia, integrarea în aplicaţii specifice şi exploatarea
roboţilor”. Este un domeniu integrator de cunoştinţe din multiple ramuri ale ştiinţelor
inginereşti, cele mai importante dintre acestea fiind referitoare la inginerie mecanică,
electronică, informatică şi ştiinţa calculatoarelor.
Actual, domeniul roboticii include trei subdomenii majore: robotica industrială, robotica
pentru servicii şi respectiv robotica pentru aplicaţii spaţiale şi de securitate. Subdomeniul
roboticii pentru servicii fiind subdivizat la rândul său în robotica pentru servicii profesionale
şi robotica pentru servicii personale.(Nicolescu 2011)
În prezent populaţia se afla în continua îmbatrânire şi determină astfel în societate o
nevoie în dezvoltarea de soluţii tehnologice pentru a sprijinii această situaţie. Astfel robotica
pentru servicii personale, şi chiar mai mult robotica asistivă este unul dintre domeniile ce
acaparează interesul cercetatorilor în decursul ultimilor zece ani.
Robotica asistivă are în vedere dezvoltarea de aplicaţii tehnologice avansate cu scop în
promovarea unui stil de viata independent şi imbunataţirea calitaţii vieţii pentru persoane cu
limitari ale funcţiilor fizico-motorii sau cognitive(Zollo 2011). Punctul de interes al acestui
domeniu este utilizatorul iar acest fapt a adus numeroase provocări în domeniul roboticii,
incepand de la siguranţa şi eficacitate până la gradul de confort psihologic în privinţa utilizării
robotului. Aplicaţiile în cadrul roboticii asistive sunt numeroase: sisteme de suport a
mobilitaţii, roboţi social asistivi, sisteme automate de manipulare, teleroboţi etc, roboţi
personali. Aceste aplicaţii au grade mai mici sau mai mari de autonomie.
Roboţii autonomi sunt roboţi care pot să indeplineasca obiectivele dorite fară
supervizare umană continuă. Un robot în totalitate autonom este capabil sa obţina informaţii
despre mediul inconjurator, se poate deplasa şi folosi componente proprii, poate funcţiona o
perioada extinsă de timp fară intervenţie umană. Deasemenea un robot autonom are abilitatea
să evite rănirea oamenilor, distrugerea bunurilor sau autodistrugerea sa. Tendinţa în cercetare
este în obţinerea unui grad cât mai mare de autonomie şi cu cât sarcinile unui robot devin mai
dificile cu atât sunt necesare noi metode şi tehnici de calcul.
Una din sursele de inspiraţie ce pare a nu se epuiza este natura, lumea vie ce ne
inconjoara. în natură multe specii formeaza grupuri pentru a indeplinii anumite sarcini precum
căutarea şi procurarea de hrană, apararea împotriva pradatorilor sau construirea de adăposturi.
Multe probleme practice sunt rezolvate de catre asemenea grupuri cu rezultate foarte bune.
Din această cauză multe metode şi algoritmi de inteligenţa artificială sunt inspiraţi din
comportamentul dictat de inteligenţa de grup, definită generic swarm intelligence.(Buiu et al.
2010)

5
Scenariul pentru această lucrare are în vedere asistarea unei persoana în perimetrul unei
locuinţe în care sunt prezente mai multe aplicaţii robotice. Persoana considerată prezintă
dizabilitaţi, inclusiv poate fi o persoană varstnică sau un pacient aflat sub tratament.
Soluţia propusă se află la intersecţia direcţiilor de cercetare mai sus prezentate. Astfel se
doreşte că pe baza folosirii unui grup (swarm) de roboţi sa se trateze evenimente nedorite.
Spre exemplu situaţia particulara din lucrarea de fată are în vedere o persoană care a cazut şi
poate ramane imobilizată. Scopul swarm-ului de roboţi va fi patrularea încăperii, detectarea şi
localizarea persoanei în cauză. Chiar mai mult, odata cu localizarea persoanei, sistemul va
decide asupra stării de constientă şi dupa caz va declanşa o alarma, va contacta un cadru
medical sau va implementa o sarcina particularizata persoanei (localizarea şi transportarea
unor medicamente, a unui inhalator, a unei maşti de oxigen sau poate chiar a unui baston).

Motivaţia privind lucrarea de faţa se poate exprima prin dorinţa de a realiza o aplicaţie
care pune în valoare în mod neaşteptat aceste domenii de cercetare oferind o soluţie practică
cu scop final în îmbunătăţirea vieţii de zi cu zi.

6
2. STADIUL ACTUAL IN DOMENIU

În acest capitul voi prezenta proiecte de cercetare din acest domeniu şi importanţa lor în
prezent.
Robotica de tip swarm este un domeniu nou în cadrul cercetărilor aflat că punct de
interes înca de la primele simularile ale lui Reynolds, cele ale zborului unui stol de pasari. De
atunci au fost multe progrese abordând navigarea, coordonarea şi controlul swarm-ului.
Definirea unui swarm conform Sahin, are în vedere următoarele particularitaţi:
(i) un număr mare de membri,
(ii) omogeni,
(iii) autonomi,
(iv) ineficienţi sau incapabili în realizarea unei sarcini singuri,
(v) care posedă senzori şi un mijloc de comunicare.

Swarmul prezintă numeroase provocări de natura software cât şi hardware, precum


programarea rapidă a numeroşilor agenţi sau implementarea de sisteme de comunicare
eficiente. Soluţii la aceste probleme sunt propuse în primul proiect pe care îl avem în vedere
în acest capitol.

Considerând că lucrarea de baza exemplifică utilizarea unui algorim de calcul natural, în


particular algoritmul PSO (Particle Swarm Optimization), următoarea lucrare prezintă
constângerile fizice ale aplicării acestui algorim pe roboţi şi nu pe particule.
Este important de reţinut că un swarm dovedeşte capacitaţi neasteptate datorita
caracterului pronunţat colaborativ, astfel vom studia în a treia lucrare cum grupul de roboţi
este capabil sa deplaseze cu succes o cutie mai mare decat dimensiunile unui singur robot.
Iar în final avem doua aplicaţii ce imbina concepte despre care deja am discutat şi chiar
mai mult. Acestea au în vedere implementarea de tehnologii asistive prin folosirea unui
swarm de roboţi. Un articol prezintă interacţiunea dinte un swarm şi o persoana în scopul
găsirii unei surse de radiaţii. Altul are în vedere proiectul Guardians care pune în valoare
colaborarea între un swarm de roboţi şi un pompier în situaţii extreme.

2.1 LIMBAJUL SWARMISH

Proiectul realizat de catre (McLurkin et al. 2004) propune o soluţie care intenţionează
eliminarea interacţiunii fizice cu roboţii din swarm folosind diferite mijloace de comunicare şi
arhitecturi avansate de programare.
Soluţia propusă se bazeaza pe o interfaţa care inglobeaza: un sistem de management al
energiei (implementarea unor staţii autonome de încarcare a bateriilor roboţilor), o aplicaţie
7
pentru programarea de la distanţă şi o interfaţă grafică de utilizator (GUI) pentru monitorizare
şi control.

Figura 2.1 Aplicaţia Swarmish

Programarea se realizează prin descărcarea programului doar pe unul dintre roboţi,


acesta informeaza roboţii apropiati de noul program, aceştia compara informaţia primită cu
cea deja existentă. Daca programul prezintă modificări robotul va solicita transmiterea noului
cod şi va aşteapta într-o coadă de aşteptare până este posibilă transmiterea. Distanţa dintre
roboţi poate fi un dezavantaj, dacă această este prea mare transmiterea nu va fi posibilă.
Înterfaţa grafică folosită permite obţinerea informaţiilor de la roboţi dar şi controlul
acestora. O provocare reprezintă procesarea în timp real a informaţiilor şi sincronizarea
roboţilor. Pentru a îmbunătăţii acest aspect s-a considerat utilizarea a 3 LED-uri şi semnale
audio care se vor mapa cu stărie robotului şi vor exemplifica starea reala la un moment dat. O
perspectivă există în a schimba informaţiile afisate de leduri prin utilizarea interfeţei şi nu prin
descarcarea de soft aşa cum este implementată în prezent. Semnalele audio oferă numeroase
avantaje, precum obţinerea de informaţii din întreaga activitate a swarmului chiar dacă atenţia
este distribuită, iar bugurile pot fi descoperite uşor.
Aceste soluţii sunt în primul rand avantajoase în cazul numărului foarte mare de agenţi.
Astfel performantele sunt îmbunătăţite atât din punct de vedere a conservării de timp în
programarea roboţilor, posiblitaţii de autoîncarcare a bateriilor dar şi monitorizarea şi
controlul intuitiv pe baza stărior exemplificate de LED-uri şi sunete.

2.2 CONSTRÂNGERI CINEMATICE

Demonstratiile realizate de (Xue & Zeng 2009) pun în vedere anumite particularitaţi ale
algoritmului PSO datorate implementării pe roboţi reali.
PSO este un algoritm de optimizare în care particulele sunt ghidate catre poziţia optima
folosind funcţia fitness pentru a obţine soluţia cerută. Particulele cunosc atât mediul cât şi
vecinii lor insa în cadrul unui swarm de roboţi informaţiile depind de senzori şi interacţiuni
locale datorita limitarilor fizice. în figura de jos putem observa o mapare între căutarea swarm
şi algoritmul PSO.

8
Figura 2.2 Maparea caracteristicilor între algoritmul PSO şi căutarea de tip swarm

Modelul cinematic este determinat de care viteza de translaţie şi viteza unghiulară iar
într-un mediu fară obstacole sarcina roboţilor va fi deplasarea de la o poziţie dată la alta.
Varianta propusă a algoritmului PSO presupune înlocuirea funcţiei fitness cu valorile
determinate pe baza masurătorilor de la senzori. De exemplu, detectarea puterii semnalului
sursei depinde invers-proporţional cu patratul distanţei fată de această. Astfel poziţia optima
locala poate fi calculată funcţie de valoarea mai sus menţionata.
Pentru determinarea comenzilor pentru roboţi se consideră o arhitectură distribuită iar
algoritmul de tip PSO este implementat pe fiecare robot în parte, acesta comunică local cu
vecinii săi pentru determinarea poziţiei optime.
Simularile şi concluzia din această lucrarea pune în vedere că această abordare a
algoritmului PSO distribuit determină performante ridicate şi în cazul limitarilor fizice ale
canalelor de comunicatie este o varianta preferata în detrimentul algoritmului PSO global.

2.3 ASPECTE COOPERATIVE

Cooperarea este un aspect important în sistemele multirobot, fapt dovedit şi de lucrarea


(Ghosh et al. 2004) care tratează următoarea problema: fiind considerat un mediu arbitrar
rigid se doreşte determinarea unei traiectorii continue lipsită de obstacole pentru deplasarea
unui cutii de la un punct start până la un punct fix final.
Soluţia propuse este utilizarea a doi roboţi similari pentru determinarea traiectoriei într-
un mediu cu număr fix de obstacole. Mişcările de bază în deplasarea cutiei sunt rotirea şi
translaţia. Problema are în vedere optimizarea a două obiective, folosirea minimă de energie şi
timp, şi este necesar un compromis între aceastea. Algoritmul de optimizare este PSO iar
pentru urmarirea celor doua obiective se foloseste dominanta Pareto.
Pentru deplasarea cutiei, roboţii se plaseaza la doua puncte apropiate de extremitaţile
cutiei pentru a avea un control mai mare în cazul rotirii. Pe baza calculelor forţelor generate
de roboţi se poate determina timpul necesar pentru atingerea următoarei poziţii. Prin maparea
9
mişcarilor cutiei cu cele ale roboţilor se observa că rotirea presupune o acţiune de împingere
din partea unui robot şi una de tragere din partea celuilalt, iar translaţia este doar o mişcare de
împingere cu forţe egale de catre roboţi.
Prin îmbinarea între algoritmul de optimizare şi aceste legi de mişcare se poate calcula
traiectoria necesară în parcugerea distanţei de la punctul de start la cel final. În funcţie de
mediul selectat este posibilă atingerea destinaţiei în aproximativ 10-12 paşi.
Cooperarea este importanta încat această permite ca un grup de agenţi sa realizeze
sarcini ce pot fi imposibil de implementat în cazul folosirii unui singur agent.

2.4 ÎNTERACŢIUNEA OM-SWARM

În articolul (Bashyal & Venayagamoorthy 2008) se dezbate problematica interacţiunii


om - swarm din perspectivele interacţiunii om – robot. Un aspect important este compromisul
dintre nivelul de control şi cel de autonomie si/sau inteligenţa al swarm-ului. Astfel se doreşte
ca utilizatorul să aibe posibilitatea de a introduce informaţii pentru îmbunătăţirea
performaţelor sistemului, fară sa afecteze autonomia swarm-ului de roboţi.
Deasemenea aplicaţia trebuie sa ofere posibilitatea de interacţiune a mai multor
utilizatori, transmiterea eficientă de informaţii şi flexibilitatea soluţiei.
Având în vedere caracteristicile prezentate, soluţia propusă permite că utilizatorul să
poată controla un singur membru al swarm-ului, un avatar. Astfel chiar dacă inputul lui este
perceput de swarm acesta nu afectează inteligenţa grupului.

Figura 2.3 Sistem de comunicaţie localizat

În particular, pentru detectarea unei surse de radiaţii, utilizatorul poate ghida avatarul
catre zona cu probabilitate mai mare de a prezenta o sursa. Odata ce senzorii avatarului vor

10
detecta un semnal mai puternic atunci şi ceilalti membri ai swarm-ului îl vor urmarii în acea
zonă pentru a localiza sursa.
Algoritmul utilizat este o versiune a algoritmului PSO, similară cu (Xue & Zeng 2009),
astfel atunci când un robot determina un semnal mai puternic nu trimite poziţia sa la întreg
swarm-ul ci doar la roboţii în vecinatate. Acest fapt permite localizarea de multiple surse într-
o anumita zona şi deasemenea ofera o toleranţa la erori în cazul departării unui robot din raza
de comunicatie.
În testare se observa avantajele integrarii informaţiilor în swarm prin intermediul
avatarului. Astfel timpul de căutare este micşorat, în plus interfaţa de control pentru avatar
este uşor de utilizat. Deasemenea, s-a testat aplicaţia în prezenta mai multor surse de radiaţii
iar varianta localizată a algoritmului PSO şi informaţiile de la utilizator au permis depistarea
rapidă a surselor.

2.5 GUARDIANS

Acest proiect prezentat în (Marjovi et al. 2011), are în vedere un swarm autonom de roboţi
care este translatat din mediul sigur al laboratorului şi introdus într-un mediu hostil, de
exemplu, un depozit industrial în flacari. Roboţii GUARDIANS (Group of Unmanned Assistant
Robots Deployed în Aggregative Navigation by Scent) au scopul de a oferii suport în acţiunile de
căutare prin ajutarea omului în navigarea şi evitarea situaţiilor critice în acest mediu
imprevizibil.
O provocare a acestui proiect reprezintă fumul care afectează atât omul cât şi roboţii,
vizibilitatea redusa afectează navigarea şi implicit localizarea şi maparea. Din această cauza
sunt considerate doua situaţii, atunci când comunicarea nu este posibila( din cauza fumului
sau distanţei între roboţi) şi atunci când comunicarea e posibila şi se pot obţine performanţe
mai ridicate datorita caracterului colaborativ al swarmului.
Un cazul unui swarm non-communicativ sistemul este independent faţa de numărul de
roboţi din swarm, astfel acesta nu este influenţat de posibilele eroari ale roboţilor. Un
dezavantaj reprezintă că performantele swarmului sunt puternic imprevizibile. Metoda
folosită are în vedere SPP (self-propelled particle) care se concentrează asupra individului şi
nu asupra mediului inconjurator precum alte metode.
Viteza unui robot este determinată de influenţe externe precum atragere faţă de un
obiectiv şi repulsia faţă de un obstacol, şi influenţe interne (atragere, repulsie) între un
membru al swarmului şi robot. E simplu de înţeles că funcţiile de repulsie coordoneaza
acţiunile de evitare de obstacole şi roboţi. Iar atragere externa e determinata de puterea
semnalului.
Un aspect relativ nou reprezintă interacţiunea dintre om şi swarm si, aşa cum a fost
dezbatuta în articole anterioare, ea nu trebuie confundată cu feedbackul primit de om de la
roboţi. Se presupune că orice robot din swarm poate recunoaşte o personă, de exemplu după
pasul acesteia. Astfel omul este privit că membru al swarmului încât acţiunea lui influenţează
acţiunea întregului swarm. Iar în particular, omul poate fi considerat un lider al swarmului,
11
fapt care determina că roboţii sa se organizeze în jurul acestuia respectând o condiţie de
distanţa maxima prin parametrii de repulsie şi atragere.

Figura 2.4 Patrularea în jurul unui pompier

Comunicarea se realizează folosind un sistem de rutare mobil ad-hoc (MANETs), acest


sistem foloseşte la un moment dat anumiti roboţi din swarm ca noduri de comunicare.
Localizarea se realizează cooperativ pe baza masurătorilor relative. Metoda aplicată este
cea propuse de Tully în care doi roboţi sunt consideraţi repere statice iar al treilea robot îşi
poate determina poziţia faţă de aceştia.
În conluzie, odată cu părăsirea mediului sigur din laborator numeroase provocări sunt
întâmpinate dar în acelaşi timp aceastea genereaza soluţii creative care oferă o nouă
perspectivă din punct de vedere a capacitaţilor unui swarm.

12
3. ALGORITMI DE OPTIMIZARE (PSO) ÎN ROBOTICĂ
ASISTIVĂ

3.1 ALGORITMI DE OPTIMIZARE

Aşa cum am amintit în introducere inteligenţa de grup (Swarm Înteligence - SI) face
parte din categoria vastă a inteligenţei artificiale şi este bazată pe comportamentul colectiv al
sistemelor descentralizate şi cu autoorganizare.
Sursa de inspiraţie reprezintă comportamentul societaţiilor din natură precum: colonii de
furnici, stoluri de păsări, roiuri de albine, bancuri de peşti şi multe altele. Studiul acestor
societaţi are în vedere comunicarea dintre indivizi, diviziunea muncii şi abilitatea de rezolvare
colectivă a unor sarcini complexe.
În componenta sistemelor SI intră mai multi indivizi simpli bazaţi pe sisteme de control
distribuit. Pe baza compartamentului şi interacţiunilor dintre aceştia se obţine o inteligenţa
emergenta.
În prezent exista numeroase metode de calcul pentru sisteme complexe dar cele bazate
pe paradigma SI prezintă cateva avantaje greu de combatut. Avantajele folosirii metodele
bazate pe inteligenţa de grup se concentrează asupra agenţilor utilizati pentru execuţia
algoritmului. Aceştia sunt simpli şi usor de creat şi implemetat. Deasemenea metodele
dezvoltate pot fi exemplificate în numeroase aplicaţii încât sunt scalabile şi permit rezolvarea
problemelor pentru care este dificila crearea unui model matematic. Un alt avantaj important
reprezintă faptul că sistemele au o toleranţă ridicata la defecte datorată simplităţii şi numărului
mare de agenţi.

3.1.1. ALGORITMUL PSO

Algoritmul PSO este o tehnică de optimizare, creată de Kennedy şi Eberhart (1995), cu


caracter stocastic, bazată pe populaţii şi este insiprată din comportamentul colectiv de
deplasare a păsărilor în stol.

13
Figura 3.1 Stol de pasari, sursă de inspiraţie pentru PSO

Una din caracteristicile principale ale algoritmului este aparenta simplitate când tratează
probleme de optimizare.(Panigrahi et al. 2011)
Înitial se defineşte spaţiul de căutare drept spaţiul în care vom explora solutii posibile şi
se iniţializează o populaţie de particule cu poziţii   şi viteze (   aleatoare. Fiecare
particulă are asociată o valoare fitness determinată de funcţia obiectiv pentru găsirea
minimului global, presupus unic.
Numărul de particule este în general între 20-40 de particule dar depinde foarte mult de
gradul de dificulate de problemei de optimizare. Astfel numărul lor poate varia de la 10
particule până la 100-200 de particule.
La fiecare iteraţie a algoritmului, starea fiecărei particule este actualizată pe baza
optimului local şi celui global. Optimul local reprezintă cea mai buna soluţie pe care a gasit-o
particula, iar optimul global reprezintă cea mai buna soluţie determinata de catre întreg grupul
de particule
Actualizarea la momentul k+1 a poziţiei   şi a vitezei ( 
particulei i este
determinata de următoarea formulă:

    



     

  

   

unde:

 

 


           !
" (3.1)
  

Figura 3.2 Calcularea următoarei poziţii pe baza optimelor locale ,globale şi vitezei

14
Coeficienţii:

•    sunt factori de învaţare care amplifică sau diminuează influenta optimelor


locale şi respectiv optimului global. De obicei sunt folosiţi aproximativ cu
valoarea 2.
• este inerţia particulei şi are rolul de a încetinii particula când se apropie de
soluţia optima şi impreuna cu factorii de învăţare, determină convergenţa
algoritmului.
•    sunt factori aleatori cu distribuţie uniformă care genereaza efectul stocastic
al traiectorilor particulelor

Algoritmul se poate folosi atât global când toate particulele comunică între ele şi se
poate determina un optim global, cât şi local când populaţia de particule este împarţită în
vecinataţi sau subgrupuri.
Avantajul folosirii variantei globale reprezintă viteza mai mare de convergere către
soluţia optima dar exista situaţia în care algoritmul se poate bloca într-un optim local. în cazul
în care optimul global nu este unic se prefera o variantă bazate pe vecinatati a algoritmului
care permite gasirea tuturor soluţiilor.
Anumite probleme folosesc o variantă combinată, astfel prin algoritmul global se
converge rapid catre o zonă a soluţiei iar cu ajutorului căutarii pe vecinataţi se face o căutare
mult mai fină.
Aceste două variante ale algoritmului PSO reprezintă doar un punct de discuţie în cadrul
cercetările din prezent. Alte variante:
• Species PSO este un algoritm bazat pe noţiunea de specie care e definită de un
centru. Distanţa faţă de centrul unei speciei defineşte fiecare particulă din specie
iar centrul este considerat mereu optimul speciei.
• FER-PSO este o varianta care foloseste o raţie între fitness şi distanţa euclidiana
a doua particule pentru gasirea unui optim local.
• R3PSO cu tipologie cerc (ring topology) foloseste informaţii doar de la vecinii
imediati (în dreapta şi în stânga) pentru determinarea optimelor locale
• PSO cu ajustare dinamica a parametrilor. De exemplu se micşoreaza liniar
inerţia particulelor pentru a încetinii viteza în apropierea soluţiei şi sa prevină
depasirea acesteia.
• PSO combinat cu alte tehnici precum logica fuzzy şi ajustare adaptivă a
coeficenţilor

15
3.1.2 COMPARAŢIE ÎNTRE ALGORITMI

PSO este asemănător cu alţi algoritmi evolutionisţi, precum cei genetici prin
iniţializarea aleatoare a populaţiei şi actualizarea acesteia la fiecare iteraţie. Deasemenea
ambii algoritmi folosesc funcţii fitness pentru evaluarea informaţiilor şi tehnici stocastice
pentru optimizare fără a garanta gasirea optimului.
Dar spre deosebire de algoritmii genetici care folosesc operatori pentru evoluţia
populatiei precum mutaţia şi incrucişarea, PSO antreneaza soluţii posibile care se deplaseaza
în spaţiul problemei urmărind optime curente.
Din punct de vedere al comunicării, în algoritmii genetici informaţia este împarţita între
cromozomi şi agenţii se deplaseaza că un grup spre soluţie. La PSO singura informaţie
distribuită este soluţia globala, astfel particulele îşi pastreaza o oarecare independenţa iar
sistemul este protejat de erori.
Un fapt care dovedeste preferinţa algoritmului PSO în detrimentul celui genetic este
chiar antrenarea reţelelor neurale unde s-au dovedit performanţe mai ridicate la folosirea
algorimului PSO.
Concluzionand, PSO este un algoritm adaptabil care permite o implementare uşoara şi o
toleranta ridicată la erori şi din aceste motive am ales implemntarea acestui algoritm de calcul
natural.

16
3.2 ROBOTICA SWARM

Societatea din prezent este în continuă îmbatrânire iar varsta este un factor de risc
principal în cazul dizabilitaţilor. În următorii ani desfacerea pe piaţa de muncă va fi orientată
serviciilor pentru persoane vârstnice iar presiunea asupra instituţiilor va creste dacă nu se vor
dezvolta soluţii pentru domiciliu.
În decursul ultimilor zece ani numeroase proiecte nationale am avut în vedere
dezvoltarea de roboţi personali, terapie robotica, proteze inteligente, locuinţe inteligente, tele-
robotica. Aceste proiecte sunt menite sa ofere longevitate şi desigur un stil de viata
independent.
Robotica de reabilitare este reprezentata de doua categorii: robotica de terapie şi cea
asistivă, dar deasemenea are în vedere dezvoltarea de proteze inteligente, stimulare neuronală
şi tehnologii de diagnosticare şi monitorizare a personalor în timpul activitaţilor de zi cu zi.
Este important de menţionat sa robotica de terapie necesită cel putin doi utilizatori:
persona in cauză, adica pacientul, şi terapeutul. Dintre aspectele pe care le tratează acest
domeniu enumerăm: reabilitarea mişcarii membrelor superioare şi inferioare, îmbunătăţirea
comuncarii la copii cu autism şi altele.
Robotica de tip swarm este adeseori considerata colectiva încat roboţii din acest grup
sunt independenţi de acţiunile celorlalti roboţi, exceptând informaţiile de proximitate.
Scopul swarm-ului este de a obţine un comportament global dorit pe baza dinamicii
interacţiunilor dintr roboţi ce urmaresc legi simple de control distribuit. Tendinţa este în a
minimiza comunicarea dintre roboţi şi a se baza pe informaţiile primite din mediu (principiul
de stigmergy, communicarea prin intermediul mediului inconjurator).
Agenţii din componenta grupului sunt considerati identici şi au abilitaţi limitate pentru
realizarea unei sarcini. Însa o echipa de asemenea agenţi are posibilitatea de a depasi limitarile
indivizilor (principiul supraaditiv, întregul este mai mare că suma partilor).
Numeroase comportamente de grup au fost studiate de catre cercetatori pe baza
societaţiilor din natura iar o clasificare a acestora se poate face prin determinarea tipului de
interacţiuni. Tabelul de mai jos, (Siciliano & Khatib 2008), prezintă câteva dintre
comportamente:

Înteracţiuni raportate la Comportament de grup (swarm)


roboţii din grup stol, turmă, banc, sortare, agregare,
condensare, dispersie
mediu inconjurator căutare, păşunat, recoltare, implementare,
acoperire, localizare, mapare, explorare
agenţi externi urmărire, pradă-prădator, păstorit
roboţii din grup şi mediu izolare, orbitare, încadrare, căutare într-un
perimetru
roboţii din grup, agenţi externi şi mediu evadare, supraveghere, fotbal

Tabelul 3.1 Clasificarea comportamentelor de grup

17
În prezent cercetările în domeniu au în vedere dezvoltarea de soluţii pentru
compartamentele de grup din tabelul anterior. Este important că întelegem că soluţia nu
presupune doar implementarea acestui comportament pe baza legilor cunoscute, dar mai mult
se doreşte întelegerea legilor de control care determină comportamentul şi menţine sistemul
stabil.

3.2.1 DIVIZAREA SARCINILOR

În cadrul aplicaţiilor cu mai multi roboti, misiunea echipei este definită că un set de mai
multe sarcini (task-uri) ce trebuiesc îndeplinite. Relaţia dintre subsarcini este definită prîntr-o
matrice de dependente.
Alocarea sarcinilor reprezintă de fapt maparea dintre sarcini şi roboţii disponibili. De
exemplu, conform matricei se pot determina sarcinile independente care pot fi realizare
concurent de catre roboţi.
Parametrii considerati în acest proces sunt:
• numărul de roboţi necesari unei sarcini
• numărul de sarcini pe care le poate desfasura un robot în paralel
• timpul necesar pentru alocarea unei sarcini

Având în vedere acesti parametri se poate realiza o clasificare a procesului definită că


taxonomie MRTA (multirobot task allocation), prezentata în (Siciliano & Khatib 2008).
În general, sarcinile sunt considerate că fiind:
• SR (single-robot tasks), aşa cum se întelege din acronim, reprezintă o sarcina
care necesită un singur robot la un moment de timp şi prezintă în general un grad
scăzut de dependenţa faţă de alte sarcini. Aceste caracteristici determina o
soluţie slab cooperativă care necesita un nivel ridicat de sincronizare sau
coordonare pentru a evita intarzieri;
• MR (multirobot tasks), în contrast cu SR, prezintă o interdependenţa puternica
între sarcini şi astfel soluţia necesară este puternic cooperativă.
Robotii pot şi clasificati in:
• ST (single-task robots) care opereaza asupra unei singure sarcini la un moment
de timp
• MT (multitask robots) cu grad ridicat de paralelism, dar în prezent acest tip de
roboţi nu sunt disponibili conform stadiului actual din tehnologie

Un aspect important este determinat de catre momentul de optimizare, astfel alocarea


sarcinilor se realizează cu scopul de a:
• optimiza alocarea instantanee a sarcinilor (IA) care nu consideră efectul task-
urilor deja alocate
• optimiza alocarea sarcinilor pe o durată mai mare de timp (TA) care doreşte
îmbunătăţirea performanţelor echipei prin planificarea tuturor sarcinilor ce ar
putea fi necesare misiunii

18
În prezent pentru alocarea sarcinilor în sisteme multi robot sunt considerate doua mari
categorii de abordări:
1. bazate pe comportamentul roboţilor (behavior-based)
2. bazate pe negocieri (market-based)

Abordările bazate pe comportament permit alocarea sarcinilor fara a lua în considerare


informaţii despre sarcinile individuale ale roboţilor. În acest caz maparea dintre sarcini şi
roboţi se realizează pe baza cunoştinţelor despre progresului misiunii şi posibilitaţilor de
acţiune a roboţilor.
De exemplu, poate fi folosită o funcţie care va calcula elegibilitatea unui robot pentru
un task. Problema care ar folosi acestă funcţie este caracterizată de ST-SR-IA. Acest sistem
de control presupune comunicarea elegibilitatii şi pe baza acesteia alegerea robotului care va
realiza sarcina. Astfel se permite ca roboţii sa execute eficient sarcinile.
Comparativ, abordările bazate pe negocieri au în vedere comunicarea între roboţi prin
care fiecare membru din echipă licitează pentru o sarcină pe baza disponibilitaţii şi
capacitaţilor proprii.
În concluzie alocarea sarcinilor este un proces important care necesita o analiză
amanunţită a problemei şi are un efect pronunţat asupra performanţelor.

3.2.2 ANALIZA PROBLEMEI

În această secţiune vom analiza premizele problemei, fezabilitatea soluţiei şi gradul de


importanţa a acţiunilor ce trebuiesc indeplinite de catre roboţi.
Premizele problemei noastre sunt:
1. Producerea unui accident, o persoana care din motive necunoscute cade pe podea
în propria locuinţă.
2. Sistemul din cadrul locuinţei este capabil sa recunoască un asemenea accident şi
să ridice o stare de alertă asupra agenţilor robotizaţi prezenţi.
3. Roboţii domestici pot acţiona colectiv şi pot asista persoana
4. Sistemul poate realiza conexiuni cu lumea exterioara şi solicita ajutor

Când vorbim de un sistem supraveghetor în cadrul locuinţei este dificil sa nu atingem


ideea unei case inteligente. În general, când ne referim la o casa inteligenţa avem în vedere o
locuinţa echipată cu capacitatea de procesare a informaţiilor astfel încât identifică şi
anticipează nevoile persoanelor, cu scopul de a îmbunătăţii confortul şi siguranţa prin
utilizarea tehnologiilor disponibile în încapere şi realizarea de conexiuni cu lumea din
exterior.
Tehnologiile disponibile în prezent pentru locuinţe sunt: monitorizarea video, senzori de
mişcare, senzori ce depistează prabusiri, podele de presiune, controlul mediului,
monitorizarea semnelor vitale.

19
O casa inteligenţa este directia pe care o avem în vedere pentru realizarea soluţiei dar e
important sa întelegem că necesitatile sistemului nostru sunt limitate şi astfel prezintă o
reducere importanţa în resursele utilizate.
De exemplu detectarea căderii se poate realiza de senzorii de mişcare ce masoară
acceleraţia sau de către o podea sub presiune care sesizează o schimbare bruscă a suprafeţei
fără a fi necesară implemntarea de camere video sau de alte elemente.
Deasemenea roboţii domestici din locuinţa folosiţi pentru a face curat, pentru a
transporta obiecte sau sunt roboţi de companie pot permite implementarea în caz de urgenţa a
algoritmului PSO.
In plus este de la sine înteles că situaţia in care o persoana se prabuşeşte este mai
importantă decat orice activităţi desfasurate la acel moment de roboţi, iar o analiza rapida a
situaţiei poate determina salvarea vieţii persoanei.
Din acestea observam că premizele pot reprezenta o situatie reala iar soluţia propusă
poate aduce un plus de beneficiu unui sistem deja disponibil.

Următoarea etapa a analizei reprezintă împărţirea pe acţiuni/sarcini şi observarea


dependenţelor dintre acestea. Mai jos o diagrama ofera aceste informaţii despre soluţia din
prezenta lucrare:

20
Figura 3.3 Diagrama de stare pentru soluţia propusă

21
Încat prioritatea în acest sistem este oferirea unui răspuns la evenimentul neprevăzut,
abordarea în privinta alocării sarcinilor este bazată pe comportament.
Căutarea este un task multirobot colaborativ, odata cu găsirea persoanei şi asigurarea
stării acesteia, roboţii pot desfăşura şi alte sarcini mai mici în paralel precum depistarea unei
cutii de medicamente pe podea, deplasarea cooperativă a unui obiect mai mare precum un
baston etc.
Astfel odată depaşită starea de alertă există posibilitatea de asistare prin alte activităţi
personalizate nevoilor persoanei şi posibilitaţilor roboţilor disponibili.

Tot din punct de vedere al analizei problemei, heterogeneitatea este un aspect important
încât posibilitatea ca o persoana sa dispună de mai multi roboţi domestici cu aceiaşi
funcţionalitate este foarte scazuta.

3.2.3 HETEROGENEITATEA

În cazul roboţilor heterogeneitatea poate fi definită din punct de vedere comportamental,


morfologic, al performantelor, dimensional etc. Principalele avantaje ale unui sistem
multirobot, precum paralelism, redundanţa, existenţa de soluţii distribuite, pot fi obţinute prin
utilizarea de roboţi omogeni care sunt interschimbabili. Totuşi există cazuri de sisteme care
necesita diverse tipuri de senzori şi componente care nu pot fi implementate într-un singur
robot datorită constrângerilor de cost sau dimensiune.
O provocare în sistemele heterogene atunci când se doreşte obţinerea unui sistem
efficient autonom, este atunci când capacităţile unor agenţi se suprapun şi astfel este afectată
alocarea sarcinilor şi rolurilor.
Deasemenea în aceste sisteme comunicarea denotă un grad ridicat de dificultate încat
este necesară stabilirea şi utilizarea unui limbaj comun şi a unei simbolistici comune tuturor
roboţilor.
Un exemplu heterogen este implementarea marsupială care presupune că un robot
„mothership” va asista roboţi mai mici în cadrul aplicaţiilor gen căutare şi recuperare.
Cercetătorii doresc obţinerea unei echipe heterogene optime, dar acestă direcţie de
cercetare presupune foarte multa analiză şi dezbatere asupra compromiselor prezentate de
strategii alternative.
Comparativ, lucrearea de faţa nu îşi propune depistarea echipei optime de roboţi
domestic şi urmareste indeplinirea unor sarcini având in vedere resursele disponibile. Iar
indiferent de tipul de roboti, soluţia propusă dispune de un sistem de comunicare simplu,
minimal potrivit pentru performantele a numeroşi roboţi.

22
3.2.4 COMUNICAREA ÎN SISTEME MULTIROBOT

3.2.4.1 Prezentare

O ipoteză fundamentală în sistemele multirobot reprezintă faptul că soluţii eficiente pot


fi obţinute doar prin interacţiunea dintre roboţi fără a avea disponibile informaţii globale
asupra sistemului. Totuşi este necesar ca un robot sa poată obţine informaţii despre starea şi
acţiunea celorlalti agenţi.
Exista trei tehnici care permit obţinerea acestor informaţii, fiecare având avantaje şi
dezavantaje:
1. Comunicarea implicită (stigmergy), reprezintă comunicarea prin intermediul
mediului inconjurator, astfel un robot determină acţiunile celorlalti agenţi în
funcţie de efectul pe care îl au asupra mediului. Tehnica este limitata din punct
de vedere a percepţiilor dar este simplistă şi independenta de canale de
comunicaţie şi protocoale.
2. Recunoaşterea pasivă a acţiunilor presupune ca un robot să îşi folosească
senzorii şi sa observe direct acţiunea altor roboţi
3. Comunicarea explicită este când roboţii îşi comunică direct şi intenţionat
informaţiile necesare. Această tehnică permite sincronizarea acţiunilor între
roboţi şi evitarea interpretărilor greşite dar comunicarea este afectată de zgomot
şi supusă la erori de conexiune. Se are în vedere adaptarea acţiunilor roboţilor
faţa de sistemul de comunicare folosit.

Este demonstrat că informaţia este un factor important în îmbunătăţirea performantelor


unui sistem totuşi se are în vedere compromisul între comunicarea optima a informaţiilor fără
a satura banda de comunicaţii.

3.2.4.2 Sistemul de transmitere a informaţiilor

În cadrul sistemelor swarm comunicarea este preferenţial implicită şi se doreşte


păstrarea interacţiunilor la un minim posibil. Astfel toate informaţiile pentru algoritm sunt
procesate împreună.
Tipul sistemului de comunicare este cel mai bine înteles ca un sistem marsupial, în care
toţi roboţii din swarm comunică şi primesc informaţii de la un supervizor. Deci avem de aface
cu o comunicare dintre un receptor şi mai multi emiţători dar şi invers, un emiţător şi mai
multi receptori. Pentru a putea comunică emitorul şi transmitorul trebuie sa foloseasca acelaşi
canal de transmitere. Este de la sine înţeles că atât roboţii cât şi supervizorul dispun de cate un
emiţător şi un receptor iar ambele elemenete dispun de o coadă de aşteptare.
De exemplu în cadrul receptorului, opţiunea de a primi următorul pachet determină
avansarea pachetelor în coadă prin eliminarea primului, astfel orice procesări de informaţie
trebuie realizate înainte de apelarea acestei funcţii.

23
Figura 3.4 Protocolul de primire a mesajelor

Tipul semnalului folosit este radio sau serial încăt acestă nu ia în considerare ciocnirile
cu eventualele obstacole.
Înainte de a discuta modul în care e procesata informatia o sa prezint mai întai formatul
mesajelor şi cum am amintit anterior se doreşte gasirea unui echilibru între cantitatea de
informaţie transmisa şi importanţa acesteia. Astfel formatul propus este:

<Canal de transmitere><Pozitia Robotului>si opţional <Starea Sistemului>

În continuare voi prezenta pe scurt aceste elemente din componenţa mesajului:


• Canalul de transmitere este propriu pentru fiecare robot în parte cu scopul de a
realiza o transmitere rapidă a informaţiilor şi pentru a evita blocaje sau pierderi
de informaţii. Deasemenea fiind un sistem bazat pe roboţi reali se exclude
premiza utilizării a foarte mulţi agenţi, fapt ce ar genera posibilele
supraîncărcări.
Un canal de transmisie particular este cel de broadcast care este folosit atunci
când căutarea a fost incheiata cu succes şi sunt informaţi toţi roboţii simultan.
• Poziţia robotului este o parte vitala în implementarea algoritmului. Pentru a nu
creea redundanţa se transmit doar coordonatele X, Z încat roboţii sunt mobili
doar pe aceste două direcţii spaţiale.
• Starea sistemului, această parte de mesaj intervine doar în cazul în care
algoritmul de căutare a fost finalizat şi se proceseaza următoarele acţiuni.

Pentru procesarea mesajelor, soluţia considerata pune în vedere beneficiile folosirii unei
bariere în comunicare. Bariera de comunicaţie verifică, pe baza unui vector de stare, primirea
de mesaje de la toţi agenţii din swarm, îl decomprima şi doar atunci implementează algoritmul
PSO pentru obţinerea optimelor.
Odată procesate informaţiile supervizorul va transmite noile poziţii selectând câte un
canal în parte şi transmitând pachetul de date.
În concluzie bariera nu doar culege informaţiile de la controlere ci reprezintă o soluţie
de sincronizare a sistemului. Dupa transmiterea mesajului roboţii vor astepta un raspuns
înaintea realizarii oricăror altor acţiuni.

24
3.2.5 CĂUTAREA

Căutarea unei ţinte este o problemă practică des întâlnită în societate şi poate să apară în
diferite scenarii precum: operaţii de salvare după producerea unui accident sau a unui hazard,
operaţiuni de căutare în spaţiu extraterestru, căutarea unei surse de radiaţii sau gaz, sau chiar
căutarea de explozibil pe un avion. Se poate observa că aceste spaţii de căutare sunt destul de
extinse şi nu toate prezintă condiţii prielnice oricărui tip de sisteme.
Din aceste motive se propune o căutare colaborativă folosind numeroşi agenţi simpli
care asigură un timp de căutare mai mic şi un număr de ţinte gasite mai mare decat un agent
mai performant dar unic.(Altshuler et al. n.d.)
Deasemenea dacă se are în vedere un sistem distribuit (swarm) se denotă o toleranţă
ridicată la defecte. Chiar şi în cazul limitărilor de comunicaţie se poate adapta sistemul la un
comportament corespunzător grupului.
Clasificarea căutarii se poate face funcţie de mai multe criterii, (Buiu et al. 2010), unul
dintre acestea este funcţie de ţintă, si mai exact numarul de ţinte:
• O singura ţinta determină o strategie de căutare evidenta
• Mai multe ţinte. Este necesara o analiză mai amanunţită asupra situaţiei, astfel
strategia diferă dacă este necesară găsirea a cel puţin unei ţinte sau găsirea
tuturor ţintelor. Deasemenea raportul dintre numărul de ţinte şi de roboţi este
important şi influenţează direct performanţele procesului
• Număr de ţinte variabil. O cauză pentru această situaţie reprezintă un mediu
aflat în continuă schimbare. Este important de considerat că există posibilitatea
micşorării numărului de ţinte, inclusiv dispariţia acesteia şi astfel avem o
ângere de timp pentru gasirea ţintei. O strategie de căutare are în vedere în
acest caz maximizarea numărului de vizite a fiecarei unitaţi de spaţiu în
unitatea de timp
Având în vedere mobilitatea ţintei putem determina doua cazuri, o ţinta statică care nu
prezintă un grad mare de dificultate sau o ţinta dinamică, supusă legilor fizice. Căutarea este
mai uşoară cu cât se cunosc mai multe informaţii despre ţinta precum viteză, volum, tipul
sistemului locomotor.
O caracteristică a ţintei ce influentează căutarea este natura acesteia:
• Căutarea unei surse de semnal continuu, de exemplu: emiţător radio, ultrasonic,
de lumina etc. Aceste ţinte sunt preferate încât puterea semnalului scade odată
cu distanţa faţă de ţinta şi astfel ţintele pot fi localizate prin diferite evaluări.
• Altă natură a semnalului decat ceva menţionate mai sus, de exemplu: olfactivă.
Problema de căutare este mai complexă încat distanţa până la ţintă nu poate fi
masurată direct ci este estimată pe baza unor statistici sau alte surse, iar în plus
aceste semnale sunt susceptibile la transformari ale mediului (exemplu: vant)
• Ţinta să fie definită de o arie limitată, astfel în afara ariei sale nu poata fi
detectată iar în interiorul acesteia se consideră găsită

Clasificarea căutării se poate face si funcţie de agenţii din acest proces, dupa numărul şi
tipul de arhitectura al acestora:
25
• Căutarea facută doar de un individ presupune prezenţa unor elemente puternic
specializate în componenţa agentului pentru a favoriza indeplinirea sarcinii în
restricţiile de performanţă impuse
• Căutare colaborativă, aşa cu am mai amintit mai sus prezintă numeroase
avantaje
Arhitectura folosită poate sa fie delebrativă şi astfel favorizează crearea unui model pe
baza informaţiilor şi analizarea acestuia. Iar o alta arhitectură este cea comportamentală care
prezintă o selecţie între diferite acţiuni de răspuns. De exemplu o felină se va furişa când
prada este în apropiere şi viteza acesteia este foarte mica, iar dacă prada îşi mareşte viteza
pradătorul îşi asuma un comportament de urmărire.

Căutarea este influenţată şi de mediul în care se desfasoară aceasta astfel dimensiunea şi


tipul spaţiului de căutare reflectă gradul de complexitate. Deasemenea şi alţi factori
influentează sistemul precum dinamica, gradul de informaţii cunoscute.
Dinamica mediului determină două tipuri:
• Medii statice care sunt folosite în general în simulari încât elementele, precum
luminozitatea, nu se modifică. Exemplul practic este reprezentat de arenele de
testare a roboţilor care reprezintă sisteme controlate în care parametri importanţi
nu sunt modificaţi
• Mediile dinamice sunt corespunzătoare situaţiilor reale şi prezintă schimbări fie
lente precum temperatura sau umiditatea, fie rapide precum mişcarea obiectelor
si evenimentele neplanificate
După gradul de informaţii mediile se pot clasifica în:
• Mediile cunoscute, sunt de fapt ideale încat este imposibilă cunoaşterea unui
mediu în orice moment de timp, dar sunt utilizate în cadrul simulărilor
• Medii parţial-cunoscute, sunt medii în care se poseda cunoştinţe limitate. De
exemplu chiar dacă ai o harta a cladirii această nu prezinta şi mişcarea
oamenilor
• Medii necunoscute, se pot face doar cateva presupuneri asupra spaţiului. Mediul
nu este complet necunoscut ci doar din perspectiva structurală şi dinamică este
considerat ambiguu

În urma clasificării putem înţelege că tipul căutarii este cel care determină strategia
soluţiei şi un comportament corespunzător sistemului. În plus, o identificare corectă aşa cum
am dezbătut anterior poate determina posibilităţile de optimizare şi asigură calitatea soluţiei.

26
3.2.6 MODULUL PSO

Aplicaţia propusă rezolvă problema cautarii unei singure ţinte fixe într-un mediu semi-
structurat, necunoscut şi static al suprafeţei plane a unei locuinţe. Aceasta problemă este
rezolvată folosind o soluţie colectiva şi mai precis o adaptare a algoritmului PSO pentru lucrul
cu roboţi.
Soluţia implementată este flexibilă şi poate fi utilizată atât pentru aplicaţii de robotică
coloborativă cât şi pentru probleme de optimizare.
Următoarele funcţii intră în componenţa modulului:
• PSO: realizează calculul vitezelor şi poziţiilor
• Fitness: calculează valoarea până la ţintă
• gBest, pBest sunt funcţii care determina calcularea optimelor globale şi locale
• Found determina dacă ţinta cautată a fost gasita

Codul care se execută propriu zis este în metoda run proprie fiecarui controler. Aici este
implementată structura blocantă pentru sincronizarea şi obţinerea tuturor informaţiilor de la
roboţi. Aşa cum am amintit când am discutat comunicarea acestui sistem, mesajele transmise
de roboţi conţin poziţiile ce vor fi folosite la optimizare şi canalele de transmisie folosite în
recunoaşterea agentului care a transmis mesajul.
Parametri importanţi ai funcţiei PSO reprezintă ponderea vitezei particulei, ponderile
globale şi locale, dimensiunea spaţiului de căutare şi multimea particulelor.
Functia Fitness calculeaza distanţa euclidiana dintre poziţia actuala a unui robot şi cea
finală. Iar funcţia gBest pe baza functiei Fitness identifică minimul şi ii retine valoarea şi
poziţia.
Functia pBest este o funcţie mai aparte pentru că această retine pozitia cea mai buna a
unui robot prin determinarea minimul si salvarea acestuia doar dacă acestă este mai mic decat
toate valorile până atunci.
Funcţia Found returneaza adevarat în cazul în care a fost gasita ţinta prin determinarea
distantei fata de acesteia considerand posibilitatea ca aceasta sa se afle in interiorul unui
obstacol.

Parametrii algoritmului PSO folositi în cadrul lucrarii:


• Înertia 0.6
• Factorul de invatare global 2
• Factorul de invatare local 2

Primul pas în rularea clasei presupune ininţializarea variabilelor şi a contorului de


iteraţii. Apoi se aşteaptă primirea informaţii de la agenţi, iar odata ce toate informaţiile sunt
primite se va calcula pe rând, funcţia fitness, optimul global, optimul local şi ulterior se vor
obţine vitezele şi poziţiile roboţilor. Funcţia Found returneaza adevarat în cazul în care a fost
gasita ţinta. Daca nu a fost gasită ţinta se transmit poziţiile catre roboti, aceştia folosesc
modulul de deplasare la poziţie, şi apoi transmit noua poziţie înapoi algoritmului de căutare.

27
Este important sa consideram efectul factorilor aleatori din formulă pentru calculul
vitezei. Aceştia determină caracterul stocastic al algoritmului şi sunt practici mai ales în
primele iteraţii ale algoritmului.
În continuare vom discuta despre modulul de control şi deplasare la poziţii fără de care
algoritmul PSO nu ar putea funcţiona pe roboţi.

3.2.7 MODULUL DE CONTROL AL ROBOŢILOR

Acesta este algorimul care dictează comportamentul roboţilor la nivel individual, pe


când algoritmul PSO este cel ce ghidează roboţii în cadrul procesului de căutate. Acest modul
are în vedere deplasarea la o poziţie dată de catre supervizor şi înglobează algoritmul de
evitare a obstacolelor.
Înainte de a discuta pe larg aceste module este important sa întelegem poziţionarea şi
calcularea orientării în mediul de simulare considerat.

a) Determinarea poziţiei şi orientarii

Funcţionarea implementării propuse a algoritmului PSO presupune existenţa unui


sistem global de poziţionare pentru determinarea informaţiilor despre poziţie şi orientare.
În general sistemele de poziţionare pot fi clasificate dupa:
• Dimensiunea spaţiului care poate globală, regională sau locală. Este important
de observat că în cazul sistemelor locale precizia este mai buna decat faţa de
sisteme mai mari.
• Sistemul de referinţa poate fi predefinit de utilizator sau ales de catre robot
• Tipul spaţiului: 2D prin coordonate (X,Y) şi un unghi faţă de una din axe sau 3D
• Particular pentru sisteme distribuite (swarm) este importanta scara la care se face
localizarea: global sau local. Astfel în cazul global poziţionarea este externă
tuturor indivizilor iar în cazul local, fiecare individ îşi menţine şi determină
poziţia şi orientarea.
Exemple de sisteme de poziţionare includ: sistemul GPS, poziţionarea odometrică
bazată pe encodere sau poziţionarea pe faruri, iar un caz particular este sistemul de
poziţionare relativă.
În această lucrare am apelat la sistemul de poziţionare global oferit de catre mediul de
simulare încat este un sistem cu predispoziţie mică la erori şi în plus oferă posibilitatea
prelucrării informaţiilor globale fapt ce determina o convergenţa rapidă în determinarea
soluţiei.
În primul rand observam că sistemul de coordonate este putin mai diferit, axa Y este
considerata înalţimea în plan iar axa Z reprezintă (–Y) dintr-un plan tradiţional, (Anon 2012).
Din acest motiv în această lucrare toate raportările la plan vor fi considerate cu următoarea
transformare:
# $ % & # % $ (3.1)

28
Poziţia în sistem este obţinută prin folosirea unui sistem global de poziţionare propriu
robotului care returnează cele trei valori în sistemul de coordonate.
Orientarea robotului este calculata pe baza unui compas magnetic care returneaza un
vector cu trei componente care indica directia nordului virtual [1 0 0]. Valoarea orientarii în
radieni este determinata prin funcţia arctangent.


'( ')'*+*,)-./ *,)-.+/ (3.2)
01

'( 2
(3.3)

Folosind aceste informaţii vom putea calcula diferenta de grade fata de ţinta şi în plus
distanţa până la această.

b) Modulul de deplasarea la o poziţie dată

Acest modul are în vedere procesarea şi implementarea informaţiilor primite de la


supervizor. Aşa cum am prezentat când am vorbit de sistemul de comunicatii, informaţiile
primite contin poziţia la care un robot trebuie sa ajunga, descrisa pe coordonatele X,Y (X, Z
în cazul mediului de simulare).
Pentru o implementare clara şi sitematica s-a preferat implementarea pe baza unor stări
finite. În figura de mai jos este prezentata o digrama de stări şi condiţiile de tranziţie pe care le
vom prezenta în continuare.
Algoritmul contine doua stări simple initializare, finalizare şi patru stări ce trateaza
acţiunile robotului: de asteptare, rotaţie, translaţie şi evitare de obstacole.

29
Figura 3.5 Diagrama de stări pentru controlerul unui robot

Starea de aşteptare este proprie sistemului de comunicare şi are o acţiune blocantă care
nu permite realizarea altor acţiuni inaintea primirii unui mesaj.

Rotaţia este realizata pe loc în jurul axei în funcţie de diferenta de unghi dintre
traiectoria catre ţinta şi orientarea robotului. Daca diferenta este pozitiva robotul se va roti în
sens invers trigonometric. Motoarele sunt setate cu viteze egale dar de semne diferite. Odata
începută mişcarea de rotaţie algoritmul testează diferenţa de unghi până această este minima
şi astfel va fi setată următoarea stare. Încat mişcarea este pe loc nu este necesara
implementarea condiţiilor aferente sistemului de evitare de obstacole aici.

30
Figura 3.6 Calcularea unghiului diferenţa în funcţie de orientarea robotului

3  4  5 (3.4)

Mişcarea de translaţie are în vedere doua aspecte: ajungerea la destinaţie şi evitarea de


obstacole. Ajungerea la distinaţie este determinată prin masurarea distanţei euclidiene până la
această şi setarea aceleiaşi viteze pe roti. În cazul depistării unui obstacol pe baza
masurătorilor de la senzorii de proximitate se va trece la următoarea stare.

Evitarea de obstacole se realizează prin folosirea unei funcţii dedicate. Aceasta


implementează comportametul folosind masuratorile de la senzori. Pe baza unor ponderi se
determină două viteze, una va fi o viteza pivot (mai mica) şi una care va fi viteza de rotaţie
(mai mare). Robotul se va departa astfel de obstacol încat viteza pivot va fi pe partea opusa
obstacolului.
În cazul în care robotul se apropie prea mult de obstacol viteza de pivot va deveni
aproape nula. Unghiul de rotatie considerat depinde de raza traiectoriei cât şi timpul dintre
doua actualizări iar ponderile folosite în calcularea vitezelor sunt obţinute experimental.

31
Figura 3.7 Evitarea de obstacole; cazul vitezei pivot=0

3.3 ROBOTICA ASISTIVĂ

Robotica de reabilitare presupune dezvoltarea de soluţii robotice pentru persoane care


prezintă o anumita dizabilitate. În sens larg, dizabilitatea reprezintă o deficienţa fizica sau
mentală care limitează în mod substanţial posibilitatea unei persoane de a realiza una sau mai
multe dintre activitatile principale din viaţa de zi cu zi, (Siciliano & Khatib 2008).
Societatea din prezent este în continua îmbătrânire iar vârsta este un factor de risc
principal în cazul dizabilitaţilor.
În decursul ultimilor zece ani numeroase proiecte naţionale am avut în vedere
dezvoltarea de roboţi personali, terapie robotica, proteze inteligente, locuinţe inteligente, tele-
robotica. Aceste proiecte sunt menite sa ofere longevitate şi desigur un stil de viata
independent.
Robotica de reabilitare este reprezentata de doua categorii: robotica de terapie şi cea
asistivă, dar deasemenea are în vedere dezvoltarea de proteze inteligente, stimulare neuronala
şi tehnologii de diagnosticare şi monitorizare a personalor în timpul activitatilor de zi cu zi.
Este important de menţionat sa robotica de terapie necesita cel putin putin doi
utilizatori: persona cu dizabilitate, adica pacientul, şi terapeutul. Dintre aspectele pe care le
trateaza acest domeniu: reabilitarea mişcarii membrelor superioare şi inferioare, îmbunătăţirea
comuncarii la copii cu autism şi altele.

32
Robotica asistivă este clasificată în funcţie de principala activitate pe care o desfasoara:
manipulare, mobilitate sau cogniţie.(Siciliano & Khatib 2008)
1. Robotica de manipulare, în funcţie de posibilitatea de deplasare a sistemului
robotizat, poate fi clasificată in:
• Sisteme fixe. Sistemele cu platforma fixa realizează activitaţi proprii locatiei
acestora, în bucatarie, langa pat etc.
• Sisteme portabile. Un sistem portabil poate fi, de exemplu, un braţ robotic,
ataşat la un scaun cu rotile, care ajuta la manipularea de obiecte şi chiar
interacţionarea cu alte elemente (deschide o usa).
• Sisteme mobile autonome. Aceste sisteme pot fi controlate prin voce sau alte
mijloace pentru a realiza anumite treburi prin casa sau la locul de munca.

2. Robotica asistivă a mobilitatii are în vedere:


• Scaune cu rotile electrice ce dispun de sistem de navigaţie
• Roboti mobili tip umblatori motorizaţi care ajuta persoanele cu mobilitaţi
reduse în reabilitare prin prevenirea căderii şi oferirea de stabilitate

3. Robotica de cogniţie ajuta persoanele cu demenţie, autism sau alte tulburari în


comunicare şi bunăstarea fizica.

Se are în vedere că dizabilitaţile au un caracter puternic individualizat, astfel o soluţie


pentru o persoană nu va fi potrivită pentru o alta, chiar dacă din punct de vedere medical
dizabilitaţile sunt similare. Iar cu cât o dizabilitate are un impact mai mare asupra stilului de
viata al persoanei cu atât costul tehnologic va fi mai ridicat încat soluţia este particularizata şi
nu poate fi comercializată la scara larga.
Tendinta în industrie este în a schimba punctul de interes al roboticii asistive din
încercarea de a „repara” persoanele cu dizabilitaţi către îmbunătăţirea stilului de viaţa şi
producerea de bunuri care pot acomoda mai multe abilitati funcţionale.
O provocăre în robotica, dar mai ales în robotica asistivă este autonomia unui sistem
care este necesar sa fie indeajuns de sigur şi capabil pentru a coexista şi a oferii beneficii
omului. În prezent, pentru a asigura siguranţa, robotica se bazeaza pe vigilenţa utilizatorului şi
controlul explicit asupra sistemului. Iar în general se face un compromis între siguranţa de
utilizare a sistemului şi capacitaţile acestuia de realizare a unei sarcini.
Sistemele autonome de robotica asistivă se concentreaza în jurul aplicaţiilor roboţilor
mobili cu brate şi funcţionalitaţi similare omului. Printre primele sisteme mobile asistive sunt
cele bazate pe roti care au permis explorarea acestui domeniu. Acesti roboţi permit realizarea
de sarcini simple precum găsirea şi returnarea unor obiecte, manipularea de dispozitive,
atenţionarea asupra obiectelor din jur şi altele.

33
3.3.1 COMPARAŢIE INTRE INTERFEŢE OM-ROBOT

În robotica industriala, controlul unui sistem robotic se realizează prin combinarea


dintre acţiunile manuale ale utilizatorului şi o interfaţă programabila. De exemplu într-o
fabrică automatizată, operatorul specifica robotului unde şi când sa se deplaseze, ce mişcare
sa realizeze, ce unelte sa foloseasca şi paşii de recuperare în cazul unei erori de sistem.
Însa în cazul unui roboticii de reabilitare avem următoarele provocări:
• operatorul nu este neapărat un inginer sau tehnician, astfel interfaţă trebuie să
ofere informaţii despre toate acţiunile robotului pentru realizarea unei sarcini
• utilizatorul este o persoană cu dizabilităţi şi prin urmare prezintă anumite
limitări în accesarea comenzilor şi controlarea robotului. Deci este necesar ca
proiectantul sistemului robotic sa trateze la nivel arhitectural majoritatea
situaţiilor posibile
• toţi roboţii de reabilitare necesita un grad pronunţat de individualizare a
interfeţei pe baza informaţiilor de la ingineri şi terapeuţi

Înterfetele pentru roboţii asistivi sunt personalizate la capacitatile de comunicare ale


utilizatorului. De exemplu pentru persoanele cu tetraplegie care prezintă limitari în mişcarea
membrelor sau capului necesită o poziţie speciala pentru butoane sau joystick sau un
dispozitiv de masurare a non-contactului. În adaos se pot integra sisteme precum: controlul
cursorului din poziţia capului, urmarirea ochilor, recunoasterea în vorbire etc.
În majoritatea sistemelor se recomanda o redundanţa în obţinerea de informaţii, astfel
previne sistemul din a deveni inoperabil în cazul unei calibrări greşite sau erori de interfaţă.
Deasemenea un alt aspect care nu poate sa sufere de prea multa redundanta este
asigurarea sigurantei în utilizare. Se practică introducerea de limitatori de viteză, putere,
mobilitate astfel încat roboţi îşi pot duce la bun sfarşit sarcina dar nu mai mult de atât. În plus
deseori se are în vedere introducerea unui „buton de panica” care permite stingerea întregului
sistem in caz de urgenţă.
În principiu, în cel mai rau caz posibil robotul trebuie sa fie incapabil în a vatama
utilizatorul. Alte măsuri ce sunt luate în această privinţa sunt reducerea greutaţii, rotunjirea
suprafetelor şi folosirea unor materiale potrivite.

Robotica industriala beneficiaza de reglementarile pentru siguranţa utilizatorului (ISO


10218) dar pentru robotica de reabilitare datorita proximitatii şi caracterului personal al
interacţiunilor, nu s-a putut obţine o standardizare asemanatoare. În prezent se foloseste o
îmbinare între standardele aparatelor medicale, buna practica a inginerilor şi codul de etica a
proiectantilor de sisteme.(Siciliano & Khatib 2008)
Pe scurt, cele mai importante elemente când e vorba despre proiectarea acestor sisteme
sunt: personalizarea, redundanţa funcţională, adaptabilitatea şi rabdarea în obţinerea nivelului
de confort şi funcţionalitate potrivit pentru folosirea eficientă a robotului.

34
3.3.2 ÎNTERACŢIUNILE ÎNTRE OM ŞI SISTEME MULTIROBOT

Taxonomia interacţiunilor între om şi sisteme multirobot a fost definită în (Yanco &


Drury 2004).
Pentru realizarea clasificarilor, un criteriu evidenţiat este din perspectiva sarcinii ce
trebuie realizată de catre roboţi. Caracteristici importante ale sarcinii sunt tipul şi criticalitatea
acesteia (adica posibilitatea întamplarii unui eveniment nedorit, tragic).

Alte categorii sunt referitoare la dinamica interacţiunii, astfel este necesar sa se


cunoasca:
• numărul de oameni implicati
• tipul echipei de roboţi (omogeni sau heterogeni).

O categorie mai larga reprezintă gradul de interacţiune între oameni şi roboţi care
implica o conştientizare a interacţiunilor om-om, om-robot, robot-robot şi o clarificare a
modului de luare a deciziilor de roboţi şi/sau oameni. Deasemenea acestă categorie este strans
legată de gradul de autonomie şi de intervenţie a omului asupra sistemului.

Având un fundament psihologic anumite criterii de clasificare au în vedere:


• aspectul roboţilor (antropomorfic, zoomorfic sau funcţional)
• proximitatea faţă de aceştia (evitare, trecere, urmarire, apropiere şi atingere).

În funcţie de rolul pe care o persoana îl poate avea în cadrul interacţiunii se exemplifica


următoarele:
• supervizor,
• operator,
• coechipier,
• programator/mecanic
• spectator.

Tot aici o clasificare reflecta tipul de feedback oferit de catre roboti (de la senzori
disponibili până la pre-procesarea informaţiilor ce vor fi transmise).
Se observă că aceste categorii care au în vedere interacţiunea umană sunt cuprinzatoare
oricărei situaţii din prezent sau predictată. Pe baza acestor categorii vor clasifica şi sistemul
propus în această licenţa.

35
3.3.3 MODULUL DE CONTROL PE STĂRI

Este important sa înţelegem că odată terminată căutarea, aplicaţia nu se termina şi ea.


Având în vedere caracterul asistiv al soluţiei, robotul va realiza o serie de acţiuni care au că
scop asigurarea stării de sanatate a persoanei.
În diagrama de mai jos observăm o strategie ce poate fi implementata de unul sau mai
multi roboţi in functie de necesitatile persoanei in cauza.
Raspunsul imediat al roboţilor când gasesc persoana căutata este de a realiza un semnal
de atentionare. În simulare am decis ca roboţii sa aprinda LED-urile odata cu gasirea
persoanei si mentinerea lor aprinsa până la depăşirea stării de alerta.
Robotul sau roboţii care sunt în vecinatatea persoanei vor aştepta o anumită perioada de
timp înainte să solicite din partea supervizorului declararea unei situaţii de urgenţa. Timp de
30 de secunde de la gasirea persoanei, daca robotii vor masura o schimbare relativ mare în
senzorii acestora, atunci starea de alarma va fi încetată. Schimbarea de la senzori
demonstreaza prezenta unui interacţiuni din partea persoanei iar astfel sistemul va incepe
interacţionarea cu aceasta.

Primul impuls este de a contacta o persoană specializată care este în masura sa faca o
analiză asupra situaţiei. Pentru implementarea acestei acţiuni sistemul solicită confirmare din
partea pacientului.
Menţionez că sistemul nu necesită prezenta unui tele-robot sau echipamente sofisticate
şi este de ajuns un telefon, un calculator sau de ce nu un monitor tv prin care terapeutul
persoanei poate sugera urmatoarele acţiuni.
În final odată ce evenimentul este soluţionat, roboţii vor reveni la acţiuni precedente sau
se vor retrage dupa caz.

36
Figura 3.8 Diagrama de stări pentru acţiunile posterioare căutarii

37
4. SIMULĂRI, REZULTATE, COMPARAŢII, DISCUŢII

4.1 MEDIUL DE SIMULARE

Webots este un mediu de dezvoltare folosit pentru modelarea, programarea şi simularea


roboţilor mobili. Utilizatorul are posibilitatea de a proiecta sisteme complexe cu unul sau mai
multi roboţi. Aplicaţia permite personalizarea fiecarui obiect prin forma, culoare, textura,
greutate, funcţie etc, deasemenea o gama variata de senzori este disponibila pentru roboţi.
(Anon 2012)
Controlerele pentru roboţi pot fi programate în inferfaţa de dezvoltare disponibila sau în
cadrul altor sisteme. Mediile de testare sunt realiste iar în librari gasim roboţi disponibili pe
piaţa în prezent.

Figura 4.1 Simulatorul Webots

Un element aparte în Webots reprezintă Supervizorul care este un tip de robot


privelegiat care poate executa acţiuni proprii unei persoane şi nu unui robot real. În general,

38
supervizorul este asociat cu un controler în cadrul caruia se pot specifica acţiuni precum
controlul simularii, mutarea roboţilor la poziţii specificate, realizarea unei capturi video etc.
In cadrul simularilor sustinute in aces proiect o metoda de verificare a corectitudinii
algoritmului a constat in folosirea functiilor din supervizor care permit teleportarea robotului
la urmatoarea pozitie. Aceasta optiune a redus timpul necesar testarilor si a dovedit ca Webots
este un sistem eficient si practic.

Robotul folosit, E-puck este un robot miniatural asemanator roboţilor Khepera, cu o


structura mecanica simpla şi rezistenta iar sistemul electronic şi software este modern. Gama
variata de senzori disponibili îi permite flexibilitate iar integrarea în Webots permite
programarea şi controlul simplu al robotului.(Michel et al. 2010). Mai multe caracteristici
despre E-puck sunt prezentate in anexa.

Figura 4.2 Robotul E-puck

Lucrarea este realizata exclusiv în Python, un limbaj de programare dinamic multi-


paradigmă, creat în 1989 de olandezul Guido van Rossum(Wikipedia n.d.), iar principalele
avantaje sunt descrise mai jos.
Limbajele dinamice sunt deseori caracterizate prin tipizare dinamică, sunt interpretate,
au management de memorie automatizat (garbage collecting) i au un nivel înalt de
abstractizare. Tipizarea dinamică permite declararea variabilelor fară declararea tipului
variabilei, interpretatorul determinînd tipul variabilei după con inutul sau opera iile
efectuate.
Dar Python este puternic tipat, adică interpretatorul nu permite opera ii de tip cast că în
C, de i sunt unele excep ii logice că lucrul cu numere întregi i numere float.
Python este un limbaj multi-paradigmă, concentrându-se asupra programării imperative,
orientate pe obiecte i func ionale, ceea ce permite o flexibilitate mai înaltă în scrierea
aplica iilor. Din punctul de vedere al sintaxei, Python are un număr de contruc ii i cuvinte
cheie cunoscute oricărui programator, dar prezintă i un concept unic: nivelul de indentare
are semnifica ie sintactică. Blocurile de cod sunt delimitate prin simplă indentare. Această
importan ă a indentării este foarte suprinzătoare pentru mul i noi utilizatori ai limbajului
Python, chiar dacă sunt programatori cu experien ă. Dar o astfel de utilizare a indentării
permite codului să fie mai u or de citit i mai compact. Programatorii cu experien ă oricum
39
indentează codul sursă, oricare ar fi limbajul, fiindcă această permite a structura codul sursă
i al face mai cite i mai pe în elese, iar Python face din această deprindere folositoare o
cerin ă strictă.
Se cosidera că un limbaj de programare nu prezintă utilitate practică dacă nu are un set
de biblioteci importante pentru majoritatea dezvoltatorilor. Din acest motiv Python include
bibioteci pentru lucrul cu fi iere, arhive, fi iere XML i un set de biblioteci pentru lucrul cu
re eaua i protocoalele Înternet, şi biblioteci particulare aplicaţiilor biologice şi de calcul
natural. Un număr mare de platforme Web sunt construite cu utilizarea Python. De exemplu
YouTube, unul din site-urile cu cel mai voluminos trafic din lume, este construit pe baza
limbajului Python.
Popularitatea limbajului este în cre tere începînd cu anul 2000 prin simplitate în
utilizare şi performantele ridicate dovedite.

4.2 ÎNTERPRETAREA REZULTATELOR

Pentru evidenţierea algoritmului şi eficienţa soluţiei de implementare au fost facute mai


multe experimente. Acestea au constat în rularea algoritmului PSO propus pe cateva
configuratii ale doua scenarii diferite. În plus au fost realizate experimente în lipsa
comunicaţiilor doar folosind modulul de deplasare la poziţie.
• Pentru o arena mica de aproximativ 4m2 folosind un grup mic de roboti,
performantele sunt foarte bune, tina fiind atinsa în aproximativ 9-12 iteratii.
• Pentru o arena mare, de aproximativ 20m2 folosind un număr de 10 roboţi se observa
performante care variaza între 20-40 de iteratii. Deşi numărul este mai mare, prin
raportare la mediul mult mai complex şi dimensiunile, performantele par realiste.

40
Figura 4.3 Mediu complex de simulare

Două comportamente particulare algoritmului PSO care au putut fi observate în simulări:


• Se observa tendinţa roboţilor de a se deplasa unul spre altul şi a se concentra.
Aceasta comportare se explica datorita optimului calculat de algoritm şi folosit
ulterior în cadrul calculului poziţiei şi vitezei individuale
• În cazul în care un robot depaşeste ţinta, la următoarea iteraţie el se va întoarce
încât va ajunge într-un punct de optim mai slab decat cel anterior

Caracterul cooperativ al roboţilor se constata prin:


• Faptul că algoritmul permite că roboţii sa se ajute reciproc şi sa depaseasca situaţii
blocante
• Ţinta a fost gasita mereu iar roboţii sunt apropiati de această la terminarea căutării

Modulul de control pentru deplasarea la poziţie este eficient şi în scenariile propuse toti
roboti au ajuns la destinaţie fara a se bloca.

Modulul pe stări este tratat în caz cât mai general pentru a oferii o deschidere cât mai
mare. În anexa sunt prezentate cateva afecţiuni medicale cu caracter imprevizibil pentru care
o persoana suferindă ar beneficia de ajutorul acestei aplicaţii.
Din punct de vedere algoritmic, implementarea pe stări este cea mai potrivita pentru
această situatie încat prezintă decizii clare asupra unor situaţii imprevizibile.
Se doreşte că informaţii de la senzori pe baza carora se iau decizii sa fie redundante
pentru a evita orice neclarităţi.
Din punct de vedere al siguranţei utilizării în locuinţa, împreuna cu o persoana, sistemul
este aproape inofensiv datorită dimensiunilor sale. In plus stabilitatea algoritmului denotă
încredere în folosirea lui alături de oameni.

41
5. CONTRIBUŢIA PROPRIE

În lucrarea de faţa am prezentat o soluţie la intersecţia acestor doua domenii: robotica


care este unul din cele mai provocătoare domenii de cercetare şi medicina, o sţiinta care înca
demonstrează că trupul uman este cea mai fascinantă maşinărie.
Însipiratia din mediul inconjurator furnizeaza nelimitat solutii la cele mai complexe
probleme. Algoritmul PSO are în prezent aplicaţii în cele mai neasteptate domenii, incepand
de la imagistica până la robotica.
Robotica de tip swarm prin caracterul sau cooperativ dovedeste în mod atât de simplu
importanţa lucrului în echipa si chiar mai mult de atat, efectele indirecte provenite de la un
robot la altul.
Arhitectura realizata si sistemele incorporate sunt de inspiratie proprie avand in vedere
direcţiile de dezvoltare la momentul de faţă.
Modulul PSO este adaptat la lucrul cu roboti şi implementat pentru roboti E-puck in
scenarii disponibile in simulatorul Webots. Sistemul de comunicaţie propus realizeaza
conexiunea dintre acest modul si cel de control al robotului.
Modulul de stari propus ca soluţie de raspuns la un incident este determinat de
particularitaţile dorite a orice sistem de robotica asistiva si se doreste a fi un sistem complet
autonom fară a necesita supervizare din partea unei a terţa persoane.
Un factor major pe care mizeaza sistemul este siguranţa si practicalitatea in utilizare a
acestuia.
In conlcuzie prin documentatie şi simulari am demonstrat că un sistem de laborator îşi
poate avea utilitatea în locuinţa unei persoane şi poate oferi un plus de servicii în
îmbunătăţirea vieţii de zi cu zi.

42
6. CONCLUZII

Soluţia propusă are că scop asistarea unei persoane în perimetrul unei locuinţe în care
sunt prezente mai multe aplicaţii robotice. Persoana considerata poate prezenta dizabilitaţi,
fiind o persoana varstnica sau un pacient aflat sub tratament.
Aplicaţia implementata se afla la intersectia directiilor de cercetare dintre robotica
asistivă şi aplicaţiile de robotica swarm bazate pe algoritmi de calcul natural.
Pe baza folosirii unui grup (swarm) de roboţi se trateaza evenimente nedorite în locuinţa
presupusa. Lucrarea are în vedere o persoana care a cazut şi poate fi imobilizata. Swarm-ului
de roboţi patrulează încaperea, detectează şi localizează persoana în cauză. Chiar mai mult,
odata cu localizarea persoanei, sistemul decide asupra stării de constienţă şi dupa caz va
declanşa o alarma sau va contacta un cadru medical.
Aplicaţia propusă şi simulată demonstrează importanţa şi putearea algoritmului PSO
chiar şi în prezenta unor medii imprevizibile, încât în scenariile considerate algoritmul a
descoperit ţinta. S-a demonstrat astfel că metodele de calcul de tip Swarm Întelligence pot fi
folosite cu succes pentru rezolvarea unor sarcini complexe şi confera stabilitatea necesara
pentru lucrul cu persoane.
Din considerenţe practice sistemul este usor de implementat si flexibil la cazurile de
heterogeneitate pe care un cadru real îl poate prezenta, datorita cerintelor minime pe care le
are. Iar in privinta sigurantei lucrului cu persoane s-a dovedit ca sistemul nu este capabil in
nici o sitaţie sa fie primejdios.
În consecinţă s-a demonstrat că soluţia colaborativ-asistivă propusă este fiabila şi
stabila.

6.1 EXTINDERI ŞI ÎMBUNĂTĂŢIRI

În acestă sectiune doresc sa prezint cateva dintre ideile pentru îmbunătăţirea sistemului
de fata.
Cand vorbim de un sistem supraveghetor în cadrul locuinţei ne referim şi la o casa
inteligenta iar integrarea sistemului intr-un mediu ce ofera premizele descrise este o finalitate
practica a proiectului.
Alte îmbunataţiri pe care le avem în vedere sunt pentru cladirea şi particularizarea
soluţiei asistive cu scopul oferirii unui nivel de suport mai mare în cazuri specifice precum:
atacul de astm, atacul de cord, hipoglicemia. Am specificat aceste probleme încat sunt printre
cele mai comune la momentul de fata iar reacţia imediata poate avea un caracter decisiv
asupra vietii persoanei. Mentionez ca reactia impediata in aceeste cazuri necesita actiuni
simple precum folosirea unui inhalator sau a unei masti de oxigen, oferirea unei aspirine sau
chiar aducerea unei surse bogate in zahar.

43
7. BIBLIOGRAFIE

Altshuler, Y. et al., Swarm Intelligence — Searchers , Cleaners and Hunters. , (3).

Anon, Sfatul Medicului. Available at: http://www.sfatulmedicului.ro/arhiva_medicala/


[Accessed June 6, 2012].

Anon, 2012. Webots Reference Manual.

Bashyal, S. & Venayagamoorthy, G.K., 2008. Human swarm interaction for radiation source
search and localization. 2008 IEEE Swarm Intelligence Symposium, pp.1-8. Available at:
http://ieeexplore.ieee.org/lpdocs/epic03/wrapper.htm?arnumber=4668287.

Buiu, C., Pavel, A. & Vasile, C., 2010. Roboti Cognitivi - Aplicatii de inspiratie biologica,

Dictionar Oxford English, Robotics. Available at:


http://www.oxforddictionaries.com/view/entry/m_en_gb0714530#m_en_gb0714530
[Accessed May 5, 2012].

Ghosh, A. et al., 2004. Multi-robot Cooperative Box-pushing problem using Multi-objective


Particle Swarm Optimization Technique. , pp.9-14.

Marjovi, A., Marques, L. & Penders, J., 2011. Guardians Robot Swarm Exploration and
Firefighter Assistance. , (i).

McLurkin, J. et al., 2004. Speaking Swarmish : Human-Robot Interface Design for Large
Swarms of Autonomous Mobile Robots. , pp.3-6.

Michel, O., Rohrer, F. & Heiniger, N., 2010. Cyberbotics ’ Robot Curriculum.

Nicolescu, A.F., 2011. ROBOTICA prezent şi perspective economice şi tehnico-ştiinţifice.

Panigrahi, B.K., Shi, Y. & Lim, M.-H., 2011. Handbook of Swarm Intelligence Adaptation ,
Learning , and Optimization , Volume 8,

Siciliano, B. & Khatib, O., 2008. Handbook of Robotics,

Wikipedia, Python. Available at: http://ro.wikipedia.org/wiki/Python [Accessed May 20,


2012].

Xue, S. & Zeng, J., 2009. Controlling Swarm Robots with Kinematic Constraints for Target
Search. , (60674104), pp.1021-1024.

Yanco, H. a. & Drury, J., 2004. Classifying human-robot interaction: an updated taxonomy.
2004 IEEE International Conference on Systems, Man and Cybernetics (IEEE Cat.
No.04CH37583), 3, pp.2841-2846. Available at:
http://ieeexplore.ieee.org/lpdocs/epic03/wrapper.htm?arnumber=1400763.
44
Zollo, L., 2011. Special Issue on Assistive Robotics. IEEE Robotics and Automation
Magazine.

45
8. ANEXE

8.1 DINAMICA POPULATIEI

Tara Nr de persoane Procent din Nr de persoane Procent din


cu dizabilitaţi populaţia totala varstnice populaţia totala
Franta 5 146 000 8.3 12 151 000 19.6
USA 52 591 000 20 35 000 000 12.4
Marea Britanie 4 453 000 7.3 12 200 000 29.5
Olanda 1 432 000 9.5 2 118 808 13.4
Spania 3 528 220 8.9 6 936 000 17.6
Japonia 5 136 000 4.3 44 982 000 35.7
Korea 3 195 000 7.1 16 300 000 36.0

8.2 PRIMUL AJUTOR

8.2.1 CRIZA ASTMATICA .

Persoanele bolnave de astm pot duce o viata normala şi lipsita de incidente dacă
pastreaza anumite norme de preventie şi dacă urmeaza tratamentul recomandat. în unele
cazuri crizele de astm nu pot fi evitate. Înainte de a vorbi despre crizele şi atacurile de astm,
este bine sa stim care sunt modalitatile prin care putem preveni aparitia lor. Primul pas este că
bolnavul sa evite factorii alergeni: animalele cu blana, fumul de tigara, praful stocat în saltele,
perne, covoare sau cel declansat de procesul de curatare, polenul, mirosurile puternice,
expunerea în anotimpurile racoroase şi umede, activitatile sportive si, desigur, virozele
respiratorii. La fel de importanţa este respectarea schemelor de medicatie prescrise. Apoi
vizitele regulate la medic, de trei ori pe an, sunt de maxima importanţa chiar dacă pacientul nu
inregistreaza probleme respiratorii la momentul respectiv.(Anon n.d.)

Astmul este o boala inflamatorie cronica a cailor respiratorii, caracterizata prîntr-o


recurenta a crizelor astmatice. în timpul unui atac de astm muschii care captusesc caile
respiratorii se contracta, micsorand spatiile prin care aerul poate patrunde în organism. Caile
aeriene se inflameaza şi este produsa o mai mare cantitate de mucus care agraveaza blocajul
respirator. Din aceste cauze pacientul simte o lipsa de aer pe care nu o poate controla, senzatia
de a tusi şi o tensiune, apasare în zona pieptului, respiratia devenind zgomotoasa.

Primul ajutor în cazul crizei de astm


Temperaturile scazute, asociate cu infectiile respiratorii specifice sezonului sunt un
factor important declansator al crizelor de astm. De aceea este bine sa stim care sunt masurile
de prim ajutor în aceste situatii. Un pacient diagnosticat cu astm are că recomandare din

46
partea medicului o schema individualizata de tratament, ce cuprinde doua tipuri de medicatie:
medicatia pentru preventie şi mentinere şi medicatia pentru atacurile de astm. Daca din cauza
factorilor externi se declanseaza criza, pacientul trebuie sa îşi administreze medicatia de
urgenta. în unele cazuri acestă nu inlatura simptomele, iar bolnavul trebuie sa se prezinte de
urgenta la medic. Aici pacientul va fi conectat la un tub cu oxigen şi i se va administra, tot
prin intermediul mastii, medicatia de prima linie: un beta-agonist în combinatie sau nu cu un
anticolinergic. Daca pacientul nu raspunde la acest tip de administrare, se va recurge la
variantele intravenoase sau intramusculare. în cazul în care pacientul prezintă şi alte afectiuni
respiratorii, medicii îl pot tine o perioada sub observatie pentru realizarea unor teste
suplimentare.

Desi exista tratament care calmeaza crizele de astm, cea mai buna metoda este
prevenirea. Evitati factorii alergeni, luati medicatia zilnica pentru controlul astmului şi nu
plecati niciodata de acasa fara tratamentul recomandat în caz de urgenta.

8.2.2 ATAC DE CORD SAU INFARCT MIOCARDIC

Un atac de cord este o urgenta medicala. Se va suna imediat serviciul de urgenta în


cazul în care o persoana sufera un infarct miocardic.
În cazul majoritatii persoanelor, simptomele unui atac de cord apar abia dupa 3 ore de la
declansarea acestuia. Multi pacienti îşi pierd viata inainte de a ajunge la spital. Cu cât se
intervine mai repede, cu atât cresc sansele de supravietuire. Tratamentul medical prompt
scade sansele afectarii cardiace.
Un atac de cord apare atunci când fluxul de sange care transporta oxigenul catre inima
este blocat partial sau total. Muschiul inimii va fi privat de oxigen şi va muri, treptat.

Cand o persoana sufera un atac de cord poate experimenta oricare dintre următoarele
manifestari:
- modificari ale tonusului mental - mai ales la varstnici;
- durerere în piept fie sub forma unei presiuni, apasari sau senzatie de plenitudine,
localizată în centrul pieptului dar şi în zona maxilarului, umar, brate, spate, stomac. Durerile
toracice se pot manifesta în crize de cateva minute care dispar şi reapar.
- transpiratie rece;
- ameteli;
- greata (mai frecvent intalnita la femei);
- amorteala, dureri, furnicaturi în bratul stang;
- scurtarea respiratiei;
- slabiciune sau oboseala, intalnita mai ales la varstnici.

Scaderea sau lipsa fluxului de sange afecteza partial sau total muschiul inimii. Un
infarct miocardic, în general, provoaca dureri în piept cu o durata mai mare de 15 minute, dar
posibil sa nu aibe nici un simptom.

47
Multi dintre cei care au experimentat un atac de cord au manifestat semne de avertizare
cu cateva ore, zile sau chiar saptamani în avans. Semnele de avertizare timpurie ale unui atac
de cord s-ar putea desfasura sub forma unor episoade de durere toracica ce debuteza în timpul
activitatii fizice şi care se amelioreaza în repaus.

Masuri de prim ajutor

În cazul în care o persoana ar putea avea un atac de cord:


- se va suna serviciul medical de urgenta, cât mai repede de la declansarea simptomelor;
- cel în cauza se va odihni, va sta asezat şi va incerca sa-si pastreze calmul;
- se va lua nitroglicerina cât mai rapid dacă apar deja simptomele infarctului miocardic
şi dacă medicamentul a fost prescris de medic;
- se va mesteca şi inghiti o aspirina (daca nu aveti alergii la acest medicament);
- celui aflat în pericol i se va face resuscitare cardiopulmonara: respiratie gura la gura şi
comprimare în zona pieptului. Medicii de la serviciul de urgenta vor oferi indicatii pentru
realizarea corecta a procedurilor de prim ajutor, până la sosirea ambulantei.

8.2.3 HIPOGLICEMIA

Hipoglicemia reprezintă scaderea concentratiei zaharului în sange. Ea apare atunci când


nivelul glucozei sanguine (sau al zaharului) scade prea mult pentru a mai furniza organismului
"combustibilul" necesar unei bune funcţionari.

Hipoglicemia nu este o boala, ci o stare determinata de o varietate de cauze. Principalele


tipuri de hipoglicemie sunt:
- scaderea rapida a glucozei în sange (hipoglicemia). Apare atunci când persoana a fost
privata de ingestia de alimente timp de mai multe ore, cum ar fi, de exemplu, perioada noptii.
Acest tip de hipoglicemie este frecvent asociat cu existenta unui nivel crescut de insulina în
sange, administrarea unor medicamente, consumul de bauturi alcoolice, afectiuni ereditare ce
afectează metabolizarea carbohidratilor sau cu alte afectiuni medicale
- scaderea lenta a concentretiei glucozei în sange (denumita şi hipoglicemie
postprandiala). Apare la un interval de 3 sau 4 ore dupa ingestia unei mese. Aceasta forma de
hipoglicemie poate fi determinata de o deficienta ereditara a unei enzime, de exemplu în
galactozemie sau prin indepartarea chirurgicala, partiala sau totala a stomacului. Uneori cauza
poate ramane necunoscuta. Scaderea lenta a glucozei în sange ce apare la 1 sau 2 ore dupa
ingestia unei mese (denumita şi hipoglicemie alimentara) poate fi determinata de o golire
rapida a continutului stomacului în intestin.

Scaderea rapida a glucozei în sange este determinata, în general, de o afectiune


medicala serioasa, în timp ce scaderea lenta a glucozei sanguine (in lipsa unei interventii
chirurgicale la nivel intestinal în antecedente) nu implica existenta unei boli.

Primul ajutor în caz de urgenta


Cunoasterea masurilor de prim ajutor în cazul aparitiei unei hipoglicemii este foarte
importanţa atât pentru persoana în cauza, cât şi pentru anturaj:
48
- primul ajutor în cazul hipoglicemiei aparute la cei care nu primesc tratament cu
insulina, acestia sunt constienti şi capabili sa inghita (deglutitie pastrata), consta în ingestia
rapida a unor alimente bogate în zahar, precum sucurile de fructe sau bomboanele. (această
conduita se aplica şi în cazul în care nu se cunoaste dacă pacientul se afla în tratament cu
insulina)
- primul ajutor în cazul hipoglicemiei aparute la persoane aflate în tratament cu insulina
consta fie în administrarea unui aliment bogat în zahar, fie în administrarea de glucagon.

8.3 CARACTERISTI E-PUCK

Principalele caracteristici sunt prezentate în tabelul de mai jos.

Caracteristici Descriere
Marime 7.4 cm în diametru, 4.5 cm inaltime
Greutate 150 g
Baterie Aproximativ 3 ore
Procesor Microchip dsPIC 30F6014A @ 60MHz
Motoare 2 motoare pas cu pas, cu rezolutie de 20 de pasi şi
reductor de 50:1
Senzori IR 8 senzori infra-rosu ce masoara lumina şi proximitatea
fata de obstacole la distanţa de 4 cm
Camera camera color cu rezolutie maxima de 640x480
Migrofon 3 migrofoane pentru localizarea sunetului
Accelerometru Accelerometru 3D accelerometer pe axele X, Y şi Z
LED-uri 8 LEDuri rosii pe cerc şi un led verde
Boxa O miniboxa ce poate reda WAV şi sunete.
Switch 16 poziţii
Bluetooth Bluetooth pentru comunicatie wireless robot-pc şi
robot-robot
Remote Control infra-red LED for receiving standard remote control
commands
Programare Programare C cu compilator GNU GCC
Simulare Webots STD or EDU faciliteaza programarea unui e-
puck

49
8.4 CODUL SURSA
8.4.1MODUL PSO

Supervisor.__init__(self)
self.timeStep = 32

self.emitter = self.getEmitter('emitter')
self.receiver = self.getReceiver('receiver')
self.receiver.enable(self.timeStep)
self.maxSpeed=1000

#camera dim
self.xM=6.3
self.xm=1
self.zM=9.6
self.zm=0.3

#init pso
self.nr=10
self.pozBest=[[0,0]]*self.nr
self.v=[[0,0]]*self.nr
self.vLimit=[(1,20) for i în range(self.nr)]

#valoarea target
self.target=[3,5]

#parametri pso
self.w=0.6 #inertie
self.pw=2 #factor local
self.nw=2 #factor global

#test gps poziţie


self.robot_node=[[]]*self.nr
self.trans_field=[[]]*self.nr

for i în range(0,self.nr):
self.robot_node[i] = self.getFromDef("e-puck"+str(i+1));
self.trans_field[i] = self.robot_node[i].getField("translaţion");
self.tv_node = self.getFromDef("TV");
print self.tv_node

def retrieve_msg(self,cycle):

message = struct.unpack('ddd', self.receiver.getData())


print '[', cycle, '] Supervisor received:', message[0], message[1], message[2]
return message

# calc vectorul fitness pt toti roboţii


def dist_euc(self,a,b):
try:
val=map(lambda x,y:(x-y)**2,a,b)
except:

50
print "GPS not ready", sys.exc_info()[0]
pass
return sqrt(sum(val))

def fitness(self, poz):


val_fitness=[0]*self.nr
for i în range (0,self.nr):
val_fitness[i]= self.dist_euc(self.target,poz[i])
self.val_fitness=val_fitness
return 0

def diff(self,a,b):
return map(lambda x,y:(x-y), a,b)

def find_pBest(self,poz,cycle):
if cycle<self.nr*2:
self.pozBest=[[random(),random()]]*self.nr
else:
print 'pozBest în alg',self.pozBest
for i în range (0, self.nr):
fitness_pBest=self.dist_euc(self.target,self.pozBest[i])
if self.val_fitness[i]<fitness_pBest:
self.pozBest[i]=poz[i]
return 0

def find_lBest(self):
lBest=self.val_fitness[0]
lBest_ord=0
for i în range (0,self.nr):
if self.val_fitness[i]<lBest:
lBest=self.val_fitness[i]
lBest_ord=i
return lBest_ord,lBest

def find_gBest(self, lBest):


return lBest

def found(self,cycle):
if cycle>self.nr:
print self.val_fitness
return any(x<0.02 for x în self.val_fitness)
else:
return False

# aplica pso având în vedere positiile roboţilor


def pso(self, poz,cycle):
self.fitness(poz)
#print self.val_fitness

if self.found(cycle):
return True

51
print 'pozitiile',poz
lBest=self.find_lBest()
print 'lbest',lBest
gBest=self.find_gBest(lBest)

self.find_pBest(poz,cycle)
print 'poz best dupa căutare',self.pozBest

vt=[[]]*self.nr
self.vi=[[0,0]]*self.nr

for i în range (0, self.nr):


vt[i]+=[[x*self.w for x în self.v[i][:]],[x*(self.pw*random())for x în
self.diff(self.pozBest[i],poz[i])],[x*(self.nw*random()) for x în self.diff(poz[gBest[0]],poz[i])]]

self.v[i]=map(sum,zip(*vt[i]))

for i în range(0,self.nr):
#self.v[i]=max(min(self.v[i],self.vLimit[i]),self.vLimit[i][0])
poz[i]=map(sum,zip(*[poz[i],self.v[i][:]]))

self.poz=poz
return False

def sendtask(self, ch, target,cycle):


self.emitter.setChannel(ch)
messagesend = struct.pack('ddd', ch, target[0], target[1])
print '[', cycle, '] Supervisor send:', struct.unpack('ddd', messagesend)
self.emitter.send(messagesend)
return 0

def send2file(self,data):
f = open('myfile3.txt', 'w')
f.write(data)
f.close()
return 0

def run(self):
cycle = 0

#reset valori primite


state=[False]*self.nr
poziţia_r=[[]]*self.nr

while self.step(self.timeStep) != -1:

print 'Supervisor'
if self.receiver.getQueueLength() == 0:# asteapta msg de la epuck controller
continue;

52
cycle += 1

#primim mesaj
message=self.retrieve_msg(cycle)

#verifica primirea mesajelor


state[int(message[0])-1]=True
print state

#salvam poziţia
poziţia_r[int(message[0])-1]=[message[1],message[2]]

#print self.receiver.getQueueLength()
self.receiver.nextPacket()

if all(state):

#calculate fitness
self.val_fitness=[[]]*self.nr

#print self.robot_node.getPosition()

if self.pso(pozitia_r,cycle):
print 'TARGET REACHED!'
self.poz=[0,0]
self.sendtask(-1,self.poz,cycle)
continue

testpoz=[[]]*self.nr
#send val
for i în range(0,self.nr):
self.sendtask(i+1,self.poz[i],cycle)
testpoz[i]=[self.poz[i][0],0,self.poz[i][1]]

state=[False]*self.nr

#test set position


if (cycle>self.nr):
for i în range (0,self.nr):
self.trans_field[i].setSFVec3f(testpoz[i])

controller = SVController()
controller.run()

53
8.4.2 MODUL DE CONTROL PE STĂRI

class GpsController_V (DifferentialWheels):

def __init__(self):
'''
Constructor
'''
DifferentialWheels.__init__(self)
self.timeStep = 32
self.maxSpeed = 1000

self.emitter = self.getEmitter('emitter')
self.receiver = self.getReceiver('receiver')
self.receiver.enable(self.timeStep)

self.gps=self.getGPS('gps')
self.gps.enable(self.timeStep)

self.compass=self.getCompass('compass')
self.compass.enable(self.timeStep)

#senzori distanţa
self.ds = []
for i în range(0,8):
self.ds.append(self.getDistanceSensor("ps" + str(i)))
self.ds[i].enable(self.timeStep)

#avoid
self.cruiseSpeed = 200
self.weightsLeft = (-1, -0.6, -0.2, 0, 0, 0.2, 0.6, 1)
self.weightsRight = tuple(reversed(self.weightsLeft))

#tastatura
self.keyboardEnable(self.timeStep)

#led
self.led=[[]]*8
for i în range(0,8):
self.led[i]=self.getLED('led'+str(i))

def boundSpeed(self, speed):


return max(-self.maxSpeed, min(self.maxSpeed, speed))

def getIRProxymityValues(self):
return map(lambda x: x.getValue(), self.ds)

def setLeds(self,x):
for i în range (0,8):
self.led[i].set(x)# set on with 1
return 0

def it_moved(self,x):
54
y=self.getIRProxymityValues()
diff=map(lambda a,b: abs(a-b),x,y)
return any(x>20 for x în diff)

def run(self):
cycle = 0
x=self.gps.getValues()

messagesend = struct.pack('ddd',self.emitter.getChannel(),x[0],x[2])
print '[', cycle, '] Robot', self.getName(), 'send:', messagesend[0], messagesend[1], messagesend[2]
self.emitter.send(messagesend)
state='search'

while self.step(self.timeStep) != -1:

if (self.receiver.getQueueLength() == 0 and state=='search'):


continue;
cycle += 1

message=[0,0,0]

if (state=='search'):
#reveive pachet
message = struct.unpack('ddd', self.receiver.getData())
self.receiver.nextPacket()
print '[', cycle, '] Robot', self.getName(), 'received:', message[0], message[1], message[2]

if (message[0]==-1):
print 'FOUND!'
state='found'

# use led to signal


self.setLeds(1)
print 'LED ON'

#pornit timer
print 'Start Timer'
delay=self.timeStep*10
#message[0]=9

#retine distanţa la care e gasita ţinta


senzor=self.getIRProxymityValues()

#self.setLeds(0)
#print 'LED OFF'
else:
#inca în căutare
#transmitere poziţie x şi z
x=self.gps.getValues()
messagesend = struct.pack('ddd',self.emitter.getChannel(),x[0],x[2])
print '[', cycle, '] Robot', self.getName(), 'send:',struct.unpack('ddd', messagesend)
self.emitter.send(messagesend)

55
elif (state=='found'):
if (delay>0):
print delay
if self.it_moved(senzor):
print 'Te poti ridica?'
print 'Y/N'
k = self.keyboardGetKey()
if k==ord('Y'):
state='ok'
elif k==ord('N'):
state='call'#self.sunat_terapeut()
else:
delay-=self.timeStep
continue
else:
print'ALARMA!!!'

elif (state=='ok'):
print 'Ai nevoie de un terapeut?'
print 'Y/N'
k = self.keyboardGetKey()
if k==ord('Y'):
state='call'
elif k==ord('N'):
state='anything'#self.sunat_terapeut()

elif (state=='call'):
print 'se realizează conexiunea...'
#teleprezenta& alt task
state='anything'

elif(state=='reset'):
print 'revenire la poziţiile initiale'

#deplasare la destinatie
#GoToController.GoToController.gotopos(solid)

controller = GpsController_V()
controller.run()

56
8.4.3 MODULUL DE CONTROL POZIŢIE
class Controller(DifferentialWheels):
'''
classdocs
self.timeStep = 32

# initialization for communication


self.emitter = self.getEmitter('emitter')
self.receiver = self.getReceiver('receiver')
self.receiver.enable(self.timeStep)

# initialization for the avoid behavior


self.nSensors = 8

self.ds = []
for i in range(self.nSensors):
self.ds.append(self.getDistanceSensor("ps" + str(i)))
self.ds[i].enable(self.timeStep)

self.cruiseSpeed = 200
self.weightsLeft = (-1, -0.6, -0.2, 0, 0, 0.2, 0.6, 1)
self.weightsRight = tuple(reversed(self.weightsLeft))

# timeout[simulation steps] = timeout[sec]*1000/timeStep[msec]


self.timeout = 3 * 1000 / self.timeStep
self.timeoutCounter = 0

# initialization for positioning


self.gps = self.getGPS('gps')
self.gps.enable(self.timeStep)
self.compass = self.getCompass('compass')
self.compass.enable(self.timeStep)

self.position = self.getCurrentPosition()

print 'Initialization finished'

#-------------------------------------------------------------------------

def sendCurrentPosition(self):
self.getCurrentPosition()
message = struct.pack('ddd',self.emitter.getChannel(), self.position[0], self.position[1])
self.emitter.send(message)

def receiveCommand(self):
message = struct.unpack('ddd', self.receiver.getData())
self.receiver.nextPacket()
self.message = (message[0], message[1], message[2])
#------------------------------------------------------------------------

def getCurrentPosition(self):
position = self.gps.getValues()
position =[round(x,4) for x in position]
bearing = self.compass.getValues()
57
#print "Compass:",bearing[0],bearing[1]
# print 'Bearing:', bearing

bearing = math.atan2(bearing[1], bearing[0])


if bearing < 0:
bearing += 2*math.pi
bearing = math.pi - bearing
if bearing < 0:
bearing += 2*math.pi
# print 'Bearing angle:', bearing*180/math.pi

self.position = (position[0], -position[2], bearing)


# print 'Position:', self.position
return self.position
#------------------------------------------------------------------------
def getIRProxymityValues(self):
return map(lambda x: x.getValue(), self.ds)

def avoidStep(self):
reflex = self.getIRProxymityValues()

speedL, speedR = [self.cruiseSpeed] * 2


for i in range(self.nSensors):
speedL += self.weightsLeft[i] * reflex[i]
speedR += self.weightsRight[i] * reflex[i]

print speedL, speedR


if sum(reflex[0:3])>sum(reflex[5:7]):
self.setSpeed(speedL, speedR)
else:
self.setSpeed(speedL,speedR )
#------------------------------------------------------------------------

def getRotationAngle(self):
self.getCurrentPosition()
diff=[0, 0]
diff[0]=self.message[0]-self.position[0]
diff[1]=self.message[1]-self.position[1]
dist=math.sqrt(diff[0]*diff[0]+diff[1]*diff[1])

bearing = math.atan2(diff[0], diff[1])


if bearing < 0:
bearing += 2*math.pi
bearing = math.pi - bearing
if bearing < 0:
bearing += 2*math.pi

#print '**Position:',self.position
#print '**Object:',self.message
print '**Bearing:',bearing
#print 'Position2:',self.position[2]
bearing=self.position[2]-bearing
#print 'rotatia',bearing*180/math.pi
self.target=(dist, bearing)

58
print '**Target:',self.target
return self.target

def setRotationSpeed(self):
speedL=-100
speedR=100
if self.target<math.pi/2:
print '-----------------------TRUE'
self.setSpeed(speedL, speedR)
else:
self.setSpeed(-speedL, -speedR)

def setForwardSpeed(self):

self.setSpeed(self.cruiseSpeed, self.cruiseSpeed)

def target_reach(self):
self.getRotationAngle()
if(self.target[0]<0.01):
print 'DONE'
return True
else:
return False

#------------------------------------------------------------------------
def run(self):
state = 0 # initialize
cycle=0

Ground=[100]*8

while self.step(self.timeStep) != -1:


cycle+=1

#print '['+str(cycle)+']'
#print state
if state == 0: # initialize
#perform action
#~
#~ self.getCurrentPosition()
#~ self.setSpeed(1000, 1000)
#~ self.getRotationAngle()
#~ #next state
state=1

elif state == 1: # wait for command


#perform action

#if self.receiver.getQueueLength() == 0:
# continue;

#self.receiveCommand()

self.message=[+0.2733, +0.2343, 0.2343] #print self.message

59
#next state
state=2

elif state == 2: # move-rotate

self.setSpeed(0,0)
self.getRotationAngle()

if (abs(self.target[1])<0.02):
state=3
else:
state=2
self.setRotationSpeed()

elif state == 3: # move-forward


#perform action
self.setForwardSpeed()
#condtion

if self.target_reach():
#self.sendCurrentPosition()
state=1
print self.getIRProxymityValues()

if any([x>100 for x in self.getIRProxymityValues()]):


state=4

elif state == 4: # avoid

self.setSpeed(0,0)
self.avoidStep()

y=self.getIRProxymityValues()

if all([x<35 for x in y]):


self.setSpeed(0,0)
state=2

elif self.target_reach():
#self.sendCurrentPosition()
state=1

else:
state=4

#next state
pass

controller = Controller()
controller.run()

60

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