Grupo2-PJI2-2018-2

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

1 Membros do grupo

  • Ameliza Souza Corrêa
  • Marcone Augusto P. Louzada
  • Yan Lucas Martins

2 Repositório git

https://github.com/yanmartins/ProjetoIntegradorII.git

3 Cronograma

Cronograma do projeto

4 Diário do projeto

06/08/2018 - Montagem e conexão
Durante a primeira aula que tivemos contato com o LEGO Mindstorms EV3, nos ocupamos em realizar a sua montagem, bem como a conexão por Bluetooth via SSH com o robô. Conforme a seguinte documentação: Getting Started with ev3dev
08/08/2018 - Primeiros testes com a classe Motor
Foram testadas algumas funções da classe para o uso dos motores, obtendo o sucesso esperado deste teste inicial.
13/08/2018 - Implementação do laboratório virtual
Visando a simplificação para elaborar as estratégias que serão tomadas pelo robô, resolvemos montar um laboratório de simulação em Java, onde realizaremos todos os testes.
  • OBJETIVOS
    • Analisa o tabuleiro e verifica quais caças estão mais próximas [OK]
    • Verifica a posição das caças a cada movimento [OK]
    • Quando encontra a fronteira (linha vermelha) ele não a ultrapassa [OK]
    • Orientar seu eixo na direção correta [NOK]
    • Modo autônomo [NOK]


  • REVISAR
    • Quando acha uma intersecção, o robô não se importa com a orientação de seu eixo.
    • Não possui estratégias de caça.
17/08/2018 - Testes com todos os sensores
Nesta etapa, realizamos testes com as demais classes que serão utilizadas no projeto: sensor de cor, sensor ultrassônico, LEDs e novos usos da classe motor.
  • OBJETIVOS
    • Seguir uma linha preta [OK]
    • Parar a 10 cm de distância de um obstáculo [OK]
    • Mudar cores dos LEDs [OK]
    • Ao sair da linha preta, procurar por outra linha preta [NOK]


  • REVISAR
    • Verificar montagem da estrutura de locomoção. As rodas não estão bem alinhadas.
    • O robô para quando encontra um obstáculo e sinaliza interrupção com um LED amarelo, porém não toma uma "atitude" sobre isso. Fica aguardando o obstáculo ser removido.
    • O robô ainda não possui uma forma eficaz de buscar novas linhas pretas quando sai da mesma.
30/08/2018 - Teste com algoritmos PID seguidor de linha
Tendo acesso ao tabuleiro, foi possível iniciar os testes de movimentação do robô.
  • OBJETIVOS
    • Testar comportamento do robô submetido à vários algoritmos [OK]
    • Pausa quando detecta intersecção (cor verde) [NOK]


  • MELHORIA
    • Alterada a posição do sensor de cor para melhor calibragem.


  • REVISAR
    • Verificar montagem da estrutura de locomoção. As rodas não estão bem alinhadas.
    • Identificar range da cor verde para o sensor de cor.
05/09/2018 - Ajustes de montagem e implementação da classe Movimento
Foi remontada a estrutura de suporte dos sensores e motores, a fim de garantir melhor estabilidade.
  • OBJETIVOS
    • Verificar montagem da estrutura de locomoção [OK]
    • Tomar decisão quando detecta intersecção (cor verde) [NOK]


  • MELHORIA
    • Alteração do posicionamento do sensor ultrassônico.
    • Ajuste na base dos motores para maior estabilidade de movimentação.


  • REVISAR
    • Não entra no looping de seguidor de linha adequadamente.
    • Aperfeiçoar algoritmo seguidor de linha.
10/09/2018 - Implementação da classe Movimento (modo manual) - GITHUB
Com a nova estrutura do robô definida, reduziu-se as dificuldades encontradas nos testes iniciais com os algoritmos PID seguidor de linha. A primeira versão da classe Movimento está disponível no repositório git: https://github.com/yanmartins/ProjetoIntegradorII
  • OBJETIVOS
    • Tomar decisão quando detecta intersecção (cor verde) [OK]
    • Voltar para a posição anterior quando detecta um obstáculo [NOK]
    • Obedecer os comandos direita(), esquerda(), frente(), re() [NOK]


  • REVISAR
    • Devemos reavaliar a forma que será dado o retorno à posição anterior.
    • O algoritmo move o robô para a esquerda, porém não desempenha o mesmo papel para a direita.
11/09/2018 - Implementação das classes Movimento e Posicionamento - GITHUB
Robô já possui uma movimentação funcional pelo tabuleiro, se movendo para as 4 direções possíveis e retornando para a posição anterior assim que detecta um obstáculo. Essa nova versão está disponível no repositório git do projeto.
  • OBJETIVOS
    • Voltar para a posição anterior quando detecta um obstáculo [OK]
    • Obedecer os comandos direita(), esquerda(), frente(), re() [OK]
    • Criar função move() [OK]


  • REVISAR
    • Revisar algoritmo seguidor de linha, robô se perde em poucas ocasiões.
    • Talvez seja necessário reimplementar a função re()
12/09/2018 - Implementação das classes Manual, Comunicação e Inicialização - GITHUB
O sistema do robô tem a base para realizar trocas de mensagens com o SS a partir da classe Comunicação (stub). Essa nova versão está disponível no repositório git do projeto.
  • OBJETIVOS
    • Criar classe Comunicação (stub) [OK]


  • REVISAR
    • Revisar funções booleanas na classe Movimento.
21/09/2018 - Implementação das classes Posicionamento e Autônomo - GITHUB
No momento em que o robô recebe uma direção, localiza para qual coordenada e sentido (norte, sul, leste e oeste) está indo. Houve alterações também na classe Movimento. Essa nova versão está disponível no repositório git do projeto.
  • OBJETIVOS
    • Terminar classe Posicionamento [OK]

5 Levantamento de Requisitos

Requisitos Funcionais e Não funcionais

5.1 Requisitos Funcionais

RF01 O sistema deve permitir criação e gerência de cadastro de um robô.

RF02 O sistema de deve manter um histórico das partidas realizadas.

RF03 O sistema deve ser capaz de fazer a autenticação dos robôs cadastrados.

RF04 Os robôs devem ser capazes de operar nos modos manual e autônomo.

RF05 O sistema deve validar e contabilizar as caças já encontradas pelo robô.

RF06 O sistema deve dar início a partida, sortear os locais das caças e informá-los aos robôs.

RF07 O sistema deve prover uma interface de monitoramento para o robô em modo autônomo.

RF08 O sistema deve prover uma interface de controle e monitoramento para o robôs em modo manual.

RF09 O sistema deve permitir que, quando em modo autônomo, o robô execute os movimentos programados a partir do algoritmo implementado.

RF010 O sistema deve permitir pausa e reset da partida.

RF011 O sistema deve permitir que os resultados do jogo sejam vistos pelos espectadores em tempo real.

RF012 O sistema não deve permitir que os robôs se choquem.

RF013 O sistema deve declarar um vencedor assim que todas as caças forem encontradas.

RF014 Os robôs devem ser capazes de informar suas coordenadas a cada movimento.




5.2 Requisitos Não Funcionais

RNF01 A interface do sistema de comunicação com o usuário deve ser intuitiva.

RNF02 O tabuleiro será composto por linhas pretas e todos com cor.

RNF03 O tabuleiro terá as dimensões definidas (2m x 2m).

RNF04 O tabuleiro será composto por 100 quadrados de dimensões: 20cm x 20cm.

RNF05 O tabuleiro será limitado por uma borda vermelha.

RNF06 O placar mostrado aos usuários deve ser de fácil identificação.

RNF07 O robô deve ter uma cor para identificação.

RNF08 Os robôs devem ser posicionados nos dois extremos do tabuleiro no início da partida.

6 Sistema do Robô

Os casos de uso foram modelados de acordo com essa página, que é baseada no livro Princípios de Análise e projetos de sistemas com UML do Eduardo Bezerra.

Modelagem
Diagrama de classe
Atores dos casos de uso

Sensor ultrassônico

  • Identificador: SU
  • Descrição: Responsável por detectar obstáculos que possam interferir na trajetória do robô.


Sensor de cor

  • Identificador: SC
  • Descrição: Responsável por detectar variações de cor no tabuleiro. Sendo usado para seguir as linhas pretas e identificar regiões de caça (intersecções).


Sistema Supervisório

  • Identificador: SS
  • Descrição: Responsável por exibir a interface de controle, e por intermediar a comunicação entre SR e SA.
Descrição dos casos de uso

Caso de uso: Tratar obstáculos

Ator Primário: Sensor ultrassônico

Identificador: CSR 01

Sumário: Evitar colisões com outros robôs analisando obstáculos.

Pré condições: Obstáculo estar no campo de visão do sensor ultrassônico

Fluxo Principal:

  • Sensor ultrassônico detecta um obstáculo.
  • Sensor ultrassônico solicita ao SR o travamento dos motores.

Pós-condições: SS envia a ordem para o robô se deslocar até a coordenada anterior a detecção do obstáculo.




Caso de uso: Encontrar intersecção

Ator Primário: Sensor de cor

Identificador: CSR 02

Sumário: Detecta uma outra cor que não seja preto, branco ou vermelho e define como zona de intersecção.

Pré condições: Robô deve estar se movimentando pelo tabuleiro.

Fluxo Principal:

  • Sensor de cor detecta variação de cor.
  • Sensor de cor informa ao SS que encontrou uma zona de intersecção.

Pós-condições: SS analisa e define qual será a próxima ação que o robô deve tomar.




Caso de uso: Informar ID

Ator Primário: SS

Identificador: CSR 03

Sumário: O SS solicita o identificador do robô.

Pré condições: SS estar conectado ao robô.

Fluxo Principal:

  • SS solicita o endereço MAC Bluetooth do robô.
  • e depois???

Pós-condições: O SS envia ao SA o ID do robô.




Caso de uso: Mover

Ator Primário: SS

Identificador: CSR 04

Sumário: Recebe as ordens de deslocamento do SS.

Pré condições: SS estar conectado ao robô.

Fluxo Principal:

  • SS envia os comandos “seguir em frente”, “virar para a direita” e “virar para a esquerda”

Pós-condições: O robô irá executar o comando solicitado.




Caso de uso: Modo de jogo

Ator Primário: SS

Identificador: CSR 05

Sumário: SS informa ao robô se está operando em modo manual ou em modo autônomo.

Pré condições: SS estar conectado ao robô.

Fluxo Principal:

  • SS envia ao robô os comandos “modo manual” e “modo autônomo”

Pós-condições: Robô entrará no modo solicitado e aguardará instruções do SS

Diagrama de casos de uso
Casos de uso do SR
Diagrama de classe
Diagrama de classe
Diagrama de classe - IMPLEMENTADO
Diagrama de classe - IMPLEMENTADO
05/11
Diagramas de sequência

Inicialização

Diagrama de sequência - Inicialização

Autônomo

Diagrama de sequência - Autônomo
Tabelas de mapeamento
Tabelas de mapeamento

7 Sistema Supervisório

Atores dos casos de uso

Sistema do Robô

  • Identificador: SR
  • Descrição: Responsável por executar os comandos do SS, e por possuir a lógica de movimentos para encontrar as caças no modo autônomo, das quais devem ser informadas ao SS.


Sistema da Auditoria

  • Identificador: SA
  • Descrição: Responsável pelo controle das partidas, histórico, cadastro de robôs e captura das caças.


Usuário

  • Identificador: US
  • Descrição: Responsável por controlar o robô no modo manual.
Descrição dos casos de uso

Caso de uso: Modo de jogo

Ator Primário: SA

Identificador: CSS 01

Sumário: SA informa ao SS se o jogo operará em modo manual ou autônomo.

Pré condições: SA estar conectado ao SS

Fluxo Principal:

  • SA envia para o SS o modo escolhido.

Pós-condições:

  • SS enviará o modo escolhido para o SR e ele executará o algoritmo no modo recebido.




Caso de uso: Verifica robôs disponíveis

Ator Primário: SA

Identificador: CSS 02

Sumário: Antes da partida começar, o SA verifica se todos os robôs estão disponíveis.

Pré condições: SA estar conectado ao SS

Fluxo Principal:

  • O SA pergunta para o SS se os robôs estão aptos para iniciar a partida.

Pós-condições:

  • SS enviará para o SA quais robôs estão disponíveis.




Caso de uso: Disponibilidade

Ator Primário: SR

Identificador: CSS 03

Sumário: SR informa ao SS se está apto a começar a partida.

Pré condições: SA estar conectado ao SS

Fluxo Principal:

  • O SR verifica se tem todos os requisitos para iniciar a partida.
  • Se ele possuir todos os requisitos, manda para o SS se está ou não disponível.

Pós-condições:

  • SS enviará para o SA que o robô está disponível




Caso de uso: Configuração da partida

Ator Primário: SA

Identificador: CSS 04

Sumário: SA enviará para o SS, que por sua vez, enviará aos robôs que estão disponíveis, as configurações necessárias para o início da partida.

Pré condições: SA estar conectado ao SS

Fluxo Principal:

  • SS envia para o SA os endereços MAC de cada robô.
  • O SA envia para o SS a cor do robô, escolhida a partir do endereço MAC.
  • O SA sorteia e envia para o SS em qual coordenada cada robô vai estar (0, 0) ou (20, 20).
  • O SA envia a lista inicial com as coordenadas sorteadas das caças.

Pós-condições:

  • SR receberá as configurações e ficará aguardando o comando para iniciar a partida.




Caso de uso: Estado da partida

Ator Primário: SA

Identificador: CSS 05

Sumário: O SA enviará para o SS comandos durante a partida.

Pré condições: SA estar conectado ao SS

Fluxo Principal:

  • O SA envia comandos para o SS como: “pausa”, “continua” e “fim de jogo”.

Pós-condições:

  • Quando o SR receber algum comando, o executará, alterando assim, o estado da partida.




Caso de uso: Atualiza posições

Ator Primário: SR

Identificador: CSS 06

Sumário: O SR estará sempre informando suas coordenadas ao SS.

Pré condições: SA estar conectado ao SS

Fluxo Principal:

  • SR informa ao SS sua posição atual.
  • SR informa ao SS sua próxima posição.
  • O SA informa ao SS, que por sua vez, informa ao SR a próxima posição do robô adversário.

Pós-condições:

  • SR executa estratégia de acordo com a posição do adversário.
  • SA envia a próxima posição do robô para o adversário, quando solicitado.




Caso de uso: Atualiza posição do adversário

Ator Primário: SA

Identificador: CSS 07

Sumário: O SA envia para o SS a próxima posição do adversário.

Pré condições: SA estar conectado ao SS

Fluxo Principal:

  • O SA recebe a posição atual e a próxima posição do robô.
  • O SA envia como resposta ao SS, a próxima posição do adversário.

Pós-condições:

  • O SA atualiza a posição do SR, para quando solicitado, enviá-la ao adversário.




Caso de uso: Validar caças

Ator Primário: SR

Identificador: CSS 08

Sumário: O SR envia ao SS a coordenada em que está e pergunta se há uma caça.

Pré condições: SA estar conectado ao SS

Fluxo Principal:

  • O SA recebe o pedido de validação da caça.
  • O SA envia ao SS se aquela caça foi ou não validada.

Pós-condições:

  • O SR recebe a lista de caças atualizada, e atualiza sua estratégia.




Caso de uso: Caças ativas

Ator Primário: SA

Identificador: CSS 09

Sumário: O SA atualiza sua lista de caças constantemente.

Pré condições: SA estar conectado ao SS

Fluxo Principal:

  • O SA recebe do SS a solicitação para validar uma caça.
  • O SA envia para o SS que a caça foi validada.
  • O SA atualiza a sua lista de caças retirando a caça validada.

Pós-condições:

  • SR recebe a lista de caças atualizada, e atualiza sua estratégia.




Caso de uso: Interface Manual

Ator Primário: US

Identificador: CSS 10

Sumário: Usuário envia comandos para o SS.

Pré condições: SA estar conectado ao SS

Fluxo Principal:

  • Interface gráfica do SS exibe uma tela ao usuário
  • O usuário entre com os comandos necessários para a movimentação do robô

Pós-condições:

  • SR executa os comandos que o usuário solicitou.
Diagrama de casos de uso
Casos de uso
Diagrama de sequência
Diagrama de sequência
Tabela de mapeamento

Bloco 1: Inicialização do robô.

Bloco 2: Atualização a lista de estratégia no modo Autônomo.

Bloco 3: Atualiza a próxima posição do robô.

Bloco 4: Verifica a existência de uma caça.

Tabela de mapeamento
Diagrama de Implementação

A tecnologia utilizada para efetivar a comunicação entre o SS e o SR foi o Pyro4. Essa troca de mensagens irá ocorrer pela rede, sendo utilizado TCP/IP como meio.

Diagrama de Implementação

8 Sistema de Auditoria

Diagrama de classe
Diagrama de classe
Diagrama de sequência
Diagrama de sequência