Documente Academic
Documente Profesional
Documente Cultură
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
3
ABSTRACT
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.
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.
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.
Î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.
12
3. ALGORITMI DE OPTIMIZARE (PSO) ÎN ROBOTICĂ
ASISTIVĂ
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.
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:
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:
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.
Î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
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)
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.
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
22
3.2.4 COMUNICAREA ÎN SISTEME MULTIROBOT
3.2.4.1 Prezentare
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:
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.
Î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.
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.
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ă.
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)
31
Figura 3.7 Evitarea de obstacole; cazul vitezei pivot=0
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.
33
3.3.1 COMPARAŢIE INTRE INTERFEŢE OM-ROBOT
34
3.3.2 ÎNTERACŢIUNILE ÎNTRE OM ŞI SISTEME MULTIROBOT
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.
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
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
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.
40
Figura 4.3 Mediu complex de simulare
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
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.
Î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
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,
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.
Panigrahi, B.K., Shi, Y. & Lim, M.-H., 2011. Handbook of Swarm Intelligence Adaptation ,
Learning , and Optimization , Volume 8,
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
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.)
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.
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.
8.2.3 HIPOGLICEMIA
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
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):
50
print "GPS not ready", sys.exc_info()[0]
pass
return sqrt(sum(val))
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 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
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
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 send2file(self,data):
f = open('myfile3.txt', 'w')
f.write(data)
f.close()
return 0
def run(self):
cycle = 0
print 'Supervisor'
if self.receiver.getQueueLength() == 0:# asteapta msg de la epuck controller
continue;
52
cycle += 1
#primim mesaj
message=self.retrieve_msg(cycle)
#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
controller = SVController()
controller.run()
53
8.4.2 MODUL DE CONTROL PE STĂRI
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 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'
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'
#pornit timer
print 'Start Timer'
delay=self.timeStep*10
#message[0]=9
#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
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))
self.position = self.getCurrentPosition()
#-------------------------------------------------------------------------
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
def avoidStep(self):
reflex = self.getIRProxymityValues()
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])
#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
#print '['+str(cycle)+']'
#print state
if state == 0: # initialize
#perform action
#~
#~ self.getCurrentPosition()
#~ self.setSpeed(1000, 1000)
#~ self.getRotationAngle()
#~ #next state
state=1
#if self.receiver.getQueueLength() == 0:
# continue;
#self.receiveCommand()
59
#next state
state=2
self.setSpeed(0,0)
self.getRotationAngle()
if (abs(self.target[1])<0.02):
state=3
else:
state=2
self.setRotationSpeed()
if self.target_reach():
#self.sendCurrentPosition()
state=1
print self.getIRProxymityValues()
self.setSpeed(0,0)
self.avoidStep()
y=self.getIRProxymityValues()
elif self.target_reach():
#self.sendCurrentPosition()
state=1
else:
state=4
#next state
pass
controller = Controller()
controller.run()
60