tesi

annuncio pubblicitario
Facoltà di Ingegneria
Corso di Studi in Ingegneria Informatica
tesi di laurea
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Anno Accademico 2007/2008
relatore
Ch.mo prof. Domenico Cotroneo
correlatore
Ing. Marcello Cinque
candidato
Gabriele D’Avino
matr. 41/3513
Alle persone che ho amato,
che amo e che amerò.
Alle persone che mi hanno
amato, che mi amano
e che mi ameranno.
Indice
Introduzione
7
Capitolo 1. Reti di sensori senza filo (WSN)
1.1
1.2
1.2.1
1.2.2
1.2.3
1.2.4
1.3
1.4
1.5
1.5.1
1.5.2
10
Reti ad hoc e reti di sensori: definizioni e differenze
Architettura delle reti di sensori
Struttura di un sensore appartenente ad una WSN
Elementi costituenti un nodo appartenente ad una WSN
Protocolli di comunicazione in una WSN
Fonti energetiche
Scenari applicativi
Progettazione di una WSN
Ambito di utilizzo in esame: reti di sensori volte al monitoraggio ambientale
Progettazione
Considerazioni sulle soluzioni hardware da utilizzare
11
13
14
16
19
23
23
26
29
31
32
Capitolo 2. Sistemi di localizzazione
2.1
2.2
2.2.1
2.2.2
2.3
2.3.1
2.3.2
2.3.3
2.4
33
Caratteristiche principali
Procedura generica di localizzazione
Ranging
Positioning
Esempi di procedure di localizzazione
CBaSA (Coarse-grained Based on Single Anchor)
APIT (Approximated Point In Triangulation)
Considerazioni relative agli algoritmi ed al loro impiego
L’algoritmo ROCRSSI
33
36
36
38
41
41
45
47
49
Capitolo 3. Il ROCRSSI++
3.1
3.2
3.2.1
3.3
3.4
54
L’algoritmo ROCRSSI+
L’idea di base del ROCRSSI++
Vantaggi introdotti dall’algoritmo ROCRSSI++
Descrizione dell’algoritmo proposto: il ROCRSSI++
Migliorie adattative introdotte dal ROCRSSI++
54
56
59
62
69
III
Capitolo 4. Realizzazione dell’algoritmo in ambiente TinyOS
4.1
4.1.1
4.1.2
4.1.3
4.1.4
4.1.5
4.2
4.2.1
4.2.2
4.2.3
4.2.4
4.3
4.3.1
4.3.2
4.4
4.4.1
4.4.2
4.4.3
4.4.4
Il sistema operativo TinyOS
Architettura di TinyOS
Componenti
Interfacce
Scambio dati in TinyOS
TOS_Msg
Il linguaggio NesC
Caratteristiche principali
Modello a componenti
Modello di concorrenza
Esempio pratico: applicazione TestSwingMessage
Implementazione del ROCRSSI++
Componenti principali del sistema di localizzazione
Wiring dei Componenti
Dettagli d’implementazione
File header: BeaconMsg.h
Componente RocRssiC
Componente BeaInfoStorageC
Componente TestRocRssiC
Capitolo 5. Contesto di utilizzo
5.1
5.1.1
5.1.2
5.2
5.2.1
5.3
5.3.1
5.3.2
5.3.3
Interazione con una WSN
Il tool Serial Forwarder
Interazione con java tramite MIG (Message Interface Generator)
Applicazione SuLocSense
Applicazione Surge_Reliable
Ambito di utilizzo: progetto regionale ed architettura iCAAS
Arcitettura iCAAS
Possibile soluzione WSN con stargate e comunicazione con iCAAS
Altre soluzioni proposte
Capitolo 6. Analisi dei risultati, sperimentazione e testing
6.1
6.1.1
6.1.2
6.2
6.2.1
6.2.2
6.2.3
6.2.4
Hardware e software utilizzato
La piattaforma hardware MICA2
TOSSIM e TinyViz
Sperimentazioni relative al algoritmo ROCRSSI++
Esempio di simulazione
Prove sperimentali n°1: accuratezza posizione stimata relativa al
numero di beacon e tipologia della griglia di posizionamento
Prove sperimentali n°2: confronto accuratezza ROCRSSI – ROCRSSI++
Analisi energetica
73
73
74
75
76
77
79
81
81
83
91
92
99
99
102
106
106
109
113
118
121
121
124
127
132
133
135
136
137
143
148
148
149
155
159
160
162
166
176
IV
6.2.5
6.3
Analisi dei costi
Test del sensor networks access
Conclusioni
Sviluppi futuri
Appendice A: Installazione e configurazione di TinyOS
Bibliografia
Ringraziamenti
182
188
194
195
196
200
203
V
Elenco figure
Figura 1.1
Figura 1.2
Figura 1.3
Figura 1.4
Figura 1.5
Figura 1.6
Figura 1.7
Figura 2.1
Figura 2.2
Figura 2.3
Figura 2.4
Figura 2.5
Figura 2.6
Figura 2.7
Figura 2.8
Figura 2.9
Figura 3.1
Figura 3.2
Figura 3.3
Figura 3.4
Figura 3.5
Figura 3.6
Figura 3.7
Figura 3.8
Figura 3.9
Figura 3.10
Figura 3.11
Figura 3.12
Figura 4.1
Figura 4.2
Figura 4.3
Figura 4.4
Figura 4.5
Figura 4.6
Figura 4.7
Figura 4.8
Esempio di architettura WSN
Schema a blocchi di un sensore
Alcuni esempi di nodi di una WSN
Sensor board equipaggiabile ad un sensore MICA2
Diagramma del circuito applicativo del chip radio CC1000
Esempio di una WSN divisa in cluster
Spazio applicazioni WSN
Regione ricoperta dalle antenne di ciascun anchor node
Calcolo coordinate del sensore attraverso le coordinate dell’anchor node
Errore massimo nel CBaSA
Esempio di sovrapposizione di triangoli
Valutazione della posizione del nodo incognito
Problema del “nodo indeterminato”
Grafico di confronto degli algoritmi APIT e ROCRSSI
Localizzazione tramite 3 beacon con il ROCRSSI
Esempio di regione d’intersezione disconessa
Esempio di localizzazione con tre beacon (A, B e C), nodo incognito nella
posizione S e posizione stimata E
Esempio WSN con 5 nodi beacon
Possibile evoluzione di una WSN utilizzando il ROCRSSI++
Esempio di localizzazione tramite beacon A – B –C con ROCRSSI+
Localizzazione tramite beacon A – B – C – S con ROCRSSI+
Esempio di localizzazione tramite ROCRSSI++
Flow chart che rappresenta l’algoritmo residente nei nodi beacon di 1° livello
Flow chart che rappresenta l’algoritmo residente nei nodi incogniti
Pseudo-codice procedura di localizzazione
Flow chart che rappresenta l’algoritmo residente nei beacon di 2° livello
SD relativo al caso di dichiarazione Ready/NotReady4Beacon
SD relativo al caso Alert – NotReady4Beacon
Architettura TinyOS
Esempio di user-provider interfaccia
Grafico dei componenti nella comunicazione in TinyOS
Incapsulamento messaggio utente nel TOS_Msg
Modello di un componente NesC e relativo codice
Architettura di un’applicazione in NesC
Wiring del componente principale TestSwingMessage
Wiring del componente BeaToRfm
14
15
16
17
19
21
26
42
43
44
45
46
47
49
51
52
55
57
58
59
60
61
63
65
67
68
70
71
75
77
78
81
83
85
93
96
VI
Figura 4.9
Figura 4.10
Figura 4.11
Figura 4.12
Figura 4.13
Figura 4.14
Figura 4.15
Figura 5.1
Figura 5.2
Figura 5.3
Figura 5.4
Figura 5.5
Figura 5.6
Figura 5.7
Figura 5.8
Figura 5.9
Figura 5.10
Figura 5.11
Figura 5.12
Figura 5.13
Figura 5.14
Figura 5.15
Figura 6.1
Figura 6.2
Figura 6.3
Figura 6.4
Figura 6.5
Figura 6.6
Figura 6.7
Figura 6.8
Figura 6.9
Figura 6.10
Figura 6.11
Figura 6.12
Figura 6.13
Figura 6.14
Figura 6.15
Figura 6.16
Figura 6.17
Figura 6.18
Figura 6.19
Figura 6.20
Figura 6.21
Figura 6.22
Figura 6.23
Figura 6.24
Wiring del componente RfmToBea
98
Struttura a livelli dell’applicazione realizzata
101
Wiring componente TestRocRssiC
102
Wiring del componente LocC
103
Wiring componente RocRssiC
104
Wiring del componente BeaInfoStorage
105
Esempio di scansione ed incremento dei contatori
112
Interazione con una WSN tramite server
123
Schema di funzionamento Serial Forwarder
125
GUI Serial Forwarder
126
Output relativo all’applicazione Listen
128
Funzionamento concettuale del MIG
130
Classe CoordMsg generata dal tool MIG
130
Integrazione nell’applicazione SuLocSense
131
Incapsulamento messaggio SurgeMsg
132
Architettura iCAAS
136
Contesto generale nel quale s’inserisce la rete di sensori
138
Procedimento relativo all’invio dati da WSN ad iCAAS
139
Diagramma delle classi relativo al Sensor networks access (lato client)
141
Esempio di funzionamento sistema TinyDB
143
GUI di TinyDB
144
Wiring componenti dell’applicazione TinyDB
146
Piattaforma hardware Mica2
148
Sensor board per MICA2
149
Gateway MIB510 ed adattatore seriale-USB utilizzati
150
Grafico relazione distanza-RSSI
152
Grafico del numero di pacchetti persi in relazione alla distanza tra i nodi
153
GUI di TinyViz
157
Esempio di simulazione tramite TinyViz
160
Grafico della variazione dell’errore all’aumentare del numero di beacon presenti
nella WSN
161
Diverse tipologie utilizzate
163
WSN con tre beacon (0,1 e 2) ed un nodo incognito (3), disposti in maniera casuale 163
WSN con tre beacon (0,1 e 2) ed un nodo incognito (3), disposti in griglia
164
WSN con quattro beacon ed un nodo incognito, disposti in griglia
164
WSN con quattro beacon ed un nodo incognito, disposti in maniera casuale
165
Vista TinyViz relativa alla simulazione del ROCRSSI in un WSN di 5 nodi
(3 beacon e 2 nodi incogniti)
166
Vista TinyViz relativa alla simulazione del ROCRSSI++, WSN di 5 nodi
168
Grafico del confronto degli algoritmi utilizzati sulla stessa WSN
169
Vista TinyViz relativa alla simulazione del ROCRSSI in una WSN di 9 nodi
170
Vista TinyViz relativa alla simulazione del ROCRSSI++ in una WSN di 9 nodi
171
Vista TinyViz relativa alla simulazione del ROCRSSI in una WSN di 15 nodi
171
Vista TinyViz relativa alla simulazione del ROCRSSI++ in una WSN di 15 nodi
172
Confronto riassuntivo sull’accuratezza tra ROCRSSI e ROCRSSI++
173
Grafico della percentuale dei beacon all’interno di una WSN
174
Grafico miglioramento percentuale dell’accuratezza apportato dal ROCRSSI++ per
tipologia di WSN
174
Grafico relativo al dispendio energetico ROCRSSI per minuto di esecuzione
178
VII
Figura 6.25
Figura 6.26
Figura 6.27
Figura 6.28
Grafico dispendio energetico ROCRSSI++ per minuto di esecuzione
Grafico di confronto dispendio energetico ROCRSSI - ROCRSSI++
Grafico relativo all’analisi dei costi effettuata
GUI del tester java realizzato
179
180
186
189
VIII
Elenco tabelle
Tabella 1.1
Tabella 4.1
Tabella 4.2
Tabella 4.3
Tabella 5.1
Tabella 5.2
Tabella 6.1
Tabella 6.2
Tabella 6.3
Tabella 6.4
Principali sorgenti di energia alternativa
Occupazione in memoria del S.O. TinyOS
Dettaglio dei campi nella struct TOS_Msg
Componenti e descrizione
Specifiche e descrizione della varibile d’ambiente MOTECOM
Caratteristiche tecniche Stargate Xbow
Risultati sperimentazioni sui consumi energetici
Tabella dei costi relativi ai moduli Wireless
Tabella dei costi relativi alla diverse sensor board
Tabella dei costi relativi alle stargate
22
74
79
99
125
137
176
183
184
184
IX
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Introduzione
I continui progressi tecnologici nella miniaturizzazione, nella costruzione di circuiti a
basso consumo ed i continui passi avanti fatti nel campo dell’informazione uniti all'ottimo
livello di efficienza raggiunto dai dispositivi di comunicazione ad onde radio, affermano
sempre più una nuova prospettiva tecnologica: le reti di sensori (WSN – Wireless sensor
network). Questa tecnologia nasce dal fatto che i dispositivi elettronici diventano sempre
più piccoli e complessi. Inoltre la tendenza è quella di distribuire l’intelligenza in oggetti
con potenza di calcolo relativamente più bassa ma fortemente legati tra loro, invece di
accorparla in un'unica unità costosa, ingombrante e difficilmente gestibile.
I possibili scenari di utilizzo delle WSN sono molteplici, ed in diversi ambiti. Infatti, la
necessità di monitorare diversi fenomeni fisici è un comune denominatore in diversi campi
dell’ingegneria, dello studio dell’ambiente e territorio, dell’ambito medico, dei trasporti
etc. Attualmente vengono condotti molti studi e ricerche relative alle problematiche
tipiche di una WSN che non ne consentono l’applicazione su larga scala ma vengono
utilizzate solamente per applicazioni di nicchia (ad esempio in ambito militare). Questi
problemi sono relativi alla gestione efficiente delle risorse energetiche per garantire
maggior autonomia alla rete, al protocollo d’instradamento relativo alle comunicazioni tra
nodi, alla raccolta e gestione dei dati d’interesse utente e a come risalire alla posizione
dell’origine dei dati. In particolare, un ambito in cui sono stati fatti e si faranno ancora
sforzi di ricerca, studio e sperimentazione, è quello relativo al problema della
localizzazione che può avere diverse sfaccettature e può essere utilizzato per diversi scopi
in diversi contesti. Per questo motivi molteplici sono le soluzioni proposte, e ciascuna può
essere utilizzata in un particolare contesto. Si capisce quindi, che una soluzione al
10
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
problema della localizzazione non può essere avulsa dal suo ambito reale di utilizzo. In
quest’ambito si costruirà un sistema di localizzazione per effettuare monitoraggio
ambientale ed in particolare, l’analisi dei rischi ambientali derivanti da fenomeni franosi,
prerogativa questa del progetto regionale che va sotto il nome di REMOAM (REti di
sensori per il MOnitoraggio AMbientale). Una volta presa visione dell’ambito di utilizzo,
si possono effettuare considerazioni sui parametri di progetto della WSN, scegliere
l’algoritmo di localizzazione ed elencare le possibili soluzioni per l’inoltro delle
informazioni rilevate dai sensori appartenenti alla rete. Partendo da studi relativi ad
algoritmi di localizzazione esistenti, si è passati alla progettazione ed alla conseguente
implementazione dell’algoritmo di localizzazione ROCRSSI++ che rappresenta un
miglioramento dell’algoritmo originale ROCRSSI (Ring Overlapping Comparision based
on Received Strength Signal Indicator). Il ROCRSSI fa parte della famiglia di algoritmi
range-free e cioè effettua una localizzazione basata non sul calcolo di misure reali, come
ad esempio la distanza tra due nodi, ma basata su comparazioni e costruendo relazioni
d’ordine. In quest’algoritmo, la stima della posizione del nodo incognito, si ottiene
prendendo in considerazione la regione d’intersezione di circonferenze e corone circolari.
Si è partiti da alcune migliorie introdotte e dettagliate in
fino a progettare, e poi
implementare l’algoritmo ROCRSSI++ che rappresenta un’evoluzione dell’algoritmo
originale, che introduce una serie di migliorie adattative. Considerando sempre il
particolare ambito di utilizzo in cui viene calata la WSN, si sono considerate le varie
opportunità relative alla raccolta e gestione dei dati rilevati ed infine sono state effettuate
prove sperimentali ed analisi dei risultati ottenuti. A questo proposito, si capisce che
effettuare da subito prove sperimentali reali sul campo avrebbe richiesto un costo
maggiore in termini economici e temporali, inoltre all’aumentare del numero di nodi
costituenti la rete di sensori insorgono problemi di monitoraggio di tutti i nodi
appartenenti alla rete e problemi relativi alla riprogrammazione di ciascun nodo qualora ci
fossero modifiche al codice dell’applicativo. Inoltre talvolta ci si trova di fronte a
condizioni territoriali sfavorevoli dal punto di vista dell’installazione
di una WSN
dedicata al monitoraggio ambientali. Ecco perché si è scelto di utilizzare strumenti
11
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
simulativi per studiare i comportamenti del sistema di localizzazione proposto. In
particolare, l’approccio utilizzato si articola in due fasi. Nella
prima fase vi è la
sperimentazione reale in ambiente indoor (su piattaforme hardware MICA2) relativa
all’idea che sta alla base dell’algoritmo (e cioè la variazione di RSSI in funzione della
distanza) che rappresenta dunque un parametro critico. Nella seconda fase, basandosi sui
risultati ottenuti in precedenza, vi è la sperimentazione tramite strumenti simulativi che
permettono la valutazione dell’applicazione proposta. Lo scopo di queste sperimentazioni
è quello di dimostrare la bontà dell’algoritmo ROCRSSI++ in fatto di accuratezza della
posizione stimata dai nodi incogniti e consumi energetici. Si è dimostrato inoltre che
rispetto all’algoritmo originale, il ROCRSSI++ introduce un miglioramento medio del
30 % sull’acuratezza media della stima della posizione in relazione alle topologie
considerate;
a scapito di aumento del 6% del consumo energetico. Infine è stata
effettuate un analisi dei costi relativi all’intera realizzazione della rete.
Nel primo capitolo vi è un’introduzione generica sulle reti di sensori: le caratteristiche
principali, l’architettura e l’hardware e si valuteranno i possibili scenari applicativi in
particolare quello in esame.
Nel secondo capitolo ci si sofferma sui i sistemi di localizzazione: le varie topologie, gli
esempi di tecniche di localizzazione e l’algoritmo originale ROCRSSI
Nel terzo capitolo compare la fase di progettazione dell’algoritmo proposto: l’idea di
partenza, la descrizione dell’algoritmo e le migliorie adattative introdotte.
Nel quarto capitolo si va verso l’implementazione della soluzione adottata, partendo dall’
introduzione del sistema operativo TinyOS ed il linguaggio NesC, fino a considerare i
componenti dell’applicazione creata.
Nel capitolo quinto si prenderà visione dell’intero contesto in cui si applicherà il sistema
di localizzazione progettato e si discuteranno le possibili soluzioni riguardanti la raccolta e
la gestione dei dati rilevati.
Nel capitolo sesto infine, verranno analizzati i risultati ottenuti dalle prove sperimentali
effettuate, tramite l’utilizzo di strumenti simulativi e si parlerà del testing effettuato.
12
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Capitolo 1: Reti di sensori senza filo (WSN)
Questo capitolo si prefigge lo scopo d’introdurre al lettore il mondo delle reti di sensori
senza filo. Le Wirless sensor networks (WSN) sono particolari reti caratterizzate da un
elevato numero di dispositivi elettronici, che possono avere diverse nomenclature (nodi,
mote, sensor etc.), i quali grazie ai progressi raggiunti negli ultimi anni nel campo della
tecnologia microelettro-meccanica (MEMS) permettono di integrare in un unico blocco di
silicio sensori in grado di rilevare grandezze fisiche e anche di svolgere delle elaborazioni.
La nascita delle WSN è dovuta ad un’idea di base che prevede l’utilizzo di un numero
elevato di nodi, che consentono di effettuare rilevazioni ed elaborazioni con una maggiore
precisione e frequenza rispetto al caso d’uso di un unico sensore, in grado di fornire
prestazioni migliori a scapito però di costi superiori. Si intuisce che queste differenze sono
le stesse che intercorrono tra sistemi distribuiti e sistemi centralizzati.
Nei paragrafi successivi si introdurranno le reti di sensori viste come particolari reti ad
hoc, verranno definite, se ne descriveranno poi le caratteristiche principali (architettura,
composizione dei nodi e protocolli di comunicazione) ed i requisiti che esse devono
soddisfare, dopodichè si considererà l’importanza della progettazione per il tipo di
applicazione ed infine si elencheranno i possibili scenari di utilizzo, in particolare quello
preso in considerazione ossia relativo alla possibilità di costruire una rete di sensori per il
monitoraggio ambientale ed in particolare lo sviluppo di un sistema di localizzazione
inserito in territori considerati potenzialmente a rischio di frane, per valutare gli
spostamenti del terreno al fine di prevenirle.
13
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
1.1 Reti ad hoc e reti di sensori: definizioni e differenze
Una rete mobile ad hoc (Mobile Ad-hoc NETwork - MANET) può essere considerata
come un sistema autonomo di nodi connessi tramite collegamenti senza filo. Le reti ad hoc
vengono costruite all'occorrenza ed utilizzate in ambienti estremamente dinamici e
possono operare senza l'aiuto di una infrastruttura preesistente, come ad esempio dopo
catastrofi naturali, durante conflitti militari o in altre situazioni d'emergenza.
Generalmente il canale di comunicazione è a radio frequenza, anche se esistono altri tipi di
connessioni come le connessioni ottiche, sfruttando lo spettro della luce infrarossa o la più
recente tecnologia laser. In genere la procedura di configurazione di un nodo all’interno di
una rete ad hoc, consiste nella attuazione di una serie di operazioni che permettono al nodo
in questione di ottenere un proprio indirizzo all'interno della rete, e di comunicare ai vicini
la sua presenza, qualora i protocolli di instradamento adottati lo richiedano. Questa
procedura va ripetuta nel tempo, in quanto per definizione la topologia di questo tipo di
rete è in continua mutazione.
Si è fatta quest’introduzione sulle reti ad hoc perché spesso c’è la tendenza di classificare
le reti di sensori come casi particolari di reti ad hoc. Bisogna però fare attenzione in
quanto le caratteristiche principali delle reti ad hoc non si prestano del tutto a soddisfare le
esigenze di una rete di sensori. Infatti, non possiamo limitarci a considerare le WSN
(Wireless sensor network) semplicemente delle reti multihop su larga scala, per
sottolineare quest’aspetto si evidenziano le principali differenze tra le comuni reti ad hoc e
le reti di sensori:
I nodi di una rete spesso e volentieri sono soggetti a guasti per questo talvolta se
ne usa una quantità superiore per fare fault tollerance
Il numero dei nodi e la loro densità dipende dalla tipologia del fenomeno da
rilevare
A volte può capitare che dato l’elevato numero di nodi che componente un rete
di sensori, l’identificativo (ID) non sia univoco ma vi è una suddivisione in
gruppi dei nodi appartenenti alla rete ed è poi in questi gruppi che è garantita
l’univocità dell’ ID
14
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
In una rete ad hoc solitamente la comunicazione è di tipo peer to peer mentre in
una WSN il flusso di dati è asimmetrico in quanto tutti i nodi solitamente inviano
le informazioni verso l’interfaccia utente (nodo sink o base-station)
Visto che in una WSN l’energia e le capacità elaborative sono limitate, spesso i
criteri di progettazione tendono a favorire il risparmio energetico e la non elevata
complessità di calcolo, a scapito però della qualità del servizio (QoS)
In genere si utilizza una WSN quando si da poca importanza ai dati rilevati da un
singolo sensore ma piuttosto si vuole avere una visione d’insieme del sistema. Se
ad esempio, un nodo si guasta, ma la rete ha un numero di sensori piuttosto
elevato relativamente allo scopo per cui si è costruita, è molto probabile che il
guasto non influenzi il funzionamento del sistema. Questa viene chiamata
centralità dei dati.
Dopo aver visto le principali differenze tra reti ad hoc e reti di sensori o WSN, al fine di
definire una WSN, si darà preliminarmente una definizione di sistema distribuito:
Un sistema distribuito è un sistema formato da un insieme di componenti dislocati su vari
calcolatori connessi tramite una rete, capaci di comunicare e talvolta di coordinare le loro
azioni attraverso lo scambio di messaggi. Inoltre un sistema distribuito è caratterizzato da:
Concorrenza dei suoi componenti
Appartenenza a diversi domini dei suoi componenti
Da meccanismi di sincronizzazione e interazione basati sullo scambio di
messaggi.
Dalla possibilità di guasti indipendenti dei suoi componenti che possono influire
o no sul funzionamento totale
Si può definire una rete di sensori come un sistema distribuito costituito da un insieme di
nodi capaci di eseguire elaborazioni, comunicare tra loro attraverso protocolli di rete
multihop ed ospitare diversi componenti.
15
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
1.2 Architettura delle reti di sensori
Una WSN può anche essere considerata come un sistema intelligente ed autogestito di
rilevazione dove i componenti principali sono i nodi, o sensori, che possono avere
funzioni anche molto differenti. Gli elementi della rete possono essere collocati all'interno
dell'area da monitorare o nelle immediate vicinanze (dipende dal contesto applicativo).
Una delle caratteristiche architetturali più importante è che tipicamente non è prevista
nessuna infrastruttura fissa a cui si possano appoggiare nodi, ecco perché una WSN può
essere considerata come un esempio particolare di rete ad hoc. A seconda della centralità o
meno del sistema distribuito le comunicazioni sono dirette ad un unico nodo che elabora le
informazioni raccolte, oppure distribuite tra i nodi se questi hanno la capacità e
l’intelligenza sufficienti ad elaborare i dati autonomamente. Bisogna fare una
precisazione, nel paragrafo precedente si è accennato all’asimmetria del flusso informativo
riferita però ai messaggi contenenti informazioni di particolare rilevanza nell’ambito
considerato, in quanto solitamente questi messaggi sono tutti destinati al nodo sink (o base
station o gateway) che s’interfaccerà con il mondo esterno alla rete di sensori. In figura
1.1 è riportata una possibile architettura di una rete WSN. Dalla figura si evince che
all’interno della WSN esiste un nodo particolare ossia il nodo sink (in figura rappresentato
dal quadrato rosso), che rappresenta il nodo dedicato alla raccolta dei dati e consente
l’interfacciamento con il mondo esterno. Inoltre in figura è mostrato un esempio di come
un messaggio può attraversare la rete attraverso un routing multihop da un nodo generico
fino al sink, a cui può essere direttamente collegato l'elaboratore dell'utente oppure
un'interfaccia con altre WSN o altre reti eterogenee, per esempio Internet (esempio
mostrato in figura). Si possono prevedere più stazioni di raccolta dati intermedie,
eventualmente anche mobili, come ad esempio un utente dotato di PDA (Personal Digital
Assistant). Vi è la possibilità di percorrere la rete nel percorso inverso, infatti mediante
l'applicazione di gestione della rete, l’utente è in grado di inviare istruzioni ad ogni nodo
della WSN o definire un comportamento globale di essa.
16
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Figura 1.1 – Esempio di architettura WSN
Inoltre come detto in precedenza, ed evidenziato dalla figura, non è detto che i nodi
costituenti una WSN abbiano tutte le stesse funzionalità o la stessa rilevanza in ambito
applicativo, anzi talvolta possono seguire una gerarchia o avere una priorità associata ad
essi, questi accorgimenti permettono, qualora ce ne fosse bisogno. una classificazione dei
nodi all’interno della WSN.
1.2.1 Struttura di un sensore appartenente ad una WSN
Può risultare difficile presentare in maniera esaustiva la struttura di un singolo sensore
componente una WSN, vista la loro varietà. Si può però cercare di costruire uno schema
17
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
che illustri logicamente i blocchi funzionali che rappresentano le parti principali del
sensore. Questo schema è rappresentato in figura 1.2
Figura 1.2 – Schema a blocchi di un sensore
Analizziamo i blocchi della figura:
Unità di controllo (CPU): rappresentata solitamente da un microcontrollore e
svolge tutte le funzioni di gestione, tra cui la traduzione dei segnali elettrici
inviati dai trasduttori, la gestione degli attuatori ed il controllo delle
comunicazioni
Memoria: rappresenta un blocco di memoria volatile che funge da ausilio
all’esecuzione
Trasduttori: che possono essere più di uno, trasformano una qualche grandezza
fisica (temperatura, luminosità, pressione etc…) in un segnale elettrico
Attuatori: che possono essere più di uno e di varia natura (Leds, soner acustici
etc..)
Unità di comunicazione: consente la comunicazione inter-nodo tramite un mezzo
18
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
trasmissivo (di solito radio oppure ottico )
L'unità di controllo solitamente è formata da componenti a bassa potenza di calcolo e
bassi consumi energetici, per consentire consumi ridotti. Proprio il risparmio energetico è
oggetto di numerose ricerche, in quanto esigenza essenziale per la distribuzione su larga
scala delle WSN. Esistono alcuni semplici accorgimenti per ottenere un risparmio
energetico significativo che consistono nello sfruttare i diversi stati energetici in cui si può
trovare il sensore. Ad esempio si possono spegnere i trasduttori e la radio quando non sono
utilizzati, e soprattutto progettare algoritmi di comunicazione efficienti. Nel prossimo
sottoparagrafo si illustreranno nel dettaglio i componenti prima descritti.
1.2.2 Elementi costituenti un nodo appartenente ad una WSN
Esistono diverse piattaforme hardware di nodi per WSN, alcuni esempi sono mostrati in
figura 1.3
Figura 1.3 – Alcuni esempi di nodi di una WSN
19
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Analizziamo i componenti di un nodo nel dettaglio
SENSORI
Erroneamente a volte si definisce sensore l’intero nodo, in quest’ambito invece s’intende
quello che a volte viene denominata sensor board, il cui compito è trasformare la
grandezza fisica acquisita in un segnale elettrico che possa essere elaborato. Riferendoci
allo schema a blocchi di figura 1.2, la sensor board si può considerare come un insieme di
trasduttori. In figura 1.4 è illustrata una sensor board relativa ai sensori Mica2 della
famiglia CrossBow.
Figura 1.4 – Sensor board equipaggiabile ad un sensore Mica2
Come già detto, un nodo può disporre di più sensori, anche di grandezze fisiche diverse,
per soddisfare le esigenze in ambito applicativo; si possono avere ad esempio sensori di
luminosità, pressione, temperatura, prossimità, e così via. Ad ogni grandezza fisica
rilevata, è associata un tipo di elaborazione. Si supponga, ad esempio, di dover
digitalizzare un particolare segnale analogico: la rapidità con cui esso evolve determina la
velocità di campionamento necessaria per acquisirlo correttamente, mentre la precisione
con cui lo si vuol rappresentare stabilisce il numero di bit della parola associata ad ogni
campione. E’ intuitivo comprendere che all'aumentare della velocità di campionamento e
del numero di bit del convertitore analogico digitale, si ha un incremento dei consumi.
UNITA’ DI ELABORAZIONE
La presenza di una CPU permette di equipaggiare il nodo della intelligenza necessaria ad
elaborare la grandezza misurata e gestire le comunicazioni. L’intera elaborazione della
grandezza misurata viene fatta in modo numerico. La maggior parte dei sensori ha un
blocco di conversione analogico-digitale (ADC), che s’interpone tra la fase di acquisizione
20
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
del segnale e la sua elaborazione. Il ruolo della CPU può essere svolto da diverse tipologie
di circuiti logici. Comunemente la scelta ricade su un microcontrollore a basso consumo,
che utilizza blocchi di memoria RAM e ROM, ma è possibile impiegare anche un FPGA
(Field Programmable Gate Array), un DSP (Digital Signal Processing) o un ASIC
(Application Specific Integrated Circuit), non solo in sostituzione ma anche in
affiancamento al microprocessore per diminuirne il carico di calcolo aumentando però i
consumi. La gestione e l'utilizzo delle memorie è un'ulteriore fonte di consumo, per questo
motivo la loro dimensione deve essere opportunamente progettata. Un ulteriore compito
tipico del microprocessore, che introduce criticità dal punto di vista dei consumi
energetici, è la verifica dell'effettiva necessità di utilizzare le risorse, infatti per preservare
la carica della batteria il nodo deve disattivare tutti i dispositivi come chip radio, timer,
oscillatori e quant'altro, ogni volta che questi non sono indispensabili per le attività del
nodo stesso.
RICESTRASMETTITORE
Le reti di sensori sono pensate per un essere utilizzate in aree geografiche abbastanza
ampie, il cui territorio non sempre è pianeggiante e privo di ostacoli, quindi una
connessione via cavo sarebbe impensabile a causa degli ingenti costi dovuti ad un
cablaggio strutturato. L'unica soluzione possibile è adottare un sistema di collegamento
wireless, tipicamente realizzato via radio ma soluzioni alternative sono rappresentate da
comunicazioni via ultrasuoni o comunicazioni ottiche. Solitamente tra tutti i componenti
del nodo, il chip radio è il dispositivo che consuma la maggior parte dell'energia, ecco
perchè è indispensabile che resti attivo solo per il tempo strettamente necessario alla
comunicazione. Per realizzare un sistema di comunicazione robusto ha particolare
rilevanza lo studi relativo alla banda di frequenza utilizzata. La soluzione più semplice che
è poi quella che quasi sempre è adottata, è l'utilizzo di frequenze “libere" (ISM), cioè non
adibite a particolari servizi standard. Solitamente sono utilizzate come portanti le
frequenze a 868 MHz e 2.5 GHz. In figura 1.5 è rappresentato il modello del chip radio
CC1000 (1000 MHz) utilizzato sui sensori Mica2 della famiglia CrossBow.
21
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Figura 1.5 – Diagramma del circuito applicativo del chip radio CC1000
1.2.3 Protocolli di comunicazione in una WSN
Nella progettazione ed implementazione dei protocolli di comunicazione in una rete di
sensori, si può fare riferimento ai primi tre livelli dello stack protocollare ISO/OSI, ossia
(livello fisico, livello collegamento dati, livello rete):
LIVELLO FISICO
Il livello fisico si occupa dell'interazione tra il flusso di bit in arrivo dai livelli superiori e il
mondo reale. In questo livello si provvede a trasformare l'informazione in un segnale
elettrico o di altra natura e inserirla nel canale di trasmissione. In un’ ottica di risparmio
energetico sono continuamente allo studio tecniche di modulazione e codifica efficienti.
LIVELLO COLLAGAMENTO DATI
Il livello di collegamento dati va in supporto al livello fisico e si fa garante della sua
affidabilità. Si occupa di diversi aspetti, tra cui i più importanti sono il controllo del flusso,
il controllo di errore e, fondamentale nelle reti senza fili, il controllo di accesso al mezzo
di comunicazione (MAC).
Il MAC (Media Access Control ) si occupa della comunicazione e dello scambio dei dati
(a livello logico) tra i nodi. Siccome il canale di comunicazione rappresenta una risorsa
22
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
condivisa da tutti i nodi appartenenti alla rete, è necessario disporre di un protocollo di
accesso al mezzo che garantisca a tutti di poter disporre del canale. Il MAC si occupa di
gestire le collisioni ed inoltre fa fronte alla mobilità della rete e quindi alla mutevolezza
della topologia, a seconda degli algoritmi di instradamento che adotta. Tra i sistemi di
accesso multiplo al mezzo analizziamo il CSMA (Carrier Sense Multiple Access) che
rappresenta quello più semplice e più frequentemente utilizzato. Esso si compone di una
fase di ascolto, prima della trasmissione, che stabilisce se altri nodi impegnano il canale;
qualora questo fosse libero il nodo in questione inizia la fase di trasmissione. Oltre al
CSMA altre possibili soluzioni di gestione dell’accesso al canale di comunicazione sono
di seguito riportate (per dettagli fare riferimento a [5],[8]):
Time Division Multiple Access (TDMA): la multiplazione a divisione di tempo
invece consiste nel suddividere l'asse temporale in periodi denominati slot. Ad
ogni trasmettitore verrà associato uno slot, durante il quale trasmettere.
Frequency Division Multiple (FDMA): la multiplazione a divisione di frequenza
consiste nel suddividere la banda utile in un certo numero di sottobande non
sovrapposte, e assegnarne una a ogni trasmettitore.
Code
Division
Multiple
Access
(CDMA):
consiste
sostanzialmente
nell'assegnazione di una parola di codice differente a ciascun utente del canale.
Tale codice, combinato con il segnale da trasmettere, permette al ricevente di
estrarre dall'insieme di tutti i segnali ricevuti, quello inviato da ogni singolo
nodo, a patto di conoscerne la parola di codice relativa.
Se si pensa alle caratteristiche peculiari di una WSN come ad esempio che potrebbero
essere composte da un numero elevatissimo di sensori, risulta facile comprendere che non
è possibile assegnare uno slot temporale o una frequenza diversi ad ogni singolo sensore
(soluzioni rispettivamente relative a TDMA e FDMA). Nelle applicazioni pratiche le
risorse disponibili vengono affidate a gruppi di sensori, che adoperano poi metodi quali il
CSMA per limitare le collisioni.
23
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
LIVELLO RETE
Una delle funzionalità primarie di questo livello è la gestione dell'indirizzamento logico e
l'instradamento (routing) dei pacchetti. In una WSN l'indirizzamento può seguire una
tecnica particolare, per cui la rete viene partizionata in gruppi (cluster ) di nodi, a cui viene
assegnato un indirizzo univoco. In ogni cluster c’è un coordinatore che raccoglie i dati
provenienti dai nodi e li indirizza al centro di raccolta o eventualmente al coordinatore del
gruppo di cluster a cui appartiene. In questo modo lo spazio degli indirizzi viene
salvaguardato, pur mantenendo la possibilità di riferirsi a porzioni determinate della rete.
In figura 1.6 è rappresentato un tipico esempio di applicativo di tutto ciò che è stato detto.
Qui si rappresenta infatti, un’ applicazione pratica dove in una rete di grandi dimensioni, si
raggruppano i sensori in cluster. I nodi cerchiati in rosso agiscono da coordinatori per i
cluster di primo livello, mentre i nodi cerchiati in blu agiscono da coordinatori per i cluster
di secondo livello (quelli più grandi esterni) fino a raggiungere in sink e quindi il centro di
raccolta dati.
Figura 1.6 – Esempio di una WSN divisa in cluster
Per quel che riguarda gli algoritmi di routing invece essi si possono suddividere in tre
principali categorie:
24
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Proactive: questo tipo di algoritmi si basano sul fatto che ogni nodo conosca le
informazioni di instradamento utili a raggiungere ogni altro nodo. Ogni
componente della rete deve avere a disposizione una tabella che contenga tutti i
cammini minimi per le possibili destinazioni. Naturalmente queste informazioni
vanno aggiornate nel caso avvengano riconfigurazioni della rete ma si possono
aggiornare anche quando si verifica un guasto ad uno dei nodi (quindi escludere
tale nodo dalle tabelle) o in condizioni di traffico inteso e possibili congestioni
(magari trovando percorsi alternativi).
Reactive: questi algoritmi invece prevedono che i nodi, ad ogni trasmissione,
determinino il cammino minimo, o almeno qual è il nodo successivo da
raggiungere. Il principale vantaggio è costituito dal fatto che in questo caso non
deve essere memorizzata la tabella d’instradamento e ciò consente un risparmio
di memoria a discapito però evidentemente di un incremento nei tempi di
propagazione dei messaggi.
Tecniche ibride: queste tecniche sono basate su una ricerca del cammino
ottimale, quindi un comportamento simile alle tecniche reactive, ma salvano
queste informazioni costruendo una tabella, e questo comportamento è tipico
delle tecniche proactive. Tali informazioni possono essere utilizzate per ridurre i
ritardi dovuti alle ispezioni della rete.
Bisogna fare un’opportuna precisazione, infatti la stratificazione tipica del modello
relativo allo stack protocollare ISO/OSI non è perfettamente scalabile sulle WSN. Infatti
in questo tipo di reti il protocollo di instradamento (che nel modello ISO/OSI è ua
prerogativa del livello rete (livello tre)) deve necessariamente anche inglobare il controllo
del MAC e dello strato fisico,
proprio per venire incontro ad uno dei requisiti
fondamentali delle WSN ossia ottimizzare i consumi energetici, in questo caso si parla di
approccio “cross-layer”
25
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
1.2.4 Fonti energetiche
Da sempre e ovviamente non solo nella progettazione di una rete di sensori, l’aspetto più
esposto ad attività di studio e sperimentazioni, è volto alla ricerca di fonti di energia
alternative le cui caratteristiche principali siano durata, economicità e potenza. Nella
tabella 1.1 sono elencate le varie possibilità:
Tabella 1.1 – Principali sorgenti di energia alternativa
Ovviamente non si tiene conto della soluzione che possiamo considerare standard cioè
quella di equipaggiare i nodi della rete con batterie ricaricabili. Invece risulta essere molto
interessante lo sfruttamento dell'energia solare, da abbinare ad una batteria tampone, che
possa sopperire ai momenti di scarsa intensità luminosa. Bisogna fare ovviamente, anche
un discorso relativo alla convenienza che è dipendente dall’ambito applicativo, ma
soprattutto bisogna tener presente che queste tecnologie saranno utilizzabili non appena i
sensori avranno dimensioni tali da consentire correnti così basse; tenendo sempre presente
che in ogni caso il modulo di comunicazione necessita di una certa potenza.
1.3 Scenari applicativi
Gli ambiti applicativi all’interno dei quali possono essere calate le WSN sono molteplici
ed eterogenei. Per cercare di essere concisi ma comunque il più possibile esaustivi, si
divideranno le applicazioni possibili per le reti di sensori, in cinque categorie principali:
Ambito militare
Ambito ambientale
Ambito sanitario
26
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Ambito sociale e sportivo
Spazi intelligenti
Vediamoli nel dettaglio.
AMBITO MILITARE
E’ sicuramente l’ambito in cui le WSN trovano più applicazioni in quanto la loro
tolleranza ai guasti e la capacità di auto organizzarsi li rendono particolarmente adatti a
quest’ambito. Ecco perché come spesso accade, questo è stato il primo ambito in cui sono
state utilizzate. Sono davvero tantissime le applicazioni, infatti le reti di sensori
potrebbero: aiutare nella bonifica di territori considerati a rischio in quanto minati o
esposti a qualche tipo di contaminazione (chimica o biologica); essere utilizzate
nell’individuare obiettivi strategici e guidare nell’attacco le cosiddette “armi intelligenti”;
essere usati in ambienti urbani per rilevare attacchi terroristici che impiegano sostanze
radioattive o batteriologice; infine possono essere utilizzate per rilevare informazioni
riguardanti lo spostamento dei nemici o la posizione in cui è avvenuta un’esplosione.
Ovviamente sono stati riportati solo alcuni esempi, le applicazioni possono essere le più
disparate. Si capisce già che per questo tipo di applicazioni c’è bisogno di qualche
accorgimento in più a quelli fatti precedentemente, ad esempio in quest’ambito sarà
sicuramente un parametro di progetto importante l’utilizzo di una comunicazione sicura tra
i nodi della rete, per evitare attacchi maliziosi rivolti alla rete stessa. Ecco perché in
seguito ci sarà un paragrafo dedicato ai parametri di progetto che fornirà un idea su come
progettare una WSN a seconda dell’ambito di utilizzo.
AMBITO AMBIENTALE
Possiamo pensare ad un impiego delle WSN per rilevare o monitorare diverse situazioni
ambientali come: incendi forestali, stato degli oceani, condizioni in cui crescono le colture
o gli allevamenti, livelli d'inquinamento di un territorio o di una metropoli etc.
27
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
AMBITO SANITARIO
In campo sanitario le reti di sensori possono essere impiegate per realizzare interfacce per
disabili, tracking e monitoraggio di pazienti e dottori all'interno di un ospedale e
soprattutto monitoraggio a distanza di dati fisiologici umani. Ad esempio quest’ultimo tipo
di applicazione viene utilizzata dalle agenzie spaziali per monitorare le condizioni fisiche
degli astronauti.
AMBITO SOCIALE E SPORTIVO
L'utilizzo di reti di sensori potrebbe aiutare la società a eliminare tutte quelle barriere che
impediscono ancora oggi a portatori di handicap di poter fruire dei servizi messi a
disposizione di ogni cittadino. Si potrebbe pensare a mezzi di locomozione auto
direzionabili, a sistemi di localizzazione che permettano a utenti non vedenti di muoversi
in sicurezza e raggiungere le proprie destinazioni. Lo stesso sistema di localizzazione e
guida potrebbe risultare utile per indirizzare visitatori all'interno di grandi stabilimenti. Si
può pensare inoltre, sempre grazie ad un sistema di localizzazione, guide turistiche
automatizzate che a seconda del luogo in cui si trova il turista, danno le relative
informazioni. Si potrebbe utilizzare una rete di sensori atti alla sorveglianza di spazi ed
edifici per prevenire crimini come furti e rapine. Ultimamente si utilizzano reti di sensori
anche in ambito sportivo, ad esempio, nel tennis vengono utilizzate come supporto al
sistema denominato Hawk’s eye, questo sistema unisce i dati provenienti da un insieme di
telecamere su campo con i dati rilevati dai sensori, creando un sistema di localizzazione
che consente ai giocatori di verificare se effettivamente la pallina è rimbalzata dentro o
fuori il campo. Si deve tener presente però che queste sono tecnologie sono utilizzabili
solo in particolari ambiti in quanto richiedono costi per alcuni versi insostenibili, data la
complessità e la precisione che questi sistemi devono avere.
SPAZI INTELLIGENTI
Un ambiente in grado di riconoscere l'utente presente al suo interno può predisporre tutta
una serie di servizi personalizzati differenti a seconda di chi è l'ospite. Su questo concetto
28
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
è basato l'home automation o del museo interattivo.
In figura 1.7 è riportato lo spazio relativo agli ambiti applicativi delle WSN. Come si può
facilmente comprendere, sicuramente la versatilità dei sensori rappresenta un pregio in
quanto questi si prestano a svariate applicazioni, ma d'altro canto questo comporta delle
difficoltà nella progettazione sia hardware che software, in quanto l’eventuale
standardizzazione della piattaforma non è cosa banale dato che i requisiti richiesti sono
fortemente legati allo specifico utilizzo. Nel prossimo paragrafo si cercheranno di
specificare quali possono essere i parametri di progetto per tipologia di applicazione
Figura 1.7 – Spazio applicazioni WSN
1.4 Progettazione di una WSN
Nel progettare una WSN bisogna porre particolare attenzione a due aspetti fondamentali:
la progettazione della struttura e dei protocolli di comunicazione, in quanto bisogna gestire
al meglio le limitate ed eterogenee risorse di un sensore. Risulta sempre molto difficile
riuscire a fornire degli standard di progetto per una WSN in quanto queste vengono quasi
sempre progettate, sviluppate e realizzate in maniera molto diversa dipendente dallo
29
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
specifico ambito applicativo. Si opera in questo modo proprio perché i contesti di utilizzo
sono veramente svariati e richiedono particolari ottimizzazioni. Proprio la possibilità di
ottimizzare la rete di sensori si paga in termini di complessità di progettazione e tempi di
sviluppo per una specifica applicazione. Di seguito sono riportati i principali aspetti da
considerare quando si va a progettare una rete di sensori.
COSTO
Affinché sia effettivamente possibile l’impiego di una rete si sensori per un’applicazione
reale, c’è bisogno che questa soluzione sia conveniente rispetto a soluzioni alternative.
Attualmente i costi per ogni nodo si aggirano intorno agli 80 dollari a nodo, a questo
vanno aggiunti costi relativi ai moduli come alimentaori, attuatori, sensor board, ed altri
moduli particolari come ad esempio il GPS (Global Positioning System). Inoltre bisogna
prevedere costi d’installazione e manutenzione della rete.
CONNETTIVITA’
Di solito si parla di rete connessa quando tutti i nodi, di una rete o di una sottorete, sono
in grado di comunicare con tutti gli altri appartenenti alla stessa rete o sottorete. In una rete
di sensori non è detto che ciò accada in quanto molto spesso i nodi sono in lunghi periodi
d’inattività, per risparmiare energia. Questa sorta di connettività ad intermittenza deve
essere opportunamente considerata nella progettazione del protocollo di comunicazione e
nell’inoltro delle informazioni.
HARDWARE
La limitata capacità elaborativa e la limitata memoria, costituiscono un grosso limite alla
complessità degli algoritmi di comunicazione ed applicativi (come può essere l’algoritmo
di localizzazione). Inoltre ogni sensore deve essere di dimensioni piuttosto piccole visto la
possibilità di utilizzo in ambienti più disparati. Non è banale garantire le dimensioni
ridotte di un sensore soprattutto considerato il fatto che bisogna munirlo almeno di
antenna ed alimentazione.
30
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
POSIZIONAMENTO DEI NODI
La disposizione dei nodi rappresenta un parametro di progettazione veramente cruciale,
infatti il posizionamento può influire sulle prestazioni del sistema, sulla comunicazione e
anche sulla localizzazione dei sensori (come si vedrà in seguito). Di solito negli scenari
dove è possibile pianificare il posizionamento, la rete di sensori avrà sicuramente una
gestione più efficiente. Quando invece ciò non è possibile, ad esempio quando si lanciano
sensori da un aereo e quindi avranno un posizionamento casuale, allora talvolta si
sovradimensiona la rete, e quindi diventa importante valutare quale sia il numero di
sensori da utilizzare, per garantire comunque una certa qualità del servizio.
MOBILITA’
In alcuni casi tutti i sensori della rete, o solo alcuni, possono essere parte di un dispositivo
mobile, si parla in questo caso di MANET (Mobile Ad-hoc NETwork); in genere le WSN
sono caratterizzate da un basso grado di mobilità. E’ opportuno specificare che sia la
velocità di spostamento, sia il grado di mobilità influiscono sulla progettazione dei
protocolli.
SCALABILITA’
Il numero di nodi è estremamente variabile: da qualche decina a diverse migliaia. Quindi
tutte le soluzione adottate devono essere scalabili considerando questo intervallo.
ELABORAZIONE IN TEMPO REALE
Alcune applicazioni come il tracking o il puntamento di oggetti richiedono
un’elaborazione in tempo reale. La rapidità di processazione dei dati e la capacità di
sincronizzazione dei nodi per l’invio e la ricezione delle informazioni rappresentano in
quest’ambito, fattori critici.
SICUREZZA
31
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Una WSN può essere soggetta a molteplici tipi di attacco alla sicurezza. Oltre ai problemi
d’intercettazione e d’interferenza, che affliggono le reti radio, le WSN sono soggette a
forme d’intrusione come il tempering che nell’introduzione nella rete di sensori estranei
che la rete potrebbe accettare come propri, consentendo l’alterazione o l’intercettazione
dei messaggi scambiati all’interno della rete.
CONSUMO ENERGETICO
Lo scenario tipico di una WSN, non permette solitamente, di allacciare i nodi ad una rete
di distribuzione elettrica. Visto che il cablaggio ad hoc comporterebbe talvolta un
insostenibile aumento di costi, garantire ai nodi un tempo di vita elevato, è una priorità che
può giustificare la riduzione delle prestazioni. Non va dimenticato inoltre, che le
operazioni di sostituzione delle sorgenti di alimentazione, se possibile, in genere è molto
costosa sia in termini economici sia in termini di tempo. Ecco perché la massima
efficienza energetica di un’applicazione risulta essere la prerogativa principale in una rete
di sensori.
Considerati tutti questi aspetti nel paragrafo successivo, oltre a definire il particolare
ambito di utilizzo in esame, si definiranno anche quali possono essere i parametri di
progetto delle reti di sensori calate in tale ambito.
1.5 Ambito di utilizzo in esame: reti di sensori volte al monitoraggio
ambientale
Occupiamoci ora di un particolare contesto di utilizzo delle reti di sensori senza filo.
Innanzitutto definiamo il progetto a cui si è partecipato ed il suo scopo. Il progetto
REMOAM
(REti di sensori per il MOnitoraggio dei rischi AMbientali) si pone la
prerogativa di monitorare i rischi ambientali e strutture civili tramite reti di sensori senza
filo. Anche se il progetto si focalizza in modo particolare rischi ambientali derivanti dai
fenomeni franosi, ampiamente diffusi sul territorio regionale e nazionale, l’obiettivo è
quello di concepire una soluzione sufficientemente generale e tale da essere applicata ad
32
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
ambiti diversi.
Si capisce fin da subito che per venire incontro alle esigenze del progetto, si deve
progettare una WSN che non solo rispetti i principali parametri di progetto visti in
precedenza (come ad esempio consumo energetico ridotto, scalabilità, costi contenuti etc.)
ma deve essere abbastanza eterogenea per permettere l’implementazione di diverse
funzionalità. Un servizio fondamentale da cui l’applicazione, nell’ambito descritto, non
può assolutamente prescindere, è senza dubbio il servizio di localizzazione. Infatti per
rilevare gli spostamenti del terreno che possono preavvisare un fenomeno di tipo franoso,
si può pensare di utilizzare un rete di sensori i cui nodi siano in grado, periodicamente, di
autolocalizzarsi; in modo da effettuare un monitoraggio che potrebbe consentire la
previsione di una frana. Si capisce, quindi, che avere la possibilità di dotare i nodi dell’
”intelligenza” necessaria a permettere l’autolocalizzazione, significherebbe la fornitura di
un servizio indispensabile per questo tipo di applicazioni. Una volta fornito il servizio di
localizzazione, bisogna capire quali possono esser le azioni che si devono intraprendere in
seguito alle rilevazioni eseguite. Sicuramente dopo che i nodi effettuano tali rilevazioni,
provvederanno ad inoltrarli al loro punto d’accesso (il nodo sink) in modo da destinarli
verso il mondo reale. Questo forwarding delle informazioni è reso possibile grazie ai
protocolli prima considerati ed alle caratteristiche tipiche di una WSN tra le quali
ricordiamo, l’implementazione del multihop. Dotare i nodi di un servizio di localizzazione
è indispensabile ma se si vuole rendere la rete di sensori abbastanza generica affinché
possa essere utilizzata in altri contesti ambientali, si deve implementare un’applicazione
che permetta la rilevazione e allo stesso tempo, l’inoltro delle informazioni rilevate verso
postazioni dedicate alla raccolta e allo studio di esse. In definitiva, come verrà mostrato
più in dettaglio nel capitolo 5, si considera che l’applicazione da sviluppare e che verrà poi
installata su ciascun nodo della WSN, sarà composta da due parti semanticamente distinte:
Un algoritmo che consente di fornire il servizio di localizzazione
Un programma che presenta funzionalità in grado di effettuare rilevazioni
inerenti l’ambiente circostante (luminosità, temperatura, pressione etc.) ed
inviarle nel mondo reale.
33
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Prima di passare ai parametri di progetto, si vuole precisare che il sistema di
localizzazione progettato ed implementato nei capitoli successivi, è basato nel piano e non
nello spazio, ovvero si prenderanno in considerazione solo due coordinate cartesiane
latitudine e longitudine (X ;Y) in quanto si suppone di rilevare la terza coordinata spaziale
mediante l’utilizzo di un altimetro.
1.5.1 Progettazione
Risulta chiaro, come si è detto più volte, che i parametri di progetto non sono tutti di
uguale importanza e soprattutto la loro priorità varia a seconda del particolare ambito di
utilizzo. Ad esempio in un’applicazione militare la sicurezza di una WSN ricopre un ruolo
imprescindibile, in un’applicazione di tracking o di motion capture la rilevanza maggiore è
data dall’elaborazione in tempo reale. In altri esempi come l’utilizzo in contesti sportivi la
massima accuratezza nelle rilevazioni rappresenta il principale obiettivo facendo passare
in secondo piano l’aspetto dei costi e dei consumi energetici. Non avendo purtroppo
sponsorizzazioni paragonabili a quelle esistenti in ambito sportivo, nella progettazione
della rete di sensori per il monitoraggio ambientale, gli aspetti relativi ai costi ed al
risparmio energetico sono quelli predominanti. Si potrebbe infatti pensare di costruire un
WSN formata da sensori tutti muniti di sistema GPS in modo da fornire automaticamente
un servizio di localizzazione senza la necessità d’implementare algoritmi ad hoc. Questa
soluzione è da scartare a priori sia per i costi da sostenere, che sarebbero sempre più
proibitivi al crescere dei nodi, sia per il dispendio energetico dovuto al modulo GPS . Nei
capitoli successivi si vedrà poi che un giusto compromesso potrebbe essere quello di
utilizzare solo alcuni nodi dotati di sistema GPS (che verranno chiamati nodi beacon) per
tutti gli altri sviluppare un algoritmo che, a partire dai nodi beacon, rileveranno la propria
posizione. Un altro aspetto molto importante da considerare per migliorare il servizio di
localizzazione fornito in quest’ambito, è quello relativo al posizionamento dei nodi
all’interno di una WSN, quest’aspetto sarà chiarito nei prossimi capitoli.
34
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
1.5.2 Considerazioni sulle soluzioni hardware da utilizzare
Per realizzare una WSN che meglio si adatti a svolgere i compiti relativi alla particolare
applicazione da implementare, vi è la possibilità di utilizzare piattaforme hardware diverse
che hanno diverse caratteristiche.
Molti sono gli studi e li sforzi che sono stati fatti e che ancora si faranno, da aziende
manifatturiere del settore ICT per cercare di venire incontro a tutte le esigenze dei
particolari ambiti che sicuramente in futuro sono destinati a crescere. Si farà una breve
carrellata della ricerca, dello sviluppo e delle varie piattaforme hardware fatto in questi
anni.Una delle innovazioni più interessanti degli ultimi anni, è rappresentata da ZigBee,
una soluzione completa per reti di sensori che si basa sullo standard IEEE 802.15.4 per
quanto concerne la comunicazione radio e la gestione dell’ accesso al mezzo. ZigBee è
indicato per realizzare una WSN in modo automatico e distribuito, senza la necessità di
sviluppare software ad hoc atto alla gestione ed al controllo. Lo svantaggio principale è la
difficoltà della gestione a basso livello della piattaforma (essendo questa una soluzione a
“scatola chiusa”) qualora si volesse per effettuare ottimizzazioni. Per realizzare
applicazioni che s’inseriranno poi in un particolare contesto d’utilizzo, si deve ricorrere a
piattaforme più flessibili dal punto di vista della gestione dei nodi e dello stack
protocollare. Consideriamo quindi alcune piattaforme che consentono questo: la
piattaforma EyesIFXv2 prodotta da Infineon che fa parte del progetto EYES (EnergY
Efficient Sensor networks), dall’acronimo s’intuisce che questo tipo di piattaforma tende
ad ottimizzare i consumi energetici. In quest’ambito si farà riferimento alla piattaforma
MICA prodotta da Crossbow utlizzata in diversi contesti sperimentali.
35
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Capitolo 2: Sistemi di localizzazione
Si è visto che il requisito fondamentale dell’applicazione relativa al progetto REMOAM è
dotare la rete di sensori, che si calerà in quest’ambito, di un servizio di localizzazione. In
questo capitolo si elencheranno quali sono le caratteristiche principali si un sistema di
localizzazione, si presenteranno le tipologie ed esempi di algoritmi di localizzazione ed
infine si illustrerà nel dettaglio il funzionamento dell’algoritmo ROCRSSI e si motiverà
tale scelta.
2.1 Caratteristiche principali
Le caratteristiche tipiche di un sistema di localizzazione per WSN, dalle quali non può
prescindere il sistema presentato, devono essere la capacità di autorganizzazione,
robustezza a possibili guasti di singoli nodi con conseguenti perdite di connettività,
talvolta creazione di protocolli aggiuntivi per garantire il corretto funzionamento
dell’algoritmo ed errori quanto più possibile piccoli sulle grandezze misurate. Ovviamente
tutto questo deve essere realizzato tenendo sempre in considerazione i problemi energetici
di cui si è ampiamente trattato.
Si possono suddividere i sistemi di localizzazione in due grandi famiglie:
sistemi centralizzati: sono quei sistemi che prevedono l’utilizzo di un super
nodo, dotato di potenza di calcolo o risorse energetiche maggiori, che raccoglie
informazioni da tutta la rete ed esegue elaborazioni per stimare la posizione di
ogni altro nodo.
sistemi distribuiti: si tratta di sistemi in cui ogni nodo colleziona le informazioni
di cui necessita e calcola la propria posizione. Dopodichè può inoltrare la sua
36
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
posizione appena calcolata , ai sui vicini oppure all’interno di un messaggio
destinato al nodo catalizzatore (nodo sync)
Gli algoritmi centralizzati possono raggiungere precisioni maggiori, comportano però costi
notevoli, in termini di occupazione del canale, di costi computazionali ed energetici.
Questi svantaggi diventano sempre più incidenti all’aumentare delle dimensioni della rete
in termini spaziali e di densità dei nodi; ecco perché si considera di gran lunga più
vantaggiosa la strategia distribuita. Infatti questa permette di velocizzare il processo (in
quanto ogni nodo calcola la propria posizione in maniera concorrente), le informazioni
scambiate inferiori (in quanto non si devono inviare informazioni al super nodo ed
aspettare la risposta di quest’ultimo ad elaborazione terminata) con conseguente risparmio
energetico.
Un’ulteriore classificazione degli algoritmi di localizzazione viene fatta in base al metodo
con cui i nodi valutano le distanze o le direzioni dalla sorgente del pacchetto radio. Infatti
secondo questa classificazione possiamo distinguere due tipologie di algoritmi:
Algoritmi range based: utilizzano le stime di distanza punto-punto o di angoli
assoluti per la determinazione delle posizioni. Risulta evidente che l'accuratezza
di queste misure è strettamente dipendente dal mezzo trasmissivo utilizzato,
dall'ambiente circostante (se questo è affetto da molte interferenze che possono
altrare le informazioni) e dall'hardware a disposizione (in particolare riferimento
alla sua capacita e di memorizzazione).
Algoritmi range free: questi al contrario non effettuano una stima delle distanze
assolute ma si basano su valutazioni relative; usano cioè delle informazioni per
ricavare una relazione d’ordine, utile al calcolo della posizione.
Un'ulteriore distinzione può essere fatta tenendo presente il tipo di localizzazione richiesto
per la particolare applicazione:
localizzazione simbolica: si parla di posizionamento simbolico quando cioè si
associa un simbolo alla posizione; per esempio si può voler conoscere la
37
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
posizione di una persona all'interno di un edificio non tanto in relazione alle sue
coordinate geografiche, ma piuttosto alla stanza in cui si trova per poterla
rintracciare
localizzazione fisica: si parla di posizionamento fisico quando invece si vuol
conoscere dove è ubicato un nodo in termini di coordinate nello spazio; è inoltre
possibile distinguere una localizzazione assoluta da una relativa; un nodo può
infatti determinare la propria posizione rispetto altri nodi in maniera relativa, se
inoltre è nota la posizione assoluta dei nodi presi a riferimento è possibile
riportare la localizzazione relativa in coordinate assolute.
Si analizzeranno quali sono, in generale, i criteri utilizzati nella scelta degli algoritmi di
localizzazione:
posizioni stimate attendibili: cioè che l’errore (massimo, medio o la sua
deviazione standard) sia accettabile relativamente al contesto applicativo
semplicità dell’algoritmo: più l’algoritmo è semplice, minore sarà la complessità
computazionale, maggiore sarà il risparmio energetico; inoltre sarà più efficiente
qualora l’applicazione necessiti di una localizzazione in tempo reale
dipendenza tra accuratezza ed hardware: quanto l’accuratezza dipende dalla
piattaforma usata per la realizzazione dei nodi della rete. Ovviamente meno
dipendenza c’è, più l’algoritmo può essere considerato generico ed utilizzato su
piattaforme hardware diverse
A proposito di quest’ultimo punto si precisa che, architetture più sofisticate possono
ridurre notevolmente gli errori di localizzazione ma solitamente ciò avviene a scapito,
oltre che di un aumento del consumo energetico, anche di un incremento del costo dei nodi
stessi, due aspetti fondamentali. Quindi bisogna vedere se è effettivamente conveniente,
considerando i fondi e le risorse energetiche relativamente all’applicazione da
implementare, utilizzare architetture hardware più complesse.
Inoltre c’è un altro aspetto da considerare. Molti algoritmi di localizzazione (compreso
38
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
quello sviluppato in quest’ambito) assumono che alcuni nodi chiamati beacon o anchor
node conoscano già con certezza la loro posizione, questo può avvenire in seguito ad
un'assegnazione a priori delle coordinate o utilizzando un sistema di localizzazione più
preciso di quello riservato agli altri nodi detti unknown node (nodi sconosciuti o
incogniti), ad esempio il GPS. Come già detto posizionare manualmente molti nodi non è
sempre possibile e dotarli di GPS o sistemi analoghi è in genere costoso dal punto di vista
economico ed energetico. Ne consegue che un criterio sensato per la scelta dell'algoritmo
di localizzazione è l'utilizzare il sistema che per una prefissata accuratezza minimizza il
numero di beacon impiegati. Una volta determinato il numero di beacon è importante
considerare se è necessario che siano situati in posizioni specifiche rispetto la topologia
della rete o possano essere collocati dove è più facile posizionarli.
2.2 Procedura generica di localizzazione
In molti algoritmi di posizionamento è possibile distinguere almeno due fasi distinte:
ranging e positioning. Vi è poi la possibilità di utilizzare un’ulteriore fase dopo la stima
della posizione che consiste nel refinement, cioè il raffinamento della posizione tramite la
continua iterazione della fase precedente (il positioning) oppure tramite la riduzione di una
funzione obiettivo.
Nei prossimi sottoparagrafi si descriveranno le varie fasi di cui un sistema di
localizzazione si compone.
2.2.1 Ranging
Esistono diverse tecniche per misurare le distanze fra i nodi o gli angoli tra le direzioni di
seguito vengono riportati i metodi principali per approfondimenti si fa riferimento a [23]:
Time of arrival (ToA):
Ipotizzando che la velocità d’invio del segnale all’interno del mezzo trasmissivo sia nota,
il nodo ricevitore può calcolare la distanza dal trasmettitore attraverso il tempo di
propagazione del segnale inviato. Così è possibile ottenere una buona precisione nella
39
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
stima della distanza, se però i nodi dispongono di clock perfettamente sincronizzati e sono
in grado trasmettere segnali audio, o ultrasuoni, il cui tempo di propagazione è
sufficientemente lungo da essere misurato anche da hardware non troppo sofisticato. Il
fatto di avere sensori perfettamente sincronizzati è un grossissimo limite in quanto questo
richiede un overhead per effettuare la sincronizzazione. Inoltre molte piattaforme
hardware, specie quelle facilmente reperibili in commercio quindi non troppo sofisticate,
tendono a perdere la sincronizzazione in intervalli di tempo relativamente brevi. Ciò
comporta che la sincronizzazione deve essere fatta periodicamente e spesso questo è un
prezzo troppo alto da pagare.
Time Difference of Arrival (TDoA):
In questa tecnica tutti i nodi, perfettamente sincronizzati, effettuano ad un dato istante una
trasmissione, diretta ad un unico ricevitore. Questo, valutando l'ordine di arrivo dei
segnali, stabilisce una relazione d'ordine tra le distanze dei trasmettitori. Anche qui
ritroviamo il grosso limite della sincronizzazione inoltre un nodo deve poter gestire la
ricezione multipla di messaggi.
Angle of Arrival (AoA):
Questo tecnica si può applicare qualora il nodo sia dotato di un sistema multiantenna; in
questo caso, sfruttando il concetto di diversità, determinare l'angolo fra un nodo incognito
e i beacon (almeno tre).
Received Signal Strength Indicator (RSSI):
Grazie a questa tecnica, se si conosce la potenza di trasmissione, è possibile ricavare una
relazione tra la potenza in ricezione e la distanza attraverso il path loss che viene tabulato
empiricamente o modellato da un'equazione. Utilizzando questo metodo si va incontro ad
una serie di errori quali il fading, scattering e shadowing, però utilizzando questa tecnica
non c’è bisogno di hardware aggiuntivo.
40
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Carrier phase:
E’ la tecnica su cui si basa il sistema GPS e consiste nel comparare il tempo e la frequenza
dei segnali in arrivo scanditi da un clock remoto. Per realizzare questo sistema è
necessario disporre di un circuito che si mantenga continuamente agganciato alla portante.
Bit Error Rate:
Una tecnica approssimata si basa sull’idea che all'aumentare della distanza fra due nodi i
messaggi scambiati subiscono un degrado maggiore e quindi aumenta la probabilità di
ricevere un bit errato. E’ possibile valutare la distanza fra i nodi misurando il BER (Bit
Error Rate). Questa è una tecnica molto poco accurata ed approssimata, viene di solito
utilizzata solo come supporto ad un’altra tecnica di ranging più efficace.
2.2.2 Positioning
Questa rappresenta la seconda fase della procedura di localizzazione. Nel positioning il
nodo, basandosi sulle informazioni ottenute con il ranging, cerca di stimare la propria
posizione in un sistema di coordinate relativo o assoluto. Di seguito vengono riportate
svariate tecniche proposte per conseguire quest’obiettivo (con i relativi riferimenti
bibliografici in []):
GPS (Global Position System):
Costituisce la soluzione più semplice ed immediata al problema della localizzazione ma
sfortunatamente non è applicabile a tutti gli scenari possibili a causa del costo, del
consumo energetico e alla inefficienza negli ambiente chiusi.
[14] Lateration:
E’ una delle tecniche più semplici da implementare, consiste nel posizionamento
intersecando circonferenze (almeno tre), centrate in un punto noto (il beacon) e aventi per
raggio la distanza stimata da questo. Oltre ai vantaggi come la semplicità e la generalità
d’impiego, il limite principale consiste nella altissima sensibilità agli errori di misura.
41
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
[15] Active Badge e Active Bat:
Questa tecnica è utilizzata in ambiente indoor e prevede l’installazione di un dispositivo
ad infrarossi (chiamato Active Badge) sui singoli nodi. La tecnica consiste nel tracciare la
posizione di oggetti tramite il dispositivo ad infrarossi, e memorizzare tale informazione in
un database centralizzato. Ad intervalli di tempo programmabili, il badge trasmette il suo
identificativo (ID) ad un ricevitore fisso: un sistema centralizzato calcola la nuova
posizione attraverso un metodo di prossimità cellulare. Il principale svantaggio sta nel
costo elevato e nella necessità d’infrastrutture per realizzare il sistema, inoltre i sistemi ad
infrarossi soffrono dei disturbi causati da fonti luminose e di calore. Esiste un sistema
simile nell’idea ma basato su nodi equipaggiati con ricetrasmettitore a radiofrequenza e
con un trasmettitore a ultrasuoni, questa tecnica è l’ Active Bat . I grossi limiti di queste
tecniche possono essere riassunti dai limiti esistenti nei sistemi centralizzati.
[16] Cricket:
E’ un altro particolare sistema di localizzazione per fornire una localizzazione simbolica
utilizzato in ambienti indoor in cui un'insieme di beacon sparsi nell'edificio inviano
periodicamente informazioni usate dai nodi per stabilire la loro posizione. Non c'è
coordinazione tra i beacon ma la procedura assume che essi siano in numero sufficiente e
ben distribuiti e che trasmettano in istanti casuali per evitare collisioni o interferenze
reciproche. Analogamente all’ Active Bat il ranging adottato si basa su TDoA di segnali
RF e ultrasuoni.
[14],[17] SpotOn:
E’ basato sul ranging RSSI usato per valutare le distanze da utilizzare nella tecnica
Lateration, unitamente ad un’ una infrastruttura fissa di supporto.
[19] Bulus et al:
Ogni nodo riceve dei messaggi da un insieme di beacon contenenti le coordinate dei
beacon stessi e valuta la sua posizione come la media delle coordinate degli anchor node
42
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
ascoltati, ottenendo un'accuratezza pari a circa il 30% della distanza media fra i beacon.
[18] Doherty et al:
Questa tecnica prende il nome dai propri autori che presentano la formulazione del
problema della localizzazione in termini di programmazione convessa e propongono uno
strumento di risoluzione. Il metodo si basa sul fato che la localizzazione venga effettuata
successivamente all'invio verso l'elaboratore delle informazioni da parte di tutti i nodi. In
questo modo si trasferisce gran parte dell’intelligenza sull’elaboratore che ha potenza di
calcolo maggiori ed riserva energetica praticamente illimitata, purtroppo però
all’aumentare dei nodi, il sistema comporta difficoltà nella scalabilità.
[24] AHLoS:
E’ un esempio di tecnica iterativa, che calcola la posizione dei nodi prefiggendosi
l’obiettvo di minimizzare l'errore quadratico fra le distanze misurate e le distanze stimate.
La stima della distanza fra il nodo e i beacon viene fatta attraverso la soluzione di un
sistema linearizzato, una volta che il nodo si è localizzato può fungere da beacon per altri
nodi che non sono in copertura da un numero di beacon sufficienti (collaborative
multilateration).
[25] Hop-TERRAIN:
Possiamo distinguere due fasi: nella prima i beacon propagano informazioni in tutta la rete
che i nodi incogniti utilizzano per una stima iniziale delle posizioni; nella seconda fase i
nodi incogniti effettuano un refinemant relativamente alla propria posizione stimata
attraverso un coefficiente di accuratezza associato alla posizione calcolata nella fase
precedente. Una delle principali caratteristiche di quest’approccio, consiste nel fatto che
nonostante il tipo di ranging utilizzato influisce su costo, accuratezza e consumo
energetico, questo tipo di soluzione non è strettamente dipendente da esso.
43
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
[26] ,[27] Minimun Maximum:
Detto anche Bounding Box, rappresenta uno dei metodi di positioning più semplici, infatti
viene utilizzato in alcuni sistemi di localizzazione per ottenere delle stime iniziali rapide
ma non molto accurate. L'idea di base è assegnare ai nodi la posizione del baricentro
dell'intersezione dei quadrati costruiti attorno a ciascun beacon, aventi il lato uguale al
doppio della distanza stimata fra il nodo incognito e il beacon in questione. Questo metodo
è robusto agli errori di misura e facilmente scalabile. La semplicità di calcolo lo rende
interessante per le situazioni di mobilità in cui la posizione deve essere calcolata
rapidamente.
[28] Cooperative Location Sensing:
Questo metodo di localizzazione è molto simile al lateration, ma invece di cercare il
punto d'intersezione di circonferenze, cerca la regione d'intersezione di corone circolari di
larghezza la deviazione standard sull'errore di misura. Il procedimento di assegnazione
delle coordinate è simile a quello dell’algoritmo APIT presentato più avanti.
2.3 Esempi di procedure di localizzazione
Nel paragrafo precedente si sono elencate alcune delle tecniche esistenti relative al
ranging ed al positioning. Ora si analizzeranno un po’ più in dettaglio due meccanismi di
localizzazione uno range-free l’altro range-based. In particolare rispettivamente APIT
(Approximate Point In Triangle) discusso in particolare in [21] e CBaSA (Corse and fine Grained Based on Single Anchor) trattato in [20]. Si è scelto di analizzare un algoritmo
per ogni tipologia non solo per evidenziare le principali differenze tra gli algoritmi rangefree e range-based , ma anche per valutare i vantaggi e svantaggi relativi a queste
tipologie nel contesto preso in considerazione. Infine si presenteranno le motivazioni che
hanno portato poi all’utilizzo del ROCRSSI.
2.3.1
CBaSA (Coarse-grained Based on Single Anchor)
In generale
nelle tecnice di localizzazione che utilizzano la laterazione, si richiede
44
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
l’utilizzo di almeno k+1 ancore (anchors node)
per calcolare la posizione dei nodi
all’interno della rete in un piano k-dimensionale. Quindi per calcolare la posizione in
termini di coordinate cartesiane (x;y) si necessita di almeno tre anchor node affinché i
nodi possano localizzarsi. Questi algoritmi CBaSA (Coarse-grained) e FBaSA (Finegrained) (si precisa che il funzionamento di entrambi è analogo; cambia la granularità), si
prefiggono lo scopo di proporre una tecnica che richiede soltanto una singola ancora per
determinare la posizione dei nodi in un piano bidimensionale. Analizziamo il
funzionamento del CBaSA. Si suppone che gli anchor node siano dotati di antenne
direzionali lungo il suo perimetro, ed inoltre si suppone siano dotati anche di un modulo
GPS che ne consente la localizzazione. In figura 2.1 si può notare come ogni antenna di
ciascun anchor node ricopre una porzione di regione, ovviamente il numero di antenne
direzionali necessarie a ricoprire l’intera regione (360°), dipende dall’ampiezza
dell’angolo di ciascun antenna.
Figura 2.1 – Regione ricoperta dalle antenne di ciascun anchor node
Inizialmente i nodi sono in ascolto sul canale di ricezione, tutte le antenne direzionali
45
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
trasmettono un segnale di sincronizzazione a tutti i sensori all’interno dell’area coperta
(questa operazione è equivalente a trasmettere un segnale in broadcast da un’antenna
omni-direzionale) . Una volta ricevuto il segnale di sincronizzazione, i sensori fanno
partire un timer. A questo punto gli anchor node trasmettono segnali (che chiameremo
normali) in piccoli intervalli di tempo, uno dopo l’altro, in modo da formare un sequenza
ciclica. Ciascun nodo riceve questo segnale e memorizza l’intervallo di tempo intercorso
tra la ricezione di quest’ultimo e la ricezione del messaggio di sincronizzazione (cioè il
valore corrente del timer). Quest’intervallo di tempo verrò indicato con T1 . Dopodichè i
sensori resettano il timer ed aspettano un altro segnale periodico dall’anchor node, quando
lo riceveranno memorizzeranno il valore del timer che chiameremo T2 . Ricapitolando:
T1 indica l’intervallo di tempo che intercorre tra la ricezione del segnale di
sincronizzazione e la ricezione del segnale normale
T2 indica il tempo necessario a completare un ciclo di 360° ( 2 )
Inoltre i nodi calcolano la distanza dall’anchor node tramite la tecnica di ranging RSSI,
basandosi quindi sulla potenza del segnale normale ricevuto in precedenza. Quindi
conoscendo la distanza del nodo incognito dall’anchor node e siccome si è supposto di
conoscere le coordinate di quest ultimo, in quanto dotato di GPS, possiamo ricavare le
coordinate nel modo illustrato in figura 2.2
Figura 2.2 – Calcolo coordinate del sensore attraverso le coordinate dell’anchor node
46
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Tramite le seguenti formule:
X
Xa
dsen(
)
Y
Ya
d cos(
)
dove d è la distanza, mentre
2 * T1
T2
Riepiloghiamo i vari step dell’algoritmo di localizzazione Coarse-grained :
I sensori aspettano il segnale di sincronizzazione
Gli anchor node inviano il segnale di sincronizzazione
I sensori dopo la ricezione del segnale di sinc. fanno partire un timer
Attraverso l’antenna direzionale, gli anchor node inviano segnali verso tutti i
sensori, uno dopo l’altro in ordine ciclico. Questi messaggi contengono le
coordinate dell’anchor node.
I sensori ricevono il segnale, calcolano la distanza tramite l’RSSI (quindi tramite
la potenza del segnale appena ricavuto) e memorizzano il valore di T1
Dopo un ciclo completo, i sensori memorizzano il valore di T2
I sensori calcolano le proprie posizioni tramite le equazioni viste prima
Il massimo errore che si può commettere con questo tipo di tecnica è:
Em
d cos( / 2) d cos( / 2)
2d cos( / 2)
Come si capisce anche dalla figura:
Figura 2.3 – Errore massimo nel CBaSA
47
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Una possibile miglioria consiste nel considerare il nodo sempre al centro del settore, così
facendo l’errore si riduce a:
Em
d cos( / 2)
I principali limiti di quest'algoritmo sono rappresentati dal fatto che è necessaria una
sincronizzazione preventiva dei nodi che comporta traffico aggiuntivo nella rete, senza
considerare che in questo modo aumenta la complessità dell'algoritmo. Inoltre molti
dispositivi in commercio hanno bisogno di essere risincronizzati periodicamente e queste
operazioni aggiuntive potrebbero influire in maniera consistente sul consumo energetico.
Si potrebbe pensare di utilizzare nodi che non perdano facilmente la sincronizzazione,
quindi utilizzare hardware più raffinato, ma questo è in contrapposizione con uno degli
aspetti fondamentali ossia ridurre i costi d'implementazione di una rete di sensori. Un altro
limite è rappresentato dal numero di antenne direzionali che un anchor node deve avere;
infatti l'accuratezza dell'algoritmo è determinato dal numero di queste, in quanto più
antenne si usano maggiore sarà l'area coperta, ma ovviamente maggiore sarà il costo per
ogni anchor node.
2.3.2
APIT (Approximated Point In Triangulation)
E’ una delle tecniche range-free acronimo di Approximated Point In Triangulation. In
questa tecnica la rete si compone di due entità: i beacon, che fungono da anchor node ed i
nodi incogniti.
Figura 2.4 – Esempio di sovrapposizione di triangoli
I beacon possono essere equipaggiati con moduli GPS oppure possono essere fissati in
modo che le loro coordinate siano note a priori. Quest’algoritmo si basa sulla
48
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
sovrapposizione di triangoli, che permettono l’individuazione dell’area in cui si trova il
nodo incognito. Un esempio è riportato in figura 2.4. Per effettuare la localizzazione di un
nodo, si scelgono terne di beacon le cui posizioni rappresentano i vertici di un triangolo,
fra tutti quelli nel raggio di copertura di ogni nodo e si valuta se il nodo incognito
appartiene o meno alla regione triangolare identificata. Un esempio di questa valutazione è
riportato in figura 2.5
Figura 2.5 – Valutazione della posizione del nodo incognito
Con riferimento alla precedente figura, il nodo incognito M, tramite la comparazione dei
valori di RSSI ricevuti da ciascun beacon, riesce a capire se si trova all’interno del
triangolo che vede come vertici i beacon A,B e C (1° caso) oppure all’esterno (2° caso).
L’intera area in cui si estende la rete, è rappresentata da un griglia ed ogni volta che il
nodo si localizza all’interno di un triangolo, vi è l’incremento del contatore relativo agli
elementi della griglia che rappresentano i punti interni al triangolo. Dopo aver considerato
tutte le combinazioni di beacon, si assegna al nodo la posizione del baricentro dei punti
aventi il contatore più grande. Il principale svantaggio di questo tipo di approccio consiste
nelle ripetute scansioni della griglia per incrementare il contatore: infatti si consumano sia
risorse dal punto di vista energetico e di calcolo, nonché risorse di relative alla memoria; il
consumo di risorse è destinato a crescere se aumenta il rapporto tra area considerata e
passo di scansione.
Inoltre vi è la possibilità che si presenti un problema difficile da eliminare. Supponiamo di
posizionare in maniera casuale i nodi della rete, alcuni di questi saranno i nodi beacon, che
possono essere fissati o dotati di GPS in modo da conoscere a priori le proprie coordinate,
altri saranno i nodi incogniti de dovranno posizionarsi a partire dai beacon. A questo punto
49
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
può verificarsi che un nodo incognito non rientra in nessun triangolo che ha come vertici i
beacon che il nodo riesce a sentire; quest’inconveniente si indica con il nome di “nodo
indeterminato”. Un esempio di tale evenienza è rappresentato in figura 2.6
Figura 2.6 – Problema del “nodo indeterminato”
Questo tipo di problema non è facilmente risolvibile. Una possibile soluzione potrebbe
essere quella di posizionare i beacon in maniera tale d’assicurare che i nodi incogniti
rientrino in almeno un triangolo formato dai beacon.
2.3.3
Considerazioni relative agli algoritmi ed al loro impiego
Sono stati presentati quindi due algoritmi, tra loro molto diversi, che rientrano
rispettivamente nelle categorie range based e range free. Solitamente negli algoritmi range
based ed in particolar modo l'algoritmo in questione CBaSA, viene introdotto un overhead
dovuto alla sincronizzazione dei sensori. Come già ampiamente discusso, questo overhead
è piuttosto sensibile sotto il profilo dei consumi energetici ed inoltre aumenta il traffico
nella rete; quest'ultimo è un aspetto da non sottovalutare in quanto all'aumentare dei nodi
che compongono una rete la scalabilità della sincronizzazione diventa sempre meno
fattibile. Il vantaggio principale del CBaSA non è cosa da poco in quanto utilizziamo un
solo anchor node per calcolare la posizione dei nodi incogniti. Questo comporta un
notevole risparmio in termini economici visto che c'è bisogno di un solo nodo,
50
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
relativamente all'area coperta da esso, montante il modulo GPS o fissato per in modo che
la sua posizione sia definita a priori.
Per ciò che concerne gli algoritmi range-free come APIT, bisogna considerare che
unitamente a molti pregi come la semplicità software ed hardware (considerato che non si
deve disporre hardware aggiuntivo ad eccezione di un eventuale modulo GPS) e quindi
una maggiore indipendenza dalla piattaforma, talvolta presentano problematiche di
difficile risoluzione come ad esempio il "nodo indeterminato", visto in precedenza per
APIT. Inoltre molti studi hanno dimostrato che in una rete di sensori il posizionamento dei
nodi beacon rispetto ai nodi incogniti in un sistema di localizzazione basato su tecniche
range-free, è molto più rilevante rispetto a sistemi di localizzazione range-based. Infatti
questi talvolta richiedono un numero relativamente elevato di nodi beacon ma soprattutto
richiedono che questi siano disposti in maniera ad hoc per permettere la corretta
localizzazione dei nodi incogniti ed evitare le problematiche tipiche che possono
presentarsi.
Nello specifico ambito di utilizzo preso in esame quale è il monitoraggio ambientale volto
alla previsione di fenomeni franosi, si è cercato d'immaginare quali potrebbero essere gli
algoritmi più efficienti e si scelto di intraprendere la strada delle tecniche range-free.
Svariate sono le motivazioni. Una di queste potrebbe essere facilità d'installazione sul
territorio. In quanto per l'algoritmo CBaSA si dovrebbero installare antenne direzionali per
ogni nodo beacon, inoltre è vero che questo tipo di soluzione minimizza il numero di
beacon utilizzati e di conseguenza anche i costi, ma questo non è sempre un pregio in
quanto se l'anchor node in questione si guasta per qualche motivo i nodi incogniti vicini ad
esso non sarebbero più in grado di localizzarsi. Bisogna considerare che il guasto
dell’anchor node, o di una delle sue componenti, non può essere considerato un evento
molto remoto, in quanto questo si installerà su terreni caratterizzati da fenomeni franosi,
tutt’altro che stabili. Un'altra motivazione che rappresenta uno svantaggio estendibile a
tutti gli algoritmi range-based è una maggiore complessità computazionale dovuta ai
calcoli necessari per stimare la distanza assoluta tra due punti. Infatti negli algoritmi
range-based per garantire maggiore accuratezza nella stima, è talvolta richiesto che ci
51
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
siano piattaforme hardware più sofisticate oppure si potrebbe richiedere potenza di calcolo
e memoria tali da introdurre hardware aggiuntivo.
Inoltre alcuni svantaggi legati agli algoritmi range-free in quest'ambito di utilizzo possono
essere superati. Infatti visto che l'installazione dei nodi non deve essere necessariamente
casuale o seguire uno schema particolare, si può pensare di progettare la rete di sensori
ad hoc e posizionare i beacon in modo tale da ottimizzare la localizzazione ed evitare
situazioni da cui possono scaturire problematiche descritte in precedenza. Infine si può
pensare di sovradimensionare la rete con un numero di beacon maggiore rispetto allo
stretto necessario da un lato per migliorare la stima dei nodi incogniti, dall'altro per
fronteggiare un eventuale guasto dei beacon. Si precisa che non è obbligatorio munire i
beacon di sistema GPS ma si possono semplicemente fissare.
In seguito s’illustrerà l’algoritmo ROCRSSI trattato nei riferimenti [21],[30] che
rappresenta un’evoluzione dell’algoritmo APIT [21]. Il ROCRSSI inoltre è l’algoritmo che
sta alla base del sistema di localizzazione realizzato e di cui si discuterà nei capitoli 3 e 4
2.4 L’algoritmo ROCRSSI
Alla fine del paragrafo precedente, si è motivata la scelta d’indirizzamento, relativamente
al particolare contesto d’utilizzo di monitoraggio ambientale, verso gli algoritmi range –
free.
Figura 2.7 – Grafico di confronto degli algoritmi APIT e ROCRSSI realtivo agli studi
effettuati in [21]
52
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Tra questi si scelto di progettare ed implementare una versione migliorata dell’algoritmo
ROCRSSI (Ring Overlapping Comparision based on Received Signal Strength Indicator).
Si è fatta questa scelta in quanto questo rappresenta, sotto molti punti di vista,
un’evoluzione dell’APIT come molti studi sperimentali dimostrano e come testimonia il
grafico di figura 2.7 (per i dettagli si rimanda a [8]).
Proprio la considerevole quantità di studi ed esperimenti fatta in questa direzione,
rappresenta un altro motivo della scelta. Si descriverà adesso, il funzionamento
dell’algoritmo. L’idea di base dell’algoritmo ROCRSSI è molto simile all’algoritmo APIT;
infatti questo tramite la sovrapposizione di circonferenze e corone circolare, riduce
progressivamente l’area in cui si trova il nodo incognito. L’intero meccanismo che si
trova alla base di quest’algoritmo può essere facilmente spiegato utilizzando l’illustrazione
il figura 2.8. In questa figura, S rappresenta un nodo incognito, A B e C invece
rappresentano i beacon. Si indicherà con ij la distanza tra il nodo i ed il nodo j.
Ogni nodo incognito può stabilire una relazione d’ordine basata sulle distanze tra lui ed i
suoi vicini rispetto alla distanza fra coppie di beacon, il procedimento verrà esposto in
seguito. Intanto, analizzando la figura 2.8 a) si può affermare che il nodo incognito S è in
grado di stabilire che la distanza SA è maggiore della distanza AB ma minore della
distanza AC . Basandosi su queste considerazioni, il nodo S può localizzarsi all’interno
della regione delimitata dalla corona circolare centrata in A, avente raggio interno AB e
raggio esterno AC . Facendo lo stesso ragionamento, con riferimento alla figura 2.8 b), il
nodo S stabilisce che la sua posizione è interna alla circonferenza centrata in C e di raggio
BC . Infine relativamente alla figura 2.8 c) S si localizza all’interno della corona circolare,
centrata in B avente raggio interno AB e raggio esterno BC . Per completare l’operazione
di localizzazione, dopo la sovrapposizione delle varie circonferenze e corone circolari, è
sufficiente calcolare il baricentro dell’intersezione di tutte le regioni che lo contengono, il
quale rappresenta la sua posizione stimata. In quest’algoritmo, le regioni vengono
costruite tramite il confronto tra la potenza del segnale inviato da un certo beacon ad un
nodo incognito, e quella dei segnali ricevuti dagli anchor node nel raggio di copertura del
suddetto beacon.
53
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
a)
b)
c)
Figura 2.8 – Localizzazione tramite 3 beacon con il ROCRSSI
Se si considera nuovamente la figura 2.8 a) si può illustrare il
funzionamento dell’algoritmo, si assuma che il beacon A invii un messaggio in broadcast
contenente il suo identificativo e che gli altri nodi B,C e S lo ricevano rispettivamente con
un indice di potenza RSSI AB , RSSI AC e RSSI AS . Se la seguente disuguaglianza è valida:
RSSI AB
RSSI AS
RSSI AC
54
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
allora è possibile scrivere la relazione d’ordine AC
AS
AB se si assume che la
potenza ricevuta sia inversamente proporzionale alla distanza, identificando così la corona
circolare contenente il nodo incognito. Iterando questo ragionamento, si arriva poi alla
stima della posizione con le modalità già discusse. Bisogna tener conto di un
inconveniente che talvolta può occorrere soprattutto se vi sono pochi beacon nelle
vicinanze di un nodo incognito oppure occorrono errori di ordinamento, ovvero ottenere
una regione d’intersezione disconessa così come mostrato in figura 2.9. Questa
rappresenta la situazione più sfavorevole in cui può venire a trovarsi l’algoritmo
ROCRSSI cioè può accadere che l'intersezione delle corone circolari e dei cerchi sia data
da due o più regioni separate, in questo caso è possibile che il baricentro venga a trovarsi
all'esterno di ciascuna regione e quindi il nodo si localizza in una zona in cui ha bassa
probabilità di trovarsi.
Figura 2.9 – Esempio di regione d’intersezione disconessa
In figura 2.9 è mostato come l’errore di localizzazione, nel caso di regione d’intersezione
disconnessa, sia elevato. Infatti, guardando la figura, si può notare come il nodo incognito
S si localizza calcolando il baricentro delle due porzioni di regione evidenziate in grigio
commettendo così un errore relativamente elevato. Purtroppo questo è un problema
esistente nel ROCRSSI e che comunque influenzerà anche i suoi derivati come l’algoritmo
55
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
proposto in quest’ambito: il ROCRSSI++ (descrito nel capitolo 3).
Si ricorda che il ROCRSSI non mappa la potenza misurata in una distanza punto-punto
visto che rientra nella categoria degli algoritmi range-free, il riconoscimento della regione
d’intersezione avviene tramite una procedura di scansione dell’area su cui la rete di sensori
si estende. Questa procedura prevede la suddivisione dell’area in celle ad ognuna delle
quali è associato un contatore; ogni volta che si costruisce una corona circolare o una
circonferenza si scandiscono tutte le celle incrementando il contatore di quelle che ne
fanno parte; terminate tutte le scansioni si definisce la regione d’intersezione come
l’insieme delle celle che hanno il contatore con il valore maggiore. Dopodichè si calcola il
baricentro di tale regione, ricavando così una stima della posizione del nodo incognito.
Tutto il funzionamento di quest’'algoritmo si basa sull'assunzione che all'aumentare della
distanza fra trasmettitore e ricevitore, la potenza del segnale ricevuto dal ricevitore
misurato su un messaggio inviato dal trasmettitore, decresca in modo monotono in tutte le
direzioni. Tuttavia questa asserzione non sempre rispecchia la realtà, molti sono stati gli
studi e le sperimentazioni effettuate con risultati anche molto diversi. Per quanto concerne
quest’argomento, nel capitolo dedicato alle sperimentazioni (capitolo 6) si illustreranno i
risultati sperimentali ottenuti utilizzando sensori MICA2 in ambiente indoor.
56
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
ROCRSSI++
Capitolo 3: IL ROCRSSI++
Partendo dallo studio teorico dell’algoritmo ROCRSSI proposto da T.H. Chong Liu, Kui
Wu [21],[30] visto in precedenza, si è scelto di perseguire la strada degli algoritmi rangefree per realizzare un sistema di localizzazione in una WSN. Considerando gli ulteriori
miglioramenti quali il ROCRSSI+ proposto da Andretto[9], e tenendo conto della tecnica
AHLoS presentata nel capitolo precedente e dettagliata in [24], si è fatta un’analisi dei
possibili miglioramenti applicabili per un utilizzo in ambiti reali che hanno portato alla
progettazione e all’implementazione concreta dell’algoritmo ROCRSSI++.
3.1 L’algoritmo ROCRSSI+
Il punto di partenza per l’algoritmo proposto il ROCRSSI++ è rappresentato proprio
dall’algoritmo proposto in [9],[10] che rispetto all’algoritmo originale introduce alcuni
significativi miglioramenti, ad esempio l’algoritmo ROCRSSI+ considera valide regioni
d'intersezione anche le parti di spazio esterne alla circonferenza tracciata avendo fissato le
dimensioni massime su cui si estende la WSN. L’algoritmo originale infatti, prevede di
ignorare il caso in cui, per un determinato beacon il nodo incognito si trova all’esterno di
tutte le circonferenze tracciate (ossia la distanza beacon-nodo è maggiore di tutte le
distanze beacon-beacon relative al beacon in questione). Questo comportamento può
portare ad una potenziale perdita d’informazione; ecco perché nel caso sopraindicato, si
può considerare il raggio della circonferenza che delimita l’estensione della WSN ed
assumere quindi che il nodo incognito sia: esterno alla massima circonferenza di raggio
beacon-beacon ed interno alla circonferenza di raggio beacon-MaxWSN (MaxWSN sta
57
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
per massima estensione WSN). Questa è proprio la soluzione adottata dal ROCRSSI+.
Ipotizzando quindi che la regione da scandire sia limitata, è possibile incrementare il
contatore anche della parte di spazio esterna alla circonferenza costruita.
Un esempio di come si restringe la regione d'intersezione considerando anche lo spazio
esterno alle circonferenze è illustrato in Figura 3.1. Qui si può notare che nella figura 3.1
b) utilizzando l’algoritmo ROCRSSI+, il nodo incognito S riesce a stimare la propria
posizione in E in maniera più precisa rispetto alla figura 3.1 a) dove si è utilizzato il
ROCRSSI.
Il vantaggio principale di un algoritmo di questo tipo, è che i nodi, dopo aver ricevuto le
informazioni di posizione e potenza dai beacon, possono localizzarsi. Quindi gli unici a
impegnare il canale radio durante l'esecuzione dell'algoritmo sono i beacon; il fatto che
solo loro debbano inviare pacchetti fa si che il carico sia molto limitato in quanto i beacon
rappresentano solo una piccola percentuale di tutti i nodi della WSN.
a)
b)
Figura 3.1 - Esempio di localizzazione con tre beacon (A, B e C), nodo incognito nella
posizione S e posizione stimata E. a) ROCRSSI, b) ROCRSSI+.
Inoltre l’algoritmo ROCRSSI+ si distingue dal ROCRSSI per l’ipotesi di simmetria del
canale, questo permette di considerare indistintamente il valore di RSSI del pacchetto
scambiato dal nodo A al nodo B, oppure da B ad A. Questa considerazione permette di
iniziare la scansione della griglia appena al nodo incognito giunge un messaggio da un
58
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
beacon, senza dover attendere ulteriori pacchetti dagli altri beacon vicini, semplificando ed
ottimizzando l'algoritmo di localizzazione.
Nella particolare soluzione proposta in [9],[10], per quanto concerne il refinement,
compare anche un modulo che si prefigge l’obiettivo di migliorare la localizzazione,
questo è proposto
da X. Nguyen e T. Rattentbury in [20] all'interno del progetto CS 252 Class Project ;
l'idea di fondo, consiste nel determinare una funzione, chiamata funzione obiettivo, che
leghi l'errore sulla posizione alle coordinate stimate e cercare di minimizzarla attraverso
un procedimento iterativo di aggiornamento della posizione. In quest’ambito comunque
non ci focalizzeremo sul refinement ma proporremo una serie di migliorie adattative che
porteranno alla progettazione e poi all’implementazione dell’ algoritmo ROCRSSI++ .
3.2 L’idea di base del ROCRSSI++
L’idea del ROCRSSI++ nasce da alcune considerazioni fatte su studi relativi a sistemi di
localizzazione usati in ambiti reali, in particolare come già detto, si è partiti dalle migliorie
dell’algoritmo ROCRSSI+ e si è cercato di unirle all’idea che sta alla base delle tecnica
AHLoS presentata in [21] per cercare di apportare ulteriori migliorie.
Si parte dall’assunzione che non sia possibile (per questioni di costi o di hardware)
equipaggiare tutti i nodi della mia rete, con dei dispositivi GPS che consentirebbero la
localizzazione senza la necessità d’implementare nessun algoritmo ad hoc. Possiamo
considerare però fattibile l’utilizzo del GPS solo per alcuni nodi che consentiranno a tutti
gli altri di calcolare la loro posizione. Questi particolari nodi, che d’ora in poi chiameremo
beacon, fungeranno da “ancore” che i nodi incogniti sfrutteranno per calcolare la propria
posizione all’interno della rete. In figura 3.2 è mostrato un esempio di distribuzione di
sensori in una WSN con 5 nodi beacon, i punti rossi rappresentano i nodi beacon, mentre i
punti blu rappresentato invece i nodi incogniti che a partire dalla posizione conosciuta dei
beacon, dovranno localizzarsi.
59
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Figura 4.x – Esempio di una WSN con 5 beacon
Figura 3.2 – Esempio WSN con 5 nodi beacon
Una volta tracciata la direzione da intraprendere per costruire il sistema di localizzazione,
vediamo quali possono essere le ottimizzazioni. In base a simulazioni effettuate in [32] si
evince che all’aumentare della percentuale del numero di beacon rispetto al numero totale
dei nodi della WSN, l’errore medio commesso sulla stima della posizione dei nodi
incogniti decresce. Se però fissiamo a priori il numero dei beacon all’interno della rete non
è possibile poi aumentare tale numero per effettuare una stima della posizione dei nodi
incogniti con più precisione. In altre parole fissare il numero di beacon equivale, in certo
senso, a fissare la precisione massima della stima che si può ottenere all’interno della mia
WSN. Ad esempio se un nodo calcola la sua posizione con errore abbastanza elevato, a
meno che non s’introduca un nuovo nodo beacon nelle sue vicinanze, l’errore sulla
posizione resterà costante. L’algoritmo proposto: ROCRSSI++ si prefigge come obiettivo
principale quello di aumentare dinamicamente il numero di anchor node per permettere ai
nodi incogniti una più precisa localizzazione. Affinché questo sia possibile facciamo una
60
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
classificazione: chiameremo beacon di 1° livello quei nodi della rete che possono
autonomamente localizzarsi, beacon di 2° livello quei nodi incogniti che hanno effettuato
una stima abbastanza precisa della loro posizione all’interno della rete e soddisfano
particolari requisiti che li consentono di comportarsi da anchor node, nodi incogniti o nodi
normali tutti i nodi che ancora devono calcolare la loro posizione oppure non soddisfano i
requisiti necessari per definirsi beacon di 2° livello e quindi comportarsi da tali. Com’è
facile notare il ROCRSSI++ introduce una nuova classe di sensori: i beacon di 2° livello
(in verde nella figura 3.3) infatti le altre entità quali i beacon di 1° livello (in rosso) ed i
nodi incogniti (in blu) ed i loro relativi comportamenti li ritroviamo pari pari nel
ROCRSSI e ROCRSSI+. Nei sottoparagrafi successivi si passarà alla descrizione
dell’algoritmo proposto, alle migliorie adattative introdotte, ai dettagli implementativi ed
ad analizzare in particolare gli aspetti dei beacon di 2° livello che rappresentano la
peculiarità del ROCRSSI++.
Figura 3.3 – Possibile evoluzione di una WSN utilizzando il ROCRSSI++
61
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
3.2.1 Vantaggi introdotti dall’algoritmo ROCRSSI++
Nel valutare i vantaggi introdotti dal ROCRSSI++ si ricorda che sia nell’algoritmo
proposto che nel ROCRSSI+ il cuore delle operazioni svolte per la localizzazione è
sempre lo stesso ed è quello descritto nel funzionamento del ROCRSSI. Innanzitutto
cerchiamo di capire, attraverso un esempio grafico, come il numero di beacon può
aumentare la precisione della stima effettuata dai nodi incogniti sulla propria posizione. Si
prende in esame la figura 3.4 dove viene riportato un esempio di localizzazione, i nodi A
B e C rappresentano i beacon, i nodi T e S (in blu) sono i nodi incogniti mentre T’ ed S’
(in rosso) sono le posizioni stimate dopo la procedura di localizzazione. I dettagli sul
funzionamento verranno descritti in seguito, cerchiamo solo di capire come vengono
costruite le
Figura 3.4 – Esempio di localizzazione tramite beacon A – B –C con ROCRSSI+
circonferenze. In base al funzionamento del ROCRSSI, si sa che per ogni beacon si
costruiscono tante circonferenze quanti sono i propri vicini (in questo caso 2) con centro
uguale al beacon stesso e raggio pari alla distanza dal beacon vicino, i nodi incogniti sono
in grado di stabilire una relazione d’ordine ed individuare la regione formata
dall’intersezione delle circonferenze all’interno della quale loro si trovano. In quest’
62
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
esempio si può notare che l’errore commesso è abbastanza elevato.
Consideriamo ora l’esempio di figura 3.5 dove i beacon sono 4 e cioè A – B – C – S il solo
nodo incognito è T, in questo caso l’errore commesso è di gran lunga più basso dato che il
il beacon S è più vicino al nodo T rispetto al beacon C (caso visto prima) e questo ci
permette di effettuare una stima molto più precisa dal momento che la regione
d’intersezione è molto meno estesa rispetto al caso precedente.
Figura 3.5 – Localizzazione tramite beacon A – B – C – S con ROCRSSI+
Si è analizzato quindi un tipico caso in cui l’aumento del numero di beacon all’interno
della WSN migliori l’accuratezza della posizione stimata dai nodi incogniti. Ed è proprio
su questa considerazione che si basa il ROCRSSI++. Ovviamente bisogna fare alcune
considerazioni perché l’esempio rappresentato in figura 3.5 non è effettivamente la
situazione che si verifica utilizzando l’algoritmo proposto. Quindi per capire
effettivamente quali possono essere i miglioramenti introdotti dal ROCRSSI++ facciamo
riferimento alla figura 3.6 dove è rappresentata la medesima tipologia di rete ma per la
localizzazione si utilizza l’algoritmo ROCRSSI++.
Nell’esempio di figura 3.6 i nodi in rosso rappresentano i beacon di 1° livello, quello in
verde è un beacon di 2° livello e quelli in blu sono i nodi incogniti. Inizialmente i nodi
incogniti sono due: T ed S, mentre A, B e C sono i beacon di 1° livello. Si suppone che il
63
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
primo nodo ad eseguire l’algoritmo di posizionamento sia il sensore S, quest’ultimo ha
effettuato una stima utilizzando come anchor node i beacon di 1° livello ed ha stimato la
sua posizione (in figura rappresentata da S’ in verde), in seguito il nodo S si proclama
beacon di 2° livello, il nodo incognito T che ancora deve localizzarsi, può utilizzarlo come
anchor node per calcolare la sua posizione.
Figura 3.6 – Esempio di localizzazione tramite ROCRSSI++
La prima cosa da notare è che siccome il nodo S che poi diventa beacon di 2° livello,
nell’eseguire la propria localizzazione, commette comunque un certo errore, la successiva
stima della posizione del nodo incognito T, che utilizza S come uno degli anchor node,
sarà influenzata dall’errore commesso in precedenza, ecco perché non si ritrova
esattamente la situazione vista in figura 3.5 cioè nel caso in cui usavamo 4 beacon, ma
sicuramente si migliora la stima fatta nel esempio di figura 3.4 dove si usavano solo 3
64
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
beacon; questo miglioramento è quantificabile e non è altro che la differenza tra il
segmento g ed il segmento h che rappresentano rispettivamente l’errore sulla
localizzazione del nodo T utilizzando il ROCRSSI ed il ROCRSSI++. E’ intuitivo
comunque comprendere che in ogni caso, la posizione dei beacon rispetto ai nodi incogniti
può essere più che rilevante ai fini di calcolare l’errore fatto sulla localizzazione, ecco
perché nel capitolo successivo verranno eseguite diverse prove in ambiente simulato
partendo da rilevazioni effettuate in ambiente reale.
3.3 Descrizione dell’algoritmo proposto: il ROCRSSI++
Si passa ora alla descrizione dei vari step di cui l’algoritmo si compone. Innanzitutto si
ricorda che la parte riguardante il calcolo delle coordinate del nodo incognito all’interno
della regione d’intersezione, è praticamente identico a quello del ROCRSSI. Si descrivono
ora nel dettaglio le varie fasi che si attraverseranno, dall’inizializzazione della rete, alla
localizzazione dei nodi incogniti fino all’individuazione dei beacon di 2° livello. Come
detto in precedenza si possono distinguere 3 entità differenti: beacon di 1° livello o
semplicemente beacon che conoscono a priori la loro posizione (perché prefissata oppure
sono dotati di un sistema GPS), beacon di 2° livello che rappresentano quei nodi che
hanno calcolato la loro posizione e possono fungere da beacon e nodi che non hanno
ancora effettuato la localizzazione (che chiameremo incogniti) oppure che non hanno le
caratteristiche per essere beacon di 2° livello.
Si parte dalla descrizione dell’algoritmo residente nei nodi beacon di 1° livello. In figura
3.7 è rappresentato il flow chart rappresentativo dell’algoritmo; il sistema di
localizzazione prevede una fase iniziale, che chiameremo Phase1 a cui partecipano
soltanto i beacon scambiandosi informazioni necessarie poi ai fini della localizzazione dei
nodi incogniti, ed una fase successiva che chiameremo Phase2, dove i beacon invieranno
le informazioni scaturite dalla fase 1 ed i nodi incogniti calcoleranno la loro posizione. Nel
corso della prima fase i beacon di 1° livello, dopo l’inizializzazione dei vari componenti,
iniziano a trasmettere il proprio ID e le proprie coordinate in modalità broadcast, cioè agli
elementi della rete che rientrano nel raggio di copertura del segnale inviato, queste
65
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Figura 3.7 – Flow chart che rappresenta l’algoritmo residente nei nodi beacon di 1° livello
66
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
trasmissioni sono controllate da un timer (TxTimer). Tutti gli altri beacon che ricevono il
messaggio, controllano se hanno già ricevuto questo tipo di messaggi da quel beacon, in
caso affermativo si limitano ad effettuare una nuova rilevazione del RSSI ed aggiungono
tale valore alla propria tabella interna contenente le informazioni relative ai propri vicini;
in caso contrario aggiungono una riga nella tabella con tutte le informazioni ricevute
relative al nuovo vicino.
Nella suddetta tabella troviamo le seguenti informazioni:
ID del nodo
Tipo di beacon (di 1° o di 2° livello )
Coordinate cartesiane (x;y)
Insieme delle rilevazioni del valore RSSI
Allo scadere del timer di fase (PhTimer) o se si è raggiunto il numero massimo di
messaggi ricevuti/inviati, si procede con il calcolo delle medie delle rilevazioni RSSI e si
ordinano le tabelle in maniera decrescente, cioè dal beacon più vicino al beacon più
lontano, in questo modo termina la prima fase. Prima dell’inizio della seconda fase, i
beacon inviano un particolare messaggio (BeaconReady) destinato ai quei nodi che
vogliono diventare beacon di 2° livello che sta ad indicare che la prima fase è finita. Si
passa dunque alla seconda fase, dove se i beacon ricevono una o più risposte al segnale
inviato, provvedono ad aggiornare le tabelle dei vicini con le informazioni ricevute
relative ai beacon di 2° livello altrimenti si passa direttamente all’ invio delle proprie
tabelle in broadcast destinate ai nodi incogniti; dopodichè, periodicamente alloscadere del
ResTimer, si effettua il restart dell’intero algoritmo ripartendo dall’ascolto del canale
relativo prima fase.
Si descrive ora l’algoritmo residente in tutti gli altri nodi (nodi incogniti ed eventuali
beacon di 2° livello). Prendendo come riferimento il flow chart di figura 3.8 si può notare
come si comportano i nodi che devono localizzarsi. Durante la prima fase sono
praticamente inattivi visto che in questa fase gli unici elementi attivi della rete sono i
67
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
beacon, i nodi infatti restano in attesa sul canale di comunicazione. Si supponga di
ricevere un messaggio di tipo BeaconTable . Una volta ricevuto questo tipo di messaggio,
che contiene le informazioni sul beacon e sui suoi vicini, si verifica se le informazioni
contenute al suo interno sono valide o meno ed in base all’esito di questo controllo, si
decide se memorizzare o no il messaggio ricevuto.
Figura 3.8 - Flow chart che rappresenta l’algoritmo residente nei nodi incogniti
Vediamo qual è la struttura dati dei messaggi BeaconTable :
ID del nodo
Tipo di beacon
68
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Coordinate cartesiane (x;y)
Tabella dei vicini
Dove la tabella dei vicini contiene:
Numero dei vicini
Vettore di BeaconMsg
Ed il BeaconMsg contiene:
ID del nodo
Tipo di beacon
Coordinate cartesiane (x;y)
Valore medio RSSI
Una volta che il nodo incognito riceve un BeaconTable può iniziare ad eseguire le
operazioni di localizzazione che sono riportate in pseudo-codice nella figura 3.9.
Sfruttando la rilevazione del valore RSSI del beacon che ha inviato il messaggio, si
dividono i beacon in due gruppi, uno composto dai nodi più prossimi al trasmettitore,
rispetto al nodo che esegue le elaborazioni, l'altro da quelli più lontani. Il risultato di
questa divisione permette di individuare l'area a cui il nodo appartiene, possiamo
distinguere tre possibili casi:
Se l'insieme dei beacon più vicini è vuoto, il nodo è interno alla circonferenza
di raggio minore tra quelle centrate nel beacon che ha trasmesso la tabella e
di
raggio le distanze tra questo e i vari elementi di cui la tebella è composta;
Se al contrario è l'insieme degli elementi più lontani ad essere vuoto, il nodo è
esterno a tutte le circonferenze descritte, e quindi è esterno a quella di raggio
massimo, interna però alla circonferenza rappresentante la massima
estensione della rete;
Infine, se nessuno tra i due gruppi è vuoto il nodo si posiziona all'interno della
corona circolare delimitata dalla circonferenza di raggio maggiore tra quelle
del
69
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
primo gruppo e quella di raggio minore appartenente al secondo.
Nodo incognito
X:
X N : Insieme dei beacon vicini al nodo incognito X
B A : Insieme dei beacon vicini al beacon A
Uno dei beacon in X N
A:
RSSI AB : È la potenza del segnale del nodo ricevuto dal nodo
Procedura di localizzazione ROCRSSI() {
Regione d’intersezione R {};
While X N ! 0
PASSO 1:
Beacon A X N . prossimoBeacon(.);
PASSO 2:
Dividi B A in 2 parti: B A1 e B A 2 tali che:
per ogni elemento I in B A1 risulti RSSI AI RSSI AX
per ogni elemento J in B A2 risulti RSSI AJ RSSI AX
PASSO 3:
d1 d 2 0;
Se BA1! insiemeVuoto
I = elemento con RSSI minore in B A1
d1 = distanza fra J e A
Nel caso che
d1! 0 & d 2 ! 0 : r = corona circolare centrata in A
con raggio interno d1 e raggio esterno d1
d1 0 :r = interno del cerchio centrato in A con raggio d 2
d 2 0 :r = interno del cerchio centrato in A con raggio d1
R
PASSO 4:
PASSO 5:
R
r;
inserimento di r in R.
Calcola l’intersezione delle regioni;
Calcola il baricentro dell’intersezione;
Figura 3.9 – Pseudo-codice procedura di localizzazione
La regione denominata r, viene intersecata con le altre regioni ottenute a partire dai dati di
altri beacon. Infatti ad ogni nuova ricezione di una BeaconTable il nodo incognito verifica
70
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
se si tratta di una tabella valida e non ancora elaborata, e se vi è al più, un solo beacon di
2° livello che funge da anchor; in caso affermativo itera il precedente procedimento, in
caso contrario scarta i dati e rimane in attesa. Dal risultato di questa intersezione viene
infine calcolato il baricentro, punto di cui il nodo fa proprie le coordinate. Dopo
l’esecuzione della procedura di localizzazione il nodo segnala l’avvenuta localizzazione. A
questo punto, una volta ricevuto il messaggio BeaconReady il nodo effettua un controllo
su se stesso al fine di capire se ha le caratteristiche per diventare beacon di 2° livello.
Figura 3.10 – Flow chart che rappresenta l’algoritmo residente nei beacon di 2° livello
In particolare, questo controllo consiste nel valutare se la riserva energetica del sensore è
tale da sopportare il carico aggiuntivo introdotto dal comportamento del beacon di 2°
livello e verificare che la sua localizzazione sia avvenuta sfruttando come ancore
esclusivamente beacon di 1° livello. Se così fosse il nodo risponde con un messaggio del
71
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
tipo Ready4Beacon che sta ad indicare che esso è “pronto” a diventare beacon di 2° livello
e che contiene le informazioni su di esso e i suoi vicini. Per descrivere il comportamento
dei beacon di 2° livello a regime, facciamo riferimento al flow chart di figura 3.10
Dopo l’inizializzazione, che consiste nell’aggiornare le proprie informazioni interne, il
beacon di 2° livello ascolta il canale se non riceve nessun messaggio di tipo BeaconReady
si limita semplicemente ad inviare la propria tabella in broadcast, così come avviene nella
seconda fase dei beacon di 1° livello, fino al restart della prima fase,
altrimenti si
provvede ad effettuare il controllo sullo status del nodo in questione con lo scopo di
controllare se questo può continuare a fungere da beacon di 2° livello. Nel caso in cui, per
questioni di riserva energetica, il nodo non vuole più essere beacon questo dovrà
aggiornare le informazioni interne, comunicare questo cambiamento alla rete tramite
l’invio del messaggio NotReady4Beacon e riprendere a comportarsi come in normale
nodo.
3.4 Migliorie adattative introdotte dal ROCRSSI++
Oltre alle caratteristiche intrinseche dell’algoritmo proposto, si è cercato di perfezionare
ulteriormente il sistema di localizzazione introducendo una serie di migliorie adattative
che possono risultare utili in determinati ambiti di utilizzo. Innanzitutto l’esecuzione delle
operazioni di localizzazione possono essere eseguite solo quando effettivamente
necessarie, si può pensare quindi al seguente scenario: un nodo incognito riceve le tabelle
dai suoi beacon vicini ma inizia a processarle solo allo scadere di un determinato timer, in
questo modo separiamo il lavoro IO bound da quello CPU bound cercando di ridurre il
consumo di energia, infatti possiamo pensare di spegnere il ricevitore radio una volta
ricevute le informazioni necessarie alla localizzazione del nodo. Un’altra miglioria
introdotta è sicuramente quella relativa all’integrazione immediata di un beacon di 2°
livello nel gruppo degli anchor node. Infatti dopo che un nodo si dichiara beacon di 2°
livello, affinché questo fornisca un contributo valido ai fini della localizzazione, dovrebbe
anch’esso partecipare alla prima fase dei beacon in modo che anch’esso possa essere
definito tale. Come descritto nei flow chart precedenti, la miglioria consiste nell’instaurare
72
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
una comunicazione tra il nodo che vuole proclamarsi beacon e gli anchor node esistenti. Si
può riassumere quanto detto, analizzando il sequence diagram di figura 3.11 dove si pone
l’accento sulla modalità d’interazione tra gli elementi della rete di sensori. Allo scadere
della prima fase, i beacon lanciano un messaggio asincrono destinato ai potenziali beacon
di 2° livello, questi dopo aver ricevuto tale messaggio effettuano un check interno
Figura 3.11 – SD relativo al caso di dichiarazione Ready/NotReady4Beacon
per capire se possono dichiararsi beacon ed a seconda dell’esito inviano un messaggio di
Ready/NotReady4Beacon ricevuto tale messaggio i beacon aggiornano le informazioni e
rispondono, infine anche i beacon di 2° livello aggiornano le propire informazioni.
Si descrive adesso, come si comporta il sistema di localizzazione nel caso in cui, a regime,
un nodo non riceve più messaggi da un beacon di 2° livello (in quest’ambito non
consideriamo il caso relativo ad un beacon di 1° livello perché non esistono nodi
gerarchicamente superiori tali da effettuare una verifica). Se per un certo numero di volte
il nodo non riceve più messaggi da un beacon di 2° livello, lancia un allarme destinato ai
73
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
beacon di 1° livello con un messaggio di tipo BeaconAlert contenente:
ID del nodo che invia l’allarme
ID del beacon di 2° livello sospetto
questi provano a contattare il beacon in questione (inviando un messaggio BeaconReady
non più in broadcast ma destinato al solo beacon sospetto) se quest’ultimo risponde
ignorano l’allarme (perché il beacon di 2° livello funziona visto che ha risposto ai beacon
principali probabilmente il nodo non lo “sente” più perché è troppo lontano e
precedentemente l’ha sentito per “caso”) se non risponde o risponde con un messaggio di
tipo NotReady4Beacon lo cancellano dalla tabella dei beacon vicini e rispondono al nodo
che ha segnalato l’allarme. Nella figura 3.12 viene riportato il sequence diagram relativo al
caso in cui un beacon di 2°livello risponde con un messaggio di tipo NotReady4Beacon.
Figura 3.12 – SD relativo al caso Alert – NotReady4Beacon
Un’ulteriore miglioria è quella relativa al fatto che periodicamente un beacon di 2° livello
74
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
può ricalcolare la sua posizione in modo da confrontarla con quella precedentemente
calcolata, se lo scostamento tra la posizione appena calcolata e quella calcolata in
precedenza supera una certa soglia, allora si invia in broadcast la nuova posizione, in
modo da poter aggiornare le varie tabelle. Quest’ultima miglioria è molto utile in alcuni
scenari reali di utilizzo come quello in esame del monitoraggio dei rischi ambientali
derivanti da fenomeni franosi. Infatti, una volta posizionati i nodi costituenti la WSN su un
terreno definito a rischio di frane, si potrebbero creare delle soglie di allarme. In questo
modo, qualora i beacon di 2° livello ricalcolando la loro posizione notassero che lo
scostamento tra la posizione appena calcolata e quella calcolata in precedenza supera una
certa soglia, potrebbero segnalare una situazione a rischio.
A questo punto è doveroso fare un’osservazione, facendo nuovamente riferimento alla
figura 3.3, potrebbe capitare che molti nodi incogniti diventino beacon di 2° livello.
Ovviamente questa è una situazione sconveniente in quanto un beacon di 2° livello
consuma sicuramente più energia di un nodo normale ed inoltre il fatto di avere molti
beacon di 2° livello gli uni vicini agli altri non apporterebbe miglioramenti significativi
dal punto di vista dell’accuratezza. Ecco perché affinché la soluzione proposta apporti
effettivamente delle migliorie in ambito delle reti di sensori non si possono trascurare
questi aspetti. C’è bisogno dunque di qualche accorgimento. A tal proposito riutilizza una
tecnica simile a quelle utilizzate nei livelli MAC (o più in generale nei livelli di
collegamento dati relativi allo stack ISOI/OSI [8] ). Ogni volta che un nodo ha la
possibilità di dichiararsi beacon di 2° livello non effettua subito la trasmissione del
messaggio Ready4Beacon ma ascolta per un tempo casuale il canale di comunicazione. Se
non riceve alcun messaggio da beacon di 2° livello vicini ad esso, allora si dichiara beacon
di 2° livello. In questo modo si evita il prolificare di beacon di 2° livello in quelle
situazioni dove più nodi incogniti vicini tra loro, hanno la possibilità di diventare beacon
di 2° livello.
75
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
ROCRSSI++
Capitolo 4: Realizzazione dell’algoritmo in ambiente TinyOS
Una volta descritto l’algoritmo proposto si è provveduto a realizzarne un’implementazione
reale in ambiente TinyOS 1.1.15. In questo capitolo quindi, si partirà da una descrizione
dell’ambiente in generale, sui tool che esso mette a disposizione, sulle peculiarità del
linguaggio NesC per poi focalizzarsi sui moduli software realizzati, fino ad analizzare in
dettaglio alcuni componenti fondamentali per l’algoritmo ROCRSSI++
4.1 Il sistema operativo TinyOS
TinyOS è un sistema operativo open-source progettato per le reti di sensori senza filo dalla
Berkeley University. La progettazione di una applicazione per una rete di sensori deve
rispondere ad alcune particolari esigenze quali:
dimensioni ridotte in termini di carico computazionale, occupazione in memoria
e dimensioni del sistema operativo
ottimizzazione dei consumi energetici
affidabilità, robustezza ed efficiente modularità
E’ facile intuire quindi che per soddisfare queste esigenze, un sistema operativo
tradizionale non costituisce uno strumento efficiente. Un SO tradizionale, infatti, lo
possiamo immaginare sulle architetture hardware tradizionali, dove si dispone di grandi
quantità di memoria, di complessi sottosistemi per le operazioni di IO, di forti capacità di
elaborazione e sorgenti di energia praticamente illimitate, in una rete di sensori invece, ci
troviamo di fronte a sistemi di piccole dimensioni, fonti di energia limitate, scarsa quantità
76
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
di memoria, modeste capacità di elaborazione, etc. Ecco perché sono necessarie soluzioni
molto semplici ed efficienti e che soprattutto riducano al massimo i consumi di energia ed
ecco perché TinyOS si sta imponendo come uno standard de facto.
Il sistema operativo TinyOS va interpretato più come un framework di programmazione
che come un sistema operativo tradizionale. Esso semplifica notevolmente lo sviluppo di
applicazioni per WSN, grazie ai numerosi componenti già implementati e soprattutto alla
elevata modularità, in seguito ci concentreremo su aspetti che coinvolgono l’architettura e
le entità di TinyOS, l’implementazione e lo scambio di messaggi.
4.1.1 Architettura di TinyOS
TinyOS è stato appositamente concepito per sistemi embedded, cioè per quei sistemi
elettronici a microprocessore progettati appositamente per una particolare applicazione e
su una piattaforma hardware ad hoc. Questo SO adotta un’architettura a componenti che
rende possibile sviluppare rapidamente il software, minimizzare le dimensioni del codice e
rispettare i vincoli stringenti sull’occupazione della memoria. Come detto in precedenza,
TinyOS differisce in maniera sostanziale dai sistemi operativi general purpose: in quanto
non consente l'esecuzione di molteplici applicazioni, né in parallelo né in sequenza, ma si
integra direttamente nel programma sviluppato. Si tratta in effetti di una collezione di
componenti nesC (alcuni dei quali verranno introdotti in seguito) pensati ad hoc per una
rete di sensori, a cui si aggiunge uno scheduler che ha il compito di gestire l'esecuzione dei
task e delle funzioni. Non esiste cioè un kernel (il nucleo del sistema operativo) che
gestisce le risorse disponibili dividendole tra più applicazioni; lo scheduler si limita ad
eseguire in sequenza i task, secondo una politica FIFO, eventualmente interrompibili dagli
eventi, che hanno priorità maggiore. Quando non vi sono più funzioni in attesa di
esecuzione, lo scheduler porta il processore a riposo e attende la segnalazione di un nuovo
evento per riprendere l'esecuzione. La memoria è mappata direttamente nei suoi indirizzi
fisici, infatti questa è considerata come un unico e lineare spazio fisico, che viene
assegnato alle applicazioni a tempo di compilazione. Inoltre il contesto applicativo è unico
e quindi non ha ragione di esistere il concetto di memoria virtuale.
77
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Per avere un’idea di come sia veramente ridotto ai minimi termini il contributo di TinyOS
in un’applicazione standard, facciamo riferimento alla tabella 4.1 dove vengono
rappresentati i componenti indispensabili per l’esecuzione di una qualsiasi applicazione e
la loro rispettiva occupazione in memoria, divisa in area codice ed area dati.
Component Name
Code Size (bytes)
Data Size (bytes)
Processor_init
172
30
TinyOS scheduler
178
16
82
0
432
46
C runtime
Total
Tabella 4.1 – Occupazione in memoria del S.O. TinyOS
Analizzando questi dati possiamo comprendere come sia effettivamente ridotta al minimo
l’occupazione in memoria delle applicazioni sviluppate in ambiente TinyOS. In definitiva
si mostra l’architettura a livelli rappresentata in figura 4.1
Figura 4.1 – Architettura TinyOS
4.1.2 Componenti
Innanzitutto diamo una definizione generica di componente: un componente è un unità
software indipendente che ingloba al suo interno funzionalità alle quali è possibile
accedere tramite l’utilizzo di apposite interfacce. In TinyOS un componente è composto da
78
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
quattro parti correlate tra di loro che sono:
un set di comandi
un set di eventi
un frame di dimensione fissa
una serie di semplici task
Comandi, task ed eventi operano all’interno del frame modificandone lo stato.
Il frame può quindi essere visto come un contenitore di dati del componente, dotato di uno
stato proprio che viene allocato a tempo di compilazione. I comandi rappresentano
richieste di un servizio offerto da un componente di più basso livello. Gli eventi
rappresentano, direttamente o non, interrupt hardware, il componente di più basso livello
(ossia l’hardware abstraction) converte questi interrupt in eventi e poi notifica tali eventi a
i componenti di livello più alto. Da notare che gli eventi sono stati progettati per eseguire
piccole quantità di calcoli e, tipicamente, sono associati a condizioni di risveglio del nodo
sensore. Per tale motivo, è necessario che gli eventi vengano eseguiti nel più breve tempo
possibile, in modo da permettere ai nodi sensori di ritornare in uno stato di riposo.
Passiamo ad una classificazione dei componenti, possiamo distinguere 3 categorie:
Astrazioni Hardware: sono quei componenti che forniscono un’astrazione
dell’hardware di sistema come trasduttori, bus, attuatori etc.
Hardware simulato: questi componenti attraverso le loro interfacce possono
simulare funzionalità di hardware più complesso di quello effettivamente
presente nella piattaforma in uso.
Componenti di alto livello: sono quei componenti di livello applicativo, che
forniscono le funzioni più complesse di elaborazione e risultano essere
indipendenti dalla piattaforma usata
4.1.3 Interfacce
Come si vedrà poi in dettaglio nel paragrafo successivo, in generale le interface
costituiscono quegli elementi software che consentono di accedere alle funzionalità di un
componente dall’esterno. In TinyOS le interfacce rappresentano l’unico punto di accesso
79
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
dall’esterno alle funzionalità di un componente, sono bidirezionali, forniscono un set di
comandi ed un set di eventi e collegano i componenti tra loro. Infatti ci sarà un
componente che funge da user dell’interfaccia ed un altro componente che fa da provider
per quella interfaccia; lo user utilizzerà quell’interfaccia invocando, ad esempio, un
comando dichiarato in essa, il provider dell’interfaccia deve implementare l’azione di quel
comando. Facciamo un esempio, in figura 4.2 è riportato un esempio di linkage di
componenti tramite interfacce. Il componente BlinkM è lo user di 2 interfacce: Timer e
Leds. L’interfaccia Timer viene fornita dal componente SingleTimer, mentre l’interfaccia
Leds è fornita dal componente LedsC .
Figura 4.2 – Esempio di user-provider interfaccia
Quest’esempio è stato preso da un’applicazione TinyOS, chiamata Blink, in
quest’applicazione il sensore, ad intervalli di tempo regolati da un timer, accende e spegne
uno dei suoi led. Quindi il componente BlinkM rappresenta il componente di più alto
livello in quanto implementa il comportamento dell’applicazione, gli altri due componenti
(SingleTimer e LedsC) forniscono ed implementano le interfaccie per fornire i comandi e
gli eventi necessari al modulo di livello superiore (in questo caso BlinkM) per realizzare le
applicazioni.
4.1.4 Scambio dati in TinyOS
In TinyOS (in particolare nella versione utilizzata la 1.15) le comunicazioni radio seguono
80
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
il modello degli Active Message (AM). Gli AM rappresentano un semplice paradigma per
le comunicazioni basate sullo scambio di messaggi usate prevalentemente in sistemi di
calcolo parallelo e distribuito.Ogni AM contiene un nome di un handler di livello utente
che viene invocato sul nodo target all’arrivo del messaggio, a cui viene passato come
argomento il payload del messaggio. Gli handler ricoprono un duplice ruolo: hanno la
funzione di estrarre i messaggi dalla rete e nello stesso tempo inoltrarli per una possibile
elaborazione oppure semplicemente per inviare un messaggio di risposta. Questo schema è
rappresentato in figura 4.3. In questo modo la rete viene modellata come una pipeline con
un minimo di buffer per la memorizzazione dei messaggi. Questo modello di invocazione
degli handler basato sugli eventi, rende la vita più facile agli sviluppatori in quanto:
elimina molte difficoltà dovute all’implementazione di protocolli che prevedono
la gestione dei buffer di invio e ricezione.
consente di evitare le attese quando è in arrivo un messaggio, permettendo al
sistema di svolgere della azioni contemporaneamente all’invio e ricezione dei
dati
Figura 4.3 – Grafico dei componenti nella comunicazione in TinyOS
81
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Per evitare una congestione della rete ed assicurare quindi determinate performance, gli
handler relativi ai messaggi devono essere eseguiti rapidamente ed in modo asincrono.
Grazie a questa predisposizione naturale del modello AM alla programmazione ad eventi,
si può comprendere perché questo modello è l’ideale per la comunicazione in TinyOS.
4.1.5 TOS_Msg
Gli Active Message in TinyOS vengono mappati sul tipo di messaggio TOS_Msg che
rappresenta il messaggio standard all’interno della mia rete di sensori. Il TOS_Msg non è
altro che una struttura dati definita in un file header chiamato AM.h. Di seguito riportiamo
il codice relativo proprio alla definizione di questa struttura
typedef struct TOS_Msg
{
/* The following fields are transmitted/received on the radio.
*/
uint16_t addr;
uint8_t type;
uint8_t group;
uint8_t length;
int8_t data[TOSH_DATA_LENGTH];
uint16_t crc;
/* The following fields are not actually transmitted
* or received on the radio! They are used for internal
* accounting only. The reason they are in this structure is
* that the AM interface requires them to be part of the
* TOS_Msg that is passed to send/receive operations.
*/
uint16_t strength;
uint8_t ack;
uint16_t time;
uint8_t sendSecurityMode;
uint8_t receiveSecurityMode;
} TOS_Msg;
Si può notare che alcuni campi non vengono trasmessi, ad esempio il campo strength,
che viene utilizzato dal ricevitore per avere un’indicazione sulla potenza del segnale
relativo al messaggio ricevuto, oppure i campi ack e time utilizzati per funzionalità
interne. Per analizzare in dettaglio i campi della struttura dati, facciamo riferimento alla
tabella 4.2 dove sono riportati i campi trasmessi e ricevuti nella comunicazione radio. In
particolare nel campo type abbiamo elencato una serie di valori che il campo può
82
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
assumere relativamente alle applicazioni implementate (come si osserverà in seguito),
questo campo è di fondamentale importanza in quanto mi permette di effettuare una
distinzione sul tipo di messaggio ricevuto e prevedere quindi comportamenti diversi. Si
noti che type è di tipo uint8_t quindi viene rappresentato attraverso un solo byte, e
quindi consente di istanziare fino a 255 messaggi utente diversi tra loro. Un altro campo di
particolare importanza è rappresentato dal campo data che contiene effettivamente quelle
informazioni di livello utente rilevanti nell’ambito applicativo.
Tabella 4.2 – Dettaglio dei campi nella struct TOS_Msg
Infatti per inviare un qualsiasi tipo di messaggio bisogna incapsularlo all’interno di un
TOS_Msg. Per comprendere questo ci serviamo della figura 4.4 dove viene rappresentato
83
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
l’incapsulamento di un messaggio utente, che per semplicità chiameremo myAppMsg ,
all’interno di un TOS_Msg. Possiamo dunque considerare il TOS_Msg come un
contenitore del nostro messaggio utente in particolare si può notare che il campo data
funge da puntatore al messaggio utente difatti al suo interno troviamo un riferimento al
contenuto del messaggio myAppMsg.
Figura 4.4 – Incapsulamento messaggio utente nel TOS_Msg
4.2 Il linguaggio NesC
Il linguaggio NesC (NestedC) è una variante del linguaggio C, che si presta in maniera
ottimale alla programmazione dei sensori. Sotto certi aspetti esso rappresenta una vera e
propria estensione del linguaggio, implementando un modello ad eventi che non è previsto
nel C. D'altra parte molte delle funzionalità riguardanti i puntatori e l'allocazione dinamica
della memoria non sono presenti. Di seguito verranno fornite le caratteristiche principali,
una panoramica sul suo funzionamento ed una descrizione della sintassi corredato di
esempio
4.2.1 Caratteristiche principali
Per realizzare un’applicazione NesC si realizzano una serie di componenti. Ogni
84
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
componente deve definire le specifiche del suo comportamento e deve implementare tali
specifiche. E’ possibile definire il comportamento del componente attraverso una serie di
interfacce che, come già detto in precedenza, possono essere fornite oppure utilizzate dal
componente. Elenchiamo adesso le principali caratteristiche del linguaggio:
Modularità: come già detto si sviluppano una serie di componenti che verranno
poi opportunamente assemblati e collegati tra loro per produrre codice eseguibile
Semplicità: in quanto tramite l’utilizzo e l’implementazione di interfacce vi è una
maggiore comprensibilità e tracciabilità delle funzioni.
Staticità: che consente di: raggiungere una velocità di esecuzione più elevata,
un’analisi statica del programma. Quindi a tempo di compilazione è già noto il
wiring dei componenti che sono collegati staticamente tra loro attraverso un file
di configurazione
Il modello di programmazione NesC aderisce al modello TinyOS: Il modello del
compilatore nesC è basato su task, che sono eseguiti fino al loro completamento,
e da eventi, che possono interrompere i task e, se di priorità maggiore, anche gli
eventi stessi. Inoltre In accordo con la politica di utilizzo delle risorse di
alimentazione del sensore, ossia sleep per la maggior parte del tempo e awake
solo durante la fase di elaborazione, il linguaggio NesC permette di definire
un’elaborazione event-driven: i componenti di un’applicazione vengono mandati
in esecuzione solo quando si verificano gli eventi ad essi associati.
Tra le caratteristiche principali del linguaggio si segnala inoltre la split-phase operations:
nelle applicazioni TinyOS ogni operazione complessa è gestita con una tecnica in due
tempi chiamata split-phase. La chiamata della funzione avviene tramite l'invocazione di un
apposito task. Esso viene inserito nella coda di esecuzione e il controllo viene subito
rilasciato. Al momento opportuno è il task che si occupa di segnalare un evento che ne
notifichi il termine ed eventualmente segnali il valore di uscita, come parametro o come
variabile impostata nel contesto globale.
Dal punto di vista pratico, possiamo vedere il NesC come una sorta di precompilatore che
85
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
analizza i moduli creati dall’utente, utilizza l’implementazione dei componenti ed il loro
wiring per creare un unico file.c (in cui troviamo embedded anche i componenti principali
del TinyOS specificati in tabella 4.1) ed effettua poi la compilazione per creare
l’eseguibile.
4.2.2 Modello a componenti
Abbiamo detto che un'applicazione NesC è un insieme di componenti collegati tramite
interfacce. Ogni interfaccia è bidirezionale e modella un servizio offerto o utilizzato.
Questa modello di programmazione permette l'astrazione dei componenti, la cui
implementazione, non interessa a chi poi li utilizza per realizzare le applicazioni. In effetti
ogni componente è caratterizzato solamente dalle interfacce che sfrutta e da quelle che
fornisce. Le interfacce a loro volta sono composte da un sistema di comandi e eventi:
l’implementazione dei comandi deve essere fatta dal componente che fornisce una
interfaccia mentre l'implementazione degli eventi compete al componente che utilizza tale
interfaccia. Un esempio di questa architettura la possiamo trovare nella figura 4.5:
Figura 4.5 – Modello di un componente NesC e relativo codice
86
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
module Componente {
provides {
interface
interface
interface
}
uses {
interface
interface
}
A;
B;
C;
D;
E;
implementation ...
...
}
in quest’esempio il componente fornisce tre interfacce (A,B e C), e quindi ne deve
implementare i comandi (in figura rappresentate con le frecce nere), e all'occorrenza può
segnalare i relativi eventi. Inoltre il componente utilizza due interfacce (D e E) e deve
necessariamente fornire un implementazione per ogni evento dichiarato in queste (frecce
bianche), a prescindere dal suo effettivo impiego. In fase di compilazione comandi ed
eventi vengono tutti tradotti come normali chiamate a funzioni, ma in questo modo il
compito del programmatore risulta decisamente più agevole sfruttando l'astrazione
rappresentata dalle interfacce. Inoltre il modello a componenti consente la portabilità delle
applicazioni: infatti basta riscrivere l'implementazione relativa ai componenti che
dialogano con l'hardware specifico quando si passa da una piattaforma hardware ad un
altra, mentre quelli che si collegano alle interfacce fornite da questi non subiscono
variazioni. L'implementazione di un componente prevede due livelli: un modulo ed una
configurazione. Nel modulo vengono specificate le interfacce utilizzate e fornite, e
troviamo l'implementazione degli eventi delle prime e dei comandi delle seconde. Ogni
modulo gestisce le proprie variabili statiche esattamente secondo la sintassi tipica del
linguaggio C. Nel file di configurazione invece troviamo la specifica di quali componenti
implementano le interfacce dichiarate dal modulo, e stabiliscono i collegamenti tra i
fornitori e gli utilizzatori. Questa è l’operazione chiamata wiring. In figura 4.6 è illustrata
l’architettura di una tipica applicazione in NesC.
87
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Figura 4.6 – Architettura di un’applicazione in NesC
INTERFACCE
Le interfacce sono elementi bidirezionali che specificano l'interazione tra due componenti,
l'utilizzatore ed il fornitore. Ogni interfaccia deve avere un nome identificativo, diverso da
qualunque altra e diverso da qualunque componente. Di seguito è riportato un esempio
d’interfaccia:
interface Send {
command result_t send(TOS_MsgPtr msg, uint16_t length);
command void* getBuffer(TOS_MsgPtr msg, uint16_t* length);
event result_t sendDone(TOS_MsgPtr msg, result_t success);
}
Questa appena descritta è la definizione dell’interfaccia di sistema Send che consente
d’inviare un messaggio in rete. Si può notare che i comandi e gli eventi devono essere solo
elencati, non è necessario fornire nessuna implementazione. Infatti sono i fornitori di
quest’interfaccia che dovranno implementare i comandi send e getBuffer mentre gli
utilizzatori implementeranno l’evento sendDone. Talvolta possiamo trovare la parola
chiave async anteposta a command o event per specificare che il comando o l'evento
possono essere eseguiti durante la gestione di un interrupt. Un esempio di utilizzo della
parola chiave async è fornito dall’interfaccia ADC che rappresenta un tipico esempio di
88
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
interfaccia per la gestione di interrupt hardware:
interface ADC {
async command result_t getData();
async command result_t getContinuousData();
async event result_t dataReady(uint16_t data);
}
La descrizione di un'interfaccia deve essere contenuta in un file con estensione .nc e
dal nome uguale all'identificativo dell'interfaccia.
MODULI
Quando si dichiara un modulo possiamo pensare di definire due parti distinte e
semanticamente separate. Nella prima parte si specificano le interfacce utilizzate e fornite
dal componente, attraverso rispettivamente le parole chiave uses e provides. Tali
parole chiave possono essere ripetute per ogni interfaccia o possono precedere le parentesi
graffe, inoltre è possibile assegnare un alias ad ogni interfaccia tramite la parola chiave as
. Di seguito riportiamo l’esempio del modulo relativo all’applicazione Blink leggermente
modificata per evidenziare alcuni aspetti, quali l’utilizzo della parola chiave as che
permette di utilizzare la stessa interfaccia più volte per diversi scopi, definendo degli alias.
Ad esempio TimerLeds e DummyTimer rappresentano degli alias per l’interfaccia Timer,
una volta definito l’alias bisogna far riferimento sempre a questo e non più al nome
dell’interfaccia.
module BlinkM {
provides {
interface StdControl;
}
uses {
interface Timer as LedsTimer;
interface Timer as DummyTimer;
interface Leds;
}
}
89
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Quindi se ci riferiamo ad un comando o un evento X dell’interfaccia Timer , una volta
definito l’alias LedsTimer, useremo LedsTimer.X invece di Timer.X per riferirci a tale
comando o evento.
Nella seconda parte si passa all’implementazione del modulo. Questa parte inizia con la
parola chiave implementation la sintassi è molto simile al linguaggio C.
All’interno delle parentesi graffe troveremo quindi l’implementazione di ogni comando
previsto dalle interfacce fornite, e l’implementazione di ogni evento delle interfacce usate.
Un esempio d’implementazione relativo sempre all’applicazione Blink:
Si può notare l’utilizzo della parola chiave call che consente di invocare i comandi, per
sollevare eventi invece viene usata la parola chiave signal. Quindi la call viene usata
dall’utilizzatore di un’interfaccia mentre la signal viene utilizzata dal fornitore.
implementation {
command result_t StdControl.init() {
call Leds.init();
return SUCCESS;
}
...
...
event result_t Timer.fired()
{
call Leds.redToggle();
return SUCCESS;
}
}
Infine un’altra caratteristica del linguaggio è la parametrizzazione delle interfacce:
infatti è possibile assegnare un parametro numerico ad una interfaccia, in modo da
caratterizzarla ulteriormente in base al compito da svolgere. Tale parametro viene fornito
come valore racchiuso da parentesi quadre. Si possono dichiarare fino a 255 interfacce
dello stesso tipo. Un tipico esempio è fornito dall’interfaccia SendMsg infatti si deve per
forza usare una parametrizzazione dell’interfaccia se si vogliono inviare più tipi di
messaggi utente. La sintassi è la seguente:
interface SendMsg[uint8_t ID]
...
...
command SendMsg.send[uint8_t ID]
90
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
La procedura equivale a disporre di un certo numero (255) di interfacce identiche.
Focalizziamoci ora sulla logica di esecuzione. L’esecuzione di comandi e degli eventi è
immediata, infatti le parole chiave con le parole call e signal indichiamo chiamate a
funzioni che verranno eseguite da uno specifico componente. In alternativa è possibile
utilizzare i task, la cui esecuzione segue il modello di concorrenza che verrà trattato in
seguito. L'invocazione avviene tramite la parola chiave post, seguita dal nome del task.
Se la chiamata va a buon fine post restituisce immediatamente un unsigned_char di
valore 1, in caso contrario 0. Un task non può avere parametri e non ritorna nessun valore.
L’implementazione del task deve essere fornita dallo stesso componente che lo utilizza, ed
ovviamente la chiamata deve seguire la definizione, esempio:
task void myTask() {
...
...
}
...
...
post myTask();
A volte si ha la necessità di dover eseguire una serie di operazioni in successione, avendo
la garanzia che non avvengano interruzioni. E’ possibile ovviare a tale necessità,
attraverso il blocco atomic. Le istruzioni, racchiuse tra parentesi graffe, che seguono tale
parola chiave, vengono eseguite in una sequenza indivisibile. Ci si trova in questo tipo di
situazione quando ad esempio, si effettuano operazioni che coinvolgono strutture
complesse, in cui i campi vanno modificati garantendo un accesso esclusivo. I blocchi
atomici devono essere molto brevi, e per questo motivo, al loro interno, NesC non solo
non consente l'invocazione di comandi o la segnalazione di eventi, ma neanche le
istruzioni goto, return, break, continue, case, default e label.
CONFIGURAZIONI
Le configurazioni implementano un componente ed inoltre specificano il wiring tra una
collezione di altri componenti. Gli stessi file di configurazione, come i moduli, si
91
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
compongono di due parti: una dichiarazione delle interfacce fornite ed utilizzate, ed una
implementazione. La sintassi della prima parte è già stata descritta ed è uguale a quella per
i moduli. Se si sta creando il file di configurazione relativo al componente principale
dell'applicazione, tale lista può risultare vuota. Per quanto riguarda la seconda parte, ossia
l'implementazione, va specificata innanzitutto la lista dei componenti impiegati, seguita
dalle specifiche di collegamento tra le varie interfacce. Vediamo un esempio di
dichiarazione di lista dei componenti, relativo all’applicazione utente sgarySenseTask
Si può notare che è stato dichiarato un alias Sensor per il componente DemoSensorC.
implementation
{
components Main,
SenseTaskM,
LedsC,
TimerC,
DemoSensorC as Sensor;
...
}
Alla dichiarazione dei componenti utilizzati, di solito fa seguito il wiring che prevede due
diverse modalità per due diversi tipi d’interfacce interne ed esterne:
interface A -> interface B
interface A = interface B
Le interfacce interne rappresentano quelle implementate nel modulo a cui si riferisce il file
di configurazione, mentre quelle esterne vengono implementate in altri moduli.
La prima modalità collega due interfacce interne, il verso della freccia sta ad indicare chi è
l’utilizzatore e chi il fornitore, la seconda modalità può coinvolgere due interfacce esterne
di cui una utilizzata e l’altra fornita oppure un’interfaccia interna ed un’ esterna, entrambe
fornite o utilizzate.
Inoltre è possibile collegare tra loro non solo interfacce ma anche comandi o eventi, con la
stessa sintassi. In entrambi i tipi di wiring le specifiche dei due elementi collegati devono
essere compatibili, essi devono essere entrambi comandi, eventi o interfacce. Se si stratta
di comandi o eventi devono avere la stessa dichiarazione, se si tratta di interfacce devono
essere la medesima interfaccia relativa a diversi componenti. E’ possibile riferirsi alle
92
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
interfacce in maniera implicita. Ad esempio se il componente A ed il componente B
forniscono la medesima interfaccia X le due dichiarazioni seguenti si equivalgono:
A.X -> B.X
A.X -> B
Ovviamente nel caso in cui venga usato un alias si farà riferimento ad esso in sede di
wiring, esempio:
module M1 {
provides {
interface StdControl
...
}
...
...
}
module M2 {
uses {
interface StdControl as SC
...
}
...
...
}
Di seguito riportiamo due equivalenti e corrette sintassi di wiring relative all’esempio:
M2.SC -> M1.StdControl;
M2.SC -> M1;
E’ possibile effettuare collegamenti multipli di un interfaccia. In tal caso ogni evento
sollevato oppure ogni comando invocato, a seconda del ruolo dell'interfaccia in questione,
comporterà l'esecuzione di più funzioni.
Per completezza riportiamo la sintassi completa per un tipico schema di programmazione
di un componente, dichiarazione dell’interfaccia (e dei suoi comandi ed eventi),
configurazione (con la dichiarazione delle interfacce utilizzate e fornite, con la lista dei
componente e l’implementazione) e modulo (con la specifica delle interfacce utilizzate e
fornite e l’implementazione relativa) .
93
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
interface X {
command int f();
event void g(int x);
}
configuration C {
provides interface X;
provides command void hbis();
} implementation{
componentsM;
X=M.P;
M.U -> M.P;
hbis = M.h;
}
module M{
provides interface X as P;
uses interface X as U;
provides command void h();
} implementation{
....
}
4.2.3 Modello di concorrenza
Il modello di esecuzione di un'applicazione NesC prevede due tipi di esecuzione: sincrona,
ed asincrona. Viene eseguita in maniera sincrona tutta quella porzione di codice relativa ai
task e tutti i comandi e le funzioni raggiungibili solo da essi, l’esecuzione avviene in modo
atomico rispetto alle altre funzioni sincrone.
Questo vuol dire che il gestore di esecuzione mantiene una lista, in cui vengono salvati i
riferimenti ai task da eseguire per ogni chiamata effettuata con post, e attende sempre
il termine di un task prima di lanciare il successivo. Viene dunque costruita una coda di
task di dimensioni finite, ogni istruzione post, anche se invoca lo stesso task, occupa una
posizione all’interno della coda. Qualora ad una nuova chiamata tale coda risultasse piena
viene restituito il valore 0 che segnala il fallimento dell'accodamento.
Insieme a queste esecuzioni sincrone vi è un sistema asincrono, rappresentato da quelle
funzioni che possono essere raggiunte da almeno un gestore di interrupt. Esse possono
interrompere in qualsiasi momento l'esecuzione del codice sincrono. Proprio in queste
situazioni possono verificarsi le race conditions , ovvero la modifica da parte del codice
asincrono di una variabile di stato in uso dal codice interrotto, che può essere sincrono o
94
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
no. Ovviamente questo è un comportamento indesiderato in quanto può determinare un
malfunzionamento dell'intera applicazione ed infatti viene segnalato dal compilatore che
in corrispondenza della situazione genera un warning. Certo queste avvertenze a volte
sono frutto di uno zelo eccessivo e possono spesso essere ignorate, per contro è molto
difficile che si possa generare una race conditions senza che il compilatore lo segnali. Il
compilatore segnala come possibili race conditions allorché il codice asincrono interviene
sul valore di variabili globali, che potrebbero essere in uso dal codice interrotto. Per
evitare le segnalazioni si può utilizzare la parola chiave norace prima della dichiarazione
della variabile in questione; tuttavia è consigliabile in questo caso porre molta attenzione
alle possibili situazioni critiche descritte, non sempre evidenti. Se si vuole essere sicuri
che non si verifichi una race conditions pur necessitando all'interno del codice sincrono la
garanzia di accesso esclusivo al contesto globale, possiamo racchiudere il codice relativo
in un blocco atomic tenendo però sempre presente i limiti già esposti. Il compilatore
segnala un errore qualora si tenti di accedere, in un contesto asincrono, a funzioni che non
siano precedute nella loro dichiarazione dalla parola chiave async.
In un contesto asincrono, questo accorgimento consente di garantir l’esecuzione di solo
codice asincrono ed evita che involontariamente venga eseguito del codice in modalità
asincrona senza che il progettista abbia considerato questa possibilità.
4.2.4 Esempio pratico: applicazione TestSwingMessage
In seguito verrà descritta e rappresentata l’intera struttura di una semplice applicazione
utente scritta per TinyOS. Questo esempio lo ritroviamo interamente in seguito
nell’implementazione dell’algoritmo ROCRSSI++. Infatti come si vedrà in seguito, i
componenti principali RfmToBea e BeaToRfm qui definiti, rappresentano rispettivamente i
componenti RfmToSink e NodeToRfm che verranno definiti quando si parlerà
dell’implementazione dell’algoritmo proposto. L’applicazione prende il nome di
TestSwingMessag. Quest’applicazione consiste nel testare lo scambio di messaggi tra i
sensori che compongono la nostra rete. Ogni sensore invia, periodicamente, un messaggio
utente che chiameremo “beacon” , i nodi che ricevono tale messaggio lo “spacchettano”,
95
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
leggono le informazioni contenute al suo interno e verificano se sono quelle attese. In
figura 4.6 viene riportato il wiring dei componenti generato tramite il comando:
ncc <piattaforma> -tosdir=<directory applicazione> -graphviz=y
oppure avendo configurato correttamente il makefile, si può generare la documentazione
relativa ad una applicazione Nesc semplicemente attraverso il comando:
make <piattaforma> docs
Figura 4.7 – Wiring del componente principale TestSwingMessage
Osserviamo il contenuto del file di configurazione TestSwingMessage.nc. Essendo questo
il componente di più alto livello, al suo interno troviamo solamente la lista dei componenti
utilizzati ed il wiring che rispecchia il modello di figura 4.7.
96
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
configuration TestSwingMessage {
}
implementation {
components Main, BeaGen, BeaToRfm, RfmToBea, TimerC;
Main.StdControl -> BeaGen.StdControl;
Main.StdControl -> BeaToRfm.StdControl;
Main.StdControl -> RfmToBea.StdControl;
Main.StdControl -> TimerC.StdControl;
BeaGen.Timer -> TimerC.Timer[unique("Timer")];
BeaGen.MsgLoc -> BeaToRfm;
RfmToBea.MsgLoc -> BeaToRfm;
}
L’applicazione include i seguenti componenti
Main: necessario per l’avvio
BeaGen: che fornisce l’interfaccia StdControl (come tutti gli altri) ed utilizza
l’interfaccia MsgLoc per inviare messaggi allo scadere del Timer
BeaToRfm: che fornisce l’interfaccia MsgLoc
TimerC: che fornisce l’interfaccia Timer
RfmToBea: che utilizza l’interfaccia MsgLoc per ricevere i messaggi dalla rete
ed estrapolare il messaggio utente (che in questo caso è il BeaconInf)
La cosa più interessante da notare è che l’interfaccia StdControl sia collegata a quattro
componenti diversi partendo dal componente principale, questo consente di identificare
quali sono i primi componenti ad essere eseguiti.
In seguito è riportato il codice contenuto nel file BeaGen.nc (ad esclusione dei commenti).
Analizziamo nel dettaglio il componente BeaGen che rappresenta il modulo principale
dell’applicazione: si può notare che nella prima riga dell’implementazione vi è una
dichiarazione di una variabile globale di tipo beaconInfo_t * b che identifica un
puntatore alla struttura dati beaconInfo (definita nel file header LocMsg.h) dopodichè
troviamo l’implementazione dei tre comandi relativi all’interfaccia fornita StdControl:
init(), start() e stop(). In particolare all’interno del comando start() troviamo
una chiamata allo stesso comando per l’interfaccia Timer.
97
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
module BeaGen {
provides {
interface StdControl;
}
uses {
interface Timer;
interface MsgLoc;
}
}
implementation {
beaconInfo_t *b;
command result_t StdControl.init()
{
return SUCCESS;
}
command result_t StdControl.start()
{
return call Timer.start(TIMER_REPEAT, 250);
}
command result_t StdControl.stop()
{
return call Timer.stop();
}
event result_t Timer.fired()
{
call MsgLoc.sendRfmBeaInf(b);
return SUCCESS;
}
}
In seguito troviamo l’implementazione dell’evento event result_t Timer.fired()
relativo all’interfaccia utilizzata. Al suo interno troviamo un’istruzione di call che
identifica una chiamata al comando relativo dell’interfaccia MsgLoc passandogli il
parametro b. In pratica questo componente, allo scadere del timer, quindi all’occorrenza
dell’evento relativo, invia un messaggio di tipo beaconInfo_t in rete tramite
l’interfaccia MsgLoc.
Analizziamo adesso in dettaglio i componenti RfmToBea e BeaToRfm e l’implementazione
dei relativi moduli RfmToBeaM e BeaToRfmM.
Iniziamo con il componente BeaToRfm, questo componente fornisce l’interfaccia MsgLoc
utilizzata dal componente BeaGen per l’invio dei messaggi via radio, il modello è riportato
in figura 4.8
98
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Figura 4.8 – Wiring del componente BeaToRfm
Innanzitutto chiariamo che i collegamenti con linee tratteggiate indicano che il wiring è
stato fatto utilizzando la sintassi :
MsgLoc = BeaToRfmM
StdControl = BeaToRfmM;
utilizzata per riferirsi ad interfacce esterne, mentre i collegamenti con linee intere indicano
il wiring implementato:
BeaToRfmM.SendInf -> Comm.SendMsg[AM_BEAINF];
BeaToRfmM.SendTab -> Comm.SendMsg[AM_BEATAB];
Il componente BeaToRfmM, utilizza due interfacce SendMsg ridefinite tramite i rispettivi
alias SendInf e SendTab, questo permette di inviare due tipologie di messaggi utente.
Come si può notare dal codice, in fase di wiring l’interfaccia SendMsg viene
parametrizzata con i valori AM_BEAINF e AM_BEATAB che identificano il tipo di Active
Message usato per quell’interfaccia. Focalizziamoci ora su alcuni aspetti implementativi
del modulo. Nella definizione delle interfacce utilizzate definiamo l’alias per le due
interfacce SendMsg. Dopodichè nel blocco implementation troviamo la definizione della
variabile
globale
data
di tipo
TOS_Msg
e
l’implementazione
del
comando
sendRfmBeaInf(.): la prima operazione ci consente di associare il campo data della
variabile di tipo TOS_Msg alla struttura dati definita dall’utente beaconInfo_t, poi si
effettua un controllo per garantire la mutua esclusione sull’accesso alla variabile globale
data, si assegna un valore al campo ID utilizzando un blocco atomic, s’invia il
messaggio utente incapsulato in un TOS_Msg cosi come descritto in figura 4.4 ed infine si
ritorna l’esito dell’operazione. Inoltre è riportata anche l’implementazione dell’evento
99
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
SendInf.sendDone(.), al verificarsi di quest’evento resettiamo la variabile booleana
pending ed effettuiamo un signal sull’interfaccia MsgLoc.
module BeaToRfmM
{
uses {
interface StdControl as SubControl;
interface SendMsg as SendInf;
interface SendMsg as SendTab;
}
provides {
interface MsgLoc;
interface StdControl;
}
}
implementation
{ TOS_Msg data;
...
command result_t MsgLoc.sendRfmBeaInf(beaconInfo_t *bi)
{
bi = (beaconInfo_t *)data.data;
if (!pending)
{
pending = TRUE;
atomic {
bi->id = TOS_LOCAL_ADDRESS;
}
call SendInf.send(TOS_BCAST_ADDR, sizeof(beaconInfo_t),
&data);
return SUCCESS;
}
return FAIL;
}
event result_t SendInf.sendDone(TOS_MsgPtr msg, result_t
success)
{
pending = FALSE;
signal MsgLoc.sendComplete(success);
return SUCCESS;
}
Queste operazioni appena descritte sono di particolare rilevanza in quanto sono alla base
del meccanismo di comunicazione che è stato utilizzato per realizzare un’implementazione
NesC dell’algoritmo ROCRSSI++.
Per completezza riportiamo il modello del componente RfmToBea (in figura 4.9) questo
componente ha uno scopo duale al componente visto prima, in quanto gestisce
l’occorrenza di eventi quali la ricezione di messaggi radio estrapolando dal loro interno, il
100
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
messaggio beaconInfo_t . Analogamente a quanto detto prima, anche in questo caso si
utilizzano due interfacce ReceiveMsg che saranno distinte tramite l’uso di alias, che
consentono di particolarizzare il comportamento a seconda del tipo di messaggio ricevuto
Figura 4.9 – Wiring del componente RfmToBea
.
Analizziamo ora il modulo RfmToBeaM (il codice è riportato di seguito). La cosa più
interessante che si evince anche dal codice è l’implementazione di due eventi
receive(TOS_MsgPtr m), uno per ogni interfaccia e quindi uno per ogni tipo di
messaggio. Per quanto riguarda i comandi il discorso è praticamente identico a quello fatto
in precedenza per il modulo BeaToRfmM.
101
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
module RfmToBeaM {
provides interface StdControl;
uses {
interface ReceiveMsg as ReceiveBeaInfMsg;
interface ReceiveMsg as ReceiveBeaTabMsg;
interface MsgLoc;
interface StdControl as CommControl;
}
}
implementation {
command result_t StdControl.init() {...}
command result_t StdControl.start() {...}
command result_t StdControl.stop() {...}
event TOS_MsgPtr ReceiveBeaInfMsg.receive(TOS_MsgPtr m) {
beaconInfo_t *beaInf = (beaconInfo_t *)m->data;
...
return m;
}
event TOS_MsgPtr ReceiveBeaTabMsg.receive(TOS_MsgPtr m) {
beaconTab_t *beaTab = (beaconTab_t *)m->data;
...
return m;
}
...
}
4.3 Implementazione del ROCRSSI++
Nel paragrafo precedente si è cercato di delineare l’ambiente e le caratteristiche del
linguaggio di programmazione NesC, si sono fatti poi esempi di componenti ed interfacce
fino alla realizzazione di una semplice applicazione. Si è cercato quindi di fornire alcuni
elementi base per la comprensione della modalità d’implementazione dell’algoritmo di
localizzazione proposto: il ROCRSSI++. Si partirà dall’analisi del componente di più alto
livello, se ne darà il modello di wiring, si identificheranno i vari componenti fornendo una
loro descrizione dopodichè si entrerà nel dettaglio di alcuni componenti fondamentali fino
all’illustrazione di porzione di codice delle parti più interessanti.
4.3.1 Componenti principali del sistema di localizzazione
Per realizzare concretamente il sistema di localizzazione, l’applicazione è stata suddivisa
102
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
in componenti in modo da garantire i criteri di programmazione quali modularità ed
estendibilità che sono caratteristici della programmazione in TinyOS. Inoltre si è cercato
di implementare il sistema offrendo vari livelli di astrazione, da quello più alto (che
garantisce l’indipendenza dal particolare algoritmo di localizzazione) fino ai livelli di
astrazione hardware, per garantire la portabilità del software svincolandolo dalle
particolari piattaforme hardware. In tabella 4.3 sono elencati i principali componenti
utilizzati che compongono l’applicazione e la relativa descrizione
COMPONENTE
DESCRIZIONE
TestRocRssiC
E’ il componente di più alto livello utilizzato
per far partire l’applicazione
BeaInfoStorageC
Questo componente gestisce tutte le
informazioni necessarie alla localizzazione
LocC
Fornisce un livello di astrazione al sistema in
merito all’algoritmo di localizzazione
RocRssiC
Sviluppa l’algoritmo di localizzazione
ROCRSSI++
ADCC
Utilizzato per la rilevazione del valore di
RSSI e Battery
GenericComm
E’ il responsabile dell’invio e ricezione dei
messaggi radio
TimerC
Fornisce un timer e ne segnala la fine del
conteggio
LedsC
NodeToRfm
RfmToSync
Controlla l’accensione e lo spegnimento dei
led
Utilizzato in fase di test reali su sensore,
invia un messaggio radio
Utilizzato in fase di test reali su sensore,
riceve il messaggio radio e lo invia alla porta
seriale
UARTComm
Si usa per la comunicazione seriale
Tabella 4.3 – Componenti e descrizione
103
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Prima di passare all’illustrazione dei vari componenti si osservi la figura 4.10 dove è
riportata una struttura a livelli dell’ applicazione che dà orientativamente un’ idea di quali
sono i componenti di livello utente e quali quelli di livello più basso
Figura 4.10 – Struttura a livelli dell’applicazione realizzata
Il livello più alto (rappresentato in verde) è costituito dal componente principale ossia
TestRocRssiC, i componenti di primo livello immediatamente successivi (in blu) sono quei
componenti che forniscono le interfacce necessarie per utilizzare il sistema di
localizzazione, i componenti di secondo livello (in arancione) sono i componenti che
implementano l’algoritmo di localizzazione ROCRSSI++ utilizzando i componenti e le
interfacce di sistema sottostanti, queste a loro volta s’interfacciano con il livello di
astrazione hardware fornito da TinyOS.
4.3.2 Wiring dei Componenti
Nell’illustrare i particolari dei componenti principali nonché il loro modello di wiring,
104
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
partiamo dal componente di più alto livello, ossia quello che da il nome all’applicazione:
TestRocRssiC . In figura 4.11 è illustrato il wiring dei componenti relativo ad esso
Figura 4.11 – Wiring componente TestRocRssiC
I nodi rappresentano i componenti mentre gli archi sono le interfacce, il verso degli archi
va dall’utilizzatore dell’interfaccia al suo fornitore. Si può notare che il componente
principale Main utilizza cinque interfacce StdControl per avviare i componenti di primo
livello. Si trascurano i componenti NodeToRfm e RfmToSink, utilizzati solamente in fase di
testing e già nell’esempio del paragrafo precedente e si analizzano gli altri. Il componente
TimerC è un componente di sistema ed è necessario per utilizzare dei timer all’interno
dell’ applicazione. Infatti viene utilizzato, tramite l’interfaccia Timer, da un altro
componente di primo livello quale il TestRocRssiM che rappresenta il modulo del
componente principale, che ha lo scopo di far partire le operazioni di localizzazione e di
gestire l’evento di avvenuta localizzazione. Il componente TestRocRssiM utilizza
l’interfaccia SetAndGetInfo per settare e ricevere informazioni relative ai beacon e ai nodi
105
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
dal componente che detiene tali informazioni ossia BeaInfoStorageC. Infine utilizza
l’interfaccia MsgLoc per inviare il messaggio contenente le coordinate del nodo che ha
effettuato la localizzazione, questo comportamento si ha solo in fase di test. L’ultimo
componente di primo livello è il LocC che fornisce un livello di astrazione relativo
all’algoritmo di localizzazione utilizzato, infatti il componente TestRocRssiC utilizza
l’interfaccia Loc per demandare il compito di effettuare la localizzazione al componente
che fornisce tale interfaccia ossia proprio LocC, quindi in effetti, è a quest’ultimo
componente che spetta la scelta di quale algoritmo di localizzazione utilizzare. In figura
4.12 è riportato il wiring del componente LocC
Figura 4.12 – Wiring del componente LocC
Come si può notare anche dalla figura, il componente LocC rappresenta un’astrazione
dell’algoritmo di localizzazione utilizzato nella nostra applicazione, infatti in fase di
wiring ci limitiamo ad effettuare un’ uguaglianza tra le interfacce Loc e StdControl con il
componente che implementa la localizzazione, in questo caso è RocRssiC. In questo modo
si ha il grande vantaggio di poter sostituire l’algoritmo di localizzazione semplicemente
utilizzando un altro componente al posto del RocRssiC questo ovviamente contribuisce a
rendere il sistema modulare ed estendibile.
Avendo analizzato i componenti di primo livello, occupiamoci adesso di quelli di secondo
livello partendo proprio dal componente che implementa l’algoritmo di localizzazione.
Il wiring del componente RocRssiC riportato in figura 4.13 illustra che questo componente
controlla i componenti RocRssiM e BeaInfoStorage tramite l’interfaccia StdControl ed
106
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
utilizza
l’interfaccia
Loc
fornitagli
da
RocRssiM.
In
pratica
lascia
l’onere
dell’implementazione dell’algoritmo ai due componenti, in particolare utilizza l’interfaccia
Loc sia per avviare il processo di localizzazione che per gestire l’evento di avvenuta
localizzazione. Il componente RocRssiM a sua volta utilizza l’interfaccia BeaInfoStorage
Figura 4.13 – Wiring componente RocRssiC
per utilizzare le informazioni detenute dal fornitore di tale interfaccia ovvero
BeaInfoStorageC. Consideriamo adesso proprio il wiring relativo a quest’ultimo
componente illustrato in figura 4.13. Il componente BeaInfoStorageC delega al
componente BeaInfoStorageM il compito di fornire le interfacce utilizzate dai componenti
di livello superiore. Quest’ultimo componente ha il compito di raccogliere, inviare e
ricevere informazioni che saranno poi utilizzate per realizzare il sistema di localizzazione
ROCRSSI++. A questo punto bisogna fare una precisazione, il modulo BeaInfoStorageM
contiene al suo interno sia le istruzioni dedicate ai beacon sia le istruzioni dedicate ai nodi.
Questo permette di rendere l’intera applicazione più flessibile e riconfigurabile ed inoltre
consente di caricare la stessa applicazione su tutti i nodi della rete, che saranno distinti tra
beacon e nodi incogniti in base al loro ID (che sarà scritto nella memoria EEPROM in fase
d’installazione del programma). Il componente BeaInfoStorageC quindi, detiene per ogni
nodo della rete, informazioni riguardanti:
Il tipo di nodo (beacon di 1° livello, beacon di 2° livello, nodo) ed eventualmente
le sue coordinate (se si tratta di un nodo beacon)
La fase attuale dell’algoritmo
107
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
La tabella dei vicini con le relative informazioni
Contatore di messaggi inviati e ricevuti
inoltre contiene tutta un’altra serie informazioni che illustreremo in seguito. Ritorniamo
all’analisi della figura 4.14, e facciamo una precisazione, in figura non sono riportate
effettivamente tutte le interfacce utilizzate da BeaInfoStorageM e fornite da GenericComm
Figura 4.12 – Wiring del componente BeaInfoStorageC
Figura 4.14 – Wiring del componente BeaInfoStorage
ma solo la loro tipologia: SendMsg e ReceiveMsg infatti vengono utilizzate tante interfacce
SendMsg e ReceiveMsg quanti sono i tipi di messaggio utilizzati. Inoltre si può notare che
il componente BeaInfoStorageM utilizza:
L’interfaccia Leds, fornita da LedsC, per controllare i led del sensore (utilizzabili
anche per scopi di debug)
Le interfacce Rssi e BattLife fornite dal componente ADCC, usate
108
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
rispettivamente per rilevare il valore di rssi e l’autonomia della batteria
Le interfacce PhaseTimer e TxTimer, fornite da TimerC, che rappresentato
rispettivamente il timer di fase ed il timer di trasmissione messaggi
Ovviamente i componenti forniti dal sistema TinyOS come LedsC e TimerC definiscono
nei propri file di configurazione ulteriori wiring di componenti di più basso livello che
però non saranno oggetto di trattazione. In seguito invece verranno trattati alcuni aspetti
implementativi riguardo i vari moduli e configurazioni relativi all’applicazione.
4.4 Dettagli d’implementazione
In quest’ambito non verranno forniti i listati completi dei file riguardanti configurazioni,
moduli ed interfacce dell’applicazione, ma di questi si mostrerà quali sono le funzionalità
peculiari e come sono state implementate. Si partirà dall’illustrezione del file di libreria
contenente le strutture dati e le altre informazioni definite dall’ utente, poi si analizzarà in
dettaglio i componenti che implementano la localizzazione fino ad arrivare ai componenti
di più alto livello. Si sottolinea che anche in questo caso, come avviene abitualmente
nell’implementazione degli algoritmi distribuiti, si è progettata un’unica applicazione per
tutti i tipi di nodi presenti nella rete (beacon e nodi) in modo che ognuno di esso possa
assumere, eventualmente, entrambi i comportamenti. Normalmente il nome di un
componente si riferisce al proprio file di configurazione, nei sottoparagrafi successivi si
continuerà con questa convenzione.
4.4.1 File header: BeaconMsg.h
In questo file sono specificate le struttura dati e tutte quelle definizioni necessarie per lo
sviluppo dell’applicazione, riportiamo frammenti di codice riguardanti la prima parte del
file. Innanzitutto definiamo la grandezza dell’area su cui si estende la WSN (questa
informazione è necessaria per apportare le migliorie introdotte dal ROCRSSI+) in questo
caso è stata fissata ad una grandezza di 10x10 metri. Inoltre definiamo il numero di celle
che compongono la griglia necessaria per le operazioni di localizzazione (in seguito
109
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
...
// Dimensioni dell'area da scansionare [cm]
#define WIDTH 1000
#define HEIGHT 1000
// Griglia
#define DIM_X 51
#define DIM_Y 101
...
enum {AM_BEAMSG = 44,
AM_BEATAB = 45,
AM_COORDMSG = 46,
AM_BEACONREADY = 47,
AM_READY4BEACON = 48};
//Definizione tipo enumerativo ring area
typedef enum ringArea {INSIDE,OUTSIDE,BETWEEN} ringArea_t;
...
// fattore di scalamento
#define SCALE 255/1000
#define SCALE_PC 1000/255
verranno spiegate in dettaglio), dichiariamo un tipo enumerativo che contiene l’elenco dei
messaggi utente sottoforma di Active Message, utilizzati per la parametrizzazione delle
interfacce SendMsg e ReceiveMsg, infine utilizziamo l’enumerazione ringArea_t per
classificare la regione da scansionare (anche quest’aspetto verrà chiarito in seguito). Un
discorso più ampio si deve sulla rappresentazione numerica, infatti data la limitata capacità
di memoria e per limitare i consumi energetici, si è scelto di rappresentare le coordinate
all’interno del sensore, mediante numeri a virgola fissa. Inoltre si deve tener conto che
bisogna memorizzare una grande quantità di coordinate e che queste sono poi inserite
all’interno dei messaggi che vengono trasmessi via radio. Quindi per limitare il payload
dei messaggi e la loro occupazione in memoria si è scelto di discretizzare e quantizzare
tutte le coordinate delle posizioni utilizzando i coefficienti scalati nelle operazioni di
calcolo. Ovviamente questo implica una perdita di informazione, dato che la
quantizzazione non è una trasformazione invertibile comunque dalle prove effettuate si
evince che gli errori dovuti allo scalamento non sono significativi rispetto agli altri errori
che affliggono il sistema. Consideriamo un esempio relativo all’applicazione: la rete si
estende in un’area di 10x10 metri, si esprimano le coordinate in centimetri utilizzando
numeri interi senza segno. Se si vuole memorizzare ogni coordinata in un byte è
110
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
necessario prima normalizzarla dividendo per la lunghezza della regione e
moltiplicando per il numero di valori rappresentabili con un byte (in questo caso quindi la
si moltiplica per il fattore di scala (255/1000)). Nella quantizzazione uniforme l’errore è
dato da:
e
Pq
2
dove Pq è il passo di quantizzazione ed è uguale a:
Pq
1
Fs
dove Fs è il fattore di scala. In questo caso si ha che Fs
255 / 1000 , Pq
1 / 0.255 e
quindi l’errore introdotto dalla quantizzazione è pari a 1.96 cm.
Nella seconda parte sono specificate le strutture dati utilizzate per la memorizzazione e lo
scambio
d’informazioni necessarie ai fini dell’applicazione. Per completezza le
riportiamo di seguito.
Partendo dalla prima struttura dati, di seguito si riportano le relative descrizioni :
coord: contiene le coordinate del nodo
CoordMsg: (AM_COORDMSG) messaggio utilizzato per trasmettere le coordinate
in rete del nodo incognito che ha effettuato la localizzazione
beaconMsg: (AM_BEAMSG) messaggio usato dai beacon durante prima fase
beaconTable: (AM_BEATAB) messaggio utilizzato dai nodi incogniti per
localizzarsi
neighborsTab: tabella contenente le informazioni relative ai propri vicini
beaconReady: (AM_BEACONREADY) messaggio inviato dai beacon al termine
della prima fase
ready4Beacon: (AM_READY4BEACON) messaggio inviato dai beacon di 2°
livello
111
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
...
typedef struct coord {
uint8_t x;
uint8_t y;
} coord_t;
typedef struct CoordMsg {
uint16_t moteID;
uint16_t x;
uint16_t y;
} coordMsg_t;
typedef struct beaconMsg {
uint16_t moteID;
uint8_t type;
coord_t coordinate;
uint16_t rssi_dBm;
} beaconMsg_t;
...
typedef struct neighborsTab {
beaconMsg_t info[MAX];
uint16_t numberOfNeighbors;
} neighborsTab_t;
...
typedef struct beaconTable {
uint16_t moteID;
uint8_t type;
coord_t coordinate;
neighborsTab_t data;
} beaconTable_t;
...
typedef struct beaconReady {
uint16_t moteID;
} beaconReady_t;
typedef struct ready4Beacon {
uint16_t moteID;
bool readyOrNot;
coord_t coordinate;
neighborsTab_t data;
} beaconReady_t;
4.4.2 Componente RocRssiC
Questo componente è utilizzato dai nodi incogniti per effettuare la localizzazione. In
ingresso riceve messaggi contenenti le tabelle dei vicini di ogni beacon ed il relativo
valore rssi e dopo aver effettuato le operazioni necessarie, restituisce le coordinate
sottoforma di (x;y).
112
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
configuration RocRssiC {
provides {
interface StdControl;
interface Loc;
}
}
implementation {
components BeaInfoStorageC, RocRssiM
StdControl = BeaInfoStorageC;
StdControl = RocRssiM;
Loc = RocRssiM;
RocRssiM.BeaInfoStorage -> BeaInfoStorageC;
...
}
Si può notare che il compito di fornire l’interfaccia Loc è rimandato al modulo RocRssiM
qui vi è solo il wiring del componente BeaInfoStorageC utilizzato tramite la propria
interfaccia. Riportiamo quindi le parti salienti del codice relativo al modulo RocRssiM
module RocRssiM {
provides {
interface StdControl;
interface Loc;
}
uses {
interface BeaInfoStorage;
}
}
implementation {
...
void localize(coord_t *,const uint16_t, neighborsTab_t * ){...}
void scan(ringArea_t status,..., coord_t *posBref){...}
...
event result_t BeaInfoStorage.newBeaconMsg(uint16_t avgRssi,
beaconTable_t *pBeaconMsg )
{
…
iterations++;
localize(&(pBeaconMsg->coordinate),
avgRssi,&(pBeaconMsg->data));
…
if (iterations == MIN_NUM_BEACON) {
signal Loc.localizationDone(&position);
}
return SUCCESS;
}
...
}
113
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
interface BeaInfoStorage {
command neighborsTab_t * getNeighborTable();
event result_t newBeaconMsg(uint16_t,beaconTable_t);
}
Quando un nodo incognito riceve un beaconTable viene attivato l’evento
newBeaconMsg relativo all’interfaccia BeaInfoStorage (il cui codice è sopra riportato)
quindi inizia a stimare la propria posizione chiamando la funzione localize(…)
passandogli come parametri: le coordinate del beacon di cui ha appena ricevuto il
messaggio, il valore di rssi rilevato e la tabella dei vicini del beacon. Tutti i nodi incogniti
suddividono l'intera area della WSN (le cui dimensioni sono settate a priori) in celle di una
griglia e li associano un contatore inizialmente con valore pari a zero. Per ogni tabella
ricevuta il nodo individua la regione definita dalla corona circolare oppure dalla
circonferenza entro cui stima di trovarsi. Questa operazione è resa possibile attraverso il
confronto di valori di RSSI memorizzati nella tabella dei vicini con quello di RSSI relativo
al messaggio beaconTable ricevuto che la contiene come descritto in precedenza. A
questo punto, avendo individuato la regione d’interesse, il nodo incognito, può effettuare
la scansione di tutta la griglia tramite la funzione appositamente definita: scan(…),
incrementando il contatore delle celle corrispondenti a punti della rete interni al tale
regione. Iterando questo procedimento si arriverà ad una regione sempre più limitata,
caratterizzata da celle che avranno il contatore con valore maggiore rispetto a tutte le altre.
A scopo illustrativo è fornito un esempio grafico di scansione ed incremento dei contatori
per ogni cella. In figura 4.15 è mostrato un esempio in cui il nodo incognito S si localizza
tramite i tre beacon A,B e C. Il nodo S riceve un messaggio dal beacon A contenente
informazioni sui beacon vicini e si localizza all’esterno della circonferenza di raggio AB ,
quindi s’incrementano i contatori esterni a tale circonferenza. Poi riceve un simile
messaggio dal beacon C e si localizza nella circonferenza di raggio
CB dopodichè
s’incrementano i relativi contatori. Infine, ricevendo il messaggio dal beacon B. il nodo S
s’identifica nella corona circolare di raggio interno BA e raggio esterno BC e incrementa i
contatori delle celle appartenenti a questa corona circolare.
114
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Figura 4.15 – Esempio di scansione ed incremento dei contatori
Per effettuare una stima della posizione del nodo incognito S è sufficiente calcolare il
baricentro della regione avente le celle con i contatori più alti (in figura 4.15 questa
regione è evidenziata inverde), tramite le formule:
1
1
x
xi mi
y
miI
m
yi mi
i I
Dove I è l’insieme dei punti avente contatore più alto,
xi , y i
rappresentano le
coordinate della cella i-esima, mi è il valore del contatore associato ed m è la somma di
tutti i contatori delle celle appartenenti ad I . Visto che tutte le celle di I hanno lo stesso
valore si utilizzano le formule :
x
1
n
xi
y
i I
1
n
yi
i I
Dove n rappresenta la cardinalità dell’insieme I
Vista l’importanza del ruolo ricoperto dalla griglia di celle, in quanto è grazie a questa che
riusciamo ad effettuare le operazioni di localizzazione, è opportuno fare alcune
considerazioni. Disporre di un numero di celle molto alto sicuramente migliora
115
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
l'accuratezza della procedura di scansione, a scapito però di un aumento della complessità
di calcolo e della memoria occupata. Quest’ ultimi rappresentano i parametri di progetto
che devono essere utilizzato nel dimensionare la griglia. Cercando il giusto trade-off tra i
parametri di progetto descritti e l’accuratezza della sima di localizzazione, si è preso
spunto da [29] e si è deciso di costruire una griglia di 101 per 102 celle, assegnando a
ciascuna cella un contatore di mezzo byte (4 bit) per un'occupazione complessiva di 5151
byte. Questa limitazione fa si che si effettuino al più 15 scansioni (che comportano un
relativo aumento del valore del contatore), quindi ogni nodo può acquisire informazioni al
massimo da 15 beacon. Questo è un numero più che ragionevole visto che di fatto, si
scelgono i migliori tre, e che l’area di test è piuttosto limitata. Questo tipo si soluzione
introduce inevitabilmente delle approssimazioni in quanto ad esempio, in una rete che si
estende su un'area di dimensioni 10x10 metri, si è in grado di distinguere punti che distano
almeno circa 10 cm l'uno dall'altro; questo non causa grossi problemi nella determinazione
della posizione stimata in quanto la regione d'intersezione trovata coinvolge un numero di
celle sufficiente a far si che l’effetto dell'approssimazione non sia rilevante.
4.4.3 Componente BeaInfoStorageC
E’ il componente che detiene tutte le informazioni necessarie ai nodi incogniti per
effettuare la localizzazione. Si può notare dal file di configurazione di seguito riportato,
che come avviene in ogni file di configurazione, anche in questo caso, si rimanda al
modulo, in questo caso, BeaInfoStorageM l’onere di fornire le interfacce utilizzate. In
particolare il modulo fornisce l’interfaccia SetAndGetInfo utilizzata dal componente
TestRocRssiC, l’interfaccia BeaInfoStorage utilizzata dal componente RocRssiC ed infine
l’interfaccia RssiUtil non utilizzata in quest’ambito ma pensata per sviluppi futuri qualora
un componente di più alto livello, volesse accedere ad informazioni del modulo inerenti il
calcolo del valore medio di RSSI.
116
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
configuration BeaInfoStorageC {
provides {
interface RssiUtil;
interface StdControl;
interface BeaInfoStorage;
interface SetAndGetInfo;
}
}
implementation {
components …
RssiUtil = BeaInfoStorageM;
StdControl = BeaInfoStorageM;
BeaInfoStorage = BeaInfoStorageM;
SetAndGetInfo = BeaInfoStorageM;
BeaInfoStorageM.SendBeaTab -> Comm.SendMsg[AM_BEATAB];
BeaInfoStorageM.ReceiveBeaTab -> Comm.ReceiveMsg[AM_BEATAB];
…
BeaInfoStorageM.RssiADC -> ADCC.ADC[0];
BeaInfoStorageM.BattADC -> ADCC.ADC[7];
}
Niente di nuovo da dire sul wiring relativo alle interfacce SendMsg e ReceiveMsg. Risulta
invece interessante il wiring relativo all’interfacciamento con il componente ADCC,
infatti qui si deve specificare la porta del canale relativo all’informazione desiderata.
Utilizzando il sensore MICA2 (di cui si parlerà in seguito), per ciò che riguarda il valore
di RSSI ci si metterà in ascolto sul canale 0, mentre per il valore di batteria si ascolterà il
canale 7. Riferiamoci alla parte più interessante ossia al modulo BeaInfoStorageM.
Innanzitutto si riporta, nella pagina seguente, la parte di codice relativa alle interfacce
utilizzate e fornite. Come si può notare dal numero di interfacce utilizza e fornite, questo è
il componente sicuramente più “corposo” sia da punto di vista delle linee di codice, sia dal
punto di vista della complessità. In seguito analizzeremo solamente la parti più
interessanti. Si passa ora a descrivere quali sono le funzionalità di questo modulo.
Innanzitutto implementa il protocollo di comunicazione radio che come già illustrato nel
capitolo 3 può essere distinto in due fasi: la prima, in cui i beacon di 1° livello popolano le
tabelle con i dati relativi al valore RSSI dei messaggi ricevuti dai propri vicini, e la
seconda in cui i nodi incogniti elaborano i dati memorizzati nelle tabelle ricevute.
117
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
module BeaInfoStorageM {
provides {
interface
interface
interface
interface
}
StdControl;
RssiUtil;
BeaInfoStorage;
SetAndGetInfo;
uses {
interface
interface
interface
interface
interface
interface
interface
interface
interface
interface
interface
}
Timer as TxTimer;
Timer as PhaseTimer;
Leds;
SendMsg as SendBeaTab;
ReceiveMsg as ReceiveBeaTab;
SendMsg as SendBeaconReady;
ReceiveMsg as RecBeaconReady;
SendMsg as SendReady4Beacon;
ReceiveMsg as RecReady4Beacon;
ADC as RssiADC;
ADC as BattADC;
}
Durante la prima fase ogni beacon tenta di trasmettere in istanti casuali (secondo il
protocollo MAC utilizzato: CSMA)
messaggi contenenti il proprio ID e le proprie
coordinate note a priori, se i canale è libero trasmette altrimenti se il canale è occupato o
non è impegnato a trasmettere si mette in ascolto. La trasmissione di messaggi è regolata
da un timer (TxTimer). Riportiamo parte della funzione d’invio che si attiva allo scadere
del timer.
void trySendMsg()
{
beaconMsg_t * pack;
pack = (beaconMsg_t *)msg.data;
pack->moteID = TOS_LOCAL_ADDRESS;
pack->type = beaconClass;
pack->coordinate = myCoord;
...
call SendBeaMsg.send(…);
}
...
event result_t TxTimer.fired()
{
msgSendCont++;
...
if (msgSendCont <= numMsg) {
trySendMsg();
} else {...}
return SUCCESS;
}
118
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Ogni volta che il beacon riceve il primo messaggio da un anchor node memorizza le
informazioni contenute e il valore di RSSI con cui ha ricevuto il pacchetto, mentre le volte
successive registra soltanto il valore di RSSI associato al pacchetto. Allo scadere del timer
che regola la durata della prima fase (PhTimer) oppure quando si raggiunge il numero
massimo di messaggi consentiti, ogni beacon calcola la media degli RSSI riferiti ai
pacchetti ricevuti da ciascun anchor node tramite la seguente funzone:
void calcAverages()
{
uint8_t i;
...
for (i=0; i<tableSize; i++) {
if (infoTable[i].ctr > 0) {
...
neighborsTab.info[i].rssi_dBm /= infoTable[i].ctr;
infoTable[i].ctr = 1;
...
}
...
}
}
Dopodichè ogni beacon costruisce una tabella di tipo beaconTable_t vista in
precedenza, contenente tra le altre informazioni anche il valore medio di RSSI appena
calcolato. Nella fase due sono i nodi incogniti a mettersi in ascolto del canale mentre i
beacon con la medesima procedura di trasmissione in istanti casuali, inviano messaggi di
broadcast contenenti la loro posizione e la tabella ordinata al decrescere del RSSI. Da
notare che la procedura d’invio messaggi è sempre la stessa, questo risulta chiaro anche
analizzando il codice:
void trySendMsg() {
...
switch (beaconState)
{
case 1:
...
...
break;
case 2:
...
...
break;
default: break;
}
...
}
//FASE 1
//FASE 2
119
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
infatti grazie alla variabile globale beaconState si riesce a capire in qual è la fase
corrente e ci si comporta di conseguenza. Infine, anche in questo caso, ciascun nodo
incognito calcola il valor medio di RSSI con cui ha ricevuto i messaggi beaconTable_t, ed
usa tale valore come parametro della funzione localize(…), vista in precedenza,
insieme alla tabella appena ricevuta; la funzione restituirà la posizione stimata.
Si precisa che ogni beacon ordina la tabella tramite una strategia di tipo insertion sort
prima di inviarla, in modo che chi la riceve (cioè i nodi incogniti) possa effettuare
immediatamente la suddivisione tra gli anchor node con RSSI maggiore e quelli con RSSI
minore, rispetto al valore RSSI del messaggio appena ricevuto dal beacon. Riportiamo per
completezza anche il codice relativo alla procedura di ordinamento:
void sortTable()
{
uint8_t i,j;
uint8_t id, id2;
coord_t coord;
uint16_t rssi;
dbg(DBG_USR1, "Sorting table\n");
for (i=0; i<tableSize; i++)
{
id = infoTable[i].moteID;
id2 = neighborsTab.info[i].moteID;
rssi = neighborsTab.info[i].rssi_dBm;
coord = neighborsTab.info[i].coordinate;
j = i;
while ((j > 0) && (neighborsTab.info[j-1].rssi_dBm < rssi))
{
infoTable[j].moteID = infoTable[j-1].moteID;
neighborsTab.info[j].moteID = neighborsTab.info[j-1].moteID;
neighborsTab.info[j].rssi_dBm = neighborsTab.info[j-1].rssi_dBm;
neighborsTab.info[j].coordinate = neighborsTab.info[j-1].coordinate
j = j - 1;
}
infoTable[j].moteID = id;
neighborsTab.info[j].moteID = id;
neighborsTab.info[j].rssi_dBm = rssi;
neighborsTab.info[j].coordinate = coord;
}
}
Si ricorda che l’ordinamento è decrescente, quindi si ordina la tabella dall anchor node più
vicino (il cui valore RSSI captato è maggiore) al quello più lontano (valore di RSSI
captato minore). Si precisa che al fine di avere un valore di RSSI captato da ogni nodo tale
da rispecchiare effettivamente la topologia di rete, si può pensare di far riferimento a
120
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
rilevazioni multiple di RSSI riferiti a più messaggi, in quanto sussistono dei fenomeni che
possono alterare il valore rilevato per ogni singolo messaggio. Uno di questi fenomeni è il
fading del canale, ecco perché è utile riferirsi al valore medio di RSSI su più pacchetti
ricevuti, invece che riferirsi ad uno soltanto. In definitiva quindi, il numero di messaggi
inviati in ogni fase è dipendente da quanto il mezzo trasmissivo risente dei fenomeni di
fading del canale. Il numero di messaggi è comunque stabilito in fase di compilazione ed
anche in questo caso bisogna trovare il giusto trade-off tra due parametri composti: da un
lato ci sono grandezze quali traffico di rete totale, invio per ciascun nodo e relativo
dispendio energetico, dall’altro c’è la precisione della rilevazione RSSI dipendente dal
chip radio, dalla varianza dei valori rispetto al rapporto RSSI-distanza, ed effetto di fading
sul mezzo trasmissivo.
4.4.4 Componente TestRocRssiC
Come detto in precedenza si tratta del componente di più alto livello, che controlla
l’inizializzazione e l’avvio di tutti gli altri componenti. Analizziamo parte del suo file di
configurazione:
configuration TestRocRssiC {
}
implementation
{
components ...
...
TestRocRssiM.Loc -> LocC;
TestRocRssiM.SetAndGetInfo -> BeaInfoStorageC;
TestRocRssiM.MsgLoc -> NodeToRfm;
...
}
Essendo il componente primario la sua implementazione si riduce ad un semplice wiring
dei componenti, in particolare si riscontra che è il modulo TestRocRssiM ad utilizzare le
interfacce Loc, SetAndGetInfo e MsgLoc . In particolare ci soffermeremo solo sulle prime
due. Iniziamo con Loc:
interface Loc {
command result_t localize();
event void localizationDone(coord_t *position);
}
121
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
il comando localize() avvia il processo di localizzazione, una volta avvenuta la
localizzazione
da
parte
del
nodo
incognito
viene
segnalato
all’
evento
localizationDone a cui vengono passate le coordinate cartesiane relative alla
posizione appena calcolata .
Passando all’interfaccia SetAndGetInfo, di seguito riportata:
interface SetAndGetInfo {
command result_t becomeBeacon();
command result_t beaconReadyReceived();
}
si può intuire che questa consente ai nodi che si sono localizzati, di poter diventare beacon
di 2° livello utilizzando il comando becomeBeacon() che comporterà l’aggiornamento
delle informazioni contenute nel modulo BeaInfoStorageC oltre all’invio del messaggio
Ready4Beacon in rete. Prima di poter far questo dobbiamo assicurarci di aver ricevuto il
messaggio BeaconReady e questo è possibile farlo tramite l’ utilizzo del comando:
beaconReadyReceived()
Passiamo alle parti di codice più interessanti contenute nel modulo TestRocRssiM
riportato nella pagina seguente. Nel momento in cui si verifica l’evento dell’interfaccia
Loc localizationDone(…) si inviano le coordinate del nodo appena ricevute via radio
tramite la funzione creata ad hoc void dump(…), che utilizza l’interfaccia MsgLoc. In
seguito si invoca la funzione ready4BecomeBeacon() che oltre ad effettuare alcuni
controlli relativi al livello di batteria e sugli anchor node usati per la localizzazione,
utilizza il comando SetAndGetInfo.beaconReadyReceived() visto in precedenza
per appurare se il nodo può diventare beacon di 2° livello. In questo caso s’invoca il
comando SetAndGetInfo.becomeBeacon() anche questo visto in precedenza, ed
inizia a comportarsi come beacon di 2° livello.
122
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
module TestRocRssiM {
...
implementation {
...
void dump(coord_t *position)
{
msg.moteID = TOS_LOCAL_ADDRESS;
msg.x = position->x;
msg.y = position->y;
call MsgLoc.sendCoord(&msg);
}
result_t ready4BecomeBeacon()
{
...
if (call SetAndGetInfo.beaconReadyReceived())
return SUCCESS;
}
...
event void Loc.localizationDone(coord_t *position) {
dump(position);
if (ready4BecomeBeacon()) {
dbg(DBG_USR1,"Ready for become beacon\n");
call SetAndGetInfo.becomeBeacon();
}
}
...
}
123
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Capitolo 5: Contesto di utilizzo
Nei capitoli precedenti (capitoli 3 e 4) è stato presentato il sistema di localizzazione che va
sotto il nome di ROCRSSI++. In particolare si è partiti dall’analisi del problema poi si è
passati alla progettazione valutando quali potevano essere le migliorie applicabili ed infine
se n’è mostrata l’implementazione in linguaggio NesC. In questo capitolo ci occuperemo
principalmente del contesto di utilizzo del sistema realizzato, infatti ci focalizzeremo su
aspetti di particolare rilevanza in quest’ambito quali l’interfacciamento di una rete di
sensori con il mondo reale. Per “mondo reale” s’intende tutta una serie di dispositivi come
ad esempio palmari, cellulari, o semplicemente pc, tramite i quali è possibile ricevere o
inviare informazioni da e verso la rete di sensori costruita. Innanzitutto si descriveranno le
metodologie per l’interfacciamento con una rete di sensori, si vedranno le due soluzioni
possibili e si descriverà nel dettaglio quella più comunemente utilizzata (anche in questo
contesto). Si parlerà poi, dell’applicazione reale installata nei sensori (SuLocSense) che è
dotata del sistema di localizzazione discusso ed inoltre consente un monitoraggio
ambientale generico tramite rilevazioni di luminosità, temperatura etc.
Inoltre si parlerà del progetto regionale entro il quale rientra il lavoro svolto, si descriverà
in breve, l’architettura iCAAS, si vedrà l’interfacciamento ad essa tramite lo sviluppo lato
clientil del protocollo ad hoc costruito ed infine s’illustreranno le altre possibili soluzioni
sperimentate concernenti il forwarding dei dati dalla rete verso il modo reale.
5.1 Interazione con una WSN
Nei capitoli precedenti (in particolare nei primi due) si è visto quali sono i parametri di
progetto di una WSN e quanto questi siano importanti. Nei capitoli 3 e 4 invece si è
124
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
discusso del sistema di localizzazione di cui i nodi appartenenti alla rete devono essere
muniti. Si parte quindi dall’ipotesi che si è in grado di progettare e programmare una rete
di sensori senza filo. Adesso si affronteranno le problematiche relative all’interazione con
la WSN.
Quindi data una rete di sensori, si vedrà quali possono essere le metodologie per:
inviare informazioni da una rete di sensori affinché queste possano essere fruibili
inviare comandi verso di essa.
Innanzitutto possiamo pensare a due tipi di soluzioni d’interfacciamento differenti:
Soluzione ad hoc
Soluzione TinyOS
La prima soluzione prevede lo sviluppo ad hoc di tutte le interfacce necessarie per
interagire con la rete di sensori. Quindi in una soluzione di questo tipo, lo sviluppatore
deve realizzare:
il protocollo di comunicazione tra PC e la gateway della WSN (che rappresenta il
punto di accesso alla rete) questa comunicazione potrebbe avvenire tramite porta
seriale, tramite USB, tramite Ethernet oppure onboard se si utilizza una Stargate
(per i dettagli si rimanda al paragrafo 5.3.2)
il protocollo dell’applicazione della WSN, che consente di distinguere le
tipologie dei pacchetti che viaggiano nella rete ed inoltre consente di effettuare il
parsing dei pacchetti contenenti informazioni di livello applicativo
intelligenza del gateway, cioè il suo funzionamento che può essere semplice
bridging, NAT-like etc.
Si capisce come questa soluzione rappresenti talvolta, una strada proibitiva in quanto
richiederebbe innanzitutto una profonda conoscenza di molti aspetti delle reti di sensori in
quanto si richiederebbe di realizzare il primo strato software quello cioè al livello del
sistema operativo. Inoltre la soluzione implementata può essere soggetta ad errori proprio
125
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
perché complessa è ricca di sfaccettature. Ecco perché quasi sempre si sceglie di utilizzare
la seconda soluzione ossia l’interazione tramite TinyOS che come descritto nel capitolo 4,
rappresenta uno standard de facto come sistema operativo per reti di sensori. Infatti
TinyOS:
implementa un protocollo di comunicazione PC <-> gateway
implementa un’interfaccia comune di accesso al gateway
tramite l’utilizzo del tool MIG (Message Interface Generator) consente la
generazione automatica di codice Java per il parsing dei pacchetti
Come s’intuisce, questa soluzione è molto più semplice e robusta della precedente, infatti
implementa un protocollo affidabile utilizzando parti di TinyOS (quali interfacce NesC di
sistema come UARTComm) e tool Java come SerialForwarder (di cui si parlerà in
seguito), inoltre non è particolarmente complessa in quanto fornisce un livello di
trasparenza alle applicazioni
di livello superiore che inviano e ricevono pacchetti
conformi a quelli scambiati nei sensori costituenti la rete; questo aspetto verrà chiarito in
seguito. In figura 5.1 è illustrata una situazione d’interazione tra la WSN ed il suo server:
Figura 5.1 – Interazione con una WSN tramite server
Questa è una tipica tipologia d’interazione con una WSN ovviamente non è l’unica, difatti
più avanti si presenterà la soluzione che prevede l’utilizzo di una stargate. Si analizzerà un
126
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
possibile comportamento relativo alla figura 5.1. All’interno della rete troviamo i sensori
che eseguono una qualsiasi applicazione, comunicando tra di loro ed eseguendo
elaborazioni. Dopodichè i nodi, inviano le informazioni (derivanti da rilevazioni o
elaborazioni) di livello applicativo alla gateway (chiamata anche base station) questa,
collegata fisicamente al server, provvede ad inviare queste informazioni. Dall’altro lato ci
sarà il server della WSN che sarà sicuramente provvisto di una distribuzione di TinyOS e
grazie a dei tools che questo mette a disposizione, potrà garantire la corretta ricezione dei
messaggi provenienti dalla rete. Ovviamente si ricorda che è possibile il flusso
d’informazioni anche nel verso opposto, ad esempio un operatore umano, operando su
applicazioni del WSN server, che forniscono apposite interfacce, può inviare dei comandi
alla rete, questi saranno inviati dal server verso il gateway e da quest’ultimo verso i
sensori interessati. I particolari di questo funzionamento si discuteranno quando
s’introdurrà il tool MIG e quando di parlerà della particolare applicazione realizzata.
5.1.1 Il tool Serial Forwarder
Il SerialForwarder è un tool sviluppato in java incluso nelle versioni di TinyOS 1.x, la sua
importanza diventa cruciale quando si vogliono costruire applicazioni orientate alla
comunicazione con una rete di sensori. Infatti questo tool è utilizzato per creare un canale
di comunicazione virtuale, tra le applicazioni di livello superiore (cioè quelle applicazioni
create con lo scopo di leggere dati e/o inviare comandi ad una WSN) e la WSN stessa
tramite la sua gateway. Partendo dall’esempio visto in precedenza (figura 5.1), in figura
5.2 è illustrato uno schema che ci aiuta a capire qual è la logica di funzionamento del
SerialForwarder (SF). In riferimento alla figura, da un lato troviamo i nodi che
costituiscono la rete di sensori, che comunicano tra loro utilizzando un collegamento senza
filo, dall’altro il server della WSN. Come si può notare, la gateway oltre a comunicare con
gli altri nodi della rete, è collegata serialmente al server, che tramite il SF può fornire
un’astrazione di collegamento con la rete di sensori. In pratica dal lato WSN, il SF riceve
ed inoltra rispettivamente pacchetti dati e comandi da e verso la rete di sensori utilizzando
il collegamento seriale.
127
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Figura 5.2 – Schema di funzionamento Serial Forwarder
Dal lato server invece, il SF utilizza una socket TCP/IP per consentire ad un’applicazione
remota di collegarsi al server WSN, sempre sfruttando il protocollo TCP/IP, ed interagire
con la rete di sensori. Bisogna precisare però, che la soluzione più conveniente, usata
anche nell’ ambito in questione, è rappresentata dallo sviluppo di un’applicazione locale
che tramite un SF stub collegato alla socket TCP/IP in questione, sfrutta il SF per
interfacciarsi alla rete di sensori.
Come detto in precedenza, il SF è un tool già presente nelle distribuzioni di TinyOS 1.x
utilizzabile tramite il seguente comando ($TOSROOT/tools/java):
java net.tinyos.sf.SerialForwarder –comm <porta seriale utilizzata>:<baud rate>
In questo modo è possibile avviare il SF collegato con la specifica porta seriale alla quale
la gateway della rete sarà connessa. La GUI del SF sarà analoga a quella rappresentata in
128
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
figura 5.3:
Figura 5.3 – GUI Serial Forwarder
Nel text box in alto è specificata il porto a cui il SF fa riferimento, quindi qualora
un’applicazione, tramite SF stub, si volesse connettere ad esso dovrebbe collegarsi allo
specifico porto in questione. Nel text box successivo si specificherà il valore della
variabile d’ambiente MOTECOM, che specifica la piattaforma con cui si vuol comunicare.
I possibili valori di questa variabile sono riportati nella tabella 5.1:
Specifica
Descrizione
sf@<host>:<port>
Comunicazione con il software SerialForwarder
serial@<COMport>:<rate>
Comunicazione seriale RS232 (con gateway
MIB510) oppure USB (con gateway MIB520)
network@<host>:<port>
Comunicazione ethernet con gateway MIB600
tossim-serial@<host>
Comunicazione con il nodo 0 (sink node) del
simulatore TOSSIM
tossim-radio@<host>
Comunicazione con tutti i nodi del TOSSIM
Tabella 5.1 – Specifiche e descrizione della varibile d’ambiente MOTECOM
129
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Si precisa che <port> indica il porto della socket con la quale si vuole comunicare,
<COMport> indica la porta seriale alla quale è connessa il gateway; <host> è un
parametro opzionale, qualora non fosse esplicitato il suo valore di default è localhost .
Come si evince dalla tabella 5.1, nella comunicazione seriale o via software con SF in
cascata, occorre specificare il baud rate con il quale s’intende comunicare che è
dipendente da i sensori costituenti la rete, infatti si potrebbe anche specificare il tipo di
sensori utilizzati al posto del baud rate . I dettagli relativi al simulatore TOSSIM saranno
descritti nel capitolo successivo, ci si limita a sottolineare che questo è incluso nella
distribuzione TinyOS 1.x.
5.1.2 Interazione con java tramite MIG (Message Interface Generator)
Si è visto come il SerialForwarder è una sorta di server che crea un ponte tra i dati in
arrivo dalla comunicazione con la rete di sensori e le applicazioni client di alto livello
residenti nel WSN server. Si vedrà ora come queste applicazioni possono interagire con la
rete di sensori utilizzando il SerialForwarder. Innanzitutto TinyOS mette a disposizione
una serie di classi ed interfacce java che consentono la comunicazione con la WSN,
contenute nei package net.tinyos.message e net.tinyos.packet. Si analizzeranno quelle di
maggior interesse:
net.tinyos.message.MoteIF: rappresenta l’astrazione java di un sensore della rete,
e rappresenta la classe base da utilizzare per ricevere ed inviare dati al gateway
net.tinyos.message.MessageListner: è l’interfaccia che rappresenta un listner per
i messaggi in arrivo dal SF (che a loro volta provengono dal gateway della rete)
net.tinyos.packet.BuildSource: è la classe che rappresenta la sorgente dei
pacchetti destinati al SF, in altre parole rappresenta un’implementazione del
gateway
net.tinyos.packet.PhoenixSource: questa invece è l’interfaccia fornita dal
gateway
Queste classi ed interfacce saranno utilizzate (o implementate nel caso ad esempio di
130
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
MessageListner) dalle applicazioni costruite per comunicare con la rete di sensori, infatti
rappresentano la base per instaurare la suddetta comunicazione. Un esempio di
applicazione java che “ascolta” i messaggi provenienti dal gateway di una rete di sensori, è
l’applicazione Listen .
Questa semplice applicazione, ovviamente supportata dal SF, stampa a video i dati grezzi
provenienti dal gateway. Ecco un esempio di output dell’applicazione invocata tramite il
seguente comando (partendo da questa directory: $TOSROOT/tools/java) a partire dai
pacchetti inviati dall’applicazione relativa al sistema di localizzazione TestRocRssi.nc
java net.tinyos.tools.Listen
Figura 5.4 – Output relativo all’applicazione Listen
Si è utilizzato il simulatore TOSSIM (che verrà trattato nel dettaglio nel prossimo
capitolo) per simulare una rete di sensori che eseguivano l’applicazione vista nel capitolo
4 relativa al sistema di localizzazione implementato, si è utilizzata poi un’istanza del
SerialForwarder per ricevere le informazioni dalla rete ed inoltrarle alle applicazioni
client ed infine si è lanciata l’applicazione Listen che rappresenta un’applicazione client
del SF, che si è messa in ascolto dei pacchetti provenienti da questo ed ha prodotto come
risultato la stampa a video dei pacchetti ricevuti. Si può notare che ogni singolo pacchetto
ricevuto viene rappresentato come una stringa di byte dove (in riferimento all’esempio):
i primi due byte (7E 00) rappresentano l’indirizzo del nodo sorgente
il terzo byte (2E) rappresenta l’ ID del particolare Active Message
il quarto byte (7D) rappresenta il group ID
il quinto byte (06) è la lunghezza del messaggio
i byte sei e sette (03 00) rappresentano l’indirizzo del sensore che ha inviato
131
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
l’informazione
ed i restanti byte rappresentano il payload del messaggio (i primi due byte
rappresentano la coordinata X gli altri la coordinata Y)
Risulta evidente che l’applicazione Listen rappresenta la soluzione più semplice per
l’interazione con una WSN. Anche se molto semplice, questa non rappresenta sicuramente
la soluzione più comoda per ottenere informazioni e monitorare i messaggi che arrivano da
una rete di sensori, in quanto costituisce una soluzione di basso livello. Infatti
quest’applicazione si limita ad effettuare una stampa a video di una stringa di byte
rappresentanti del messaggio ma non effettua alcun parsing dello stesso che consentirebbe
di strutturare il messaggio ricevuto. L’operazione di parsing consiste nell’analizzare un
pacchetto e creare una corrispondenza tra informazioni contenute in esso e byte che
rappresentano tali informazioni. Ovviamente le informazioni contenute nei pacchetti in
arrivo dalla WSN dipendono dalla particolare applicazione installata nei sensori, ad
esempio il sistema di localizzazione realizzato invierà informazioni sottoforma di
coordinate (x;y) del nodo incognito, applicazioni come LightTemp invierà informazioni
quali luminosità e temperatura e così via. Quindi risulta ovvio che si necessità di
un’operazione di parsing in modo da identificare le informazioni provenienti da una WSN.
Il tool che TinyOS mette a disposizione per facilitare quest’operazione è il MIG (Message
Interface Generator). Il tool MIG genera codice java per il parsing dei messaggi relativi
ad una WSN ed inoltre fornisce servizi aggiuntivi, in quanto consente di risolvere i
problemi di cross-plattaform, come ad esempio, il passaggio da un sistema big endian a
little endian e viceversa. Possiamo vedere questo tool anche come una sorta di middleware
in quanto, partendo da strutture dati di livello sensore, crea delle classi java che
contengono metodi per accedere alle informazioni contenute nei messaggi in arrivo dalla
rete di sensori. In figura 5.5 è rappresentato il funzionamento dal punto di vista
concettuale del MIG, partendo da un file header (simile a quelli visti nel capitolo 4), dove
all’interno
troveremo
la
definizione
delle
strutture
dati
utilizzate
poi
nella
programmazione in NesC dei sensori,
132
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Figura 5.5 – Funzionamento concettuale del MIG
si generano classi java contenenti metodi d’accesso a quelle strutture dati a cui si è
interessati. Si farà un esempio relativo all’applicazione presentata nel capitolo 4:
TestRocRssi. Quest’applicazione NesC, è composta da vari componenti memorizzati in
file con estensione .nc, questi includono i file header “BeaconMsg.h” e “BeaconCmd.h” .
Di quest file riportiamo la parte interessata ossia quella relativa alle strutture dati:
“BeaconMsg.h”
enum {AM_COORDMSG = 46}
typedef struct CoordMsg {
uint16_t moteID;
uint16_t x;
uint16_t y;
} coordMsg_t;
“BeaconCmd.h”
enum {AM_BEACONCMD = 43};
typedef struct beaconCmd {
uint8_t cmdType;
union {
uint32_t newRatePhaseTimer;
uint16_t newRateMsgTimer;
} args;
} __attribute__ ((packed)) beaconCmd;
133
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Per generare le classi parser per le strutture dati d’interesse (in questo caso CoordMsg e
beaconCmd) utilizziamo rispettivamente i comandi:
mig –java-classname=BeaconMsg BeaconMsg.h CoordMsg
mig –java-classname=BeaconCmd BeaconCmd.h beaconCmd
in generale la sintassi è la seguente:
mig <opzioni> -java –classname=<classe_java> <file_header> <struct>
dove:
<classe java>: è il nome della classa java (eventualmente completo del nome del
package di appartenenza) che rappresenta il parser
<file_header>: rappresenta il path del file header dov’è definita la struttura dati
<struct>: è il nome della struttura dati
Prima di concludere si vuole precisare che non è stata casuale la scelta dell’esempio
appena visto in quanto rappresenta proprio ciò che è stato realmente utilizzato nel sistema
di localizzazione. In figura 5.6 è illustrata la classe CoordMsg generata dal tool MIG.
Figura 5.6 – Classe CoordMsg generata dal tool MIG
134
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Nel prossimo paragrafo si parlerà dell’applicazione che realizza il sistema di
localizzazione ma offre anche altre funzionalità.
5.2 Applicazione SuLocSense
Come si vedrà in seguito, l’algoritmo di localizzazione progettato ed implementato nei
capitoli precedenti, s’inserisce in un contesto più ampio. Proprio per questo motivo si
capisce che l’applicazione vista nel capitolo 4 (TestRocRssi), che si limita ad offrire il
servizio di localizzazione per i nodi incogniti ed a segnalare la loro posizione a scopo di
test, non è sufficiente visto che comunque ci si trova in un contesto di monitoraggio
ambientale. Ecco perché si è scelto di integrare l’algoritmo che consente la localizzazione
dei nodi incogniti con un’applicazione, per la verità abbastanza generica, che consente il
rilevamento di grandezze fisiche quali luminosità, temperatura, accelerazione etc.
Quest’integrazione ha dato origine all’applicazione che va sotto il nome di SuLocSense. Il
nome stesso dell’applicazione, suggerisce che questa è nata dalla fusione dell’applicazione
che permette la localizzazione (Loc) con l’applicazione Surge_Reliable (Su) che consente
invece la raccolta d’informazioni dall’ambiente circostante quali luminosità, temperatura
etc. tramite l’hardware apposito (Sense). In figura 5.7 è sottolineata quest’integrazione:
Figura 5.7 – Integrazione nell’applicazione SuLocSense
135
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Non si mostrano i dettagli implementativi relativi al wiring dei componenti in quanto
quest’argomento è stato ampiamente discusso nel capitolo precedente, piuttosto ci si
focalizza sull’integrazione dei due componenti (SurgeC e LocC) che generano
l’applicazione SuLocSense che è quella che effettivamente si installa nei sensori costituenti
la WSN utilizzata nel contesto in questione. Dato che nel capitolo precedente, si è discusso
ampiamente del sistema di localizzazione, ci focalizzeremo adesso sull’applicazione.
5.2.1 Applicazione Surge_Reliable
L’applicazione che consente le rilevazioni relative all’ambiente circostante, ovviamente
sempre che l’hardware supporti tale funzionalità, si chiama Surge_Reliable .
Quest’applicazione funziona in questo modo: ogni nodo della rete effettua delle rilevazioni
relative all’ambiente circostante (luminosità temperatura etc.), interrogando ciclicamente i
rispettivi pin della sensorboard, dopodichè i nodi impacchettano queste informazioni in
messaggi che poi inviano in rete. L’impacchettamento di questo tipo di messaggio avviene
in modo leggermente differente rispetto a quanto visto nel capitolo 4 in figura 4.4, infatti
qui oltre all’incapsulamento all’interno del TOS_Msg (che rappresenta l’astrazione degli
Active Message), il messaggio dati in questione (che chiameremo SurgeMsg)
verrà
incapsulato anche nel TOS_MHopMsg (astrazione dei messaggi multihop) come mostrato
in figura 5.8
Figura 5.8 – Incapsulamento messaggio SurgeMsg
136
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Come mostrato in figura, il messaggio SurgeMsg che contiene i seguenti campi:
typedef struct SurgeMsg {
uint8_t moteID;
uint8_t type;
uint16_t reading;
uint16_t parentaddr;
uint32_t seq_no;
uint8_t light;
uint8_t temp;
uint8_t magx;
uint8_t magy;
uint8_t accelx;
uint8_t accely;
uint16_t rssi;
} __attribute__ ((packed)) SurgeMsg;
viene incapsulato all’interno di un messaggio multihop e questo a sua volta è contenuto in
un Active Message . Si apre una piccola parentesi per definire il protocollo multihop.
Innanzitutto definiamo il multihop come un protocollo che consente di trovare un percorso
minimo sul quale inviare un messaggio destinato ad un particolare nodo. Solitamente
viene sfruttato affinché anche nodi fuori dalla portata dal gateway possano inviare
messaggi a quest’ultimo. E’ indispensabile, ai fini di poter sfruttare il protocollo multihop,
effettuare l’incapsulamento visto in figura 5.8, in modo da consentire ai i componenti che
implementano il protocollo di inviare il messaggio (sempre tenendo presente che è
necessario un ulteriore incapsulamento all’interno del Active Message). Questi componenti
sono inclusi nella libreria dedicata al multihop nella distribuzione 1.1.15 di TinyOS. Qui il
protocollo multihop si basa sul valore di LQI. Per definire quest’ultimo precisiamo che il
nodo a cui vengono inviati i messaggi viene chiamato nodo parent e ad esso vengono
associati un costo ed un LQI, ossia un parametro sintetico di qualità del canale e può
essere calcolato in molti modi. In definitiva il protocollo multihop, in questo contesto, è
utilizzato quando si vuol permettere ai nodi “lontani” dal gateway di inviare a questo le
informazioni all’interno dei messaggi SurgeMsg e CoordMsg contenenti rispettivamente le
rilevazioni ambientali (come luminosità, temperatura etc.) e le coordinate dei nodi
incogniti. Concludiamo il discorso relativo all’applicazione Surge_Reliable mostrando
alcune sezioni di codice del file di configurazione SurgeC.nc
137
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
configuration Surge {
}
implementation {
...
SurgeM.Rssi -> ADCC.ADC[0];
SurgeM.Temp
-> PhotoTemp.ExternalTempADC;
SurgeM.Light
-> PhotoTemp.ExternalPhotoADC;
SurgeM.AccelX
-> Accel.AccelX;
SurgeM.AccelY
-> Accel.AccelY;
SurgeM.AccelCtl
-> Accel;
SurgeM.TempStdControl
-> PhotoTemp.TempStdControl;
SurgeM.LightStdControl
-> PhotoTemp.PhotoStdControl;
...
SurgeM.RouteControl -> multihopM;
SurgeM.Send -> multihopM.Send[AM_SURGEMSG];
SurgeM.SendToCOM -> COM.SendMsg[AM_SURGEMSG];
multihopM.ReceiveMsg[AM_SURGEMSG]->Comm.ReceiveMsg[AM_SURGEMSG];
...
}
La prima parte del wiring è relativa ai componenti che effettuano le rilevazioni relative
all’ambiente circostante, mentre l’ultima parte del codice si riferisce al wiring dei
componenti che permettono l’utilizzo del protocollo multihop e l’invio e la ricezione di
messaggi multihop. Si conclude facendo un’osservazione in merito ad una possibile
ottimizzazione dal punto di vista energetico della WSN: si potrebbe pensare di installare
l’applicazione SuLocSense solamente nei nodi beacon in quanto questi li possiamo pensare
dotati di una riserva di energia maggiore o addirittura collegati alla rete elettrica, mentre in
tutti gli altri nodi s’installerà soltanto il sistema di localizzazione. I beacon quindi, sono
indispensabili nel sistema di localizzazione per quanto visto finora, inoltre effettuano
rilevazioni, grazie al componente Surge_Reliable ed implementano il protocollo multihop
che offre il supporto di routing dei pacchetti destinati al gateway (in quanto contenenti
informazioni di livello utente) inviati da nodi fuori dal suo raggio di copertura.
5.3 Ambito di utilizzo: progetto regionale ed architettura iCAAS
Il lavoro svolto in quest’ambito si colloca all’interno di un contesto più ampio ossia quello
del progetto che va sotto il nome di REMOAM. Il principale obiettivo del progetto
REMOAM (REti per il MOnitoraggio AMbientale) finanziato dalla regione Campania è la
138
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
definizione di una nuova generazione di prodotti per il monitoraggio. Il servizio di
monitoraggio fruisce tramite l’utilizzo di prodotti atti a costituire una rete di sensori senza
filo. I nodi (sensori) che compongono questa rete, si occupano del monitoraggio del
territorio interessato, raccogliendo informazioni su di esso. Dopodichè, tramite l’utilizzo
di sistemi software avanzati, vi è la fruizione di tali informazioni. Il progetto in esame, si
riferisce in modo particolare, al monitoraggio dei rischi ambientali che derivano dalle
frane, ovviamente senza trascurare la possibilità di effettuare monitoraggio ambientale in
altri ambiti. Si è scelto di valutare la possibilità di utilizzo delle WSN per il monitoraggio
di frane in quanto oggi per effettuare monitoraggio di questo tipo si utilizzano tecnologie
basate su sistemi inclinometrici che implicano che in sensori vadano installati a profondità
piuttosto elevate. Si capisce subito che questo costituisce un grosso limite per ciò che
riguarda l’installazione di tali sensori su terreni a rischio di frane (non è consigliabile
utilizzare macchine perforatrici su terreni franosi) inoltre ci sono molti problemi relativi al
cablaggio. Si capisce come l’utilizzo di una WSN risolverebbe molti di questi problemi.
Per quanto concerne la possibilità di utilizzare l’intera soluzione concepita in ambiti
diversi, di seguito si farà riferimento all’architettura iCAAS che non verrà trattata nei
dettagli ma piuttosto presentata per introdurre il metodo d’interfacciamento ad essa.
5.3.1 Arcitettura iCAAS
Come già esposto in precedenza, l’architettura iCAAS va ad inserirsi in un contesto mirato
all’analisi di rischi ambientali dovuti a fenomeni franosi. L’obiettivo principale di
quest’architettura quello di offrire una soluzione generica in modo da poter essere
applicata in contesti diversi. La sua struttura è stata concepita per orientarsi verso una rete
di sensori, ma essendo dotata di caratteristiche di estendibilità e configurabilità può essere
applicata in ambiti diversi. In figura 5.9 è rappresentata l’architettura tramite una struttura
a livelli, in sintesi si è cercato di sviluppare un sistema che consenta l’accesso ai dati è
l’interoperabilità tra le reti di sensori ed i terminali utenti, offrendo la possibilità all’utente
non solo di accedere alle informazioni che il sistema mette a disposizione (tramite
terminali eterogenei, computer destop, palmari, cellulari etc…) ma anche d’interagire con
139
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Figura 5.9 – Architettura iCAAS da [48]
esso da punti distanti dal rete di sensori in questione.
I dettagli relativi a quest’architettura esulano dagli scopi e sono illustrati in [48]. In
quest’ambito ci focalizzeremo solamente sull’ultimo livello, vale a dire l’interazione tra la
rete di sensori (in figura Sensor Networks) ed il Sensor networks access, in particolare se
ne illustrerà la parte client.
5.3.2 Possibile soluzione WSN con stargate e comunicazione con iCAAS
Innanzitutto s’identifica una stargate come una sorta di super nodo appartenete alla rete di
sensori, si tratta infatti di una piattaforma hardware ad elevate prestazioni e viene
utilizzata come Wireless Gateway di una rete Wireless. E’ basata sul processore X-Scale
di Intel, su un supporto nativo Linux e mette a disposizione numerosi tool di sviluppo ed
applicazioni grazie all’utilizzo di TinyOS. Di seguito, in tabella 5. sono riportate le
140
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
caratteristiche tecniche relative alla stargate della Xbow.
Proprietà
Caratteristiche
Processore
Processore Intel PXA255, XScale, 400 MHz
Memoria
64 MB RAM, 32 MB flash (22 per programmi)
Embedded Linux open source sviluppato come
Sistema Operativo
progetto da source forge
PCMCIA slot tipo II
Slot
Compact Flash slot tipo II
MICA2 slot a 51 pin
Porta seriale (RS232), USB, Ethernet (RJ45) e
Connessione
Wi-Fi
Tabella 5.2 – Caratteristiche tecniche Stargate Xbow
Quindi possiamo pensare la nostra rete di sensori non più collegata, attraverso il gateway
con un collegamento seriale (o USB), al server della WSN, ma costituita da nodi che
interagiscono tra loro e con la stargate; sarà poi quest’ultima ad avere l’intelligenza
necessaria per inoltrare le informazioni ricevute dalla WSN verso altre mete. Questa
rappresenta una soluzione veramente interessante soprattutto nell’ambito in questione,
infatti l’utilizzo di un server WSN (soluzione vista prima) implica che questo debba essere
collocato nelle vicinanze della rete di sensori in quanto deve essere fisicamente collegato
al gateway per poter ricevere informazioni. Talvolta ciò richiede costi aggiuntivi per
creare un ambiente apposito per l’installazione di un server, o addirittura potrebbe risultare
impossibile tale installazione data la conformazione del territorio nel quale si va a calare la
rete di sensori. Ecco perché soprattutto per quanto concerne il monitoraggio sui rischi
ambientali derivanti da fenomeni franosi, l’utilizzo della stargate potrebbe risultare
indispensabile. Si vedrà adesso, in figura 5.10, un quadro generale dell’ambito d’utilizzo,
partendo dalla rete di sensori, passando per la comunicazione con la stargate fino al
collegamento con l’architettura iCAAS.
141
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Figura 5.10 – Contesto generale nel quale s’inserisce la rete di sensori
S’inizia dall WSN, i nodi sono composti da una base (nello specifico si sono utilizzati per
alcune sperimentazioni i MICA2 però è possibile utilizzare altre piattaforme) e da un
sensorboard (che effettua le rilevazioni). Tutti i nodi della WSN comunicano con la
stargate tramite WiFi. Come si può notare dalle caratteristiche tecniche presentate nella
tabella 5.2, dal punti di vista della potenza di calcolo e memoria centrale la stargate è
142
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
sicuramente inferiore rispetto ai moderni PC che possiamo pensare di utilizzare come
server della WSN nella soluzione prima descritta. Ecco perché si è deciso di sviluppare un
protocollo UDP ad-hoc che fosse innanzitutto più semplice e snello rispetto al TCP/IP e
che consentisse l’inoltro dei dati raccolti verso l’architettura iCAAS. Inoltre il canale tra la
stargate ed iCAAS potrebbe essere wireless, ad esempio tramite GPRS, e dunque il TCP
risulterebbe inadatto, ragione in più per utilizzare il protocollo sviluppato ad-hoc.
Dopodichè quest’architettura rende fruibili queste informazioni attraverso internet. Questo
è il funzionamento generale del sistema creato per questo particolare ambito di utilizzo.
Entriamo ora nel dettaglio del livello Sensor networks access dell’architettura iCAAS lato
client ed analizzeremo il funzionamento del protocollo ad hoc sempre dal punto di vista
del client. Nell’analisi del Sensor networks access si partirà dalla rete di sensori. Si è visto
che dalla WSN arrivano messaggi sottoforma di stringhe di byte, quindi innanzitutto c’è
bisogno di effettuare un parsing dei pacchetti ricevuti, dopodichè si formattano queste
informazioni in un formato che si è scelto standard per il protocollo creato, ed infine
s’inviano queste informazioni all’interno di pacchetti UDP. Questo procedimento è
rappresentato in figura 5.11
Figura 5.11 – Procedimento relativo all’invio dati da WSN ad iCAAS
Come è noto dalla rete di sensori arrivano stringhe di byte, queste vengono interpretate
tramite l’ausilio del tool MIG visto prima, il blocco Application Parser. Si è dato questo
nome in quanto questo rappresenta il parser specifico per l’applicazione residente nei
sensori. Questo fornisce in uscita dati strutturati, tramite il blocco successivo, ovvero
Stargate Protocol Formatter questi dati vengono formattati secondo uno specifico formato
deciso nel protocollo ad hoc utilizzato. Dopodichè grazie allo Stargate proxy Server che
143
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
riceve dal blocco precedente i dati formattati, s’inviano le informazioni all’architettura
iCAAS all’interno di pacchetti UDP. Si precisa che il protocollo UDP creato ad hoc non si
limita ad un semplice forwarding dei pacchetti ma si è creato un protocollo UDP esteso
che prevede la perdita di pacchetti ed il loro rinvio con modalità selective repeat . Si
precisa che si è scelto di dividere il procedimento di parsing dei pacchetti da quello della
formattazione dei dati e da quello dell’invio sottoforma di pacchetti UDP per fornire
modularità e ricusabilità del software. Infatti qualora si volesse cambiare l’applicazione
all’interno dei sensori ma mantenere lo stesso protocollo di comunicazione verso
l’architettura iCAAS, basterebbe sostituire la parte relativa all’Application Parser, se
invece si volesse utilizzare un protocollo differente si dovrebbe cambiare solo la parte
relativa allo Stargate Protocol Formatter infine se si volesse cambiare il destinatario si
dovrebbe implementare nuovamente lo Stargate Proxy Server. Si capisce quindi perché si
è scelto tale metodologia di progettazione. Si vedranno ora alcuni dettagli implementativi
relativi a quanto detto finora. Nel realizzare questo strato software che consente al client
(in questo caso la stargate) di comunicare con il server dell’architettura iCAAS, sono state
create apposite classi ed interfacce java che consentono di comunicare con iCAAS e allo
stesso tempo di essere riutilizzate per altri scopi. In figura 5.12 è rappresentato il
diagramma delle classi che rappresenta il Sensor networks access lato client relativo ad
una generica applicazione per WSN. Partendo dal flusso di byte che arriva dalla rete di
sensori, la classe NesCAppServer rappresenta l’ Application Parser visto in figura 5.11,
infatti questa ha il compito di ricevere i pacchetti lato WSN ed interpretarli (tramite
l’operazione di parsing presentata precedentemente); inoltre utilizza l’interfaccia IStargate
per effettuare anche la formattazione ti tali dati secondo il protocollo (s’implementa quindi
il blocco Stargate Protocol Formatter di figura 5.11).
Si apre a questo punto una piccola parentesi. Nell’applicazione discussa precedentemente
SuLocSense ossia quella ideata per essere utilizzata nell’ambito in questione, all’interno di
questa classe i dati provenienti dalla WSN vengono etichettati con un valore temporale che
serve a creare una relazione d’ordine per le misurazioni effettuate.
144
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Figura 5.12 - Diagramma delle classi relativo al Sensor networks access (lato client)
Tornando all’analisi di figura 5.12, grazie all’interfaccia IStargate è possibile collegarsi a
server iCAAS tramite un proxy rappresentato dalla classe StargateProxy. Quest’ultimo ha
il compito di rendere trasparente l’invio dei dati al server iCAAS, tramite il protocollo
UDP implementato ad hoc, alle classi viste finora. Prima di proseguire nella descrizione
delle classi, si vedrà, brevemente, come funziona il protocollo .
UDP appositamente creato. Innanzitutto c’ è un fase di inizializzazione della connessione,
dove il client (in questo caso la stargate) tenta di contattare il server (architettura iCAAS)
(si noti che è improprio l’utilizzo della parola “connessione” in quanto si utilizza un
protocollo di tipo datagram). Quando il server risponde, il client è pronto ad inviare i
pacchetti UDP all’interno dei quali sono stati memorizzati i dati provenienti dalla WSN.
Prima di inviare il pacchetto dati, il client etichetta quest’utlimo con un numero
progressivo chiamato sequence number. Se il server iCAAS riceve il pacchetto invia un
ACK altrimenti invia un NACK. Se il client riceve un NACK provvede ad rinviare
esclusivamente il pacchetto corrispondente al NACK ricevuto dal server. Tutti i dettagli
145
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
relativi al protocollo si possono trovare in [48]. Fatta quest’introduzione doverosa, si
tornerà all’analisi della figura 5.12.
Il proxy contatta il server iCAAS, e quando questo risponde, il proxy istanzia le risorse
necessarie per inviare/ricevere i pacchetti secondo le modalità del protocollo utilizzato.
Infatti per ogni pacchetto dati inviato dalla stargate, il server iCAAS risponde con un ACK
che sta ad indicare che il pacchetto è stato ricevuto, altrimenti risponderà con un NACK.
Per gestire il flusso dati da e verso il server iCAAS, il proxy si affida all’interfaccia
ISRManager. L’interfaccia ISRManager ha molteplici compiti, uno di questi è sicuramente
il compito d’impacchettare i dati formattati, all’interno di pacchetti UDP secondo le
modalità descritte nel protocollo. Inoltre si appoggia ad una struttura dati (costituita da una
coda circolare) che ha il compito di tener traccia dei pacchetti inviati e ricevuti. Infatti si
crea di volta in volta, relativamente ad ogni invio, una finestra che contiene i pacchetti
inviati di cui però ancora non si è ricevuto un ACK o un NACK da parte del server. Se il
server invia un ACK si rimuove il pacchetto relativo all’interno della finestra, se invece il
server invia un NACK (o scade il timeout relativo al pacchetto) si provvede al rinvio del
pacchetto in questione. L’ ampiezza della finestra è fissa vale a dire che si possono inviare
al più n pacchetti senza bisogno di ricevere alcun ACK, n rappresenta appunto l’ampiezza
della finestra.
ISRManager si affida ai due thread per inviare e ricevere pacchetti
rispettivamente verso e dal
server. In particolare il sender ha il compito d’inviare
pacchetti UDP presenti nella struttura dati verso il server ed il receiver ha il compito di
ricevere le risposte del server ed eventualmente rinviare i pacchetti non ricevuti dal server.
Per concludere le classi window GSDP_Packet e GSData rappresentano rispettivamente la
struttura dati coda circolare, l’astrazione del pacchetto UDP relativo al protocollo iCAAS
e l’astrazione della tipologia di dati contenuti nei pacchetti UDP.
5.3.3 Altre soluzioni proposte
Nel corso dello studio effettuato, si sono studiate soluzioni architetturali, dal punto di vista
client, alternative a quella proposta. Tornando a considerare la figura 5.1 dove
l’interazione con la rete di sensori avviene tramite un server WSN collegato fisicamente al
146
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
gateway, posso utilizzare una soluzione basata su TinyDB.
TinyDB è un sistema di
elaborazione distribuita per estrarre informazioni da una rete di sensori. Si deve tener
presente che questo sistema è basato su TinyOS ed in esso contenuto. Il grande vantaggio
di questa sistema è che non c’è la necessità di scrivere applicazioni NesC ad hoc in quanto
tutto il codice necessario da installare in ogni sensore della rete è già fornito da TinyOS.
Quindi questa soluzione rappresenta il modo più semplice ed intuitivo per estrapolare
informazioni dai sensori della rete. In pratica TinyDB consente di ottenere informazioni
dai nodi della rete tramite delle query espresse mediante una variante di SQL (TinySQL).
Le query possono essere inoltrate dal server WSN ai nodi della rete e possono essere
memorizzate localmente ed elaborate periodicamente. In figura 5.13 un esempio di
funzionamento del sistema TinyDB
Figura 5.13 – Esempio di funzionamento sistema TinyDB
Il server WSN invia la query, ed i sensori forniscono le informazioni richieste
(nell’esempio sono solo due: nodeid e light).
L’aspetto più interessante di TinyDB è che gli algoritmi relativi all’elaborazione dei dati,
147
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
al meccanismo di rilevamento ed al routing sono completamente mascherati all’utente
finale. Infatti questo devo solo preoccuparsi di scrivere la query conforme all’informazioni
che si vogliono ottenere dalla rete di sensori. Talvolta, se le circostanze lo richiedono, non
è detto che bisogna scrivere la query in linguaggio TinySQL infatti si può utilizzare la GUI
di TinyDB che è rappresentata nella figura 5.14. Si mostra un esempio di come viene
inviata una query. In riferimento sempre alla figura 5.14 sulla sinistra troviamo gli attributi
disponibili che possiamo selezionare ed importare negli attributi di progetto (quelli
d’interesse nel particolare contesto). Man mano che s’importano gli attributi, la query si
compone automaticamente e la sintassi compare nell’area in basso. Dopodichè viene
inviata tramite il pulsante “Send Query”. In alto a destra troviamo una console che
permette d’inviare comandi ai nodi della rete, per default i comandi sono inviati in
broadcast (cioè a tutti i sensori) altrimenti si può specificare l’ID del sensore a cui è
destinato il comando. In basso a destra compare l’identificativo di quelle query che sono
in elaborazione.
Figura 5.14 – GUI di TinyDB
Come illustrato in figura, è possibile anche inserire dei predicati tramite la clausola
WHERE. Un’altra funzionalità molto importante è quella che prevede la memorizzazione
148
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
automatica delle informazioni rilevate dalla rete di sensori, all’interno di un database
basato sul DBMS Postgress. Inoltre TinyDB fornisce delle semplici API java per facilitare
lo sviluppo di applicazioni basate su questo sistema. Per completezza si riporta un
esempio, sviluppato per fini sperimentali, di applicazione java stand-alone che consente
d’inviare una query predefinita alla rete di sensori sfruttando le API che TinyDB mette a
disposizione.
package net.tinyos.tinydb.sgary;
import net.tinyos.tinydb.parser.*;
import java.util.Vector;
import java.io.*;
public class sgaryDemoApp implements ResultListener{
public sgaryDemoApp() {
try {
//initialize
TinyDBMain.initMain();
q = SensorQueryer.translateQuery
("select nodeid,light,temp epoch duration 2048", (byte)1);
System.out.println();
System.out.print("Sending query....");
TinyDBMain.injectQuery(q, this);
System.out.println("ok");
System.out.println("waiting for results ...");
} catch (IOException e) {
System.out.println("Network error.");
} catch (ParseException e) {
System.out.println("Invalid Query.");
}
}
...
...
public void addResult(QueryResult qr) {
Vector v = qr.resultVector();
for (int i = 0; i < v.size(); i++) {
System.out.print("\t" + v.elementAt(i) + "\t|");
}
System.out.println();
}
public static void main(String argv[]) {
new sgaryDemoApp();
}
TinyDBQuery q;
}
Nell’applicazione sopra riportata, si può notare in grassetto la definizione della query che
sarà poi inviata tramite il comando TinyDBMain.injectQuery(…) . Dopodichè, si
149
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
attiverà un listner in modo da captare le risposte di ogni singolo sensore e stamparle a
video.
Il grosso limite di TinyDB è l’elevata complessità computazionale a cui sensori sono
sottoposti nel momento in cui s’inoltra una query alla WSN. Infatti ogni volta che viene
inoltrata una query alla rete, parte una fase di sincronizzazione tra i sensori che è quella
più dispendiosa sia dal punto di vista temporale sia dal punto di vista energetico. Inoltre
c’è bisogno comunque di un server WSN per poter gestire le query tramite la GUI, oppure
si potrebbe pensare ad un invio della query che avviene da un terminale remoto verso la
stargate dove sarà installato un sistema che permetta la costruzione dinamica della query
che sarà poi quella effettivamente inviata ai sensori. Questa soluzione comunque può
comportare notevoli problemi, infatti pur essendo un “super nodo” la stargate è comunque
una piattaforma con memoria e capacita di calcolo limitate. Si conclude ricordando
l’ambito di utilizzo ed i requisiti che questo comporta, infatti TinyDB non offre un
servizio di localizzazione. Affinché sia possibile utilizzare quest’applicazione unita ad un
sistema di localizzazione occorre effettuare l’integrazione dei componenti delle due
applicazioni (TinyDB e LocC) a livello NesC, cosa tutt’altro che semplice se si gurada la
figura 5.15 dov’è mostrato il wiring di primo livello dei componenti dell’applicazione
TinyDB.
Figura 5.15 – Wiring componenti dell’applicazione TinyDB
150
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Capitolo 6: Analisi dei risultati, sperimentazione e testing
Questo capitolo presenta i risultati della sperimentazione e testing effettuati per il sistema
realizzato. Nei capitoli precedenti sono state presentate le varie applicazioni implementate,
a questo proposito si precisa che sono state effettuate diverse tipologie di sperimentazioni.
Innanzitutto si è partiti dalle misurazioni hardaware su cui si basa l’intero sistema di
localizzazione, ossia la misurazione relativa al valore di RSSI ricevuto all’aumentare della
distanza. Si è passati poi, utilizzando i dati precedentemente rilevati sull’hardware, alla
sperimentazione simulata tramite strumenti software quali TOSSIM e TinyViz (di cui si
parlerà in seguito). Inoltre si sono fatte sperimentazioni simulate e poi reali relative
all’applicazione Surge_Reliable ed infine si sono effettuati test relativi all’intera fruizione
delle informazioni rilevate dalla WSN ed inviate all’architettura iCAAS tramite il
protocollo ad hoc creato. Nei prossimi paragrafi si partirà da un descrizione dell’hardware
e software utilizzato per le sperimentazioni, dopodichè si analizzeranno i risultati simulati
tramite dei grafici comparativi tra l’algoritmo di localizzazione proposto (ROCRSSI++) e
quello originale (ROCRSSI). Inoltre si illustrerà l’analisi energetica e dei costi effettuata.
Infine s’illustrerà il testing effettuato sul forwarding dei dati e quindi quello relativo al
protocollo realizzato e si presenterà un strumento di test appositamente realizzato per
facilitare l’operazione di testing sull’intera architettura lato client.
6.1 Hardware e software utilizzato
In questo paragrafo si presenteranno le piattaforme hardware e gli strumenti software
utilizzati per la sperimentazione. Si partirà dalla presentazione della piattaforma hardware
utilizzata, ovvero i sensori MICA2 con chip radio CC1000 per poi passare alla definizione
151
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
di quei particolari strumenti software utilizzati per la simulazione (TOSSIM e TinyViz).
6.1.1 La piattaforma hardware MICA2
Innanzitutto definiamo di cosa si compone la piattaforma hardware apertenente alla
famiglia MICA2 della casa costruttrice Crossbow (XBow). Generalmente si commette un
errore nella definizione di sensore, infatti spesso con questo termine s’identifica l’intera
piattaforma che invece è costituita da una sensor board, da una mote board (che spesso
prende il nome della tipologia dell’hardaware in uso in questo caso ci riferiamo ad essa col
nome di MICA2). Il MICA2, rappresentato in figura 6.1, è responsabile delle seguenti
cose:
Elaborazione
Memorizzazione
Alimentazione
Invio dati al gateway
Figura 6.1 – Piattaforma hardware Mica2
Si noti che il MICA2 usufruisce di un chip radio CC1000 (di cui si è parlato
precedentemente) che è quello che consente la comunicazione con gli altri nodi della rete e
con il gateway stesso. La sensor board , rappresentata in figura 6.2, è invece responsabile
del cosiddetto sensing ovvero è quel componente che effettua le rilevazioni.
152
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Figura 6.2 – Sensor board per MICA2
In figura 6.2, è cerchiato in rosso lo spazio dedicato alla connessione con il MICA2
tramite 51 pin. Le motivazioni che hanno portato a scegliere i MICA2 sono elencate di
seguito:
Rapporto qualità/prezzo
Molti gruppi di ricerca utilizzano i MICA2, quindi vi è molta documentazione
relativa a quest’ambito
Non è richiesto l’utilizzo di un protocollo predefinito (ad eccezione dei Micaz)
Entriamo adesso nei dettagli dei componenti del MICA2. Si elencheranno adesso le
caratteristiche tecniche del sottosistema di elaborazione (MCU). L’MCU (Mica Control
Unit) relativa ai MICA2 è di tipo Atmel AVR Atmega 103L (MCU) le cui caratteristiche
tecniche sono di seguito elencate
Throughput pari a circa 6 MIPS a 4MHz
128KB di memoria flash programmabile
4K Bytes di SRAM interna
4K Bytes di memoria EEPROM programmabile
53 bus I/O programmabili
3 timer hardware
Si capisce che si tratta di elementi hardware con capacità di memoria ed elaborative
piuttosto basse, ecco perché ci si è sforzati di concepire delle applicazioni che siano adatte
153
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
a questo tipo di sensori. Per quanto concerne la sensor board ne esistono di varie tipologie,
quella utilizzata consente di rilevare:
Luminosità
Temperatura
Accelerazione
Possiede un rilevatore sonoro e un magnetometro
Inoltre ha un microfono ed uno speaker
Nel nostro ambito ci limiteremo ad usare la sensor board per la rilevazione della
luminosità e della temperatura, infatti la rilevazione dell’ RSSI rientra nei compiti del
MICA2. Si vedrà a questo proposito, la sperimentazione che si potrebbe definire “base” in
quanto è quella da cui si è partiti ed i cui risultati sono stati utilizzati poi nell’analisi
comparativa degli algoritmi di posizionamento. Si sta parlando della relazione che
intercorre tra distanza e RSSI rilevato. Per effettuare delle misurazioni, sono stati utilizzati
due sensori MICA2, di cui uno inserito nell’apposito slot del gateway e l’altro alimentato
con batterie che chiameremo “sensore mobile”, un connettore/adattatore per collegare il
gateway (di tipo MIB510, in figura 6.3a) con uscita serial al PC con ingresso USB (figura
6.3b), batterie ed alimentatore rispettivamente per il sensore e per il gateway ed un metro.
a)
b)
Figura 6.3 – Gateway MIB510 ed adattatore seriale-USB utilizzati
Si è passati poi all’installazione nei sensori, di un’apposita applicazione implementata per
effettuare le rilevazioni RSSI e stamparle sulla console di TinyOS. L’operazione
154
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
d’istallazione dell’applicazione nei sensori, il cui componente principale è TestRssi , è
avvenuta tramite il comando:
make mica2 reinstall.0 mib510,/dev/ttyS5
in generale si utilizza:
make <piattaforma> reinstall.<id_sensore> <gateway>,/dev/tty<porta_COM>
dove per <piattaforma> s’intende il tipo di sensore (MICA, MICA2, MICA2DOT etc.),
<id_sensore> rappresenta l’identificativo di quel particolare sensore all’interno della rete,
<gateway> il tipo di gateway (MIB510, MIB520, MIB600 etc.) e <porta_COM> è la
porta COM a cui è connessa la gateway (si noti che l’espressione della porta COM è di
tipo linux-like cioè se ci si riferisce alla porta COM1 allora si scriverà /dev/ttyS0, a
COM2 corrisponde /dev/ttyS1 e cosi via). Chiusa questa parentesi, si passa alle
misurazioni. La prima misurazione effettuata consiste nel posizionare i due sensori a
distanza di 50cm l’uno dall’altro. Dopodichè si è acceso il sensore mobile che invia
messaggi conformi alla tipologia dei messaggi utilizzati nell’applicazione di
localizzazione. Il sensore installato sul gateway riceve tali messaggi, ne calcola il valore di
RSSI e lo invia al PC dove, tramite l’utilizzo di un’applicazione per il parsing dei
pacchetti ricevuti, è possibile leggere il valore. Si è iterato questo ragionamento fino a
raggiungere la massima distanza possibile tra i due sensori all’interno del laboratorio in
cui si sono effettuate tali prove, ovvero una distanza di 550cm. Quindi si precisa che tali
misurazioni sono state effettuate in ambiente indoor, ambiente sicuramente più
sfavorevole dal punto di vista di possibili fenomeni di fading del canale di comunicazione.
In figura 6.4 è rappresentato il grafico risultante da questa sperimentazione. Qui appare
evidente che le rilevazioni del valore di RSSI ricevuto partono da una distanza di 50cm
fino ad una distanza di 550cm. Bisogna chiarire un aspetto, l’applicazione costruita ed
installata nei due sensori, ottiene le rilevazioni del valore di RSSI relative ad un messaggio
ricevuto tramite l’interfaccia ADC (che è quella che fornisce l’accesso ai componenti
hardware che effettuano le rilevazioni) in ascolto sul canale 0 e da qui si ottiene un
155
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
numero intero che va da 0 a 255. Per ottenere il valore di RSSI in dBm (Decibel per
milliWatt) dalla rilevazione fatta dal sensore, occorre far riferimento alla seguente
formula:
51,3
BattValue RssiValue
1024
45,5
dove BattValue è il valore della batteria (che nelle prove effettuate è stato fissato ad un
valore tipico) mentre RssiValue è il valore rilevato dall’interfaccia ADC del componente
che consente le rilevazioni hardware.
Figura 6.4 – Grafico relazione distanza-RSSI
Una volta fatta questa conversione si sono ottenuti i risultati visibili sul grafico di figura
6.4. La linea blu rappresenta l’unione dei valori medi di RSSI (valutai su venti rilevazioni)
relativi alle distanze tra i nodi (50cm 100cm 150cm e così via), si può notare il tipico
andamento decrescente, infatti all’aumentare della distanza diminuisce il valore di RSSI.
Le linee rosse verticali invece, rappresentano gli scostamenti del valore rilevato dal valore
156
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
medio, anche qui si è giunti ad una conclusione prevedibile, in quanto analizzata in altri
contesti sperimentali, e cioè che all’aumentare della distanza tra i sensori aumenta anche la
varianza delle rilevazioni intorno al valore medio.
Infine, pur non essendo un argomento chiave in questo contesto, si è fatta un’analisi
relativa al numero di pacchetti corrotti ricevuti dal sensore sulla gateway sulla base di
trenta invii da parte del sensore mobile. Si noti il grafico di figura 6.5
Figura 6.5 – Grafico del numero di pacchetti persi in relazione alla distanza tra i nodi
anche da qui si evince che all’aumentare della distanza aumentano il numero di pacchetti
corrotti ricevuti, ovviamente si dovrebbe fare un discorso molto più ampio su questo
argomento visto che il numero di pacchetti corrotti dipende anche dal numero di byte di
cui un particolare pacchetto è composto. Qui ci si limita ad effettuare l’analisi da un punto
di vista qualitativo, infatti più aumenta la distanza tra i nodi più c’è la probabilità di
ricevere un pacchetto corrotto, quindi nel caso specifico dell’applicazione di
localizzazione, si è fatta la scelta di non basare la misura del RSSI su un singolo
messaggio, ma piuttosto su un numero di messaggi tali da garantire il corretto
157
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
funzionamento dell’algoritmo, per poi considerarne il valore medio.
6.1.2 TOSSIM e TinyViz
Si discuterà ora del software che TinyOS mette a disposizione per simulare il
comportamento di una rete di sensori, questo stesso software è stato utilizzato per le
sperimentazioni. Si partirà dalla descrizione dell’ambiente di simulazione TOSSIM per
poi arrivare al discorso relativo a TinyViz che rappresenta un tool, sviluppato in java e
basato proprio sul simulatore TOSSIM, per cui sono stati sviluppati una serie di plugin
molto utili nel contesto in questione.
TOSSIM è un simulatore di eventi discreti per TinyOS. In precedenza si è visto come
come compilare un’applicazione per le piattaforme hardware, in TinyOS è possibile
compilare un’applicazione anche per la piattaforma PC che consente proprio di effettuare
una simulazione in TOSSIM dell’applicazione in questione. Questa simulazione permette
agli utenti di effettuare il debug o di monitorare l’esecuzione tramite altri tool.
Ovviamente bisogna tener pesente che comunque si tratta sempre di una simulazione, e
che quindi si parte da una serie di assunzioni e semplificazioni fatte dal simulatore nel
momento in cui viene eseguita l’applicazione. Di seguito vengono elencati alcuni
paramentri caratteristici del simulatore TOSSIM:
Fedeltà: normalmente, TOSSIM cattura tutti i comportamenti di TinyOS ad un
livello molto basso. Infatti in queste simulazioni la rete di sensori viene
analizzata ad un livello basso (livello bit). Inoltre TOSSIM considera tutte le
rilevazioni effettuate tramite interfaccia ADC (ovviamente generando numeri
casuali e non rilevazioni reali) ed inoltre genera e gestisce tutti i tipi d’interrupt
all’interno del sistema. Considerati tutti questi aspetti, si può affermare che
TOSSIM rappresenti abbastanza fedelmente, il comportamento della piattaforma
hardware.
Modello: il simulatore TOSSIM non rappresenta un modello del mondo reale.
Infatti si può affermare che le simulazioni effettuate in TOSSIM rappresentano
un’astrazione di alcuni fenomeni del mondo reale. E’ possibile creare un modello
158
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
personalizzato di simulazione tramite alcuni tool di cui si discuterà in seguito.
Imperfezioni:
anche
se,
come
descritto
prima,
TOSSIM
analizza
il
comportamento di TinyOS ad un livello molto basso, parte comunque da una
seria di assunzioni e semplificazioni fatte dal punto di vista hardware. Per
esempio, l’interrupt hardware in TOSSIM non è di tipo prelazionato. Invece nei
sensori reali, un interrupt può verificarsi quando si esegue altro codice, la
prelazione, esistente nei sensori, consente di eseguire immediatamente il codice
relativo all’interrupt che potrebbe portare il sensore in uno stato inconsistente o
irrimediabilmente errato. Ecco perché una delle regole fondamentali di buona
programmazione in NesC, è sviluppare funzioni atte alla gestione degli interrupt
molto semplici e brevi.
Fatta questa panoramica preventiva, si passa all’aspetto pratico di come compilare e
simulare applicazioni tramite TOSSIM. La compilazione dell’applicazione corrente per la
piattaforma TOSSIM viene effettuata tramite il comando seguente:
make pc
questo comando produce l’eseguibile che s’insidierà nel percorso corrente sotto la
directory /build/pc/main.exe. Quindi per far partire la simulazione basterà scrivere il
seguente comando:
./build/pc/main.exe <opzioni> <num_nodes>
dove <num_nodes> specifica il numero di nodi di cui è composta la rete da simulare,
mentre alcune opzioni possono essere:
-h, -help: fornisce l’insieme di opzioni
-gui:
stoppa la simulazione, ed aspetta una GUI che si connetta ad essa
-t=<sec>: specifica il numero di secondi virtuali della simulazione
-b=<sec>: indica il tempo di attesa prima dello startup dei nodi
159
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Queste rappresentano solo alcune opzioni che consentono all’utente di effettuare un
monitoraggio e delle sperimentazioni più ampie. In particolare, in questo contesto è stata
utilizzata quasi sempre l’opzione –gui per non far partire la simulazione prima del
collegamento di altri tool o applicazioni ad essa, monitorando ed analizzando così
dall’inizio l’intera simulazione. Un’ altra particolarità del TOSSIM è il fatto che mette a
disposizione diverse configurazioni di debug a run-time. Infatti è possibile effettuare il
debug all’interno di un’applicazione scritta in NesC, utilizzando il la seguente sintassi:
dbg(DBG_<configurazione>,”VIDEO OUTPUT… =%d\n”,<var> )
la parola chiave per utilizzare il debug è quidi dbg. Analizziamo il comando precedente:
<var> permette di visualizzare a video al posto del carattere %d,
il valore di una
variabile utilizzata all’interno del programma, si precisa che possono essere visualizzate
tante variabili quanti ne sono i caratteri %d, la sostituzione avviene in maniera ordinata
(cioè al primo carattere %d corrisponde la prima variabile elencata e così via). Per quanto
riguarda la <configurazione> si è detto che TOSSIM ne mette a disposizione molte a
seconda del focus che si vuole dare all’operazione di debug, per esempio voglio effettuare
un debug relativo alla comunicazione seriale in questo caso si utilizzerà la configurazione
uart, oppure si è interessati al debug relativo alle operazioni radio in questo caso si
utilizzerà la configurazione radio, per i dettagli relativi alle varie configurazioni si
rimanda a [1]. Per ora ci si limita a dire che esistono tre configurazioni utente che possono
essere
utilizzate tramite le configurazioni usr1, usr2, usr3. Si precisa che in una
simulazione TOSSIM è possibile effettuare un debug relativo ad una singola
configurazione per volta, in base al valore della variabile d’ambiente TinyOS DBG . Infatti
prima di partire con la simulazione, il TOSSIM legge il valore di questa variabile e
visualizza, nel corso della simulazione, i messaggi relativi a quella configurazione di
debug.
Fatta questa doverosa introduzione all’ambiente di simulazione TOSSIM, si passa alla
descrizione di un tool, sviluppato in Java, che permette di potenziare le capacità di
simulazione di TOSSIM tramite l’utilizzo di svariati plugin, il nome di questo tool è
160
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
TinyViz. Questo è incluso nella distribuzione di TinyOS 1.x è fornisce una visualizzazione
Java relativa ad una simulazione TOSSIM. E’ possibile collegare TinyViz ad una
simulazione TOSSIM, lanciando prima una simulazione con l’opzione –gui dopodichè far
partire TinyViz, in questo modo si può gestire la simulazione tramite la GUI di
quest’ultimo che fornisce appunto strumenti molto utili per il debug. In figura 6.6
Figura 6.6 – GUI di TinyViz
è rappresentata una simulazione tramite TinyViz di un’applicazione TOSSIM. Nella parte
sinistra è rappresentata la griglia corrispondente all’area della WSN ed al suo interno i
sensori che costituiscono la rete considerata. Oltre alla barra di menù sulla sinistra, in alto
a destra si può una barra contenente i comandi di controllo della simulazione. Il primo è il
pulsante che accende/spegne un nodo della rete, immediatamente dopo vi è una barra per
l’aumento/diminuzione della frequenza degli eventi nella simulazione, dopodichè c’è il
pulsante che avvia/arresta la simulazione. Inoltre ci sono altri due pulsanti, uno relativo
alla comparsa/scomparsa della griglia l’altro relativo alla pulitura della console di debug.
Poi, come si può notare, ci sono una serie di pannelli (uno per ogni plugin), che offrono
diverse opportunità. In quest’ambito si descriveranno soltanto i plugin utilizzati. Si parte
161
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
da un plugin standard come come del debug messages che consente di monitorare i
messaggi di debug, relativi alla configurazione scelta in TOSSIM, direttamente da una text
area contenuta nel pannello relativo in TinyViz. Un altro plugin utilizzato nel corso delle
sperimentazioni, è il plugin radio links che consiste nella visualizzazione, nella parte
sinistra della GUI di TinyViz, dei collegamenti radio che si vengono a creare tra sensori
durante lo scambio di messaggi. Infine un plugin di particolare importanza è quello che
consente di costruire un modello generale ADC, cioè permette di definire un qualsiasi
valore, relativo ad un particolare canale ADC, rispetto ad ogni nodo della rete in un
qualsiasi momento della simulazione.
In seguito, nel corso della spiegazione delle varie sperimentazioni, si farà riferimento a
questi strumenti software utilizzati per simulare l’applicazione di localizzazione
(ROCRSSI++) creata e fare un confronto con l’applicazione di localizzazione di partenza
(ROCRSSI).
6.2 Sperimentazioni relative al algoritmo ROCRSSI++
Nei capitoli 3 e 4
si è presentato, rispettivamente dal punto di vista logico ed
implementativo, l’algoritmo di localizzazione ROCRSSI++. In questo paragrafo si
discuterà delle varie sperimentazioni effettuate relative a questo sistema di localizzazione.
Come già detto nell’introduzione, si è partiti dalle misurazioni del valore di RSSI al
variare della distanza fatte su sensori MICA2, i risultati sono esposti nel grafico di figura
6.4. Partendo da queste misurazioni hardware effettuate, si sono svolte una serie di
simulazioni dell’applicazione in questione. Si vedrà il primo semplice esempio di
simulazione effettuata, si esporrà la metodologia di sperimentazione (che è comune a tutte
le altre prove) e si analizzeranno i risultati. Gli obiettivi delle misure effettuate sono
relativi all’accuratezza della stima della posizione, alla topologia di WSN, al consumo
energetico dell’applicazione di localizzazione ed ai costi dell’intera rete di sensori e si
mostrerà la bontà della soluzione adottata tramite il confronto con l’algoritmo originale
ROCRSSI.
162
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
6.2.1 Esempio di simulazione
Siccome lo strumento di simulazione utilizzato (TOSSIM) non prevede la simulazione del
valore RSSI in base alla distanza, si sono effettuate preventivamente le rilevazioni
sperimentali mostrate nel grafico di figura 6.4, dopodichè si sono utilizzati questi valori,
all’interno delle simulazioni. Consideriamo ora un esempio pratico. La rete considerata è
formata da un nodo incognito (che sarà il nodo 3) che deve localizzarsi utilizzando tre nodi
beacon (0,1 e 2). Innanzitutto si sono posizionati i nodi all’interno di un sistema di
coordinate che rappresenta l’area, espressa in centimetri, su cui si estende la WSN e si è
tenuta traccia delle coordinate (x;y) dei quattro nodi della rete. Dopodichè si è passati al
calcolo delle distanze tra i vari nodi tramite la formula della distanza euclidea in un piano
bidimensionale:
X1
dove X 1 ;Y1 e
X2
2
Y1 Y2
2
X 2 ;Y2 rappresentano le coordinate dei nodi per i quali si vuole valutare
la distanza tra loro. Una volta calcolate ed annotate le distanze tra i nodi, si è passati
all’assegnazione del valore di RSSI relativo ad ogni distanza calcolata, partendo dalle
misurazioni hardware effettuate e rappresentate nel grafico di figura 6.4. Tale valore è
stato poi assegnato al canale 0 dell’interfaccia ADC tramite il plugin di TinyViz ADC
readings. Si chiarisce questa procedura con un esempio. Si supponga che il nodo 0 invii
un messaggio beacon in broadcast che il nodo 1 riceverà, e si consideri la distanza tra il
nodo 0 ed il nodo 1 pari a 200cm. In base alle misurazioni effettuate, il valore medio di
RSSI (in dBm) relativo a tale distanza è -59,97, quindi la lettura da parte del nodo 1, sul
canale 0 dell’interfaccia ADC dev’essere pari a 72 (che è il valore medio misurato sui
MICA2 corrispondente al valore di RSSI in dBm pari a -59,97). Questo valore è stato
assegnato tramite il plugin su citato. In figura 6.7 è mostrato l’output di TinyViz relativo a
questa simulazione. La metodologia utilizzata nelle sperimentazioni seguenti, sono del
tutto analoghe a quest’appena descritta, con delle piccole eccezioni che si vedranno in
seguito. Una volta chiarita la modalità di sperimentazione, si può passare alla valutazione
dell’algoritmo di localizzazione implementato tramite alcune simulazioni effettuate.
163
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Figura 6.7 – Esempio di simulazione tramite TinyViz
A questo proposito, si è fatta un’analisi relativa all’accuratezza della posizione stimata dal
nodo incognito in funzione del numero di nodi beacon e della loro posizione, che si vedrà
nel prossimo sotto paragrafo.
Prima di addentrarci nella descrizione della prossima prova sperimentale, si vuole
precisare che l’algoritmo ROCRSSI++ è stato pensato in modo che un nodo incognito
riesca a localizzarsi tramite tre beacon. Quindi anche se ci sono più di tre beacon nella rete
si scelgono i beacon più adatti per fungere da anchor node rispetto al nodo incognito, in
base alla loro posizione. Così facendo si fissa il numero di scansioni della griglia che ogni
nodo incognito farà, cioè per localizzarsi un nodo incognito deve fare soltanto tre
scansioni (pari al numero di anchor node) della griglia con il relativo incremento dei
contatori corrispondenti alle celle (il procedimento è spiegato nel capitolo 4). Si sceglie di
tener conto solo di tre beacon per garantire comunque una certa accuratezza nella stima
della posizione del nodo incognito, ma allo stesso tempo non appesantire troppo il
processo di localizzazione, tenendo sempre conto dei parametri caratteristici delle WSN
quali risparmio energetico e capacità di calcolo limitate.
164
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
6.2.2 Prove sperimentali n°1: accuratezza posizione stimata relativa al numero di
beacon e tipologia della griglia di posizionamento
L’obiettivo di questa prova è dimostrare che utilizzando l’algoritmo proposto
ROCRSSI++, fissato il numero di nodi incogniti all’interno di una WSN, un
posizionamento casuale dei beacon rispetto ad un posizionamento a griglia migliora
l’accuratezza media della stima della posizione del nodo incognito. Inoltre, si vuole
dimostrare che aumentando il numero di beacon diminuisce l’errore commesso sulla
stima.
A tal proposito, si misurerà l’errore, espresso in centimetri, sulla stima del
posizionamento e come questo varia all’aumentare del numero di beacon.
Per quanto concerne la prima prova sperimentale, visto che si tratta di una simulazione, si
è scelto di prendere in considerazione comunque tutti i beacon presenti nella WSN, al
contrario del funzionamento tipico del ROCRSSI++ descritto in precedenza. Questo ha
comportato comunque un’elaborazione più impegnativa ma in questo caso, non ci si
doveva preoccupare degli aspetti energetici visto che si trattava di una simulazione
nell’ambiente TOSSIM. I risultati della prova sono riportati nel grafico di figura 6.8
Figura 6.8 – Grafico della variazione dell’errore all’aumentare del numero di beacon
presenti nella WSN
165
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
In questa prova effettuata, si precisa che visto il numero di nodi sempre crescente, si è
deciso di non inserire manualmente il valore di RSSI relativo ad ogni scambio di
messaggio, tramite il plugin di TinyViz ADC readings visto prima. In questo caso si è
scritta una porzione di codice apposita, relativa alla specifica prova, che consente di
automatizzare per ogni nodo la rilevazione del valore di RSSI a seconda dello specifico
nodo che ha inviato il messaggio e che è stato ricevuto dal nodo in questione. Inoltre si è
introdotto un generatore di numeri casuale nell’applicazione con lo scopo appunto di
simulare le variazioni che possono sussistere nella rilevazione del valore di RSSI (si
consideri il grafico di figura 6.4). Dall’analisi del grafico di figura 6.8 risulta chiaro che
l’algoritmo ROCRSSI++ funziona meglio, dal punto di vista dell’accuratezza della
posizione stimata, se vi è una certa casualità nel posizionamento dei nodi piuttosto che
posizionarli secondo una griglia. Da un certo punto in poi si può notare che i
miglioramenti sono sempre minori, in particolare se si usano 6 beacon oppure 10 beacon il
miglioramento sulla stima della posizione del nodo incognito è nell’ordine di qualche
centimetro. Inoltre bisogna tener presente il discorso fatto prima, ovvero che comunque
qui si riprendono in considerazione tutti i beacon, perciò si fanno tante scansioni quanti
sono i beacon, appare ovvio che visto e considerato che la scansione dell’intera griglia è
l’operazione più dispendiosa in termini temporali (nel caso reale anche in termini
energetici), non vale la pena utilizzare più di sei beacon. Anche perché bisogna
considerare che comunque c’è un limite inferiore rispetto alla precisione della posizione
stimata (argomento discusso nel capitolo 4) e comunque c’è da considerare anche la
grandezza fisica del sensore che fa si che si possa commettere l’errore di qualche
centimetro. Ovviamente bisogna fare un altro tipo di discorso e cioè che la situazione
appena vista rappresenterebbe un assurdo dal punto di vista reale in quanto non ha nessun
senso utilizzare ben sei nodi beacon per un solo nodo incognito, lo scopo di questa prova è
dimostrare che talvolta è più utile posizionare i nodi in maniera casuale piuttosto che
secondo uno schema a griglia.
Si passa ora alla descrizione della prova sperimentale e all’analisi dei risultati scaturiti da
questa.
166
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Si sono prese in considerazione due topologie di posizionamento dei sensori all’interno
della WSN, ovvero posizionamento random e posizionamento in griglia. In figura 6.9 sono
mostrate le diverse tipologie:
a) tipologia a griglia
b) tipologia random
Figura 6.9 – Diverse tipologie utilizzate
Si è partiti nel considerare una rete di sensori composta da un solo nodo incognito, che
deve quindi localizzarsi, e tre nodi beacon, e si sono posizionati una volta in maniera
casuale e una volta a modo di griglia. Dopodichè, tramite la metodologia illustrata
nell’esempio precedente, si sono considerate le varie distanze, si è calcolato il valore di
RSSI corrispondente, lo si è fatto leggere dal nodo corrispondente. Poi si è iterato questo
ragionamento ed infine si è annotata la stima della posizione del nodo incognito. Nelle
figure seguenti sono rappresentate le due topologie di rete viste da TinyViz
Figura 6.10 – WSN con tre beacon (0,1 e 2) ed un nodo incognito (3), disposti in maniera
casuale
167
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Figura 6.11 – WSN con tre beacon (0,1 e 2) ed un nodo incognito (3), disposti in griglia
Nelle figure 6.10 e 6.11 sono rappresentate rispettivamente le due tipologie di
posizionamento: casuale e random. In entrambe i nodi 0,1 e 2 rappresentano i nodi beacon
riconoscibili anche perché si è costruita l’applicazione in modo che se un nodo è un
beacon di 1° o di 2° livello, ha il led giallo accesso (come si può notare anche nelle
figure), mentre il nodo 3 è il nodo incognito. I cerchi blu intorno ai nodi beacon, stanno ad
indicare che questi inviano messaggi in broadcast, mentre il led verde ha lo stesso
comportamento in tutti i sensori, ovvero si accende e si spegne ad ogni attività radio
(ricezione ed invio di un messaggio). Una volta annotate le stime della posizione calcolata
dal nodo incognito per entrambe le topologie di rete, si è passati alla prossima prova, cioè
si è lasciato uguale il numero di nodi incogniti (cioè uno) e si è aggiunto un nodo beacon
per entrambe le topologie, in modo da avere le seguenti situazioni:
Figura 6.12 – WSN con quattro beacon ed un nodo incognito, disposti in griglia
168
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Figura 6.13 – WSN con quattro beacon ed un nodo incognito, disposti in maniera casuale
Si è iterato questo ragionamento fino a considerare una rete composta da dieci nodi beacon
ed un solo nodo incognito, e si è valutato come l’errore sulla stima della posizione del
nodo incognito cambiava in funzione del numero dei beacon presenti nella rete e del loro
posizionamento.
6.2.3 Prove sperimentali n°2: confronto accuratezza ROCRSSI – ROCRSSI++
In questa seconda prova si dimostra che il ROCRSSI++ rispetto al ROCRSSI, migliora
l’accuratezza della posizione stimata per tutte le topologie di WSN considerate. Si
analizzano adesso, le prove sperimentali effettuate relative al confronto tra l’algoritmo
originale da cui si è partiti cioè il ROCRSSI, e l’algoritmo proposto ovvero il
ROCRSSI++. La procedura di sperimentazione è la stessa utilizza fin ora e spiegata nei
dettagli nei sottoparagrafi precedenti. Per effettuare un confronto abbastanza generico, ma
che comunque sia rappresentativo sotto diversi punti di vista, si è scelto di confrontare i
due algoritmi, prendendo in considerazione diverse topologie di rete con dimensioni
diverse. La prima prova effettuata è relativa alla sperimentazione dell’algoritmo ROCRSSI
su una rete avente cinque nodi, di cui tre beacon e due nodi incogniti. Come già spiegato,
per quanto concerne la sperimentazione, si rispetta la procedura già citata e cioè si
assegnano delle coordinate ai nodi beacon, si tiene traccia di queste, poi si posizionano i
169
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
nodi incogniti e si annotano le loro coordinate attese. Dopodichè si calcolano tutte le
distanze tra i nodi (si ricorda che le distanze sono rappresentate in cm) e si assegnano i
valori di RSSI per ciascuna di essa. Si precisa che anche in questo caso è stata scritta una
porzione di codice specifica per la prova, sia per evitare di assegnare il valore
manualmente tramite il plugin ADC readings di TinyViz, sia per simulare la varianza
intorno al valore medio di RSSI relativo a ciascuna distanza.
Infine si attende che l’algoritmo di localizzazione fornisca le coordinate stimate dal nodo
incognito (tramite un messaggio di debug visibile in TOSSIM o tramite il plugin Debug
messages di TinyViz) che si confrontano poi con quelle attese e se ne valuta l’errore. In
figura 6.14 è rappresentata la vista in TinyViz della topologia relativa alla rete di sensori
presa in esame. I nodi 0,1 e 2 sono i beacon mentre i nodi 3 e 4 sono i nodi incogniti, cioè
coloro che devono localizzarsi tramite l’esecuzione dell’algoritmo ROCRSSI. Come si
può facilmente intuire già dalla figura, la posizione dei nodi beacon rispetto al nodo
incognito 4 non è ottimale per il posizionamento di quest’ultimo visto che si trova
abbastanza lontano dall’anchor node 1. Per il nodo incognito 3 la situazione è leggermente
diversa, in quanto è più vicino rispetto ai beacon, di quanto non lo sia il nodo 4, quindi ci
si aspetta sicuramente un stima più precisa del nodo 3 rispetto al nodo 4.
Figura 6.14 – Vista TinyViz relativa alla simulazione del ROCRSSI in un WSN di 5 nodi
(3 beacon e 2 nodi incogniti)
170
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Si passa adesso alla seconda prova effettuata , quella cioè relativa alla sperimentazione
della stessa WSN utilizzando però come algoritmo di posizionamento, il ROCRSSI++. La
rete WSN è praticamente identica alla precedente dal punto di vista del posizionamento
dei nodi, per far si che il confronto tra gli algoritmi sia veritiero. In questo caso però
facciamo un’analisi leggermente diversa, i numero di nodi nella WSN è sempre cinque di
cui due nodi incogniti e tre beacon di 1° livello. Questa appena descritta però è la
situazione iniziale, infatti, dopo che il nodo 3 si sarà localizzato, diventerà beacon di 2°
livello e quindi fungerà da anchor node per il nodo incognito 4 che non si è ancora
localizzato. Quest’evoluzione è rappresentata in figura 6.15, nella figura a) ritroviamo la
situazione iniziale dove i tre beacon (0,1 e 2) contrassegnati dal led giallo, fungono da
anchor node per i nodi incogniti 3 e 4. Ad un certo punto il nodo 3 effettua la propria
localizzazione e diventa beacon di 2° livello (comportamento visibile in figura 6.14 b) in
cui anche il nodo 3 accende il led giallo, che sta a significare che è diventato beacon) a
questo punto, il nodo 4 lo utilizza come anchor in quanto più vicino rispetto al beacon 1.
a)
171
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
b)
Figura 6.15 – Vista TinyViz relativa alla simulazione del ROCRSSI++, WSN di 5 nodi
a) Situazione precedente alla localizzazione del nodo 3 (3 beacon di 1° livello, 2 nodi)
b) Situazione dopo la localizzazione del nodo 3 (3 beacon di 1° livello, 1 beacon di 2°
livello, 1 nodo)
In questo modo si è fatto il confronto dei due algoritmi relativi ad una WSN composta da
cinque nodi, con un posizionamento che si può definire casuale. Relativamente alla
particolare WSN presa in esame, la differenza di accuratezza tra i due algoritmi si evince
dall’errore della stima del nodo 4. Infatti la localizzazione del nodo 3 avviene tramite i
beacon 0,1 e 2, e sarà la stessa in entrambi gli algoritmi, mentre la localizzazione del nodo
4 nel caso del ROCRSSI, avverrà tramite i beacon 0,1 e 2, invece nel caso del
ROCRSSI++ avverrà tramite i beacon 0 e 2 (che sono beacon di 1° livello) ed il beacon 3
(che è un beacon di 2° livello). I risultati scaturiti da queste due prove effettuate, sono
riassunti nel grafico di figura 6.16.
Questo grafico mette in evidenza le differenze dei due algoritmi, utilizzati nella medesima
rete di sensori, dal punto di vista dell’errore commesso sulla stima della posizione da parte
dei nodi incogniti. Si può notare che l’errore medio, nel caso del ROCRSSI++, è molto più
basso rispetto al caso in cui si è utilizzato il ROCRSSI.
172
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Figura 6.16 – Grafico del confronto degli algoritmi utilizzati sulla stessa WSN
E’ giusto precisare ancora una volta che, il miglioramento apportato dal ROCRSSI++ in
questo caso è unicamente relativo alla stima della posizione del nodo 4 in quanto è l’unico
ad usufruire del nodo 3 che diventa beacon di 2° livello, caratteristica questa peculiare del
ROCRRSSI++. Per meglio considerare le differenze tra i due algoritmi, e fornire inoltre
risultati sperimentali rappresentativi di più tipologie di WSN, si sono prese in
considerazione altre due tipologie in cui questa volta, all’interno della rete, i sensori sono
disposti a modo di griglia:
WSN formata da 9 nodi: di cui 4 beacon e 5 nodi incogniti
WSN formata da 15 nodi: di cui 6 beacon e 9 nodi incogniti
Per quanto riguarda la prima tipologia e cioè un WSN formata da 9 nodi, si utilizzano 4
beacon per localizzare 5 nodi incogniti. Si considerano sempre le due prove in maniera
separata, e cioè si effettua prima la localizzazione tramite ROCRSSI, si tiene nota dei
risultati dopodichè si effettua la medesima prova sulla stessa rete utilizzando il
ROCRSSI++ ed anche qui si tiene traccia dei risultati. Come avveniva anche nella prova
173
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
precedente, inizialmente la situazione è identica in entrambe le prove, infatti sia nella
sperimentazione del ROCRSSI che del ROCRSSI++ si ha la situazione illustrata nella
figura 6.17
Figura 6.17 – Vista TinyViz relativa alla simulazione del ROCRSSI in una WSN di 9 nodi
(4 beacon e 5 nodi incogniti)
Come si può notare dalla figura, i beacon sono rappresentati dai nodi 0,1,2 e 3 mentre tutti
gli altri sono i nodi incogniti. I beacon presenti in quest’ esperimento relativo all’algoritmo
ROCRSSI, rappresentano i beacon di 1° livello nell’esperimento relativo all’algoritmo
ROCRSSI++. Infatti come detto in precedenza, la situazione iniziale è esattamente la
stessa nei due esperimenti. Nel caso del ROCRSSI++ però, quando il nodo incognito 4
riesce a localizzarsi, diventa beacon di 2° livello, e funge da anchor node per gli altri nodi
incogniti presenti nella rete, si dunque la situazione illustrata nella figura 6.18:
Come mostrato in figura 6.18, dopo che il nodo 4 è riuscito a localizzarsi, i beacon della
WSN in questione risulteranno essere i nodi 0,1,2,3 e 4, si ricorda che quest’ultimo è un
beacon di 2° livello. Per completare la panoramica su questa serie di esperimenti effettuati,
si illustra anche l’ultima tipologia di WSN presa in considerazione, ovvero una WSN
composta da 15 nodi, di cui 6 beacon e 9 nodi incogniti.
174
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Figura 6.18 – Vista TinyViz relativa alla simulazione del ROCRSSI++ in una WSN di 9
nodi (4 beacon di 1° livello, 1 beacon di 2° livello e 4 nodi incogniti )
In figura 6.19 è rappresentata la vista in TinyViz dell’esperimento relativo al ROCRSSI
utilizzato in una WSN di 15 nodi, che ricordiamo ancora una volta, è la medesima
situazione che inizialmente sussiste anche nell’esperimento relativo al ROCRSSI++
Figura 6.19 - Vista TinyViz relativa alla simulazione del ROCRSSI in una WSN di 15
nodi (6 beacon di 1° livello e 11 nodi incogniti )
175
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Esaminando la figura, si può notare che i 6 beacon sono rappresentati dai nodi 0,1,2,3,4 e
5. A differenza del ROCRSSI però, nell’algoritmo proposto a seguito dell’avvenuta
localizzazione dei nodi 6 e 7 si avrà la situazione illustrata in figura 6.20
Figura 6.20 – Vista TinyViz relativa alla simulazione del ROCRSSI++ in una WSN di 15
nodi (6 beacon di 1° livello, 2 beacon di 2° livello e 7 nodi incogniti )
I risultati relativi alle tre prove effettuate possono essere riassunti nel grafico di figura
6.21. Nel grafico di figura 6.21 si evince che, dal punto di vista dell’accuratezza media
sulla posizione stimata dai nodi incogniti, in tutte e tre le situazioni sperimentali in esame,
il ROCRSSI++ risulta essere migliore del ROCRSSI. In particolare il miglioramento più
significativo, si è avuto relativamente alla prima prova effettuata cioè quella riguardante
una WSN composta da cinque nodi disposti in maniera casuale. Risultato prevedibile
tenendo conto della sperimentazione precedente dove si evince che l’algoritmo di
localizzazione proposto si comporta meglio se la disposizione dei nodi è casuale rispetto
ad un posizionamento a griglia, questo è ancora più evidente se la rete è composta da
pochi nodi (grafico di figura 6.8).
176
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Figura 6.21 – Confronto riassuntivo sull’accuratezza tra ROCRSSI e ROCRSSI++
Inoltre bisogna considerare un ulteriore aspetto che sarà un utile strumento poi per il
dimensionamento della rete quando si parlerà dell’analisi dei costi, ovvero la percentuale
dei nodi beacon all’interno della rete. Come si può notare nel grafico di figura 6.22.
All’aumentare del numero totale di nodi all’interno della rete, si sono utilizzati meno
beacon pur ottenendo un accuratezza maggiore come illustrato nel grafico di figura 6.22.
Si precisa che per quanto riguarda il ROCRSSI++, per beacon s’intendono beacon di 1°
livello, ovvero quei beacon che conoscono a priori la loro posizione all’interno di un
sistema di coordinate. In definitiva, guardando anche la linea di tendenza presente i grafici
di figura 6.21 e 6.22, si evince che all’aumentare del numero di nodi che costituiscono la
WSN nonostante la percentuale del beacon presenti nella rete diminuisca, l’accuratezza
della stima della posizione dei nodi incogniti migliora. Si conclude il discorso relativo alle
prove effettuate, mostrando il grafico di figura 6.22 dove è mostrato il miglioramento
percentuale dell’accuratezza media relativa alla stima della posizione da parte dei nodi
incogniti appartenenti a diverse WSN, apportato dall’algoritmo proposto.
177
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Figura 6.22 – Grafico della percentuale dei beacon all’interno di una WSN
Figura 6.23 – Grafico miglioramento percentuale dell’accuratezza apportato dal
ROCRSSI++ per tipologia di WSN
178
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Si conclude così il discorso relativo alle prove sperimentali effettuate, dicendo che
l’accuratezza relativa alla posizione stimata potrebbe essere ulteriormente migliorata se si
considerassero tutti i beacon presenti nella rete nel raggio di copertura del nodo incognito
in questione. Infatti effettuando tante scansioni dell’area quanti sono i beacon nel raggio di
copertura del nodo incognito, talvolta è possibile restringere l’area l’intersezione ed
effettuare quindi una localizzazione più precisa. Ovviamente questo a scapito di un’
elaborazione più impegnativa, ed un consumo energetico quindi maggiore.
6.2.4 Analisi energetica
Al fine di valutare l’algoritmo ROCRSSI++ da più punti di vista possibili per effettuare
poi comparazioni con il ROCRSSI, si passerà ora ad un aspetto molto importante nelle reti
di sensori senza filo, ossia il consumo energetico. Quest’ultimo rappresenta infatti uno dei
fattori più importanti proprio perché un ottimizzazione significativa in tal senso
“allungherebbe” la vita dei sensori in una generica WSN. Proprio per questo sono stati
molti gli studi rivolti in tale direzione ed è proprio grazie al tanto materiale a disposizione,
che si è fatta un analisi energetica relativa all’algoritmo proposto: ROCRSSI++ in
confronto all’algoritmo originale ROCRSSI, basandosi sul consumo di ogni singola
attività di ogni singolo componente in relazione al funzionamento dell’applicazione nel
tempo. L’hardware preso come riferimento è il sensore MICA2 con chip radio CC1000.
Scendendo nel dettaglio vediamo che questo è composto da vari componenti che possono
essere accessi o spenti indipendentemente e sono:
CPU
Radio
Sensor devices
LEDs
ADC
EEPROM
per ognuno dei quali esistono riferimenti sull’energia dissipata nell’ordine dei mW.
E’ bene sottolineare che non sono state effettuate ne misurazioni hardware (direttamente
179
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
sui sensori) ne misure simulate in ambiente TOSSIM tramite applicazioni apposite, ma
piuttosto si è scelto di fare riferimento ad innumerevoli, precisi e ben documentati
esperimenti, in particolare in seguito faremo riferimento ai risultati sperimentali ottenuti
da Davis – Miller[3] e Victor Shnayder[2] riportati in tabella.6.1. Gli esperimenti fanno
riferimento a test su applicazioni diverse ma entrambi si prefiggono l’obbiettivo di fornire
un power model relativo ai MICA2 mettendo in evidenza i componenti hardware (e lo loro
rispettive attività) e il loro dispendio energetico. Dal momento che i risultati sperimentali
differiscono tra loro in maniera sensibile, si è scelto di fare un media tra le due
sperimentazioni.Innanzitutto osserviamo che i valori considerati in queste tabelle sono
espressi in mA e mW volendo fare una misurazione in mJ, prendiamo in considerazione
un’unità temporale (in questo caso 1 minuto) nella quale consideriamo l’esecuzione.
Infatti
Joule Watt * sec
e quindi possiamo effettuare la conversione in Joule utilizzando la precedente formula.
Avendo scelto 1 minuto dobbiamo essere sicuri che tale minuto sia rappresentativo delle
caratteristiche della nostra applicazione. Si ricorda che entrambi gli algoritmi in esame, si
compongono dove la prima è più breve della seconda, perciò si è scelto di riservare 20
secondi per la prima fase e 40 secondi per la seconda fase.
Davis - Miller 's result
Shnayder's result
Component
Current (mA)
Power (mW)
Current (mA)
Power (mW)
Empty Program
7,5
.02325
8
.024
Leds
2
.006
2,2
.0066
Radio Idle
16
.0496
15
.045
Radio On/Off
4
.0124
3,2
.0096
Radio Trasmit
21
.0651
16,5
.0495
Radio Receive
16
.0496
15
.045
GPS
110,106
.3413
Not Tested
Not Tested
EEPROM Read
11,971
.0371
14,2
.0426
EEPROM Write
32,871
.1019
26,4
.0792
Tabella 6.1. – Risultati sperimentazioni sui consumi energetici
180
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Passiamo quindi all’analisi energetica vera e propria. Partiamo dal ROCRSSI, sappiamo
che ci sono 2 entità distinte nella nostra wsn, i beacon ed i nodi. I beacon sono i nodi
“intelligenti” che potranno essere equipaggiati di GPS (la maggior fonte di consumo
energetico) per rilevare automaticamente la loro posizione, ed i nodi generici che
dovranno localizzarsi nella rete attraverso l’ascolto dei messaggi inviati dai beacon e
l’esecuzione dell’algoritmo di localizzazione. Consideriamo separatamente le 2 fasi; dove
nella prima i soli nodi beacon dialogano tra loro scambiandosi messaggi sulla loro
posizione, mentre nella seconda i beacon trasmettono e tutti gli altri nodi ricevono le
tabelle dai beacon, eseguono l’algoritmo e trasmettono la loro posizione.
In base a queste considerazioni analizziamo in dettaglio il consumo del beacon durante la
prima fase: un beacon deve inviare un fissato numero di messaggi contenente la sua
posizione nei 20 secondi rappresentativi della prima fase, considerando pari a 5 il numero
di messaggi il consumo relativo a quest’attività
è di 1,43 mJ (iterando questo
ragionamento si costruiscono i grafici riportati in seguito).
Per quanto riguarda l’attività di ricezione dei beacon il discorso cambia in quanto il
dispendio energetico risulta essere dipendente dal numero di beacon presenti nella rete
ognuno dei quali poi invia un certo numero di messaggi, per la misurazione si considerano
4 beacon quindi una ricezione da parte di ciascun beacon di un totale di 15 messaggi; nel
restante tempo della prima fase, la radio è inattiva. Analizziamo ora l’utilizzo della CPU in
questa prima fase: i beacon si limitano a memorizzare le informazioni ottenute dai vicini
per il resto la loro CPU è in idle; ecco perché non scorretto considerare il lavoro svolto dai
beacon nella prima fase quasi completamente IO-bound.
Passiamo all’analisi della seconda fase di un nodo beacon: si ricorda che questa fase dura,
relativamente alla scelta del periodo d’osservazione, 40 secondi, innanzitutto qui vi è
un’elaborazione volta a calcolare la media dei valori delle rilevazioni del RSSI dopodichè
l’analisi energetica in questa fase risulta relativamente semplice in quanto i beacon si
limitano solo ad inviare i messaggi, contenenti le tabelle costruite nella prima fase, allo
scandire di un timer e cioè ogni 2 secondi inoltre la cpu è sempre in idle visto che di fatto
181
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
non vengono effettuate operazioni. Quindi nella prima parte di questa fase si svolge lavoro
completamente CPU bound, mentre nella seconda parte invece il lavoro è tutto IO bound.
Consideriamo ora il contributo di energia dissipata da parte dei nodi che devono
localizzarsi, quindi devono ascoltare i messaggi dei beacon, effettuare alcune
comparazioni ed ordinamenti ed infine eseguire l’algoritmo di localizzazione. Durante la
prima fase i nodi non eseguono nessun compito quindi l’energia dissipata è relativa a
quella intrinseca dei componenti del sensore, nella seconda fase i nodi prima ricevono
messaggi dai beacon (lavoro IO bound) dopodichè eseguono l’algoritmo di localizzazione
(lavoro CPU bound). In figura 6.24 è rappresentato il grafico relativo ai consumi
energetici dell’applicazione che implementa il ROCRSSI per un minuto di esecuzione. Si
deve tener presente che per quanto riguarda i nodi incogniti, si è considerato il chip radio
spento durante tutta la prima fase e si è considerato quindi, soltanto il consumo intrinseco
dei vari componenti e quello relativo all’accensione e spegnimento del chip radio.
Le misure rappresentate dal grafico si riferiscono a singole unità hardware (cioè 1 beacon
ed 1 nodo). Osservando il grafico possiamo notare che la dissipazione di energia nei nodi è
maggiore rispetto ai nodi beacon, almeno per quanto riguarda la 2° fase.
Figura 6.24 – Grafico relativo al dispendio energetico ROCRSSI per minuto di esecuzione
182
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Si deve tener presente però che nell’analisi svolta non si è tenuto conto che i beacon
possono essere equipaggiati di GPS che introduce una dissipazione energetica di un ordine
di grandezza superiore alla comunicazione radio come si evince dalla tabella 6.1. La scelta
di non tenere conto di questo contributo non è casuale in quanto lo scopo dell’analisi è
capire in termini di dissipazione energetica, quanto è onerosa per i nodi normali la
localizzazione tramite ROCRSSI, inoltre c’è un’altra questione di particolare importanza e
cioè che mentre i beacon possiamo pensare di equipaggiarli con alimentazione
indipendente, e quindi preoccuparci relativamente meno del consumo energetico di questi,
per i nodi normali la questione è diversa visto che questi saranno equipaggiati con batterie
ed avranno quindi una durata limitata.
A questo punto sono obbligatorie alcune considerazioni: e cioè che le attività di
trasmissione e ricezione (lavoro IO bound) sono più onerose dal punto di vista energetico
rispetto a quelle svolte dalla CPU però meno variabili rispetto al costo intrinseco del
componente Radio (cioè quando il ricetrasmettitore è in idle), mentre troviamo
esattamente la situazione inversa nelle attività CPU bound.
Figura 6.25 – Grafico dispendio energetico ROCRSSI++ per minuto di esecuzione
183
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Passiamo ora all’analisi energetica del ROCRSSI++, nell’algoritmo proposto possiamo
distinguere 3 entità diverse: i beacon di 1° livello, i beacon di 2° livello e i nodi. I beacon
di 1° livello ed i nodi normali si comportano come i beacon ed i nodi visti nel ROCRSSI, i
beacon di 2° livello invece rappresentano una peculiarità del ROCRSSI++, questi infatti,
hanno un comportamento simile a quello dei nodi quando devono localizzarsi dopodichè si
comportano in maniera similare ai beacon.
Quindi volendo fare un’analisi energetica in dettaglio possiamo limitarci a studiare il
comportamento dei soli nodi beacon di 2° livello, come sempre analizziamo separatamente
le due fasi: durante la prima fase questi sono in completa inattività (si comportano come i
nodi normali), nella seconda fase ricevono i messaggi dai beacon, calcolano la loro
posizione dopodichè si proclamano beacon di 2° livello ed iniziano, anche loro, ad inviare
messaggi. Questo appena descritto è un comportamento transitorio, a regime infatti,
durante la 1° fase, i beacon di 2° livello si comportano come i beacon di 1° livello, cioè
inviano messaggi ai beacon effettuano operazioni di media per poi inviare le tabelle ai
nodi.
Figura 6.26 – Grafico di confronto dispendio energetico ROCRSSI - ROCRSSI++
184
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
In figura 6.25 è riportato il grafico relativo al dispendio energetico per singolo
componente dell’algoritmo ROCRSSI++. Com’era prevedibile il grafico mette in risalto il
fatto che gli elementi che dissipano più energia nel ROCRSSI++ sono i beacon di 2°
livello e rendono il ROCRSSI++ leggermente più sconveniente del ROCRSSI dal punto di
vista del consumo energetico. Nel grafico di figura 6.26 è illustrato un confronto fra i due
algoritmi dal punto di vista del dispendio energetico prendendo in considerazione una
WSN di 8 nodi: 3 beacon e 5 nodi nel caso del ROCRSSI e 3 beacon di 1° livello, 2
beacon di 2° livello e 3 nodi per il ROCRSSI++.
Dall’analisi del grafico risulta evidente che l’algoritmo proposto è leggermente più
sconveniente dal punto di vista del consumo energetico, però bisogna tener presente che a
fronte di questo consumo leggermente maggiore, nel caso particolare della WSN
considerata, i due beacon di 2° livello apporteranno miglioramenti sull’accuratezza della
localizzazione dei nodi incogniti.
6.2.5 Analisi dei costi
Come ampiamente spiegato nel capitolo 5, il sistema di localizzazione implementato, si
colloca in un contesto più ampio, cioè quello di creare una WSN che sia in grado di fare
monitoraggio ambientale, ed in particolare monitoraggio di terreni a rischio di frane. In
questo sottoparagrafo, si farà un’analisi relativa ai costi che comporta il sistema nel suo
ambito di utilizzo. Si farà inoltre anche un discorso relativo alle scelte da implementare
visto che si tratta di un ambito particolare che presenta il rischio di perdere una parte della
rete di sensori a causa di frane. Si chiarisce che l’analisi dei costi si riferisce al costo in
denaro della messa in esercizio del sistema. Per quanto concerne la parte di sistema trattata
in questa tesi, si possono individuare due tipi di costo:
Costi relativi all’installazione della WSN e delle eventuali infrastrutture ad essa
inerenti
Costi relativi ai componenti hardware da utilizzare
Per quanto riguarda i costi relativi all’installazione della WSN bisogna considerare molte
185
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
variabili. Infatti questo costo è quello riguardante l’installazione fisica della rete di sensori
e delle infrastrutture che essa necessita dipendono sostanzialmente dall’ambiente
circostante. Ad esempio, se l’ambiente in cui si cala la WSN in questione è
particolarmente ostico a causa, ad esempio, di eccessivi dislivelli o per l’assenza di strade
percorribili a piedi, per raggiungere l’area d’interesse ed effettuare qui l’installazione della
rete di sensori potrebbe essere necessario l’utilizzo di mezzi particolari. Inoltre vi è la
possibilità di affidarsi ad un’impresa del settore, che provvederà all’installazione della
rete. Oltre a questi eventuali costi, bisogna considerare anche i costi derivanti da tutti
quegli accorgimenti che devono essere presi, anche questi dipendenti dall’area
d’installazione. Può capitare, infatti, che in ambiente aperto i sensori costituenti la rete
vengono installati a qualche decina di centimetri dal terreno tramite l’ausilio di piccoli
pali, oppure considerando il caso in questione, si potrebbe pensare di ancorare al terreno in
maniera molto solida, quei nodi che rappresentano i beacon e che quindi sono le ancore
sfruttate da tutti gli altri nodi della rete di sensori per localizzarsi. Sempre riferendoci al
caso preso in esame, come detto nel capitolo 5, si è pensato all’utilizzo di una stargate che,
essendo un sorta di super nodo che consente l’interfacciamento da e verso la rete di
sensori, deve essere preservata maggiormente magari tramite l’utilizzo di particolari
involucri. Un altro aspetto da considerare in questa categoria di costi, è quello dell’
eventuale cablaggio verso un server WSN o di un eventuale allacciamento alla rete di
distribuzione elettrica. Nel capitolo 5, infatti è stata considerata anche la possibilità di
utilizzare un server WSN, connesso fisicamente alla rete di sensori (in particolare al
gateway) tramite porta seriale. Questo ovviamente comporta il cablaggio dal gateway della
WSN fino alla locazione del server, e si è detto che questo talvolta può essere molto
costoso. Infine, come accennato nel sottoparagrafo relativo all’analisi energetica, si può
pensare di dotare i nodi beacon di modulo GPS, per fare questo però risulta quasi
indispensabile dotarli anche di un’alimentazione energetica indipendente, visto l’alto
dispendio energetico dovuto al GPS stesso. Ecco quindi che può esserci l’esigenza di
allacciare i beacon alla rete di distribuzione elettrica andando incontro talvolta, a costi
elevati.
186
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Come si evince dalle considerazioni precedenti, i costi all’installazione della WSN e delle
relative infrastrutture ad essa inerenti dipendono da molti fattori e qundi non ha molto
senso effettuare un’analisi relativa a questi se non si considera un caso reale. Ecco perché
si effettuerà un’analisi dei costi quantitativa relativa ai soli componenti hardware da
utilizzare, tendo sempre presente, per le diverse soluzioni possibili, gli eventuali costi
aggiuntivi di cui si è discusso in precedenza.
Si parte dalla tabella 6.2 relativa ai costi delle piattaforme hardware appartenenti alla
famiglia Crossbow, il prezzo è quello indicato sul sito di riferimento della casa costruttrice
ed è indicato in dollari. Per le prove sperimentali fatte sull’hardware sopra riportate, si
ricorda che si sono utilizzati i sensori MICA2, 900MHz, ma si può estendere quel risultato
alle diverse piattaforme con qualche piccola differenza. Infatti numerosi sono stati gli studi
mirati al legame tra il valore di RSSI rilevato e la distanza tra due nodi. Per maggiori
approfondimenti si rimanda a [4].
Moduli Wireless
Prezzo
MICA2 – CC1000, 900MHz
$155
MICA2 – CC1000, 433MHz
$169
MICAz – CC2400, 2,4GHz
$134
IRIS – 2,4GHz
$155
Cricket
$263
Tabella 6.2 – Tabella dei costi relativi ai moduli Wireless
Si considera, inoltre, il prezzo relativo alle varie sensorboard che possono essere
equipagiate. In tabella 6.3 sono rappresentate alcune delle sensorboard prodotte dalla
Crossbow, le relative funzioni ed il prezzo. Prima di elencare le possibili soluzioni ed
evidenziarne il prezzo, si conclude questa panoramica relativa all’hardware, si elencano in
tabella 6.4 alcune stargate prodotte dalla Crossbow, le relative funzionalità messe a
disposizione ed il prezzo relativo. Si precisa che tutte le stargate hanno lo slot per
l’inserimento di una sensorboard.
187
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Sensor board
Rilevazioni possibili
Prezzo
MICA2/z Sensor Board
Accellerazione bi-dimensionale, luminosità,
$250
temperatura, acustica
Basic Weather
Temperatura, umidità, luce ambientale,
$284
pressione barometrica
GPS Weather
Temperatura, umidità, luce ambientale,
$404
pressione barometrica e dotazione di un
modulo GPS
Tabella 6.3 – Tabella dei costi relativi alla diverse sensor board
Stargate
Funzionalità
Prezzo
XScale platform Intel
Funzionalità tipiche del gateway in una
$300
rete di sensori, ambiente linux integrato,
comunicazione
tramite
lo
standard
802.15.4
NetBridge 100
Web Server integrato ed altri tool per la
$600
gestione delle informazioni provenienti
dalla WSN
Tabella 6.4 – Tabella dei costi relativi alle stargate
Si cercherà adesso di considerare un caso reale relativo all’ambito di utilizzo in questione,
ed effettuare un’analisi dei costi quantizzata dal punto di vista del materiale hardware
utilizzato, elencando le possibili soluzioni e facendo le opportune osservazioni
relativamente a quei costi aggiuntivi derivanti dall’installazione della WSN ed alle
infrastrutture necessarie ad esse.
Lo scopo del progetto, ricordiamo che è il monitoraggio ambientale ed in particolare dei
rischi ambientali derivanti dai fenomeni franosi. Per cercare si soddisfare questi requisiti,
si ricorda che si è implementato un’applicazione ad-hoc che offre un sistema di
188
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
localizzazione ed inoltre un supporto per la rilevazione di misure relative all’ambiente
circostante.
Per effettuare un confronto sui costi tra le diverse possibilità d’implementazione di una
WSN, occorre fissare alcune variabili per limitare le possibili combinazioni di scelte. Per
questo nel seguito si supporrà di utilizzare per ogni nodo beacon della rete, le sensorboard
che consentono la rilevazione delle grandezza fisiche atmosferiche, quindi le Basic
Weather e GPS Weather a seconda dei casi; inoltre si sceglie di attrezzare la WSN di una
stargate di tipo XScale con processore intel che garantisce un potenza di calcolo adeguata
all’applicazione a dei costi contenuti. In quest’ambito infatti, considerata l’architettura
iCAAS che si trova a valle della rete di sensori, è inutile utilizzare un stargate di tipo
NetBridge 100 visto che lo strato software per la gestione dei dati provenienti dalla WSN
è stato creato ad-hoc.
Supponiamo di voler monitorare un’area di 100m 2 e di voler considerare tutte le misure
ambientali rilevabili tramite sensorboard. Considerando le prove effettuate su un’area di
10m2 ed i relativi risultati, e prendendo in considerazione inoltre la possibilità di
sovradimensionare la rete per garantire comunque un livello di qualità del servizio
adeguato anche all’occorrenza di guasti nei nodi, si sceglie di costruire una WSN di 45
nodi. Considerando le prove effettuate, si può notare che all’aumentare dei numero dei
nodi costituenti una WSN, la percentuale dei beacon diminuisce. Tenendo presente
l’andamento mostrato nel grafico di figura 6.22, in un rete composta da 45 nodi ne
possiamo considerare beacon il 20% (ovvero 9 nodi su 45) per avere garantire comunque
una buona accuratezza. A questo punto è doveroso fare un scelta d’implementazione che
dipende anche dalla conformazione del territorio in cui caliamo la WSN. Infatti possiamo
non dotare i beacon di modulo GPS e prefissare le coordinate per ciascun beacon, in
questo modo però dobbiamo preoccuparci di effettuare un posizionamento ad – hoc sul
territorio che rispecchi effettivamente la posizione prefissata nei beacon rispetto al sistema
di coordinate e questo non sempre è possibile. Questo tipo di soluzione è inoltre poco
adattativa, in quanto qualora si dovessero spostare i beacon, questi dovrebbero essere
riprogrammati con le posizioni correnti. L’alternativa è dotare ciascun beacon di modulo
189
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
GPS, per garantire miglior adattatività in quanto la posizione dei beacon non è
prefissatama viene calcolata tramite appunto il modulo GPS. Questa soluzione però è più
costosa non solo dal punto di vista del costo dei singoli beacon, ma anche dal punto di
vista energetico, ecco perché talvolta si sceglie di allacciare i beacon alla rete di
distribuzione elettrica (ovviamente questa soluzione comporta dei costi aggiuntivi per il
cablaggio). In figura 6.27 è rappresentato il grafico relativo all’analisi appena effettuata, i
costi sono relativi a tutti i componenti hardware necessari per la realizzazione della WSN
(moduli Wireless, sensorboard e stargate). Lungo l’asse delle ascisse sono riportate le due
soluzioni (con e senza il modulo GPS) e per tutte le soluzioni vi è l’analisi dei costi
relativa sia ad i MICA2 che ai MICAz. Come si può notare per entrambe le piattaforme
hardware, dal punto di vista dei costi di realizzazione è più sconveniente utilizzare il
modulo GPS per tutti i nodi della rete rispetto ad utilizzare l’algoritmo di posizionamento
ROCRSSI++, senza considerare poi il maggior dispendio energetico che può essere
arginato collegando ciascun nodo
Figura 6.27 – Grafico relativo all’analisi dei costi effettuata
alla elettrica, ovviamente ciò incrementa quei costi relativi all’installazione della WSN ed
190
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
alle relative infrastrutture. Si conclude facendo notare che è più conveniente utilizzare i
MICAz invece che i MICA2 come piattaforma Hardware
6.3 Test del sensor networks access
In questo paragrafo si tratterà la fase di testing dell’intera architettura realizzata, in
particolare ci si focalizzerà sul processo di inoltro dei dati dalla rete di sensori
all’architettura iCAAS, questo processo è illustrato nel dettaglio nel capitolo 5. Si è detto
che nella fase d’inoltro delle informazioni rilevate dalla rete di sensori verso il mondo
reale, vengono effettuati vari passi a vari livelli. Si capisce quindi, che effettuare dei test
esaustivi sui vari livelli e tener traccia dell’occorrenza degli errori (e del relativo livello di
occorrenza) è di fondamentale importanza per sapere dove effettuare il debug. Le prove
del sensor networks access sono state effettuate utilizzando l’applicazione Surge_Reliable
anch’essa presentata nel capitolo 5. Il sensor network access ha come scopo quello
d’inoltrare le informazioni provenienti dalla rete di sensori, al server remoto
dell’architettura iCAAS tramite un protocollo UDP creato ad-hoc che gestisce l’eventuale
perdita dei pacchetti con tecnica selective repeat. Guardando la figura 5.3 si capisce
quanto detto prima, cioè che un errore può verificarsi a vari livelli. Ad esempio può esserci
un errore in fase di parsing del pacchetto ricevuto dalla rete di sensori, può esserci un
errore sul modulo presente sulla stargate relativo alla formattazione dei dati, è possibile
che ci siano errori nei moduli software che gestiscono l’invio e la ricezione dei pacchetti
errori quindi relativi al protocollo, potrebbero esserci errori legati al server e alla
comunicazione con esso etc. etc. Inizialmente per le prime prove effettuate, si sono
utilizzati gli strumenti che TOSSIM mette a disposizione ovvero lo statemet dbg visto nel
primo paragrafo, ed inoltre sono stati utilizzati tool come Serial Forwarder e
l’applicazione ad–hoc creata per realizzare il sensor networks access lato client. Si capisce
però che utilizzando più console TOSSIM con il relativo strumento per il debug,
unitamente al Serial Forwarder ed all’applicazione creata, risulta molto difficile effettuare
un test atto a scovare errori di programmazione ed i relativi livelli di occorrenza. Ecco
perché si è deciso d’implementare una GUI in Java che riassumesse in un’unica
191
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
schermata, i debug relativi ai diversi livelli del sensor networks access. Prima di
continuare il discorso relativo alla GUI costruita, si precisa che nei vari test effettuati
successivamente, la WSN è sempre stata emulata tramite TOSSIM ed invece della stargate
è stato utilizzato un gateway MIB510 connesso serialmente al PC dove c’è l’applicazione
client del sensor networks accesa. Ovviamente dal punto di vista logico non cambia niente
visto che in seguito, l’applicazione client sensor networks access sarà installata
direttamente sulla stargate. Quindi lo scopo fondamentale di questa GUI
creata è
effettuare un debug congiunto relativo ai vari livelli dell’applicativo, inoltre si è integrato
il Serial Forwarder che gestisce il flusso d’informazioni proveniente dalla rete di sensori.
Nella figura 6.28 è riportata la schermata realizzata tramite le librerie grafiche javax.swing
messa a disposizione dalla release 1.41_2 di java.
Figura 6.28 – GUI del tester java realizzato
192
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Si procede con l’analisi di questa schermata. Partendo dall’alto a sinistra compaiono le
informazioni relative al server ovvero il suo indirizzo IP ed il porto, più in basso invece si
trovano le informazioni relative alla stargate ed alla relativa rete di sensori. Qui troviamo
l’identificativo della rete, indispensabile per il server dell’architettura iCAAS nel caso di
gestione di diverse reti, i porti locali di ricezione ed invio pacchetti, il numero massimo di
rilevazioni contenute in un singolo pacchetto ed il periodo di campionamento delle
rilevazioni. Ancora più in basso ci sono i due pulsanti che lanciano ed arrestano
l’applicazione. In basso a sinistra, è praticamente riportata la GUI del Serial Forwarder
con il numero di porto (locale) del server ed la porta di comunicazione con la WSN
(trattandosi di un WSN simulata in TOSSIM in questo caso la porta è tossim-serial). In
alto a destra c’è la console di debug Server Comunications relativa alla comunicazione con
il server, in particolare in questa console vengono riportati tutti gli eventi di
comunicazione con il server principale che è diverso dal server che riceve ed invia
pacchetti contenenti le informazioni. Infatti il server principale è in attesa di un pacchetto
chiamato “HELLO PACKET” da parte di una stargate di una WSN, ricevuto questo
pacchetto invia una risposta contenente il numero di porto del server atto a gestire il
traffico d’informazioni. In basso troviamo la console di debug UDP Messages in questa
console vengono riportati tutti i messaggi di debug relativi ai thread Sender e Receiver che
hanno rispettivamente il compito di inviare e ricevere pacchetti UDP secondo il
protocollo. Inoltre in questa console vengono riportati messaggi relativi alla gestione della
struttura dati atta a contenere i pacchetti che, eventualmente, devono essere rinviati.
Ancora più in basso c’è la console generale di debug che contiene i messaggi di debug
generici oltra a quelli relativi alla formattazione dei dati provenienti dalla WSN secondo la
struttura iCAAS. Infine troviamo la console di debug relativa ai cosiddetti TOS Events che
rappresentano gli eventi relativi alla comunicazione inter-nodo di una WSN, all’inoltro dei
pacchetti dalla rete di sensori verso la stargate ed al loro parsing. In definitiva come
descritto, grazie a quest’interfaccia grafica è possibile prendere in considerazione tutti gli
aspetti del sensor networks access per effettuare così un’operazione di debug più semplice.
193
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Conclusioni
In questa tesi si sono considerati vari aspetti relativi alle reti di sensori. Innanzitutto, si è
parlato del problema relativo alla localizzazione, problematica questa soggetta a numerosi
studi e sperimentazioni. Si sono accennati poi, i diversi ambiti di utilizzo e le diverse
applicazioni che prevedono l’utilizzo di una WSN dotata di sistema di localizzazione. Si è
passati poi alla progettazione ed implementazione dell’algoritmo di localizzazione
ROCRSSI++ e si è considerato l’ambito di utilizzo relativo al progetto regionale
REMOAM . In seguito si sono discusse le varie strategie ed architetture per gestire i dati
provenienti dalla rete di sensori, considerando tutti gli aspetti tipici per ogni architettura.
Dopodichè si è considerata la specifica soluzione adottata in relazione all’ambito reale di
utilizzo, ovvero il problema di localizzazione legato al monitoraggio dei rischi ambientali
derivanti da fenomeni franosi. Infine si è passati alla parte sperimentale. Si sono effettuate
prove che dimostrano la bontà della soluzione elaborata. Prendendo in considerazione
l’errore medio sul posizionamento stimato, si è dimostrato che il ROCRSSI++ introduce
un miglioramento medio del 30% rispetto al ROCRSSI relativamente alle topologie
considerate. Dopodichè si è effettuata un analisi energetica in cui si è dimostrato che a
fronte del miglioramento consistente sull’accuratezza, il dispendio energetico aumenta
soltanto del 6% in relazione alla particolare rete di sensori considerata. Si è effettuata poi
un’analisi dei costi che giustifica lo studio effettuato, dimostrando infatti che costruendo
una WSN basato sull’algoritmo di posizionamento creato vi è un risparmio del 41% sui
costi relativi all’hardware rispetto al caso in cui si utilizzano nodi ciascuno dotato di GPS,
senza considerare che l’accuratezza della stima del posizionamento ed il consumo
energetico sono di gran lunga peggiori in quest’ultimo caso.
194
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Sviluppi futuri
Per quanto concerne gli sviluppi futuri, sicuramente si dovranno effettuare prove
sperimentali su sensori reali in ambiente outdoor per vedere in questo contesto, come si
comportano i sensori. Inoltre, per testare la bontà del sistema di localizzazione, occorrerà
provare l’applicazione di localizzazione su una WSN reale, infatti, qui occorrono diversi
fenomeni difficilmente riproducibili in ambiente simulato (uno tra tutti il fenomeno di
fading) che potrebbero influenzare il comportamento dell’applicazione di localizzazione.
Un'altra misurazione da effettuare, considerando una particolare WSN reale sviluppata ad
hoc per una specifica funzione, è quella relativa all’autonomia dei singoli nodi. Infine per
il particolare contesto in cui s’inserisce il lavoro svolto, è indispensabile effettuare test
dell’intera architettura realizzata (WSN dotata di stargate che comunica tramite protocollo
UDP creato ad hoc con il server dell’architettura iCAAS) inserita nello specifico territorio
che si vuole monitorare. Questa è una prova indispensabile, in quanto le reti di sensori
sono fortemente influenzate dall’ambiente circostante molto di più dei sistemi tradizionali.
195
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Appendice A: Installazione e configurazione di TinyOS
In quest’appendice si affronterà l’aspetto tecnico e pratico di TinyOS ovvero ci
occuperemo della sua installazione su piattaforma Windows e la successiva
configurazione per gli scopi prefissati. Innanzitutto per poter installare una qualsiasi
versione di TinyOS sotto Windows si può utilizzare Cygwin che fornisce una envitrement
linux-like su windows consentendo di effettuare il porting di software che gira su sistemi
POSIX. Un volta installato Cygwin possiamo dedicarci completamente all’installazione di
TinyOS. In quest’ambito è stata scelta la release TinyOS 1.1.11 gratuitamente scaricabile
da:
http://www.tinyos.net/dist-1.1.0/tinyos/windows/
a causa di vari bug relativi alla generazione della documentazione NesC (problemi legati
ai tools per generare la nescdoc) si è scelto di effettuare l’upgrade tramite il file:
tinyos-1.1.15Dec2005cvs-1.cygwin.noarch.rpm
utilizzando il comando:
rpm --force -ivh --ignoreos *.rpm
all’interno della console Cygwin. Ad upgrade completato, innanzitutto verifichiamo se ci
sono dei problemi dovuti all’installazione o alla configurazione dell’ambiente TinyOS,
questa verifica può essere fatta in modo semplice attraverso il comando:
toscheck
196
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Figura A.5 – Esempio di output della console cygwin relativo al comando toscheck
In figura A.5 ritroviamo un esempio di output relativo al lancio del comando visto in
precedenza, si può notare che viene segnalato un warning in quanto la versione JRE (Java
Runtime Envoirment) presente nel sistema non è la versione richiesta da TinyOS 1.1.15
ossia la versione Java 1.4.2. Questo è un problema molto frequente quando si va ad
installare cygwin su una macchina dove è già presente una versione di java più avanzata,
197
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
per risolvere questo conflitto di versione si possono intraprendere varie strade. Una di
queste consiste in un downgrade dalla versione più recente (le versioni di java più recenti
sono 1.6 e 1.7) alla versione 1.4.2, la grossa limitazione di questa soluzione sta nel fatto di
non poter utilizzare alcune librerie java che sono caratteristiche delle versioni successive
alla versione 1.4.2 (ad esempio la libreria java.util.concurrent libreria che fornisce utilità
nella programmazione concorrente).Una soluzione più elegante, che è stata poi quella
adottata, consiste nell’installare la versione di java1.4.2 in una directory visibile a Cygwin
e successivamente creare una variabile d’ambiente in Windows utilizzata esclusivamente
da TinyOS definita come segue:
TINY_JAVA = C:\Programmi\UCB\jdk1.4.1_02\j2sdk1.4.1_02\jre\bin\
Dopodichè nel file di configurazione della console Cygwin chiamato bash.bashrc,
sostituiamo il riferimento alla variabile d’ambiente di sistema con quella appena creata.
Un altro problema molto diffuso ed affrontato anche da noi, è quello relativo alla corretta
configurazione delle librerie javax.comm indispensabili per la comunicazione seriale.
Infatti bisogna essere sicuri di possedere la versione di libreria 1.4.1_02 ed aggiungere il
percorso del file jar (contenente i file.class costituenti la libreria) all’interno della variabile
d’ambiente Classpath, esempio:
CLASSPATH = C:\Programmi\UCB\jdk1.4.1_02\j2sdk1.4.1_02\jre\lib\comm.jar
Una volta che il comando toscheck non rileva ne errori ne warning, possiamo ritenere
l’installazione e la configurazione di TinyOS completata correttamente.
Un ulteriore passo, assolutamente opzionale, ma comunque utile ai fini di automatizzare
determinate operazione, è quello di costruire un ambiente di compilazione tramite i
makefile; infatti tramite l’utilizzo dei makefile è possibile creare una pipe di comandi di
compilazione. Il file principale che gestisce molti aspetti del processo di costruzione delle
applicazioni TinyOS si chiama Makerules situato nella directory /opt/tinyos1.x/tools/make e offre le basi per costruire i makefile utilizzati nelle applicazioni utenti.
Un esempio di makefile utente creato è il seguente:
198
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
COMPONENT = TestStorageMessage
PFLAGS += -I%T/lib/ROCRSSI++
include ../Makerules
DEFAULT_LOCAL_GROUP = 0x33
dove è specificato il componente principale dell’applicazione utente, il path relativo ad
alcuni componenti utilizzati, l’inclusione del file principale Makerules ed infine un
identificativo del gruppo di sensori.
Infine dopo aver compreso il funzionamento dei makefile, si passa alla compilazione di
tutti i tool java presenti nella release di TinyOS installata, digitando i seguenti comandi:
cd /opt/tinyos-1.x/tools/java
make
cd /opt/tinyos-1.x/tools/java/jni
make install
199
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Bibliografia
[1]
Y. Sankarasubramaniam, W. Su - “Wireless sensor networks a survey.”
[2]
T.S. Rappaport - “Wireless communications: principle and practice”
[3]
E. Yoneki, J. Bacon - “A survey of wireless sensor network technologies: research
trends and middleware's role”
[4]
D. Bertsekas, R. Gallager - “Data Networks”
[5]
Moore, Riggs - “Telecomunicazioni” Apogeo and Hill associates
[6]
“EWSN Third European WorkshopAdjunct Proceedings”
[7]
M. Zorzi - “A new contention-based MAC protocol for geographic forwarding in ad
hoc and sensor networks”
[8]
B.A. Forouzan - “I protocolli TCP/IP” McGraw-Hill
[9]
M. Andretto - “Studio e sperimentazione di algoritmi di localizzazione per reti di
sensori”
[10] R. Crepaldi - “Algoritmi di localizzazione per reti di sensori: progettazione e
realizzazione di una piattaforma sperimentale”.
[11] P. Bonnet - “Sensor Networks: An Overview”
[12] Datasheet CC1000, MICA2, MICAz – sito Crossbow: www.xbow.com
[13] M. Zorzi, A. Zanella - “Reti di sensori dalla teoria alla pratica”
[14] J. Hightower, G. Borriello “A survey and taxonomy of location system for
ubiquitous computing”.
[15] R. Want, A. Hopper, V. Falcao, J. Gibbons. “The active badge location system”
[16] Nissanka B. Priyantha, A. Chakraborty, H. Balakrishnan. “The Cricket locationsupport system”. in “Mobile Computing and Networking”
200
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
[17] J. Hightower, C. Vakili, G. Borriello, R. Want “Design and Calibration of the
SpotON Ad-Hoc Location Sensing System”.
[18] L. Doherty, K.S.J. Pister, L. El Ghaoui “Convex position estimation in wireless
sensor networks”. In Proceedings “IEEE INFOCOM” 2001.
[19] N. Bulusu, J. Heidemann, D. Estrin “GPS-less low cost outdoor localization for very
small devices”.
[20] M. Khan, S. Olariu, M. Eltoweissy - “Efficient Single-Anchor Localization in
Sensor Networks”
[21] C. Liu K. Wu - “Performance Evaluation of Range-Free Localization Methods for
Wireless Sensor Networks”
[22] D. Lymberopoulos, Q. Lindsey, A. Savvides - “An Empirical Characterization of
Radio Signal Strength Variability in 3-D IEEE 802.15.4 Networks Using Monopole
Antennas”
[23] X. Huang, X. Cheng, D.Z. Du. – “Ad Hoc Wireless Networking”
[24] A. Savvides, Chih-Chieh Han, M.B. Strivastava – “Dynamic fine-grained
localization in ad-hoc networks of sensors.”
[25] C. Savarese, J.M. Rabaey, K. Langendoen – “Robust positioning algorithms for
distributed ad-hoc wireless sensor networks.”
[26] A. Savvides, H. Park, M. Srivastava. – “The Bits and Flops of the N-Hop
Multilateration Primitive for Node Localization Problems”
[27] K. Langendoen, N. Reijers – “Distributed localization in wireless sensor networks: a
quantitative comparison”
[28] C. Fretzagias, M. Papadopouli – “Cooperative Location Sensing for Wireless
Network”
[29] R. Crepaldi, P. Casari, A. Zanella, M. Zorzi – “Testbed Implementation and
Refinement of a Range–Based Localization Algorithm for Wireless Sensor
Networks”
[30] T. H. Chong Liu, Kui Wu. – “Sensor localization with ring overlapping based on
comparison of received signal strength indicator”
201
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
[31] X. Nguyen, T. Rattenbury - “Localization algorithms for sensor network using rf
signal strength cs 252 class project”
[32] M. Andretto, A. Zanella – “Experimental Localization Results in an Indoor Wireless
Sensor Network Testbed”
[33] Phil Buonadonna, Jason Hill, David Culler - “Active Message Comunication for
Tiny Network Sensor”
[34] D.Gay, P.Levis, D.Culler, E.Brewer: “NesC 1.1 reference manual”
[35] P. Levis - “TinyOS Programming”
[36] Sito ufficiale tinyOS – “http://www.tinyos.net”
[37] Repository del codice sorgente di tinyOS – “http://www.tinyos.net/dist-1.1.0”
[38] D. Gay, P. Levis, R. Von Behren – “The nesC Language: A Holistic Approach to
Networked Embedded Systems”
[39] M. Cinque, C. Di Martino, D. Cotroneo - “TinyOS nesC programming”
[40] S. Lenzi – “Interfacciamento Java & TinyOS”
[41] S.R. Madden, M.J. Franklin - “TinyDB: An Acquisitional Query Processing System
for Sensor Networks”
[42] S.R. Madden, J. Hellerstein - “TinyDB: In-Network Query Processing in TinyOS”
[43] Sito Wikipedia, sezione TinyOS - “http://it.wikipedia.org/wiki/TinyOS”
[44] P. Levis, N. Lee – “TOSSIM: A Simulator for TinyOS Networks”
[45] V. Shnayder – “Simulating the Power Consumption of Large-Scale Sensor Network
Applications”
[46] H. Davis, R. Miller – “Power Management for Mica2 Motes”
[47] D. Lymberopoulos, Q. Lindsey, A. Savvides – “An Empirical Characterization of
Radio Signal Strength Variability in 3-D IEEE 802.15.4 Networks Using Monopole
Antennas”
[48] G. Panzuto – “Progetto e sviluppo di un’architettura interoperabile e configurabile
per l’accesso a reti di sensori”
202
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
Ringraziamenti
Finalmente eccoci qua, la parte più bella da scrivere. Non solo perché ti dedichi a questa
quando sai di aver finito e provi un irrefrenabile senso di liberazione, ma anche perché è
quella che ti emoziona di più. Seguirò il codice:”Prima di tutto, la famiglia!”, non perché è
una frase di uno dei miei film preferiti, ma perché è una cosa in cui credo. Ecco perché
inizierò i ringraziamenti partendo da mia mamma che ha avuto il compito più arduo, cioè
quello di “sopportarmi” (specie in quest’ultimo periodo) pur non facendomelo mai pesare
ma al contario ricoprendomi attenzioni amorose, non so se esistono aggettivi per
descrivere una persona straordinaria come lei, ecco perché mi limito a dirgli grazie.
Ringrazio mio padre, da sempre mio modello comportamentale (a parte purtroppo il fatto
che è tifoso del Milan), per tutto ciò che ha fatto per me: dal regelarmi il mio primo pc,
all’incoragiarmi quando ho ripetuto per la quarta volta l’esame di metodi matematici; se
sono arrivato a questo punto parte del merito va a lui. Grazie. Per ultima (ma solo perché è
la più piccola) ringrazio mia sorella che mi piace considerare la mia “versione femminile”
anche se molto più bella, con un’ineguagliabile e coinvolgente gioia di vivere, forse è
proprio per questo che andiamo così d’accordo, in una parola… la mia vita.
Poi volevo ringraziere mia nonna Giovanna che mi ha sempre incoraggiato e supportato in
questo percorso, mio nonno Ugo la persona che mi ha fatto ridere con più gusto nella mia
vita. Ringrazio poi tutti i miei zii e cugini che fanno parte delle persone più importanti
della mia vita.
Un ringraziamento particolare va alla mia ragazza Stefania, che con la sua dolcezza ed il
suo modo di fare mi ha trasmesso quella tranquillità di cui avevo bisogno.
Poi voglio passare a ringraziare tutti i miei amici più cari. Chi dice che l’amicizia non è
203
STUDIO E SPERIMENTAZIONE
DI SISTEMI DI LOCALIZZAZIONE
PER RETI DI SENSORI SENZA FILO
altro che una parola, non è stato fortunato come me. Non citerò nomi per paura di
dimenticarmi di qualcuno (la stanchezza inizia a farsi sentire), mi limiterò a ringraziare
tutte quelle persone che sono state testimoni della mia vita, con le quali ho condiviso
momenti indimenticabili e che proprio grazie a loro posso di dire di aver vissuto davvero
la mia vita.
Non posso non ringrazire tutti gli amici, colleghi e tutte le persone che ho conosciuto
“vivendo” sette stagioni di animazione nei villaggi, quest’esperienze sono state le più
intense della mia vita e non potendo fare un elenco (ci vorrebbe un’altra tesi!) ringrazio
due persone su tutte: Flaminia ed Antonio.
In ambito accademico, un ringraziamento particolare va a Domenico nella triplice veste di
amico, compagno di tennis e relatore che mi ha saputo consigliare ed indirizzare nella
formazione; e soprattutto a Marcello che mi ha dato consigli preziosissimi per il lavoro di
tesi e che sicuramente mi torneranno utili in altri contesti. Ovviamente voglio ringraziare e
salutare tutte le persone che mi hanno accompagnato nel percorso universitario e cho ho
avuto la fortuna d’incontrare. Persone fantastiche con le quali ho condiviso molto, a
partire da Gianni “o’russ” che nell’ultimo periodo ho sentito più della mia ragazza e con il
quale ho lavorato con piacere; proseguendo con Alberto, o meglio Ad²Alberto, che ho
conosciuto in ritardo rispetto ad altri ma è come un vecchio amico; fino a Michele che è
una delle persone con le quali condivido molti di quegli interessi che hanno contribuito a
ritardare il nostro traguardo. Infine ringrazio Gabriella che forse è stata la prima persona
che ho conosciuto all’università, Mimmo, Vincenzo, Guido e Giancarlo e tutti i
personaggi che si aggiravano per le aule universitarie a quei tempi.
L’intera esperienza universitaria è stata come una grande traversata, un avventura per mari
inesplorati, all’inizio molto divertente ed eccitante, poi via via sempre più logorante.
Fortunatamente negli anni qualcuno mi ha insegnato che si può prendere il timone,
tracciare la rotta e seguirla anche in caso di burrasca, così quando sarà il momento di
dimostrare il proprio valore, tutti resteranno abbagliati dalla luce emanata dalle proprie
vele.
Grazie Francesco.
204
Scarica