Mudanças entre as edições de "Grupo2-PJI2-2018-2"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 350: Linha 350:
 
{{collapse bottom}}
 
{{collapse bottom}}
 
</font>
 
</font>
<!--
+
 
 
==Sistema Supervisório==
 
==Sistema Supervisório==
 
<font size="3">
 
<font size="3">
Linha 557: Linha 557:
 
{{collapse bottom}}
 
{{collapse bottom}}
 
</font>
 
</font>
-->
 

Edição das 09h54min de 1 de outubro de 2018

Membros do grupo

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

Repositório git

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

Cronograma

Cronograma do projeto

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]

Levantamento de Requisitos

Requisitos Funcionais e Não funcionais

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.




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.

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
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

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.
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.
Diagrama de casos de uso
Casos de uso do SS