Escolar Documentos
Profissional Documentos
Cultura Documentos
Trabalho de Graduação
2013
Eletrônica
CDU: 681.327.8
Orientador
Prof. Dr. Carlos Henrique Costa Ribeiro (ITA)
Co-orientador
Prof. Dr. Lorenzo Sabattini (UNIMORE)
2013
Dedico este trabalho a minha família,
namorada e amigos da faculdade, sem o
apoio de vocês nada disso seria possível.
Agradecimentos
Aos meus familiares, que sempre me apoiaram com muito amor em todas as minhas
escolhas, independentemente da distância e da saudade que isso pudesse gerar. Por serem
verdadeiros suportes da minha busca constante pelos meus sonhos.
Aos meus colegas de quarto, Orlando Lustosa, Antônio César, Bruno Lima, João Paulo
de Podestà e Olaf Palmer, que me permitiram ter uma convivência harmoniosa e muito
me incentivaram a buscar constantemente a excelência acadêmica.
Aos meus colegas da Pastoral da Juventude da Paróquia Nossa Senhora do Loreto, que
foram grandes amizades e muito me confortavam em momentos de dificuldade durante a
minha trajetória acadêmica.
A todos os meus professores do ITA, que sempre se esforçaram em passar o seu conhe-
cimento de forma clara e profunda, contribuindo significativamente na minha formação
acadêmica. Dou aqui destaque especial àqueles que marcaram de alguma forma a minha
trajetória por essa instituição: Tânia Rabello, Carlos Alonso, Roberto Kawakami e José
Lacava. Não poderia deixar de destacar também o professor Armando Gouveia, que foi
um grande conselheiro, sempre aberto a me ouvir e me incentivar nas minhas escolhas
acadêmicas e profissionais.
Por fim, agradeço em especial ao professor Carlos Henrique Costa Ribeiro por ter me
apresentado a proposta deste trabalho e por ter muito bem me orientado durante todo
esse ano. Deixo também os meus agradecimentos ao engenheiro Vinicius Battagello por
ter me acompanhado durante esse ano, ajudando na concepção desse trabalho.
“Que os esforços desafiem as impossibilidades,
lembrai-vos de que as grandes coisas do homem
foram conquistadas do que parecia impossível.”
— Charles Chaplin
Resumo
de um nó origem até o seu destino final. A presença do Backbone permite que todos os nós
conectados a ele também o estejam entre si, garantindo a conectividade da rede. Porém, essas
conexões apresentam um consumo de energia maior para os nós da rede, de tal modo que é sempre
de acessos ao Backbone, foi desenvolvido o algoritmo LSWTC, que altera dinamicamente tais
mulador de robôs móveis, para melhor entender como as interações físicas entre os agentes e
não somente o modelo de mobilidade escolhido tem a sua influência no ganho de Clustering Co-
efficient, mas também o algoritmo de desvio apresenta um importante papel. Por fim, conclui-se
que o LSWTC cumpre bem o seu papel, independentemente dos nós serem robôs móveis ou
não, restando saber como otimizar os seus parâmetros físicos para se obter o ganho máximo de
Backbone assisted ad hoc networks are an important network configuration, whose nodes
could move arbitrarily and serve as routers for data transmission from one node to its destiny.
cost much more energy to the nodes, which means it is always an advantage to acquire data from
their neighborhood. And to optimize the amount of Backbone links over time, LSWTC algorithm
has been developed to dynamically change theses connections based only and exclusively on local
data.
In the present work, LSWTC was either studied and implemented into a mobile robots
simulator. The main goal was to understand the influences of physical interactions over commu-
nication performance of this algorithm. Parameters like transmission range, simulation width
and minimum approach distance were analyzed to understand how they affect LSWTC capabi-
lity of transforming network topology into a Small-World one. Empirical outcomes has shown
that not only mobility model, but also the collision avoidance algorithm have important role in
Clustering Coefficient gains. To sum up, it is possible to affirm LSWTC meets its expectations
CC Clustering Coefficient
CT Controle de Topologia
RR Reckful Roaming
SW Small-World
d Densidade da rede
Ni Vizinhança do nó i
1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.2 Plano de Trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.3 Estrutura do trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2 Modelo do sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.1 Grafo de comunicação ad hoc . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2 Grafo de comunicação ad hoc-to-backbone . . . . . . . . . . . . . . . . . . 21
3 Algoritmo LSWTC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.1 Redes Small-World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.1 Average Path Length . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.1.2 Clustering Coefficient . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2 Otimização do Clustering Coefficient: Reckful Roaming . . . . . . . . . . . 27
3.3 Otimização da Average Path Length: K-hop Clustering Algorithm . . . . . 30
3.4 Protocolo LSTWC - Atuação conjunta Reckful Roaming e K-hop Cluste-
ring Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.4.1 Sincronização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.4.2 Complexidade da Mensagem (O(n)) . . . . . . . . . . . . . . . . . . 34
4 Modelo de simulação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.1 Player . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.2 Stage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.3 Configuração Player/Stage . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.3.1 Informações Básicas . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.3.2 Modelo de Mobilidade . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.3.3 Algoritmo de Desvio . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.4 Biblioteca Libgosu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
1. Introdução
Para restringir o número de saltos entre o nó fonte e o destino final, bem como garantir
a total conexão da rede Ad Hoc, é possível adicionar um Backbone, nada mais do que uma
camada de comunicação externa, porém de custo maior. O Backbone garante que todos
os nós ligados a ele estejam diretamente conectados, permitindo que a rede se mantenha
totalmente conectada. Do ponto de vista de restrição de energia, não compensa que todos
Capítulo 1. Introdução 18
1.1 Objetivos
Este trabalho tem por finalidade apresentar um algoritmo de otimização da topologia
para redes Ad-Hoc-Backbone (LSWTC) em um ambiente de simulação de robôs reais
(Player/Stage), com o intuito de estudar as cntribuições de interações físicos sobre a
eficiência do LSWTC.
Pelas suas características mais próximas de um simulador de robô real, o ROS foi
escolhido. Devido a incompatibilidade do sistema operacional, optou-se por utilizar a
máquina virtual de Linux - Ubuntu 12.0.4 que já vinha com a sua versão Groovy instalada.
Porém, ao estudar a biblioteca Stage para simulações 2D de redes de robôs, percebeu-se
que a sua documentação era muito mais extensa quando utilizada conjuntamente com o
controlador Player, diferentemente do ROS. O Player, por sua vez, também foi projetado
Capítulo 1. Introdução 19
para funcionar em Linux, podia ser programado em C, C++, Python, Ruby e Matlab e
apresentava um ambiente completo necessário para o desenvolvimento deste projeto.
Devido a algumas limitações da biblioteca Stage com respeito ao seu ambiente gráfico,
buscou-se na literatura uma outra solução que permitisse uma melhor visualização dos
resultados do LSWTC. Por fim, escolheu-se a biblioteca Libgosu para implementar um
novo simulador gráfico. Com essa última ferramenta, foi possível concluir o presente
trabalho e realizar as análises necessárias.
2. Modelo do sistema
Uma possível solução para esse problema da conectividade foi a inserção de um Back-
Capítulo 2. Modelo do sistema 21
bone às redes Ad hoc. O backbone nada mais é do que uma rede externa, a qual alguns
nós estão conectados, de tal forma a garantir a comunicação entre nós distantes a um
custo e consumo de energia maiores. Dessa forma, nós isolados que tiverem acesso ao
Backbone ainda conseguiram se comunicar com os demais.
3. Algoritmo LSWTC
O protocolo LMST (Local Minimum Spanning Tree) busca determinar o menor raio
em que todos os nós da rede ainda estejam conectados. Ele aproxima uma árvore de
espalhamento com conhecimento local a partir do algoritmo de Prim. A sua mensagem
tem complexidade O(n) e, no pior caso, ele consegue garantir a conectividade da rede
Uma possível solução para esse problema é aproximar a topologia da rede em questão
a de uma rede Small-World, aumentando a sua robustez e tolerância a falhas, sem perder
a conectividade.
E é com essa proposta que foi elaborado o algoritmo LSWTC (Local Small-World
Topology Control). O LSWTC busca construir, a partir de informações locais, uma rede
robusta e tolerante a falhas através da aproximação a uma rede Small-World. Para tanto,
ele se vale de dois algoritmos: KHOPCA (K-hop Clustering Clgorithm) para otimizar o
número de pontos de acesso ao Backbone; e o RR (Reckful Roaming) que busca otimizar
o Clustering Coefficient global removendo links redudantes.
Redes Small World são caracterizadas por dois importantes atributos, uma pequena
APL (Average Path Length) - média das menores distâncias entre dois nós - e um alto CC
(Clustering Coefficient) - coeficiente de agrupamento. Na área de redes móveis Ad hoc,
uma baixa APL é importante para os mecanismos de roteamento e para a performance
geral da comunicação da rede.
Definição 1. Considere um grafo sem peso G(V, E). Seja d(v1 , v2 ), com v1 , v2 ∈ V , a
menor distância entre v1 , v2 . Assuma que d(v1 , v2 ) = 0 se v1 = v2 ou v2 é isolado de v1 .
Portanto, a APL pode ser definido por:
1 X
AP L = d(vi , vj )
n(n − 1) i,j
, onde n é o número de vértices de G.
Definição 2. Seja um grafo sem peso G = (V, E) com eij a aresta que conecta os vértices
vi e vj . A vizinhança Ni do vértice vi caracterizada pela sua conexão direta.
Já para a sua versão global, basta calcular a média dos Clustering Coefficients locais
para todos os nós que compõem a rede:
n
1X
CC = CCi
n i=1
3 × numero de triangulos
CC =
numero de triplas conectadas
Em uma rede com um alto CC, falhas aleatórias não tendem a incrementar a APL,
portanto tal característica não somente ajuda a manter a APL pequena como também
Capítulo 3. Algoritmo LSWTC 27
mais estável. Portanto, muitas vezes, remover certos links da rede, ou seja, recursos de
comunicação, aumenta a robustez da rede.
Por outro lado, a remoção de (u, v) também é sentida pelos nós vizinhos de u e v, e,
portanto, uma fase de confirmação deve ser levada em consideração para garantir que o
CC global da rede seja, de fato, incrementado.
Define-se a função permit para bem ilustrar que a remoção do link (u, v) não propor-
ciona uma perda de comunicação entre as vizinhanças de u e v.
Capítulo 3. Algoritmo LSWTC 29
5: RC(v) ← ∅
6: for all u ∈ N do
7: N (v) ← N (v) \ {u}
|{evu |vu ,vv ∈N ;euv ∈E}|
8: CCRC (v) = kv (kv −1)
Na prática, o KHOPCA separa a rede em clusters de c elementos com c < n. Uma vez
que cada cluster é ligado a um clusterhead, e cada clusterhead serve de ponto de acesso a
rede Backbone, o número de links ao Backbone fica globalmente determinado a partir de
informações locais apenas. A eficiência do KHOPCA é medida pela capacidade de bem
reduzir e adaptar o número de clusters de acordo com o requerimento.
O pior cenário possível é aquele em que todos os nós buscam uma conexão direta com
o Backbone. Por outro lado, um requerimento para garantir a conexão total da rede é ter
pelo menos uma conexão ao Backbone por partição. Como as partições podem ter uma
extensão grande, muitas vezes não será prático administrar tal cenário. Porém, usando
um sistema de agrupamento multi-hop, é possível encontrar uma solução intermediária:
clusters com dispositivos a no máximo k saltos de distância de um clusterhead.
aumentar o tamanho dos clusters. Quanto maior for o tamanho do cluster, menor será a
sua quantidade, e consequentemente, o número de clusterheads.
1. O nó copia o menor peso dentre todos os seus vizinhos adicionado de uma unidade.
Essa regra é importante para criar uma estrutura hierárquica na rede.
3. Quando nós com peso inferior atraem nós vizinhos com um peso maior. Com o
intuito de evitar clusters fragmentados, esses nós sucessivamente incrementam o seu
peso com o objetivo de se conectar ao um cluster pré-existente.
GRR ← RR(Ginit );
GF inal ← GRR ;
topologia da rede, pois não remove conexões, ele busca determinar uma estrutura para en-
contrar caminhos eficientes ao clusterhead mais próximo. Vale ressaltar que as mudanças
feitas pelo RR irão afetar os resultados de KHOPCA, pois altera a topologia do sistema,
já a recíproca não é verdadeira.
3.4.1 Sincronização
Observe que essa atuação conjunta entre o Reckful Roaming e o K-hop Clustering
Algorithm se dá de forma síncrona, no entanto, os nós não atuam de forma síncrona, visto
que eles não tem conhecimento se a vizinhança já terminou de calcular GRR . Devido a
influência da mobilidade, a topologia da rede é modificada constantemente, gerando um
ambiente fundamentalmente assíncrono.
O KHOPCA somente permite que os nós coletem informações a respeito dos pesos de
seus vizinhos, e, a partir disso, tomar uma decisão a respeito do seu próprio peso. Por
outro lado, quando se observa o resultado gerado pelo RR, comprova-se que ele é muito
mais sensível a assincronizações, uma vez que ele depende do acordo entre nós vizinhos.
Como o KHOPCA não requer nenhuma configuração inicial, cada nó pode potencial-
mente escolher qualquer valor entre 0 e k. Portanto, nenhuma transmissão de informação
é requerida nessa etapa. Em um segundo momento, cada nó coleta apenas os pesos de
cada vizinho e compara com o seu próprio, escolhendo a regra adequada. Por isso, pode-se
concluir que a complexidade da mensagem para cada aplicação de KHOPCA sobre a rede
resulta em O(n), sendo n o número total de nós.
4. Modelo de simulação
O objetivo do presente trabalho gira em torno de, não somente implementar o al-
gorimto LSWTC, mas também executá-lo em um simulador de robôs, de tal forma a
estudar o seu comportamento em um ambiente mais fidedigno ao mundo real. Visto que,
no futuro, a idéia é realmente transformar o LSWTC em um protocolo de comunica-
ção para dispositivos móveis, é de extrema importância colher resultados que levem em
consideração as interações físicas entre os agentes.
Com esse intuito, dois ambientes computacionais foram propostos: JisT/SWANS (Java
in Simulation Time / Scalable Wireless Ad hoc Network Simulator); e o ROS (Robot
Operating System).
• Simulador de eventos discretos com alto desempenho. Excelente para analisar si-
mulações muito densas;
• Linguagem Java;
• Sistema operacional linux, porém já existe uma máquina virtual com o ROS insta-
lado no seu website;
Como solução final, optou-se por estudar o Player, que da mesma forma como o ROS,
consiste de um conjunto de ferramentas para realizar pesquisas e estudos com robôs e
sensores. Esse, por sua vez, é um dos servidores para robô mais utilizado no mundo,
sendo almplamente documentado. Além disso, ele é totalmente compatível com a mesma
biblioteca gráfica para simulação de múltiplos agentes, Stage.
4.1 Player
O Player nada mais é do que um sistema para controle de robôs desenvolvido por
pesquisadores da USC (University of Southern California) nos anos 2000 e amplamente
utilizado por universidades e institutos de pesquisa do mundo inteiro. Por ser um sistema
de código aberto e livre distribuição, o Player busca ser atualizado constantemente para
se compatibilizar com as novas plataformas robóticas e sensores comerciais.
Além disso, o Player permite gerar interfaces com múltiplos dispositivos ao mesmo
tempo. Conjuntamente com o Simulador Stage, os programas de controle para robôs
simulados terão o mesmo comportamento em robôs real.
4.2 Stage
O Stage, por sua vez, permite simular uma população de robôs móveis, sensores e
objetos em um ambiente bi-dmensional bitmap. Ele foi projetado para suportar pes-
quisas em sistemas autônomos multi-agentes, portanto oferece modelos simples e com-
putacionalmente baratos dos mais variados dispositivos sem a preocupação em emular
fidedignamente qualquer um deles.
A instalação do Player/Stage foi feita segundo [?, 6], utilizando as versões Player 3.0.2
e Stage 3.2.2.
• Player - pega o código desenvolvido e envia as instruções para o robô. Por outro
lado, do robô ele retira as informações dos sensores e envia para o código;
• Stage - trabalha com o Player da mesma forma que o hardaware de um robô. Recebe
instruções do Player e movimenta os robôs no ambiente, da mesma forma envia
informações de sensores de volta ao Player
No simulador Player/Stage, existem basicamente três tipos de arquivos que são neces-
sários entender o seu funcionamento:
Basicamente, o arquivo .world informa ao Player/Stage o que está disponível para ser
colocado no ambiente de simulação. Nesse arquivo serão descritos todos os robôs agentes,
objetos que ajudam a povoar o ambiente e todo o layout da simulação.
O arquivo .inc segue o mesmo formato de um arquivo .world, porém ele pode ser
incluído em outros arquivos .world. Uma boa prática para esses arquivos .inc é utilizá-lo
para descrição de modelos de robôs, permitindo a reutilização do mesmo elemento em
diferentes ambientes de simulação. Além disso, para alterar a configuração do robô, basta
fazê-lo somente uma vez, modificando esse arquivo .inc.
Já o arquivo .cfg permite ao Player ler todas as informações a respeito dos robôs
simulados. Ele vai informar ao Player quais drivers são necessários utilizar para interagir
com os robôs. Além disso, os arquivos .cfg informam ao Player como interpretar os dados
recebidos dos drivers de forma a ser apresentável para o código cliente. Todos os items
descritos no arquivo .world, obrigatoriamente, devem ser descritos aqui para permitir
interação com o código cliente.
Como todo objeto que se deseja ter comunicação tem que ser descrito nos arquivos
.world e .cfg, optou-se por criar um script em Ruby que escrevesse esses arquivos baseado
na quantidade de robôs que se desejava simular. Além disso, cada robô já seria inicializado
Capítulo 4. Modelo de simulação 41
em uma posição aleatória do mapa e com uma separação mínima de 2 unidades entre o
seu centro e o dos demais.
Como o interesse é simular um ambiente com uma população de robôs móveis indepen-
dentes, fez-se uso de programação concorrente baseada em Threads de tal forma a rodar
os códigos para cada robô de forma simultânea. Os robôs tinham que constantemente
e simultanemente captar e enviar informações de seus sensores, desviar de seus pares e
se mover pelo mapa. Por outro lado, não é possível criar muitas Threads sem que haja
sobrecarga do sistema.
A descrição dos atributos que descrevem cada um dos arquivos .world e .cfg pode ser
estudada em [?]. Além disso, no Apêndice é possível ver o código com toda a descrição
do robô e do ambiente construido para as simulações do presente trabalho.
Na prática, o modelo de robô configurado fica bem descrito pela figura [?]. Inicial-
mente, todos os robôs estarão dispostos na mesma direção e sentido, porém espalhados
ao longo de todo o mapa. A motivação é que a referência angular de cada robô é baseado
Capítulo 4. Modelo de simulação 42
na direção que aponta inicialmente. Desse jeito, alinha-se o eixo x do robô ao eixo x do
ambiente.
Com relação a movimentação dos agentes, optou-se por utilizar como base o modelo
de mobilidade Random Waypoint, para tanto cada robô escolhe uma posição aleatória do
mapa para se deslocar. Ao chegar ao seu destino, ele calcula uma nova posição para ir,
gira com uma velocidade angular constante de π3 rad/s, alinha a sua dianteira na direção
e sentido do seu destino e avança até chegar ao ponto desejado. Vale ressaltar que o
sentido da rotação é escolhido baseado no tempo de rotação, portanto se a rotação no
sentido horário fará com que orobô se alinhe na direção desejada mais rapidamente, ela
será escolhida. Uma vez alinhado, o robô se deslocará em linha reta com uma velocidade
constante de 0.5un/s até o seu destino final. Assim que ele chegar, calcula-se uma nova
posição, reiniciando o ciclo.
Capítulo 4. Modelo de simulação 43
Uma vez com o modelo de mobilidade bem definido, era necessário construir também
um algoritmo de desvio para os robôs, visando evitar colisões entre os diversos nós.
Para evitar esses choques entre os robôs, inicialmente determinou-se uma distância
mínima de aproximação dmin , de tal forma que a distância entre os centros dos dois robôs
não pudesse ser menor ou igual a esse valor. Caso isso aconteça, ambos os robôs irão
se virar na direção que une os seus centros, porém com sentidos contrários, e iriam se
afastar um do outro durante 0.5s com a mesma velocidade 0.5un/s. Após esse período,
eles reiniciariam o modelo de mobilidade, escolhendo aleatoriamente uma nova posição
do mapa para se deslocar.
Na prática, o algoritmo de desvio se dava de forma síncrona, ou seja, a cada 0.3s, para
cada nó, determinava-se quem são seus vizinhos e dentre esses, aqueles que estavam a uma
distância igual ou inferior a dmin . Para um grande número de nós (> 50), observava-se um
atraso constante para os robôs, de modo que o algoritmo não conseguia evitar a colisão.
Com isso em mente, buscou-se na literatura bibliotecas gráficas para Ruby 1.8.7 que
permitissem criar um ambiente gráfico de forma prática e com boa documentação, che-
Capítulo 4. Modelo de simulação 45
gando ao final por escolher a Libgosu. Essa biblioteca é utilizada para o desenvolvimento
de jogos 2D para as linguagens de programação C++ e Ruby. Além do mais, ela per-
mitia desenhar elementos, linhas unindo os nós e alterar as suas cores em tempo real,
solucionando o problema de visualização dos resultados que o Player/Stage apresentava.
Como o intuito era verificar o funcionamento do LSWTC, bastava enviar para a bi-
blioteca libgosu a posição de cada nó, o seu respectivo peso e uma lista de todos os seus
vizinhos. Isso foi feito a partir de um arquivo output.txt que também informava a ID
do nó e o tempo da medição desde o início da simulação. A partir desse arquivo .txt, a
biblioteca libgosu obtinha as informações descritas anteriormente, quanto ao peso, esse foi
caracterizado pelas cores de cada nó, representados por círculos com o ID no seu centro,
e o conjunto de vizinhos podia ser observado pelas ligações entre os nós.
Com o ambiente gráfico construido na biblioteca Libgosu, fica fácil observar o com-
portamento do RR e do KHOPCA. Na figura 4.11, os clusterheads, que tem peso 0, ficam
bem destacados em vermelho e os nós vizinhos a eles assumem o peso 1 e a cor laranja e
assim por diante. Além disso, pode-se notar que claramente o RR removeu o link entre os
nós 24 e 39 para aumentar o CC da rede. Portanto, esse ambiente gráfico criado resolve os
problemas apresentados anteriormente, o código pode ser encontrado no apêndice desse
trabalho.
Capítulo 4. Modelo de simulação 46
A performance do LSWTC pode ser avaliada a partir da sua simulação. Para tanto,
diferentes configurações de rede serão utilizadas. Um grafo de disco r descreverá a rede
de comunicação móvel ad hoc, sendo r o raio de transmissão. Além disso os nós estarão
inicialmente posicionados segundo uma distribuição uniformemente aleatória na região de
simulação de lado l.
Todas as medidas foram feitas após a aplicação do algoritmo LSWTC sobre a rede.
1.84
d=6
1.90
1.87
d=11
1.70
1.83
1.30
dmin=0
dmin=2
dmin=2.5
dmin=3
dmin=3.5
dmin=4
dmin=4.5
dmin=5
Clustering
Coefficient
0.79
0.79
0.80
0.77
0.78
0.79
0.75
0.75
0.76
0.74
0.74
0.72
0.7
0.70
d=6
0.71
0.67
0.68
0.70
d=11
0.66
0.68
0.68
0.64
0.65
0.65
0.65
0.62
0.60
dmin=0
dmin=2
dmin=2.5
dmin=3
dmin=3.5
dmin=4
dmin=4.5
dmin=5
Com relação a dmin , a partir dos resultados ilustrados na figura 5.1, observou-se um
incremento da Average Path Length quanto maior a distância mínima de aproximação
de dois nós. Do ponto de vista intuitivo, o resultado obtido faz sentido, uma vez que
os robôs tenderão a se manter mais afastados um dos outros, de modo que menos robôs
estarão dentro do raio de transmissão. Dessa maneira, é de se esperar que mais saltos
sejam necessários para se alcançar os demais nós, em média. Outro ponto importante
a notar é que para menores densidades, esse fenômeno mostra mais regularidade, tal
fato deve-se a dois motivos, com um grande número de nós nem sempre o espaço será
suficiente para que a separação mínima entre 2 nós, de fato, ocorra. Muitas vezes, os nós
estarão sempre a uma distância menor do que a mínima e estarão constantemente tentado
fugir, porém, nesse processo, acabam encontrando um outro nó e começam a fugir desse
também. Por fim, vale salientar que é de se esperar uma saturação, pois os nós tenderão
Capítulo 5. Resultados das Simulações 50
a se espalhar pelo mapa e se distribuir o mais afastado um dos outros, portanto muitos
se desconectarão da rede, tornando-se novos clusterheads e, a partir daí, a distância aos
demais clusterheads se torna 1 e a contribuição desse nó passa a ser menor.
Por fim, não restam dúvidas de que a relação dmin tem uma grande influência nos
valores de APL e CC, porém o tamanho do robô também não pode ser desconsiderado,
pois, para valores menores de r, esse valor começa a ser mais relevante. Não faz parte do
escopo desse trabalho o estudo das dimensões do robô, no entanto, é uma grandeza que
está implicitamente relacionada com dmin
Como segunda análise, optou-se por estudar, assim como em [17], a influência do
número máximo de saltos k permitido de um nó até o clusterhead mais próximo. A idéia
é também avaliar a influência desse parâmetro sobre as grandezas Average Path Length
e Clustering Coefficient. Para tanto, assumiu dmin = 2.5 e variou-se o valor de k desde 2
até 7 e, da mesma forma como o caso anterior, utilizou-se os dois valores antagônicos de
d, 6 e 11.
Ao observar os resultados da APL, a partir da figura 5.3, notou-se que o seu valor
permaneceu constante para ambas densidades ao longo de k. Por outro lado, o aumento
de k intuitivamente deveria aumentar o valor de APL, pois, menos acessos ao Backbone
seriam criados e, portanto, haveria, em média, mais saltos entre dois nós quaisquer da
Capítulo 5. Resultados das Simulações 51
0.5
0
k
=
2
k
=
3
k
=
4
k
=
5
k=6
k=7
Clustering
Coefficient
0.85
0.8
0.78
0.78
0.8
0.77
0.75
0.75
0.75
d=6
0.7
d=11
0.71
0.71
0.69
0.65
0.68
0.68
0.67
0.6
k
=
2
k
=
3
k
=
4
k
=
5
k=6
k=7
rede. Na prática, o que se observou foi um raio de transmissão muito grande quando
comparado ao tamanho da simulação, pois os nós não ficavam separados o suficiente
para exigir um número grande de saltos de separação, tal fato pode ser comprovado nas
figuras 5.4 e 5.5. Por isso, ao variar o número de hops, não observou nenhuma variação
significativa na APL.
Apesar do número maior de nós sendo simulados, optou-se por variar o valor de k
somente entre 2 e 5, acreditando que para valores maiores, as curvas iriam saturar. Além
disso, foram simuladas 4 curvas, com os valores de densidade pertencentes ao seguinte
conjunto 5, 7, 9, 11.
2.50
d=7
2.40
d=9
2.30
d=11
2.20
2.10
2.00
k=2
k=3
k=4
k=5
0.63
0.60
d=5
0.57
d=7
0.54
d=9
0.51
d=11
0.48
0.45
k=2
k=3
k=4
k=5
Com relação a APL, obteve-se um resultado mais próximo do esperado, de tal forma
que ela cresce com o incremento do valor de k. Uma vez que a razão entre o raio de
transmissão e o lado l da simulação é menor, é possível observar maior quantidade de
saltos até o clusterhead quando comparados com o caso anterior.
Capítulo 5. Resultados das Simulações 54
Além da APL e do CC, para as simulações bem ilustradas pelas figuras 5.6 e 5.7,
mediu-se a quantidade de clusterheads presentes no ambiente a cada 0.3s, calculando a
sua média e aproximando para o inteiro mais próximo. Tais resultados poder ser conferidos
nas tabelas 5.3 a 5.6
2.60
2.50
d=5
2.40
k-‐hops
d=7
2.30
d=9
2.20
d=11
2.10
2.00
k=2
k=3
k=4
k=5
Para cada uma das simulações com e sem LSWTC, plotou-se em um mesmo gráfico
ambos os valores. Portanto, comparou-se tanto a APL quanto o CC para esses dois casos
para as densidades d pertencentes ao conjunto {5, 7, 9, 11} com dmin = 2.5, l = 20 e r = 5.
APL
-‐
d
=
5
2.80
2.70
2.68
2.60
2.49
2.50
2.44
k-‐hops
2.37
Random
2.40
2.32
LSWTC
2.30
2.31
2.20
2.20
2.20
2.10
2.00
k
=
2
k
=
3
k
=
4
k
=
5
racterizar completamente de uma rede Small-World. Muitas vezes, o ganho de APL era
insignificativo que a própria natureza aleatória causava mais sensibilidade a esse atributo
do que a aplicação do LSWTC.
Por outro lado, quando analisado o ganho do Clustering Coefficient da rede, todos os
casos geraram um ganho real. Não importando a densidade utilizada, foi observado um
incremento do CC, aproximando a uma rede SW. É importante ressaltar também que o
ganho não foi expressivo como em [17], pois, mesmo sem o LSWTC, o que se observa
durante a simulação é um agrupamento dos nós na região central. Os nós tentam se
deslocar utilizando o Random Waypoint, porém o algoritmo de desvio faz com que, a
toda hora, eles fiquem reativando a localização do próximo destino. Além disso, quanto
Capítulo 5. Resultados das Simulações 57
APL
-‐
d
=
7
3.00
2.91
2.90
2.80
2.69
2.70
2.61
2.60
k-‐hops
2.43
2.63
2.50
2.57
Random
2.40
LSWTC
2.30
2.40
2.36
2.20
2.10
2.00
k=2
k=3
k=4
k=5
APL
-‐
d
=
9
2.90
2.80
2.80
2.75
2.70
2.60
2.58
k-‐hops
mais nós, menos liberdade eles terão, pois não tem como garantir a distância mínima de
aproximação entre todos eles. Portanto, com o aumento da densidade, o CC naturalmente
deve aumentar, de modo a reduzir a diferença entre os resultados com e sem LSWTC.
No entanto, quando comparado aos valores absolutos dos primeiros resultados com
LSWTC para l = 30 e dmin = 2.5 variando k, o resultado é consideravelmente inferior.
Tal motivo deve-se a razão dmin /r ser superior no último caso. Como comprovado na
primeira simulação, quanto maior essa relação, mais difícil será manter as características
de redes SW para a rede em estudo.
Capítulo 5. Resultados das Simulações 58
2.50
2.53
2.52
Random
2.40
2.47
LSWTC
2.30
2.36
2.20
2.10
2.00
k=2
k=3
k=4
k=5
CC
-‐
d
=
5
0.66
0.65
0.64
0.62
0.62
0.62
0.60
0.60
0.58
Random
0.58
LSWTC
0.56
0.57
0.56
0.54
0.54
0.52
0.50
k
=
2
k
=
3
k
=
4
k
=
5
CC
-‐
d
=
7
0.66
0.64
0.64
0.63
0.63
0.64
0.62
0.60
0.61
0.58
Random
0.58
0.58
0.56
LSWTC
0.57
0.54
0.52
0.50
k=2
k=3
k=4
k=5
CC
-‐
d
=
9
0.66
0.64
0.63
0.64
0.62
0.62
0.62
0.60
0.60
0.58
Random
0.59
0.59
0.59
0.56
LSWTC
0.54
0.52
0.50
k=2
k=3
k=4
k=5
CC
-‐
d
=
11
0.64
0.63
0.63
0.62
0.62
0.62
0.62
0.60
0.60
0.60
0.58
0.58
Random
0.56
LSWTC
0.54
0.52
0.50
k=2
k=3
k=4
k=5
6.1 Conclusão
Nesse trabalho, foi implementado o LSWTC, algoritmo para manutenção da eficiência
de comunicação em redes ad hoc, em um ambiente de robôs móveis. Para tanto, utilizou-se
o simulador Player/Stage que proporcionava criar robôs, interagir e comunicar com eles.
E, para melhor analisar a influência do LSWTC sobre os robôs, construiu-se um ambiente
gráfico de visualização de nós a partir da biblioteca Libgosu. Com esse conjunto de
ferramentas, era possível povoar o ambiente, inserir um modelo de mobilidade individual
para cada robô, bem como aplicar individualmente um algoritmo de desvio entre eles
e analisar a performance de comunicação da rede como um todo. Para tanto, foram
utilizadas técnicas de programação concorrente e orientação a objetos, de modo a melhor
caracterizar cada entidade presente na simulação e garantir que a comunicação com cada
robô se desse simultaneamente.
A partir dos resultados das simulações, pôde-se observar, na prática, quais parâmetros
físicos influenciavam não somente o modelo de mobilidade, mas também a performance do
LSWTC. Aprendeu-se que as dimensões físicas dos robôs, alcance do raio de transmissão,
tamanho da simulação e distância mínima de aproximação, eram extremamente relevan-
tes na busca de maximizar a eficiência do algoritmo em questão. Mas, de modo geral,
apesar da influência dos parâmetros listados, o LSWTC promoveu ganhos reais quanto ao
Clustering Coefficient ao mesmo tempo que aumentou um pouco a Average Path Length.
Por fim, pode-se afirmar que o LSWTC aproximou sim a rede ad hoc-to-backbone de
robôs móveis a uma rede Small-World.
Capítulo 6. Conclusões e Trabalhos Futuros 61
Por outro lado, o desenvolvimento desse trabalho também levantou novos questiona-
mentos e dúvidas com respeito ao ganho de performance oferecido pelo LSWTC a redes
ad hoc de robôs móveis.
Por fim, conclui-se que os trabalhos com o LSWTC são extensos, porém, de extrema
valia, pois, no fundo, a sua aplicação em dispositivos móveis, como smartphones, permitirá
um ganho constante de eficiência de comunicação e transmissão de dados.
62
Referências
[10] M. Newman e D. Watts. Scaling and percolation in the small-world network model.
Physical Review, 60, 1999.
[11] Rama Cont e Emili Tanimura. Small World graphs: characterization and alternative
constructions. Advances in Applied Probability, 40(4), 2008.
[13] Ben Liang e Zygmunt J. Haas. Virtual backbone generation and maintenance in
ad hoc network mobility management. INFOCOM 2000. Nineteenth Annual
Joint Conference of the IEEE Computer and Communications Socie-
ties. Proceedings. IEEE, 2000.
[14] Douglas S.J. de Couto Hu lmm Lww e Robert Morris Jinyang Li, Charles Blake.
Capacity of Ad Hoc Wireless Networks. MobiCom, 2001.
[15] Mario Gerla Kaixin Xu, Xiaoyan Hong. An Ad Hoc Network with Mobile Backbones.
IEEE International Conference on Communications, 5, 2000.
[16] Ding-Zhu Du Panos M. Pardalos Makin Min, Feng Wang. A Reliable Virtual Back-
bone Scheme in Mobile Ad-Hoc Networks. Publicação interna da Universidade de
Minnesota.
[17] Damla Turgut e Steffen Rothkugel Matthias R. Brust, Carlos H.C. Ribeiro. LSWTC:
A Local Small-World Topology Control Algorithm for Backbone-Assisted Mobile Ad
hoc Networks. IEEE 35th Conference on Local Computer Networks (LCN), 2010.
[18] Jennifer Owen. How to Use Player/Stage, 2nd edition, April 2010.
[19] Nicolas Puech Michel Riguidel Rabah Meraihi, Gwendal Le Grand. Improving ad
hoc network performance with backbone topology control. Vehicular Technology
Conference, 2004.
[20] Bevan Das e Vaduvur Bharghavan Raghupathy Sivakumar. Spine routing in ad hoc
networks. Cluster Computing, 1, 1998.
[21] R. K. Chauhan Ramesh Kait and Kuldeep Kherwal. Route mechanisms for
wireless adhoc networks: classifications and comparison analysis. In-
ternational Journal of Science, Environment and Technology, 1(2), 2012.
[22] Jie Wu. Handbook on Theoretical and Algorithmic Aspects of Sensor, Ad Hoc Wire-
less, and Peer-to-Peer Networks. Auerbach Publications, 2005.
A. Arquivos Player/Stage
Vale lembrar que se houver quaisquer erros com respeito a alguma falta de dependência
e não seja possível completar a instalação, é importante verificar no terminal exatamente
o que aconteceu, de modo a procurar por soluções na Internet.
Para que que o código do Apêndice funcione corretamente, é necessário que os arquivos
.world, .cfg e .inc estejam no mesmo diretório. Para iniciar a janela de simulação com os
robôs dispostos em suas posições iniciais, basta executar o seguinte comando no terminal.
A.1 map.inc
Os arquivos .inc foram criados para serem facilmente incluídos em arquivos .world,
portanto são utilizados para salvar configurações de objetos e cenários que se deseja re-
produzir no futuro.
Com relação ao ambiente, define-se características como a cor, espessura dos limites,
resposta aos sensores e outras coisas mais que podem ser encontrado em [18]. Em se
tratando da desrição do robô, tem-se a delimitação de sua geometria, sensores e atuadores.
gui_nose 0
gui_grid 0
gui_move 0
gui_outline 0
gripper_return 0
fiducial_return 0
ranger_return 0.5
)
gui_nose 0
gui_grid 0
gui_move 1
gui_outline 0
A.2 bigbob.inc
Em se tratando da desrição do robô, o arquivo .inc bem representa a descrição deta-
lhada da sua geometria, dos seus sensores e atuadores. Caso haja um interesse de entender
melhor todos os parâmetros utilizados, veja em [18]
block
(
points 6
point[0] [0.75 0]
point[1] [1 0.25]
point[2] [1 0.75]
point[3] [0.75 1]
point[4] [0 1]
point[5] [0 0]
z [0 1]
)
block
(
points 4
point[3] [1 0.75]
point[2] [1.25 0.75]
point[1] [1.25 0.625]
point[0] [1 0.625]
z [0 0.5]
)
block
(
points 4
point[3] [1 0.375]
point[2] [1.25 0.375]
point[1] [1.25 0.25]
point[0] [1 0.25]
z [0 0.5]
)
# positonal things
drive "diff"
obstacle_return 1
laser_return 1
ranger_return 1
blob_return 1
)
APÊNDICE A. Arquivos Player/Stage 67
# camera parameters
image [160 120] #resolution
range 5.00
fov 1.047196667 # 60 degrees = pi/3 radians
)
A.3 simulation.rb
O presente arquivo visa buscar criar dinamicamente os arquivos .cfg e .world chamando
métodos do arquivo helper.rb incluído e inicializar a janela do Stage com os robôs em
suas posições iniciais. Além disso, ele precisa incluir também as bibliotecas rubygems e
playercpp. Por fim, vale ressaltar que a execução desse arquivo automaticamente inicializa
a janela do Player/Stage, pois, ao final, ele chama o comando player empty.cfg.
#!/usr/bin/ruby
APÊNDICE A. Arquivos Player/Stage 68
require ’rubygems’
require ’helper’
require ’playercpp’
n_robots = ARGV[0].to_i # Gets the number of robots based on terminal first parameter
pos = create_world(n_robots) # Creates a .world file based on the number of robots
create_cfg(n_robots) # Creates .cfg file based on the number of robots
A.4 bigbob.rb
O arquivo bigbob.rb é o mais importante de todos, apresentando toda a lógica da simu-
lação. Portanto, as implementações do Reckful Roaming e K-hop Clustering Algorithm
podem ser encontradas nesse arquivo. Além disso, todas as ações e atributos individuais
dos robôs estarão aí descritas.
require ’helper’
class Bigbob
# Class to define all robots attributes and actions
@pp.RequestGeom()
@lp.RequestGeom()
@sp.RequestGeom()
@size = @pp.GetSize()
end
yaw_new = Math::atan(tan_arc)
yaw_new -= Math::PI if y_new < y_old && x_new < x_old
yaw_new += Math::PI if y_new > y_old && x_new < x_old
end
@pp.SetSpeed(v, 0.0)
sleep(straight_time)
end
def stop
# Stops robot from moving or rotating
@pp.SetSpeed(0.0, 0.0)
end
old_neighbors = @neighbors
@neighbors = []
@pos_x = bob[i].pp.GetXPos() + @x_start
@pos_y = bob[i].pp.GetYPos() + @y_start
@yaw = bob[i].pp.GetYaw()
(0...n_robots).each do |j|
px[j] = bob[j].pp.GetXPos() + bob[j].x_start
py[j] = bob[j].pp.GetYPos() + bob[j].y_start
dist[j] = get_distance(@pos_x, px[j], @pos_y, py[j])
end
end
@neighbors.delete(i)
w = 60.0
yaw_new = Math::atan(tan_arc)
yaw_new -= Math::PI if @pos_y < py[j] && @pos_x < px[j]
APÊNDICE A. Arquivos Player/Stage 70
end
@pp.SetSpeed(0.5, 0.0)
sleep(0.5)
end
end
end
end
def khopca(bob)
# Defines KHOPCA algorithm
min_weight = @k_hop
min_node = @ID
@neighbors.each do |i|
if min_weight > bob[i].weight
min_weight = bob[i].weight
min_node = i
end
end
end
end
rc.each do |u|
rc_neighbors[u] = remove_candidates(u, bob)
if rc_neighbors[u].include?(i)
@neighbors.delete(u)
bob[u].neighbors.delete(i)
APÊNDICE A. Arquivos Player/Stage 71
if permit(u, bob)
@neighbors << u
bob[u].neighbors << i
File.open(’ca.txt’, ’a’) { |f| f.print " - ok" }
end
end
else
@neighbors << u
bob[u].neighbors << i
end
end
end
@neighbors2 = @neighbors
@neighbors
end
end
neighbors.each do |j|
inter = neighbors & bob[j].neighbors
num += inter.length
end
end
def distance(i,bob)
# Calculates minimum distance between a robot and all the others
n = bob.length
queue = []
APÊNDICE A. Arquivos Player/Stage 72
queue.push(i)
until queue.empty?
elem = queue.shift
end
end
if bob[elem].weight == 0
(0...n).each do |k|
if bob[k].weight == 0
unless confirm[k]
dist[k] = dist[elem] + 1
confirm[k] = true
queue.push(k)
end
end
end
end
end
dist
end
(0...len).each do |j|
candidate = bob[i].neighbors.shift
cc_rc = clustering_coefficient(i, bob)
rc << candidate if cc_rc > bob[i].cc
bob[i].neighbors.push(candidate)
end
rc
end
end
APÊNDICE A. Arquivos Player/Stage 73
A.5 empty.rb
O arquivo empty.rb é que permitirá a comunicação com o simulador Player/Stage, no
sentido de obter informações dos sensores, bem como enviar novos comandos aos robôs.
Note que o arquivo bigbob.rb é incluído aqui para permitir essa interação com os agentes.
A partir dele, é iniciada a comunicação com o simulador, determina-se o intervalo de
sincronização ao utilizar a biblioteca rufus-scheduler, escreve as saídas em arquivos textos
e deixa a simulação rodando sem parar.
#!/usr/bin/ruby
require ’rubygems’
require ’helper’
require ’rufus/scheduler’
require ’playercpp’
require ’bigbob’
bob = []
# n_clusterheads = 2 # To calculate APL and CC without LSWTC
cc = 0
apl = 0
# Create proxies
(0...n_robots).each { |i| bob[i] = Bigbob.new(robot, i, 13+pos[i][0], 13+pos[i][1]) }
bob.each_index do |i|
bob[i].ID = i + 1
# bob[i].weight = 0 if i < n_clusterheads # To set a fix number of clusterhead for
# random simulation without LSWTC
end
inital_time = Time.now.to_f
scheduler.every ’0.3s’ do
robot.Read() # Gets robot data from their sensors
cc = global_clustering_coefficient((0...n_robots).to_a, bob)
apl = average_path_length(bob)
f.print "\n"
(0...n_robots).each do |i| # Composes output .txt file
f.print "\n#{measured_time - inital_time}: #{i} %.3f %.3f %.3i" % \
[bob[i].pos_x, bob[i].pos_y, bob[i].weight]
f.print "\nNeighbors: "
end
end
end
scheduler.every ’1s’ do
File.open(’apl.txt’, ’a’) { |f| f.print "\n#{apl}" } # Writes APL results
File.open(’cc.txt’, ’a’) { |f| f.print "\n#{cc}" } # Writes CC results
File.open(’ch.txt’, ’a’) do |f| # Writes number of clusterheads results
ch = 0
end
end
(0...n_robots).each do |i|
unless thr[i].status
px[i] = bob[i].pp.GetXPos() + bob[i].x_start
py[i] = bob[i].pp.GetYPos() + bob[i].y_start
pa[i] = bob[i].pp.GetYaw()
# Sends the robot to a new random position into the simulation area
thr[i] = Thread.new { bob[i].go_to(new_x, new_y, px[i], py[i], pa[i]) }
end
end
end
APÊNDICE A. Arquivos Player/Stage 75
A.6 clusterhead.rb
O presente arquivo é um auxiliar para calcular as médias da Average Path Length,
Clustering Coefficient e do número de clusterheads, imprimindo os resultados no próprio
terminal.
require ’rubygems’
def number_of_clusterheads
# Calculates the average of clusterheads amount
afile = File.new(’ch.txt’)
lines = afile.readlines
len = lines.length
avg = 0.0
afile.close
avg /= (len-2)
end
def cluster
# Calculates the average of global clustering coefficient
afile = File.new(’cc.txt’)
lines = afile.readlines
len = lines.length
avg = 0.0
count = 0
(2...len).each do |i|
avg += lines[i].chomp.to_f
count += 1 if lines[i].chomp.to_f > 0
end
avg /= count
end
def apl
# Calculates the average of Average Path Length
afile = File.new(’apl.txt’)
lines = afile.readlines
len = lines.length
avg = 0.0
count = 0
(2...len).each do |i|
avg += lines[i].chomp.to_f
count += 1 if lines[i].chomp.to_f > 0
end
avg /= count
end
# Prints in terminal window the result for averages of APL, CC, clusterheads
puts "CC = #{cluster}"
puts "APL = #{apl}"
puts "Clusterheads = #{number_of_clusterheads}"
APÊNDICE A. Arquivos Player/Stage 76
77
B. Arquivos Libgosu
Basicamente, o código gerado a partir da biblioteca Libgosu irá ler os traces do arquivo
de saída output.txt e construir o ambiente gráfico em torno deles. Além disso, os arquivos
que se seguem partem do princípio de que eles estão em um diretório no interior do
diretório dos arquivos do Player/Stage.
Para que todos os arquivos funcionem corretamente, é necessário ter 3 abas do terminal
simultaneamente abertas, sendo as duas primeiras no diretório dos arquivos Player/Stage
e a terceira no diretório do Libgosu. Por fim, executar os seguintes comandos:
1. ruby simulation.rb
2. ruby empty.rb
3. ruby teste.rb
B.1 circle.rb
O presente arquivo busca permitir o desenho de círculos na janela de simulação
APÊNDICE B. Arquivos Libgosu 78
end.join
end
def to_blob
@blob
end
end
B.2 constants.rb
Todas as constantes a respeito da equivalência entre cores e pesos para o algoritmo
KHOPCA podem ser encontradas nesse arquivo.
B.3 teste.rb
O arquivo teste.rb é o principal para executar os códigos da biblioteca Libgosu. Ele
apresenta toda a lógica de como deve ser atualizada a disposição dos robôs a cada frame,
a remoção ou manutenção dos links após aplicação do algoritmo RR e a atualização dos
pesos através da mudança de cores dos robôs. Mas note que ele só garante que o arquivo
output.txt seja corretamente executado, a lógica da implementação do LSWTC se dá
inteiramente no Player/Stage.
require ’rubygems’
require ’gosu’
require ’circle’
require ’constants’
def initialize
# Runs on instance creation
@x = []
@y = []
@neighbors = []
@weight = []
@img = Hash.new
super(450, 450, false) # Creates the window where the simulation will appear
self.caption = "Gosu Tutorial Game"
afile = File.new("../output.txt")
@lines = afile.readlines
@len = @lines.length
@which_line = 2
@n_robots = @lines[0].chomp.to_i
end
def update
# Updated frames at a rate of 60hz
if @which_line < @len
(0...@n_robots).each do |i|
circle_with_numbers(i)
data = @lines[@which_line + 2*i].split
@x[i] = data[2].to_f * 14 + 15
@y[i] = data[3].to_f * 14 + 15
@weight[i] = data[4].to_i
end
@which_line += (@n_robots * 2 + 1)
end
end
def draw
APÊNDICE B. Arquivos Libgosu 80
unless @neighbors[i].empty?
# Draws line between nodes in the same neighborhood
@neighbors[i].each { |j| draw_line(@x[i]+10, @y[i]+10, COLORS[:black], \
@x[j.to_i]+10, @y[j.to_i]+10 , COLORS[:black], 2)}
end
end
end
private
def circle_with_numbers(i)
# Creates a circle with a number inside representing its ID
@img[[i,0]] = Gosu::Image.new(self, Circle.new(10), true)
@img[[i,1]] = Gosu::Image.from_text(self, i+1, "Arial", 16, 15, 20, :center)
end
end
end
window = GameWindow.new
window.show
FOLHA DE REGISTRO DO DOCUMENTO
1. 2. 3. 4.
CLASSIFICAÇÃO/TIPO DATA REGISTRO N° N° DE PÁGINAS
Uma técnica local para manutenção de eficiência de comunicação em redes ad hoc de robôs móveis.
6.
AUTOR(ES):
Redes ad hoc; Comunicação sem fio; Dinâmica de robôs; Redes de comunicação; Engenharia eletrônica.
10.
APRESENTAÇÃO: X Nacional Internacional
ITA, São José dos Campos. Curso de Graduação em Engenharia Eletrônica. Orientador: Prof. Dr. Carlos
Henrique Costa Ribeiro; coorientador: Prof Dr. Lorenzo Sabattini. Publicado em 2013.
11.
RESUMO:
Redes ad hoc-to-backbone móveis são uma importante configuração de rede, na qual os dispositivos
podem se deslocar livremente e servir de roteadores para transmissão de dados de um nó origem até o seu
destino final. Além disso, a conectividade da rede é garantida pelos ligações com o Backbone. Porém,
essas conexões apresentam um consumo de energia maior para os nós da rede, de tal modo que sempre é
melhor buscar informações a partir dos seus vizinhos. E com o intuito de otimizar a quantidade de
acessos ao Backbone foi desenvolvido o algoritmo LSWTC, que altera dinamicamente tais conexões
baseado apenas em informações locais. No presente trabalho, buscou-se estudar o algoritmo LSWTC e
implementá-lo em um simulador de robôs móveis para melhor entender como as interações físicas entre
os agentes e o ambiente influenciam no seu ganho de performance de comunicação. Para tanto, grandezes
como raio de transmissão, largura de simulação e distância mínima de aproximação apresentaram um
importante papel para identificar as dificuldades encontradas pelo LSWTC em aproximar a configuração
da rede de robôs a uma rede Small World. Os resultados experimentais demonstraram que não somente o
modelo de mobilidade escolhido para os nós tem a sua influência no ganho de Clustering Coefficient,
mas também o algoritmo de desvio apresenta um importante papel. Por fim, conclui-se que o LSWTC
cumpre bem o seu papel, independentemente dos nós serem robôs móveis ou não, restando saber como
otimizar os seus parâmetros físicos para se obter o ganho máximo de performance de comunicação da
rede.
12.
GRAU DE SIGILO: