Documentação de Desenvolvimento
Transcrição
Documentação de Desenvolvimento
Capítulo 1 Relatório do desenvolvimento da aplicação de coleta e disseminação dos dados de tráfego Meta CDT Resumo Este entregável descreve as aplicações em desenvolvimento pela equipe da meta, como prova de conceito das pesquisas realizadas nesta meta. Três aplicações são propostas nesta meta: uma aplicação mais ampla, de coleta e disseminação de dados de tráfego que pode receber qualquer tipo de evento e tem por objetivo disseminar essa informação de forma irrestrita; outra aplicação para localização de vagas em estacionamentos e uma terceira aplicação para monitoramento de tráfego usando RFID. Ambas as aplicações utilizam os mesmos conceitos, de instrumentalização do trânsito, visando aumentar os serviços oferecidos ao motorista pela rede veicular. 1.1 Introdução Aparelhos para traçar rotas urbanas, baseados em mapas e sinal GPS de satélites, abriram espaço para a utilização de recursos computacionais para auxiliar a navegação dos motoristas em centros urbanos. Nesses casos, a única informação obtida pelo equipamento é localização geográfica, que atende ao propósito único de traçar a rota mais curta entre o ponto onde se encontra o veículo e seu destino. No entanto, a tecnologia disponível é capaz de fornecer outras informações úteis ao motorista, como informações meteorológicas, eventos do trânsito como congestionamentos, mudanças em sentido de direção, desvios, barreiras e obstáculos, vagas para estacionamento, descontos e localização de postos de combustíveis e até informações sobre o veículo, como autonomia de combustível, velocidade, consumo, problemas mecânicos, etc. As aplicações que utilizam essas informações são inúmeras e diversificadas. Podem levar à economia de tempo, otimização de recursos, redução de consumo, previsão de problemas e diversas outras vantagens. Algumas aplicações estão previstas neste trabalho. Elas visam facilitar a disseminação de informações sobre eventos de trânsito e sobre a disponibilidade de vagas para estacionamento. Outras aplicações poderão ser desenvolvidas usando os conceitos apresentados aqui e a instrumentação proposta para as redes veiculares. Este documento apresenta os requisitos definidos para as aplicações e seu processo de desenvolvimento. Essas aplicações estão sendo desenvolvidas pela equipe do projeto. Foram definidos cenários e restrições para as quais foram possíveis desenvolver a aplicação. 1.2 Aplicação de Coleta e Disseminação de Dados de Tráfego 1.2.1 Visão Geral Pretendemos desenvolver uma aplicação sensível ao contexto para Redes Veiculares (VANETS) [Hartenstein and Laberteaux, 2008] com informações úteis sobre o trânsito urbano e sobre autoestradas. O objetivo da aplicação será coletar ou receber informações sobre pontos estratégicos da cidade ou estradas e repassar essas informações para outros usuários da rede de acordo com o seu interesse e contexto em que estiverem inseridos. É importante que a aplicação seja sensível a contexto. Já existem aplicações que enviam mensagens sobre condições das vias urbanas ou estradas. Mas como as informações são enviadas sem levar em consideração o contexto do motorista, muitas delas são transmitidos desnecessariamente. A coleta de informações via sensores é outro requisito essencial. Atualmente há diversas aplicações que recebem informações de usuários sejam eles agentes públicos, cidadãos comuns ou funcionários da iniciativa privada como, por exemplo, jornalistas. Mas com as tecnologias de RSSF, RFID e Câmaras/Visão Computacional, é possível coletar de forma automática e em tempo real diversas informações. Conforme resumido no diagrama de casos de uso (Figura 1), a aplicação será capaz de coletar e disseminar três tipos de informações: (i) congestionamento em via urbana, (ii) acidentes, congestionamento, animais na pista ou outros incidentes em autoestradas e (iii) vagas em estacionamento. A coleta de informações de congestionamento em via urbana será feito pelo processamento de imagens usando técnicas de visão computacional. As informações de acidentes, congestionamento, animais na pista e outros acidentes nas autoestradas será informado manualmente via smartphone. Já as informações sobre vagas em estacionamento serão coletadas via Redes de Sensores Sem Fio e RFID. Figura 1: Diagrama de Casos de Uso da Aplicação de Coleta e Disseminação de Informações de Trânsito. Versões básicas dos casos de uso em cinza serão alvo do protótipo desse projeto. Os demais serão desenvolvidos em projetos paralelos ou futuros. Este projeto contempla o desenvolvimento de uma aplicação de Smart Cities utilizando as tecnologias de redes e dispositivos móveis disponíveis atualmente aplicando estas tecnologias para ajudar a resolver problemas de trânsito. A aplicação exemplo será usada em um cidade dividida em duas partes através de uma linha férrea. Para interligar as duas partes há um viaduto e duas passagens de nível (travessia de trem). A maioria dos veículos passa pelo viaduto o que faz com o que o trânsito fique congestionado nesse ponto. As passagens de nível são muito utilizadas como alternativa para evitar o congestionamento ou como pontos de passagem para veículos que não precisam ter acesso ao centro da cidade. Mas quando a travessia do trem precisa ser fechada, muitos motoristas deviam sua rota para o viaduto provocando ou intensificando o congestionamento nesse ponto. Outros motoristas ficam parados esperando a locomotiva passar provocando grandes filas de carros e congestionamentos em cruzamentos próximos. A aplicação que será desenvolvida permitirá aos motoristas terem acesso em tempo real sobre as condições de trânsito do viaduto e do estado da travessia. Dessa maneira o motorista poderá tomar a decisão por onde passar equilibrando o volume de tráfego entre os canais existentes ou evitando deslocamentos desnecessários para pontos obstruídos ou congestionados. As informações sobre as condições do viaduto e das travessias serão coletadas via câmaras. As imagens serão processadas usando técnicas de visão computacional e as informações extraídas serão armazenadas em um banco de dados central. Um sistema de alerta enviará as informações para os smartphones dos motoristas que possuirão uma aplicação local. A aplicação local processará a informação recebida verificando, por exemplo, o local do alerta recebido e verificará o contexto atual para decidir se avisa ou não ao motorista sobre o ocorrido. Na avaliação do contexto será verificado, por exemplo, a posição atual, a velocidade do motorista e a direção. O objetivo será verificar se o usuário está dirigindo, se está próximo da região do alerta e se está indo em direção ao local afetado. A aplicação fará uso de tecnologias localização, acelerômetros, conversão de texto em voz, entre outros recursos presentes em smartphones Android. A definição do contexto com precisão exigirá um vasto trabalho de pesquisa e desenvolvimento. Além disso, será necessário estudar formas de interagir com o motorista sem atrapalhá-lo na direção. Nesse sentido pretende-se utilizar comunicação via push messages e interfaces hápticas e sonoras como forma de alertar o motorista sem que seja necessário que o mesmo tenha de digitar ou acione algum botão no smartphone. No protótipo do projeto versões básicas destes requisitos serão implementados. Em relação ao contexto será analisada a posição e velocidade do motorista. Além da exibição das mensagens na tela, as mensagens serão pronunciadas para alertar o motorista sobre eventos importantes como acidentes, animais na pista ou congestionamentos que estejam próximos do motorista. A disseminação das informações será feita utilizando uma rede metropolitana sem fio, via redes celulares 3G/4G ou em modo ad hoc com transmissão de veículos para veículos. A seguir listaremos os principais atores e respectivos casos de uso do sistema. 1.2.2 Atores, Requisitos e Casos de Uso Ator Sensor O ator Sensor representa os diversos sensores que serão usados pela aplicação como: nó sensor, sistema RFID e Câmara. Através dos sensores será possível detectar se as travessias estão abertas, se as vias estão congestionadas e se há vagas em estacionamentos. Ator geral Ator específico Requisito/Caso de Uso Protótipo Sensor Câmara Detectar estado da via Sim Sensor Câmara, Nó Sensor e RFID Detectar vagas Sim Sensor Câmara Detectar estado da Travessia Não Ator Usuário O ator Usuário representa pessoas que podem utilizar um smartphone ou um navegador web convencional para interagir com o sistema e enviar informações sobre o trânsito. Os usuários poderão enviar alertas sobre estado da via, tanto urbana quanto autoestradas, informa vagas, estado de travessias e outras informações tratadas pela aplicação. O objetivo é que os usuários possam interagir com o sistema fornecendo informações que não são coletadas automaticamente ou complementando informações são coletadas. No protótipo não faremos coleta de informações de trânsito de autoestradas, mas será possível que um usuário forneça informações sobre esse tipo de via. Os demais casos de uso serão alvo de versões futuras da aplicação. Ator geral Ator específico Requisito/Caso de Uso Protótipo Usuário Não se aplica. Informar estado da via urbana. Não Usuário Não se aplica. Informar estado da autoestrada. Sim Usuário Não se aplica. Informar estado da travessia. Não Usuário Não se aplica. Informar vagas. Não Ator Emissor O ator Emissor será um processo responsável por verificar para quem as informações devem ser enviadas. A ideia é que o motorista não precise solicitar a informação, evitando a necessidade de interagir com o sistema enquanto dirige. Uma vez registrado no sistema, as informações serão enviadas para o motorista seguindo o padrão de projeto Publish–subscribe [Wikipedia, 2012a] e tecnologia Push [Wikipedia, 2012b]. O processo Emissor irá consultar periodicamente os alertas na fila de mensagens a enviar e os alertas aos motoristas interessados. Ator geral Ator específico Requisito/Caso de Uso Protótipo Emissor Não se aplica. Selecionar Interessados. Sim. Emissor Não se aplica. Enviar alertas. Sim Ator Receptor O ator Receptor é responsável por receber os alertas, interagir com o motorista e repassar os alertas em modo ad hoc. Os alertas serão recebidos em um dispositivo móvel presente no veículo. Uma vez recebido o alerta, será analisado o contexto do motorista a fim de verificar se é pertinente ou não exibir o alerta naquele momento. Se fizer sentido exibir o alerta, ele será exibido e falado ao motorista. Caso contrário ele será descartado.Se o alerta for sobre riscos eminentes de segurança, o receptor tentará propagá-lo em modo ad hoc usando algoritmos de roteamento ou disseminação de dados em Vanets [Li and Wang, 2007]. Ator geral Ator específico Requisito/Caso de Uso Protótipo Receptor Não se aplica. Receber Alerta. Sim. Receptor Não se aplica. Avaliar contexto. Sim Receptor Não se aplica. Exibir alerta. Sim Receptor Não se aplica. Falar alerta. Sim Receptor Não se aplica. Descartar alerta. Sim Receptor Não se aplica. Propagar alerta em modo ad hoc. Sim Ator Monitor O ator Monitor será responsável por integrar a aplicação com sistemas de agências municipais de trânsito (como a BHTrans) ou com canais de trânsito de redes sociais como Facebook e Twitter. Os requisitos referentes a este ator não serão implementados no protótipo, mas serão documentados a fim de já serem previstos no modelo de domínio e arquitetura do sistema. Ator geral Ator específico Requisito/Caso de Uso Monitor Não se aplica. Monitorar públicos. Monitor Não se aplica. Monitorar informações de redes sociais. informações Protótipo de órgãos Não. Não. Ator Processo Gestor O Processo Gestor será responsável por integrar as diversas informações recebidas via sensores, usuários ou fontes externas monitoradas. A partir dessas informações serão definidos quais alertas precisam ser enviados no momento. Uma vez definidos, os alertas entrarão na fila de mensagens do processo Emissor para serem enviados aos motoristas interessados. Ator geral Ator específico Requisito/Caso de Uso Protótipo Processo Gestor Não se aplica. Processar informações dos sensores. Sim. Processo Gestor Não se aplica. Processar informações recebidas via Sim. usuários. Processo Gestor Não se aplica. Processar externas. informações recebidas Não. Processo Gestor Não se aplica. Definir estado das vias. Sim. Processo Gestor Não se aplica. Definir disponibilidade de vagas. Sim. Processo Gestor Não se aplica. Definir estado das travessias. Sim. 1.3 Sistema de Localização de Vagas em Estacionamentos 1.3.1 Descrição do Sistema A aplicação consiste de um sistema localizador de vagas em estacionamentos através do reconhecimento de imagens de câmeras de seguranças oriundas do local. O objetivo do sistema é que o usuário através de uma aplicação para seu dispositivo móvel possa localizar vagas de estacionamento nos locais onde a aplicação tenha acesso sobre as câmeras do local. Uma grande aplicação por exemplo é a utilização para localização de vagas no centro das cidades, que em geral, são lugares onde encontrar vagas pode levar bastante tempo já que o fluxo de pessoas é muito grande e as vagas são escassas. Na seção sobre o funcionamento da aplicação será melhor detalhado o funcionamento do sistema em sua completude e será mostrado alguns problemas que poderão ser encontrados em sua implementação. 1.3.2 Requisitos Gerais do Sistema Os seguintes requisitos são gerais e serão desenvolvidos para a aplicação: GUI para busca de vagas de estacionamento pelos usuários; Distinção entre usuário e administrador do sistema; Administrador tem função de gerenciamento do sistema; Cadastro (nome, login, senha) de usuários no sistema; Cadastro (local) de estacionamentos monitorados; Cadastro (identificador, ip) das câmeras de seguranças que podem ser acessadas; Geração de relatórios de utilização e eficácia; Possibilidade do usuário escolher estacionamentos favoritos; Enviar feedback sobre o funcionamento para o sistema; Tempo de resposta hábil; Os requisitos apresentados podem ser visualizados através do diagrama de casos de uso apresentado na figura seguinte. Figura 2 - Casos de Uso - Aplicação Estacionamento 1.3.3 Funcionamento do Sistema O funcionamento do sistema pode ser descrito como a sequência de passos a seguir: 1. O usuário ao chegar em uma área atuada pelo sistema deverá acessar via seu dispositivo móvel e enviar uma requisição de localização de vaga no local determinado; 2. Ao receber a requisição, o servidor irá requisitar as câmeras do local que enviem snapshots dos locais do estacionamento; 3. Ao receber os snapshots, o servidor irá compará-los com uma imagem inicial do local (com todas as vagas livres), para assim poder verificar quais vagas estão livres no momento; 4. Com a lista de vagas disponíveis, o servidor enviará a listava para o cliente para que o mesmo possa escolher a melhor vaga para estacionar o seu veiculo; 5. Ao fim o usuário enviará um feedback para o sistema avaliando se a vaga disponibilizada foi válida ou não. O funcionamento do sistema pode ser melhor representado através do diagrama de atividades apresentado na figura seguinte. Figura 3 - Diagrama de sequência A distribuição das câmeras será realizada da seguinte maneira: Figura 4 - Distribuição das câmeras É válido realizar algumas ressalvas sobre o procedimento: É necessário que o sistema possua acesso as câmeras de seguranças disponíveis nos locais e que para um melhor resultado a quantidade de câmeras disponíveis não seja mínima; Para reconhecimento das vagas é necessário possuir uma imagem inicial do local de estacionamento vazio; É preciso que a câmera seja fixa, ou seja, que não seja possível movimentá-la para que o reconhecimento das vagas seja preciso; Para que o sistema acesse as câmeras é necessário que exista uma conexão com a internet ou com algum servidor de imagens; O ideal é realizar o processamento distribuído, ou seja, que o processamento das imagens seja realizado na própria câmera, porém a versão inicial será centralizada; O tempo de execução é um requisito crítico do sistema, pois se o tempo para o processamento for relativamente grande, a utilização do sistema será inviável; No momento está sendo realizado um levantamento de possíveis filtros para eliminação de ruídos (mancha, granulação etc) das imagens capturadas, para assim termos uma imagem mais nítida para realizar o processamento. Para verificar a existência de vagas, a técnica utilizada é a subtração das imagens do momento pela original, com isso obtemos uma imagem com os objetos que não existem na imagem original, porém esta técnica não tem uma grande eficácia aplicada sozinha, pois questões como luminosidade ou sombreamento alteram bastante o resultado, por isso o estudo de filtros é necessário. 1.3.4 Arquitetura do Sistema A arquitetura do sistema é baseada na abordagem Cliente-Servidor, porém com algumas modificações. Na imagem a seguir podemos ver os módulos da aplicação. Figura 5 - Arquitetura da aplicação Na aplicação existem dois módulos principais, o módulo Cliente e o módulo Servidor. O módulo cliente é responsável por informar ao usuário quais vagas estão disponíveis nos estacionamentos monitorados. Sua implementação será feita para o sistema operacional Android. Através de sua GUI o usuário poderá determinar em quais áreas deseja realizar a busca por vagas de estacionamento. Após realizar a busca o usuário recebe em seu dispositivo as vagas disponíveis. O módulo servidor possui duas camadas: lógica e persistência. A camada lógica é responsável pelo funcionamento do sistema em si, é neste camada onde os dados serão processados e a comunicação com o cliente e com as câmeras será realizada. Para comunicação com as câmeras deverá ser implementado um componente que utilize os drivers das câmeras ou utilizar alguma API já existente. A camada de persistência é responsável por gerenciar o banco de dados da aplicação. 1.3.5 Ferramentas Para o desenvolvimento do sistema serão necessárias as seguintes ferramentas: IDE Eclipse: Será utilizada para o desenvolvimento da aplicação do lado cliente e do lado servidor. Versão: Helius. JDK: Kit de desenvolvimento para a linguagem Java. Versão: 7 Android SDK: Kit de desenvolvimento para o sistema operacional Android. Versão: r18 Apache Tomcat: Servidor Web para aplicações Java. Versão: 7.0.27 R: Linguagem responsável pelo processamento das imagens capturas através das câmeras de segurança. Versão: 2.0.15 Câmeras D-Link DCS2130: Câmeras responsáveis por capturar imagens para realizar testes para o sistema, ao todo serão utilizadas 10 câmeras distribuídas nos estacionamentos que serão utilizados para realização dos testes. Dispositivo com Sistema Operacional Android: Qualquer dispositivo (celular ou tablet) para testar a aplicação. API para Acesso as Câmeras: API responsável pelo acesso as câmeras pelo servidor. Versão: Ainda não foi encontrada tal API Banco de Dados MySQL: Responsável por armazenar os dados provenientes da aplicação. Componente para Comunicação Java e R: Componente responsável pela comunicação entre as linguagens utilizadas na aplicação. Será utilizado o componente JRI ou RJava, necessitando ainda um levantamento das vantagens e desvantagens de cada um para assim realizar a escolha de qual será utilizado. 1.4 Aplicação de Monitoração de Trânsito Usando RFID A ideia desta aplicação é equipar os veículos com etiquetas RFID e espalhar leitores destas etiquetas ao longo dos principais pontos da malha viária das grandes cidades. À medida que os veículos passam por estes leitores, informações como quantidade de automóveis lidos, horário das leituras e as coordenadas geográficas em que o leitor está situado, são enviadas para um Servidor de banco de dados. Uma vez que as informações de fluxo de veículos estão salvas, um aplicativo Android as busca e disponibiliza para os motoristas e usuários através de mapas. Desta forma, os motoristas podem visualizar em tempo real o fluxo de trânsito em diversos pontos da cidade e então optar por caminhos alternativos para chegar ao seu destino, evitando assim as vias com trânsito intenso ou lento. Esta aplicação, desenvolvida no modelo Cliente-Servidor. O servidor é responsável por fazer a comunicação com os leitores RFID, recebendo periodicamente de cada leitor as informações sobre as etiquetas lidas, que são enviadas através de uma rede ethernet. Depois de recebidas estas informações, o servidor as persiste em um banco de dados, onde elas ficam disponíveis para consultas futuras. O Cliente é um aplicativo Android que busca as informações no banco de dados e as disponibiliza para o usuário. Para buscar com maior facilidade as informações no banco de dados já que não existe um conector MySQL para Android, um script PHP foi utilizado. 1.4.1 Tecnologia RFID As etiquetas RFID, são pequenos dispositivos que se constituem basicamente de uma antena em forma de espiral, um capacitor e um chip que é capaz de guardar informações. Figura 6 - Etiqueta RFID Estas etiquetas quando expostas a um campo eletromagnético, sofrem uma indução através da antena, assim gerando uma corrente elétrica que é armazenada no capacitor. Quando o capacitor está com carga máxima, ele libera uma descarga elétrica que inicia o funcionamento do circuito. Dessa forma os dados contidos no chip são emitidos em sinais de radio frequência, podendo ser lidos por leitores de RFID. Leitores RFID, ou também chamados de coletores, são os dispositivos responsáveis por fazer a leitura e gravação das etiquetas RFID. Seu funcionamento é basicamente induzir um campo eletromagnético sobre as etiquetas de forma que estas adquiram carga e sejam capazes de realizar uma comunicação sem fio com o leitor utilizando um protocolo específico (RFID SPEC). Neste trabalho nós utilizamos leitores produzidos pela Alien, o Alien ALR-9900 e Alien ALR-9650, que possuem interface de comunicação através de rede ethernet e também possuem uma biblioteca que disponibiliza várias funcionalidades, suprindo todas as necessidades para este projeto. Figura 7 Leitores Alien. Alien ALR-9900 e ALR-9650. Para se utilizar os leitores disponíveis, empregamos a biblioteca java fornecida pelo fabricante. Esta biblioteca nos fornece várias classes e funções que podemos utilizar para fazer a comunicação e configuração dos leitores. A classe AlienClass1Reader é basicamente a classe que representa o leitor. Toda vez que desejamos nos comunicar com o leitor nós criamos uma instância desta classe: AlienClass1Reader reader = new AlienClass1Reader(); Dessa forma, com uma instância da classe leitor criada, podemos facilmente estabelecer uma conexão com o leitor. Esta conexão pode ser feita tanto utilizando a rede através do protocolo TCP/IP ou também através da porta serial do computador. Um dos principais comandos que podemos utilizar é o que devolve uma lista de elementos da classe Tag, que representa as etiquetas que foram lidas pelo leitor no instante em que o comando é executado. Através da classe Tag, podemos ler todos os valores contidos em uma determinada etiqueta. Outro comando importante é o que permite modificar o identificador de qualquer etiqueta que esteja no alcance do leitor naquele instante, assim podemos definir os valores que melhor nos convenham para identificar cada etiqueta. Para fazer a aplicação, ao invés do servidor a todo instante pedir a lista de etiquetas ao leitor, é o leitor que de tempos em tempos envia automaticamente para o servidor a lista de etiquetas, assim evitando muito processamento do leitor e diminuindo o congestionamento da rede. Para fazer isto, nós configuramos o leitor para funcionar em modo autônomo e informamos ao leitor a quem ele deve notificar sobre quais etiquetas foram lidas. Assim de tempos em tempos o leitor envia uma mensagem ao servidor, contendo todas as etiquetas que foram lidas e uma série de informações extras. No servidor, para tratar as mensagens que chegam a todo instante, instalamos um serviço na máquina. Este serviço recebe as mensagens dos diferentes leitores contendo todas as etiquetas lidas em um determinado período. 1.4.2 Aplicação Servidor A aplicação servidor foi desenvolvida utilizando a biblioteca responsável por fazer a comunicação com os leitores. O servidor possui uma base de dados com todos os leitores cadastrados e com suas informações de conexão como IP, usuário e senha. Para isto, criamos uma base de dados com o MySQL com tabelas para armazenar informações sobre os leitores, sobre as etiquetas e sobre as leituras realizadas. Para preencher o banco com informações, foi criada uma aplicação com as funcionalidades de cadastro de leitores, cadastro de etiquetas e modificação dos dados das etiquetas. O aplicativo então podia abrir conexões com os leitores com as informações contidas na base de dados, porém queríamos que a aplicação funcionasse sem que o servidor a todo instante pedisse as informações de leituras para os coletores. Dessa forma, o aplicativo servidor se conecta com cada leitor e os configura para que eles funcionem em modo autônomo, coletando as informações de etiquetas (veículos) e as enviando de tempos em tempos para o servidor. Para receber informações enviadas pelos leitores, o servidor possui um serviço que trata as mensagens recebidas, colocando os dados de leituras na base de dados, bem como o horário em que as leituras foram recebidas e as coordenadas do leitor. Figura 8 Funcionamento da Aplicação Uma última funcionalidade que o aplicativo possui é o de desligar os leitores do modo autônomo. Essa funcionalidade é útil quando se tem certeza que em certos momentos não haverá leituras de etiquetas, assim o leitor pode ser desligado, diminuindo o fluxo de dados na rede e o processamento do servidor. Com estas informações temos o suficiente para definirmos o fluxo nos pontos onde estão localizados os leitores, e assim darmos continuidade com a próxima parte do projeto. 1.4.3 Aplicativos Android Uma das grandes vantagens de se utilizar o Android consiste na facilidade de desenvolvimento dos seus aplicativos, que são feitos através da linguagem de programação Java que é bastante difundida e conhecida. Outra vantagem consiste na quantidade de documentação e Bibliotecas disponíveis, APIs bem definidas e completas, possuindo também a facilidade de se realizar testes através das várias versões de emulador existentes. Outra vantagem consiste na facilidade de construção das interfaces gráficas dos aplicativos, que podem ser feitas através de código propriamente dito ou através de arquivos XML, permitindo muita flexibilidade e separação da interface da lógica. As IDEs de desenvolvimento também são um ponto forte dos aplicativos Android, podendo ser desenvolvidos com o Eclipse, Netbeans. Os aplicativos Android podem ser facilmente internacionalizados através da estrutura XML que possui, permitindo informar telas específicas para cada língua, bem como variáveis e componentes. Por fim, outra grande vantagem, é a de se escolher qual a resolução dos aplicativos e como a aplicação será visualizada em cada um dos diferentes tipos de dispositivo e também para qual a versão de Android o aplicativo foi feito, desta forma, permitindo que uma única versão do aplicativo possa ser instalada e funcionar corretamente em diversos dispositivos Android. Figura 9 Emulador Android Figura 10 Desenvolvimento Tela Principal em XML, através do Eclipse, onde é mostrado a versão do Android, a resolução da tela e para qual dispositivo está sendo desenvolvido. Uma das dificuldades encontradas neste projeto consistiu basicamente em como recuperar as informações de um banco de dados através de uma aplicação Android devido à falta de conectores para se comunicar entre o Android a uma base de dados em MySQL. Para se resolver este problema, uma abordagem nova teve de ser seguida, ao invés de se utilizar um conector, ou utilizar soquetes para a comunicação, foi desenvolvida uma interface em PHP, uma página web que roda no servidor. Este script tem a função básica de fazer consultas no banco de dados, armazenar o resultado destas consultas em um objeto chamado de JSON (Introdução ao JSON), e assim imprimir estes objetos na tela, resultando em algo como o mostrado na figura abaixo. Figura 11 Página gerada pelo script em PHP. No aplicativo Android, estas informações são recuperadas, através de um método que recupera objetos JSON de uma fonte na Web, e assim obtendo as informações necessárias, como coordenadas, fluxo de veículos nas coordenadas, horário entre outras. Figura 12 Informação recuperada no Dispositivo Android. 1.4.4 Desenvolvimento do Aplicativo Android de Visualização das Informações. Depois que os problemas de comunicação e recuperação das informações no banco foram solucionados, demos inicio ao desenvolvimento do aplicativo propriamente dito. Nesta etapa definimos como seria a sua estrutura e também a forma como o usuário iria acessar e visualizar as informações. Definimos a página principal do aplicativo como descrito na figura acima, onde o usuário pode visualizar as informações através de um mapa ou através de uma lista com as informações. O menu configuração serve para indicar em qual o servidor está localizado o banco de dados com as informações. Esta opção é útil quando se tem diversos banco de dados, e se deseja distribuir a carga entre eles, ou quando são definidos diferentes bancos para diferentes regiões. Os menus Sobre e Ajuda são apenas para mostrar informações referentes ao aplicativo, e onde o usuário pode tirar dúvidas sobre o seu funcionamento, mostrando apenas textos com links, não realizando nenhum processamento ou consultas ao banco. No menu Mapa, é onde o usuário pode visualizar as informações através de mapas. Para utilizar mapas no Android, nos utilizamos a Google Maps API (Google Maps Android API), onde antes de tudo é preciso obter uma licença de utilização gratuita, Google API Key, e então esta chave precisa ser declarada no aplicativo para assim ter acesso a API. Uma vez que o aplicativo esteja com a licença, várias Bibliotecas podem ser utilizadas, e assim informações podem ser colocadas em diferentes coordenadas no Mapa para poderem ser visualizas. Figura 13 Interface principal do Aplicativo Figura 14 Google Maps API Key. Key sendo gerada, sendo mostrado também um exemplo de como deve ser declarada no projeto da aplicação Assim, de tempos em tempos, consultas são feitas ao banco de dados, com auxílio do script PHP, e os dados obtidos são atualizados no Mapa, desta forma, o usuário tem acesso às informações em tempo real. 1.4.5 Implementação de um protocolo DTN. Queríamos também implementar um protocolo DTN para que os dispositivos móveis Android que executam esta aplicação pudessem, mesmo sem acesso à internet, disponibilizar informações atualizadas para os usuários. Para conseguir tal feito, planejamos usar a tecnologia Wi-Fi Direct que faria a comunicação entre os dispositivos móveis, fornecendo o meio para trocas de informação. Cada um dos dispositivos funcionaria como um nó da rede DTN, quando um nó solicitasse novas informações porem não tivesse conexão com a internet, essa solicitação seria feita para seus vizinhos que estão ao alcance do Wi-Fi Direct. Essa solicitação é então passada de nó para nó, até que algum dispositivo tenha acesso à internet e seja capaz de buscar estas informações, devolvendo então a resposta para o nó que fez inicialmente a solicitação. Figura 15 Exemplo de funcionamento do protocolo DTN. Porém, devido à demora do lançamento do Android 4.0 para os Smartphones e Tablets que tivessem a funcionalidade do Wi-Fi Direct liberada, nós não pudemos desenvolver esta parte da aplicação. Realizamos apenas alguns testes para comprovar e observar o comportamento do Wi-Fi Direct. 1.5 Referências H. Hartenstein and K. P. Laberteaux (2008), “A tutorial survey on vehicular ad hoc networks,” IEEE Communications Magazine, vol. 46, no. 6, pp. 164 –171, june 2008. Fan Li and Yu Wang (2007) “Routing in Vehicular Ad Hoc Networks: A Survey. IEEE Vehicular Technology Magazine”. June 2007 Wikipedia (2012a) Publish–subscribe pattern – disponível em http://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern. Acesso em 1º de julho de 2012. Wikipedia (2012b) Push technology disponível http://en.wikipedia.org/wiki/Push_technology. Acesso em 1º de julho de 2012. em