Mudanças entre as edições de "Grupo2-PJI2-2018-2"
(181 revisões intermediárias por 3 usuários não estão sendo mostradas) | |||
Linha 3: | Linha 3: | ||
*Marcone Augusto P. Louzada | *Marcone Augusto P. Louzada | ||
*Yan Lucas Martins | *Yan Lucas Martins | ||
+ | |||
+ | ==Repositório git== | ||
+ | https://github.com/yanmartins/ProjetoIntegradorII.git | ||
+ | |||
+ | ==Cronograma== | ||
+ | [[Arquivo:cronogramaRobo1.jpg|1000px|thumb|center|<div style="TEXT-align: center;">Cronograma do projeto</div>]] | ||
==Diário do projeto== | ==Diário do projeto== | ||
<font size="3"> | <font size="3"> | ||
+ | <!-- | ||
+ | PARA COLOCAR NO COLLAPSE : | ||
+ | | expand=true | -> deixa collapse aberto | ||
+ | | bg=lightgreen | -> deixa collapse verde | ||
+ | |||
+ | PARA COLOCAR NA FIGURA : | ||
+ | <center>[[Arquivo:RTL_Ex2_2_Pedronib.png| 400 px]]</center> -> figura fica no centro e sem borda | ||
+ | --> | ||
{{collapse top | 06/08/2018 - Montagem e conexão}} | {{collapse top | 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ô. | + | ::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: [https://www.ev3dev.org/docs/getting-started/ Getting Started with ev3dev] |
{{collapse bottom}} | {{collapse bottom}} | ||
Linha 15: | Linha 29: | ||
{{collapse bottom}} | {{collapse bottom}} | ||
− | {{collapse top | 17/08/2018 - Testes com todos os sensores}} | + | {{collapse top | 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. | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top |17/08/2018 - Testes com todos os sensores}} | ||
::Nesta etapa, realizamos testes com as demais classes que serão utilizadas no projeto: [http://python-ev3dev.readthedocs.io/en/stable/sensors.html#color-sensor sensor de cor], [http://python-ev3dev.readthedocs.io/en/stable/sensors.html#ultrasonic-sensor sensor ultrassônico], [http://python-ev3dev.readthedocs.io/en/latest/other.html#leds LEDs] e novos usos da classe [http://python-ev3dev.readthedocs.io/en/stable/motors.html#large-ev3-motor motor]. | ::Nesta etapa, realizamos testes com as demais classes que serão utilizadas no projeto: [http://python-ev3dev.readthedocs.io/en/stable/sensors.html#color-sensor sensor de cor], [http://python-ev3dev.readthedocs.io/en/stable/sensors.html#ultrasonic-sensor sensor ultrassônico], [http://python-ev3dev.readthedocs.io/en/latest/other.html#leds LEDs] e novos usos da classe [http://python-ev3dev.readthedocs.io/en/stable/motors.html#large-ev3-motor motor]. | ||
− | |||
* '''OBJETIVOS''' | * '''OBJETIVOS''' | ||
Linha 30: | Linha 59: | ||
** 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ô 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. | ** O robô ainda não possui uma forma eficaz de buscar novas linhas pretas quando sai da mesma. | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top | 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. | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top |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. | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top |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. | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top |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 [https://github.com/yanmartins/ProjetoIntegradorII 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() | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top |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 [https://github.com/yanmartins/ProjetoIntegradorII repositório git do projeto]. | ||
+ | |||
+ | * '''OBJETIVOS''' | ||
+ | ** Criar classe Comunicação (stub) [OK] | ||
+ | |||
+ | |||
+ | * '''REVISAR''' | ||
+ | ** Revisar funções booleanas na classe Movimento. | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top |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 [https://github.com/yanmartins/ProjetoIntegradorII repositório git do projeto]. | ||
+ | |||
+ | * '''OBJETIVOS''' | ||
+ | ** Terminar classe Posicionamento [OK] | ||
{{collapse bottom}} | {{collapse bottom}} | ||
</font> | </font> | ||
Linha 63: | Linha 173: | ||
RF013 O sistema deve declarar um vencedor assim que todas as caças forem encontradas. | 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=== | ===Requisitos Não Funcionais=== | ||
Linha 77: | Linha 193: | ||
RNF06 O placar mostrado aos usuários deve ser de fácil identificação. | RNF06 O placar mostrado aos usuários deve ser de fácil identificação. | ||
− | RNF07 O robô deve ter uma | + | 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. | ||
{{collapse bottom}} | {{collapse bottom}} | ||
</font> | </font> | ||
− | + | ==Sistema do Robô== | |
− | + | :: Os casos de uso foram modelados de acordo com essa [http://resumindoall.blogspot.com/2012/05/uml-modelagem-de-casos-de-uso-parte-2.html página], que é baseada no livro Princípios de Análise e projetos de sistemas com UML do Eduardo Bezerra. | |
<font size="3"> | <font size="3"> | ||
− | {{collapse top | Atores}} | + | {{collapse top | Modelagem}} |
+ | [[Arquivo:diagrama_classe.jpg|1000px|thumb|center|<div style="TEXT-align: center;">Diagrama de classe</div>]] | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top | Atores dos casos de uso}} | ||
'''Sensor ultrassônico''' | '''Sensor ultrassônico''' | ||
− | '''Identificador:''' SU | + | |
− | '''Descrição:''' Responsável por detectar obstáculos que possam interferir na trajetória do robô. | + | *'''Identificador:''' SU |
+ | |||
+ | *'''Descrição:''' Responsável por detectar obstáculos que possam interferir na trajetória do robô. | ||
'''Sensor de cor''' | '''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. | + | *'''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''' | '''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. | ||
+ | |||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top | 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 | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top | Diagrama de casos de uso}} | ||
+ | [[Arquivo:uc_sr.png|1000px|thumb|center|<div style="TEXT-align: center;">Casos de uso do SR</div>]] | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top | Diagrama de classe}} | ||
+ | [[Arquivo:pkg3_SR.jpg|1000px|thumb|center|<div style="TEXT-align: center;">Diagrama de classe</div>]] | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top | Diagrama de classe - IMPLEMENTADO}} | ||
+ | <!--[[Arquivo:pkg2_SRimplementado2.jpg|1000px|thumb|center|<div style="TEXT-align: center;">Diagrama de classe - IMPLEMENTADO</div>]] ANTIGO | ||
+ | [[Arquivo:SR_implementado3.jpg|1000px|thumb|center|<div style="TEXT-align: center;">Diagrama de classe - IMPLEMENTADO</div>]] ANTIGO --> | ||
+ | [[Arquivo:SR_implementado4.jpg|1000px|thumb|center|<div style="TEXT-align: center;">Diagrama de classe - IMPLEMENTADO</div>]] 05/11 | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top | Diagramas de sequência}} | ||
+ | <font size="4"> | ||
+ | '''<div style="TEXT-align: center;">Inicialização</div>''' | ||
</font> | </font> | ||
+ | [[Arquivo:sd_SRInicializacao2.jpg|1000px|thumb|center|<div style="TEXT-align: center;">Diagrama de sequência - Inicialização </div>]] | ||
+ | |||
+ | <font size="4"> | ||
+ | '''<div style="TEXT-align: center;">Autônomo</div>''' | ||
+ | </font> | ||
+ | [[Arquivo:sd_SRAutonomo2.jpg|1000px|thumb|center|<div style="TEXT-align: center;">Diagrama de sequência - Autônomo</div>]] | ||
{{collapse bottom}} | {{collapse bottom}} | ||
+ | {{collapse top | Tabelas de mapeamento}} | ||
+ | [[Arquivo:tab3_mapeamento.jpg|1000px|thumb|center|<div style="TEXT-align: center;">Tabelas de mapeamento</div>]] | ||
+ | {{collapse bottom}} | ||
+ | </font> | ||
+ | |||
+ | ==Sistema Supervisório== | ||
<font size="3"> | <font size="3"> | ||
− | {{collapse top | Diagrama}} | + | {{collapse top | Atores dos casos de uso }} |
− | [[Arquivo: | + | '''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. | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top | 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. | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top | Diagrama de casos de uso}} | ||
+ | [[Arquivo:uc_ss2.jpg|1000px|thumb|center|<div style="TEXT-align: center;">Casos de uso</div>]] | ||
+ | {{collapse bottom}} | ||
+ | <!--{{collapse top | bg=lightgreen | Diagrama de classe}} | ||
+ | [[Arquivo:classe_ss2.jpg|1000px|thumb|center|<div style="TEXT-align: center;">Diagrama de classe</div>]] ANTIGO | ||
+ | [[Arquivo:SS_implementado2.jpg|1000px|thumb|center|<div style="TEXT-align: center;">Diagrama de classe</div>]] ANTIGO | ||
+ | [[Arquivo:SS_implementado3.jpg|1000px|thumb|center|<div style="TEXT-align: center;">Diagrama de classe</div>]] | ||
+ | {{collapse bottom}} | ||
+ | --> | ||
+ | <!-- | ||
+ | {{collapse top | bg=lightgreen | Diagrama de classe - IMPLEMENTADO}} | ||
+ | [[Arquivo:classe_implementado.jpg|1000px|thumb|center|<div style="TEXT-align: center;">Diagrama de classe - IMPLEMENTADO</div>]] ANTIGO | ||
+ | [[Arquivo:classe_implementado2.jpg|1000px|thumb|center|<div style="TEXT-align: center;">Diagrama de classe - IMPLEMENTADO</div>]] | ||
+ | {{collapse bottom}} | ||
+ | --> | ||
+ | |||
+ | {{collapse top | Diagrama de sequência}} | ||
+ | <!--[[Arquivo:seq_ss2.jpg|1000px|thumb|center|<div style="TEXT-align: center;">Diagrama de sequência</div>]] ANTIGO --> | ||
+ | [[Arquivo:seq_ss3.jpg|1000px|thumb|center|<div style="TEXT-align: center;">Diagrama de sequência</div>]] | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top | 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. | ||
+ | |||
+ | [[Arquivo:tab_ss.jpg|1000px|thumb|center|<div style="TEXT-align: center;">Tabela de mapeamento</div>]] | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top | 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. | ||
+ | [[Arquivo:imp_ss.jpg|1000px|thumb|center|<div style="TEXT-align: center;">Diagrama de Implementação</div>]] | ||
+ | {{collapse bottom}} | ||
</font> | </font> | ||
+ | |||
+ | ==Sistema de Auditoria== | ||
+ | <font size="3"> | ||
+ | {{collapse top | Diagrama de classe}} | ||
+ | [[Arquivo:SA_classe.jpg|1000px|thumb|center|<div style="TEXT-align: center;">Diagrama de classe</div>]] | ||
{{collapse bottom}} | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top | Diagrama de sequência}} | ||
+ | [[Arquivo:SA_sequencia.jpg|1000px|thumb|center|<div style="TEXT-align: center;">Diagrama de sequência</div>]] | ||
+ | {{collapse bottom}} | ||
+ | </font> |
Edição atual tal como às 15h27min de 15 de dezembro 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
Diário do projeto
06/08/2018 - Montagem e conexão |
---|
|
08/08/2018 - Primeiros testes com a classe Motor |
---|
|
13/08/2018 - Implementação do laboratório virtual |
---|
|
17/08/2018 - Testes com todos os sensores |
---|
|
30/08/2018 - Teste com algoritmos PID seguidor de linha |
---|
|
05/09/2018 - Ajustes de montagem e implementação da classe Movimento |
---|
|
10/09/2018 - Implementação da classe Movimento (modo manual) - GITHUB |
---|
|
11/09/2018 - Implementação das classes Movimento e Posicionamento - GITHUB |
---|
|
12/09/2018 - Implementação das classes Manual, Comunicação e Inicialização - GITHUB |
---|
|
21/09/2018 - Implementação das classes Posicionamento e Autônomo - GITHUB |
---|
|
Levantamento de Requisitos
Requisitos Funcionais e Não funcionais |
---|
Requisitos FuncionaisRF01 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 FuncionaisRNF01 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.
Atores dos casos de uso |
---|
Sensor ultrassônico
|
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:
Pós-condições: SS envia a ordem para o robô se deslocar até a coordenada anterior a detecção do obstáculo.
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:
Pós-condições: SS analisa e define qual será a próxima ação que o robô deve tomar.
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:
Pós-condições: O SS envia ao SA o ID do robô.
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:
Pós-condições: O robô irá executar o comando solicitado.
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:
Pós-condições: Robô entrará no modo solicitado e aguardará instruções do SS |
Sistema Supervisório
Atores dos casos de uso |
---|
Sistema do Robô
|
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:
Pós-condições:
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:
Pós-condições:
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:
Pós-condições:
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:
Pós-condições:
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:
Pós-condiçõ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:
Pós-condições:
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:
Pós-condições:
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:
Pós-condições:
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:
Pós-condições:
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:
Pós-condições:
|
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. |
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. |
Sistema de Auditoria