Mudanças entre as edições de "Grupo1-PJI2-2018-2"
(160 revisões intermediárias por 4 usuários não estão sendo mostradas) | |||
Linha 4: | Linha 4: | ||
*Allex Magno | *Allex Magno | ||
− | * | + | *Filipe Kuhnen |
+ | |||
+ | {{Collapse top |Diário de bordo}} | ||
+ | |||
+ | ==TODO próxima semana== | ||
+ | '''Terminar SR:''' movimentação automatica (validar a cada novo passo se pode fazer o proximo; <br/> | ||
+ | Configurar comunicação com o SS (fazer a classe que comunica e testa-la)<br/> | ||
+ | |||
+ | ''' Fazer SS''' Criar classe que comunica com SR <br/> | ||
+ | Criar classe que mostra informações ao usuario (automatico) <br/> | ||
+ | Criar classe para o usuario interegir(manual) <br/> | ||
+ | |||
+ | ==17/09== | ||
+ | Testes para execução da Classe autônomo e manual realizados. Código está disponível em [[repositório git]]. | ||
+ | |||
+ | ==Aula 4 - 20/08== | ||
+ | * Discussão para modelar os diagramas de classes do controle, modo autônomo e modo manual. | ||
+ | |||
+ | * Foi realizado teste com a classe sensor usando o seguinte código como exemplo, retirado do site [https://sites.google.com/site/ev3python/learn_ev3_python/using-sensors Using Sensors] | ||
+ | <code> | ||
+ | #!/usr/bin/env python3 | ||
+ | # so that script can be run from Brickman | ||
+ | |||
+ | from ev3dev.ev3 import * | ||
+ | |||
+ | # Connect ultrasonic and touch sensors to any sensor port | ||
+ | # and check they are connected. | ||
+ | us = UltrasonicSensor() | ||
+ | assert us.connected, "Connect a single US sensor to any sensor port" | ||
+ | ts = TouchSensor(); assert ts.connected, "Connect a touch sensor to any port" | ||
+ | # can have 2 statements on same line if use semi colon | ||
+ | |||
+ | # Put the US sensor into distance mode. | ||
+ | us.mode='US-DIST-CM' | ||
+ | |||
+ | units = us.units | ||
+ | # reports 'cm' even though the sensor measures 'mm' | ||
+ | |||
+ | # US sensor will measure distance to the closest | ||
+ | # object in front of it. | ||
+ | distance = us.value()/10 # convert mm to cm | ||
+ | print(str(distance) + " " + units) | ||
+ | |||
+ | if distance < 60: #This is an inconveniently large distance | ||
+ | Leds.set_color(Leds.LEFT, Leds.RED) | ||
+ | else: | ||
+ | Leds.set_color(Leds.LEFT, Leds.GREEN) | ||
+ | |||
+ | Leds.set_color(Leds.LEFT, Leds.GREEN) #set left led green before exiting | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | * 2ª apresentação com as correções requisitadas na aula anterior e algumas correções dos casos de uso: | ||
+ | |||
+ | ==Aula 3 - 13/08== | ||
+ | 1ª apresentação das atividades passadas na aula 2 (06/08) e pontos a serem corrigidos foram requisitados. | ||
+ | |||
+ | ==Aula 2 - 06/08== | ||
+ | Os robôs foram entregues. Como o grupo recebeu o robô montado, estudamos como instalar o linux e as bibliotecas do Ev3. | ||
+ | Estudamos a implementação do motor | ||
+ | |||
+ | == Aula 1 - 30/07== | ||
+ | Foi Apresentado a disciplina bem como seus objetivos. | ||
+ | O projeto consistirá em um robô caçador seguidor de linhas. | ||
+ | |||
+ | Os grupos foram formados. E para as atividades do projeto será foi definido o Trello como plataforma de tarefas e o whatsapp para comunicação. | ||
+ | |||
+ | |||
+ | {{Collapse bottom}} | ||
==Detalhes iniciais== | ==Detalhes iniciais== | ||
+ | |||
+ | ===Desenvolvimento=== | ||
+ | A implementação estará disponível no repositório [https://github.com/allexmagno/dev github do projeto] | ||
+ | |||
===Conexão ao EV3=== | ===Conexão ao EV3=== | ||
− | Efetuamos a conexão ao ev3 por meio do bluetooth, seguindo as instruções descritas em https://www.ev3dev.org/docs/tutorials/using-bluetooth-tethering/. Após conectarmos via bluetooth acessamos o | + | Efetuamos a conexão ao ev3 por meio do bluetooth, seguindo as instruções descritas em https://www.ev3dev.org/docs/tutorials/using-bluetooth-tethering/. Após conectarmos via bluetooth acessamos o ev3 via ssh utilizando o putty. |
+ | |||
+ | ===CRONOGRAMA DE ATIVIDADES FUTURAS=== | ||
+ | {{Collapse top | Cronograma}} | ||
+ | [[Arquivo:cronogramag12.jpg]] | ||
+ | |||
+ | {{Collapse bottom}} | ||
+ | |||
+ | ===Requisitos=== | ||
+ | |||
+ | {{Collapse top |Requisitos funcionais e não Funcionais}} | ||
+ | |||
+ | ===Requisitos funcionais=== | ||
+ | '''RF01 O sistema deve permitir criação e gerência de cadastro de um robô.''' | ||
+ | |||
+ | Cadastrar no S.A dados do robô via interface de controle: Nome, Usuário, Cor | ||
+ | para identificação. | ||
+ | |||
+ | '''RF02 O sistema de deve manter um histórico das partidas realizadas.''' | ||
+ | |||
+ | Quando a partida encerrar, o S.A. irá armazenar nome dos participantes e | ||
+ | pontuação. Irá armazenar as 10 últimas partidas. | ||
+ | |||
+ | '''RF03 O sistema deve ser capaz de fazer a autenticação dos robôs cadastrados.''' | ||
+ | |||
+ | Quando a partida for "cadastrada" o S.A. irá autenticar os dados antes de | ||
+ | iniciar a partida. Também irá registrar a posição inicial e zerar o score. | ||
+ | |||
+ | '''RF04 Os robôs devem ser capazes de operar nos modos manual e autônomo.''' | ||
+ | |||
+ | O SA vai definir se a partida será modo manual ou mono autônomo. O SS irá configurar o modo no SR. O SR terá uma interface comandos de deslocamento. | ||
+ | |||
+ | '''RF05 O sistema deve validar e contabilizar as caças já encontradas pelo | ||
+ | robô.''' | ||
+ | |||
+ | O S.R enviará a localização ao S.A que irá validar a “captura da caça”/chegada primeiro | ||
+ | ao ponto. Quando validada a captura, irá incrementar a pontuação. | ||
+ | |||
+ | '''RF06 O sistema deve dar início a partida, sortear os locais das caças e | ||
+ | informá-los aos robôs.''' | ||
+ | |||
+ | Quando os robôs estiverem posicionados (ficaram em vértices opostos), o S.A. | ||
+ | irá sortear a posição das caças e enviar aos robôs. Após isso se dará o início | ||
+ | da partida. | ||
+ | |||
+ | '''RF07 O sistema deve prover uma interface de monitoramento para o robô em | ||
+ | modo autônomo.''' | ||
+ | |||
+ | O S.A irá enviar a pontuação das caças validadas para o S.R. O S.R. irá também | ||
+ | descrever em sua tela os movimentos do robô e as coordenadas. | ||
+ | |||
+ | '''RF08 O sistema deve prover uma interface de controle e monitoramento para o | ||
+ | robôs em modo manual.''' | ||
+ | |||
+ | Será necessário criar para o S.R. uma interface comandos de deslocamento e o | ||
+ | monitoramento pode aproveitar a estrutura descrita no RF07. | ||
+ | |||
+ | '''RF09 O sistema deve permitir que, quando em modo autônomo, o robô execute os | ||
+ | movimentos programados a partir do algoritmo implementado.''' | ||
+ | |||
+ | Será implementado um algoritmo que irá fazer uso dos sensores de luz e ultrassom para o S.R que será executado quando o modo da partida for autônomo. | ||
+ | |||
+ | '''RF010 O sistema deve permitir pausa e reset da partida.''' | ||
+ | |||
+ | Os jogadores ao requisitar pausa, enviará um comando para S.A, o qual enviará aos S.R. uma requisição de pausa.Com isso todos movimentos que estão organizados na fila serão pausados aguardando uma mensagem para retorno. | ||
+ | Quando o S.A enviar um comando de reset ele mandará o robô para posição inicial | ||
+ | e irá zerar o score. Após nova autenticação, dará o comando para iniciar novamente. | ||
+ | |||
+ | '''RF011 O sistema deve permitir que os resultados do jogo sejam vistos pelos | ||
+ | espectadores em tempo real.''' | ||
+ | |||
+ | Contemplado no RF07 e RF08, através do monitoramento. | ||
+ | |||
+ | '''RF012 O sistema não deve permitir que os robôs se choquem.''' | ||
+ | |||
+ | O S.R. usará o sensor ultrasônico do robô para detectar a presença de outro | ||
+ | robô e obstáculos. Ao detectar impedimento ou possibilidade de choque, o S.R. | ||
+ | para o deslocamento em curso e manda retornar para a posição imediatamente | ||
+ | anterior. | ||
+ | |||
+ | '''RF013 O sistema deve declarar um vencedor assim que todas as caças forem | ||
+ | encontradas.''' | ||
+ | |||
+ | Quando todas as caças forem validadas/capturadas, o S.A irá comparar a | ||
+ | pontuação e definir o vencedor. Após isso irá registrar a partida na memória | ||
+ | (nomes e pontuações dos jogadores) | ||
+ | |||
+ | ===Requisitos não funcionais=== | ||
+ | |||
+ | '''RNF01 A interface do sistema de comunicação com o usuário deve ser intuitiva.''' | ||
+ | |||
+ | Será via interface web. | ||
+ | |||
+ | '''RNF02 O tabuleiro será composto por linhas pretas e todos com cor.''' | ||
+ | |||
+ | O tabuleiro será com linhas pretas e os pontos de intersecção será de cor verde. | ||
+ | |||
+ | '''RNF03 O tabuleiro terá as dimensões definidas (2m x 2m).''' | ||
+ | |||
+ | OK | ||
+ | |||
+ | '''RNF04 O tabuleiro será composto por 100 quadrados de dimensões: 20cm x | ||
+ | 20cm.''' | ||
+ | |||
+ | OK | ||
+ | |||
+ | '''RNF05 O tabuleiro será limitado por uma borda vermelha.''' | ||
+ | |||
+ | OK, linha vermelha não pode ser tratada como obstáculo, mas robô não pode | ||
+ | transpo-la. | ||
+ | |||
+ | '''RNF06 O placar mostrado aos usuários deve ser de fácil identificação.''' | ||
+ | |||
+ | Será implementado na interface web. | ||
+ | |||
+ | '''RNF07 O robô deve ter uma cor para identificação.''' | ||
+ | |||
+ | Contemplado no RF01. | ||
+ | |||
+ | {{Collapse bottom}} | ||
+ | |||
+ | ===Testes Funcionais=== | ||
+ | {{Collapse top |Teste dos Motores}} | ||
+ | |||
+ | <font size="2"> | ||
+ | |||
+ | Em primeiro momento fizemos um teste básico da movimentação do robô, testamos primeiro a movimentação para frente, e em seguida fizemos um esboço de como o robô faria sua movimentação para virar a esquerda ou direita. | ||
+ | |||
+ | *Movimentação para frente: | ||
+ | <code> | ||
+ | #!/usr/bin/env python3 | ||
+ | |||
+ | from ev3dev.ev3 import * | ||
+ | from time import sleep | ||
+ | m = LargeMotor('outD') | ||
+ | m1 = LargeMotor('outA') | ||
+ | |||
+ | m.run_forever(speed_sp=900) | ||
+ | m1.run_forever(speed_sp=900) | ||
+ | sleep(5) | ||
+ | |||
+ | m.stop(stop_action="hold") | ||
+ | m1.stop(stop_action="hold") | ||
+ | sleep(5) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *Dobrar para direita ou esquerda: | ||
+ | |||
+ | <code> | ||
+ | #!/usr/bin/env python3 | ||
+ | from ev3dev.ev3 import * | ||
+ | from time import sleep | ||
+ | |||
+ | m.run_timed(time_sp=5, speed_sp=500) | ||
+ | sleep(5) | ||
+ | |||
+ | m.stop(stop_action="hold") | ||
+ | sleep(5) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | {{Collapse bottom}} | ||
+ | |||
+ | {{Collapse top |Teste dos Sensores}} | ||
+ | |||
+ | * Foi realizado teste com a classe sensor usando o seguinte código como exemplo, retirado do site [https://sites.google.com/site/ev3python/learn_ev3_python/using-sensors Using Sensors] | ||
+ | <code> | ||
+ | #!/usr/bin/env python3 | ||
+ | # so that script can be run from Brickman | ||
+ | |||
+ | from ev3dev.ev3 import * | ||
+ | |||
+ | # Connect ultrasonic and touch sensors to any sensor port | ||
+ | # and check they are connected. | ||
+ | us = UltrasonicSensor() | ||
+ | assert us.connected, "Connect a single US sensor to any sensor port" | ||
+ | ts = TouchSensor(); assert ts.connected, "Connect a touch sensor to any port" | ||
+ | # can have 2 statements on same line if use semi colon | ||
+ | |||
+ | # Put the US sensor into distance mode. | ||
+ | us.mode='US-DIST-CM' | ||
+ | |||
+ | units = us.units | ||
+ | # reports 'cm' even though the sensor measures 'mm' | ||
+ | |||
+ | # US sensor will measure distance to the closest | ||
+ | # object in front of it. | ||
+ | distance = us.value()/10 # convert mm to cm | ||
+ | print(str(distance) + " " + units) | ||
+ | |||
+ | if distance < 60: #This is an inconveniently large distance | ||
+ | Leds.set_color(Leds.LEFT, Leds.RED) | ||
+ | else: | ||
+ | Leds.set_color(Leds.LEFT, Leds.GREEN) | ||
+ | |||
+ | Leds.set_color(Leds.LEFT, Leds.GREEN) #set left led green before exiting | ||
+ | |||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | {{Collapse bottom}} | ||
+ | |||
+ | ==Sistema Auditor - SA== | ||
+ | {{Collapse top |Atores do Sitema Auditor}} | ||
+ | SS: responsável por informar ID do robô e solicitar validação de caça | ||
+ | Arbitro: | ||
+ | {{Collapse bottom}} | ||
+ | {{Collapse top |Casos de uso}} | ||
− | + | '''Caso de Uso:''' Configurar jogo <br/> | |
− | |||
− | |||
− | |||
− | + | '''Caso de Uso:''' Verificar ID <br/> | |
− | |||
− | + | '''Caso de Uso:''' Lista de caça <br/> | |
+ | '''Ator Primário:''' SS <br/> | ||
+ | '''Identificador:''' UCLC <br/> | ||
+ | '''Sumário:''' Configuração das listas de caças <br/> | ||
+ | '''Pré-Condições:''' Comunicação ativa com ambos SS <br/> | ||
+ | '''Fluxo Principal:''' <br/> | ||
+ | [1] SA sorteia posição das caças <br/> | ||
+ | [2] SA envia para os SS lista de caças <br/> | ||
+ | |||
+ | '''Caso de Uso:''' Modo de Jogo <br/> | ||
+ | '''Ator Primário:''' SS <br/> | ||
+ | '''Identificador:''' UCMJ <br/> | ||
+ | '''Sumário:''' Configuração do modo de Jogo <br/> | ||
+ | '''Pré-Condições:''' Comunicação ativa com ambos SS <br/> | ||
+ | '''Fluxo Principal:''' <br/> | ||
+ | [1] SA define o modo de jogo <br/> | ||
+ | [2] SA envia modo de jogo para os SS <br/> | ||
− | + | '''Caso de Uso:''' Cadastro de robô <br/> | |
+ | '''Ator Primário:''' SS <br/> | ||
+ | '''Identificador:''' UCCR <br/> | ||
+ | '''Sumário:''' Configuração dos robôs <br/> | ||
+ | '''Pré-Condições:''' Comunicação ativa com ambos SS <br/> | ||
+ | '''Fluxo Principal:''' <br/> | ||
+ | [1] SA solicita aos SS IDs dos robôs <br/> | ||
+ | [2] SA recebe os IDs <br/> | ||
+ | [3] SA verifica se não possui duplicidade de ID <br/> | ||
+ | '''Exceção:''' Duplicidade de ID <br/> | ||
+ | [1] SA solicita uma nova ID <br/> | ||
− | + | '''Caso de Uso:''' Validar Caça <br/> | |
+ | '''Ator Primário:''' SS <br/> | ||
+ | '''Identificador:''' UCVC <br/> | ||
+ | '''Sumário:''' Validação de caças <br/> | ||
+ | '''Pré-Condições:''' Comunicação ativa com ambos SS <br/> | ||
+ | '''Fluxo Principal:''' <br/> | ||
+ | [1] SA aguarda receber a coordenada das caças <br/> | ||
+ | [2] SA Verifica as coordenadas <br/> | ||
+ | [3] SA valida a caça e acrescenta a pontuação do robô <br/> | ||
+ | [4] SA envia para SS a validação <br/> | ||
+ | '''Exceção:''' Caça inválida <br/> | ||
+ | [1] SA envia caça inválida para SS <br/> | ||
− | + | [[Imagem:UC_SAv1.jpeg|frame|center|Imagem 1: Diagrama de Classe v1 - Sistema Auditor]] | |
− | + | {{Collapse bottom}} | |
+ | {{Collapse top |Diagrama de Classe}} | ||
+ | [[Imagem:DC_SAv1.jpeg|frame|center|Imagem 1: Diagrama de Classe v1 - Sistema Auditor]] | ||
+ | {{Collapse bottom}} | ||
− | + | ==Sistema Supervisor - SS== | |
+ | {{Collapse top |Atores do Sitema Supervisor}} | ||
− | + | Usuário - Responsável por informar a direção de deslocamento e solicitar para validar as caças. <br/> | |
+ | SA - Responsável por informar modo de jogo, enviar a lista, validar caças, começar e terminar o jogo.<br/> | ||
+ | SR - Responsável enviar o ID, informar deslocamento e solicitar para validar caça<br/> | ||
− | + | {{Collapse bottom}} | |
− | + | {{Collapse top |Casos de uso}} | |
− | + | Caso de Uso: Manual <br/> | |
+ | Ator Primário: <br/> | ||
+ | Identificador: UCMA <br/> | ||
+ | Sumário: Modo de Jogo Manual <br/> | ||
+ | Pré-Condições: Comunicação ativa entre SS e SR, SS e SA <br/> | ||
+ | Fluxo Principal: <br/> | ||
+ | [1] Recebe do SA o modo de Jogo <br/> | ||
+ | [2] SS solicita lista de caças <br/> | ||
+ | [3] SS informa as caças para o usuário <br/> | ||
+ | [4] SS aguarda instruções do usuário <br/> | ||
− | + | Caso de Uso: Automático <br/> | |
+ | Ator Primário: <br/> | ||
+ | Identificador: UCAU <br/> | ||
+ | Sumário: Modo de Jogo Automático <br/> | ||
+ | Pré-Condições: Comunicação ativa entre SS e SR, SS e SA <br/> | ||
+ | Fluxo Principal: <br/> | ||
+ | [1] Recebe do SA o modo de Jogo <br/> | ||
+ | [2] SS solicita lista de caças <br/> | ||
+ | [3] SS envia lista de caças para SR <br/> | ||
+ | [4] SS mantém as informações de cada movimentação para o usuário <br/> | ||
+ | [[Imagem:UC_SSv2_2.jpeg|frame|center|Imagem 1: Diagrama de Casos de uso v1 - Sistema Supervisor]] | ||
− | + | {{Collapse bottom}} | |
+ | {{Collapse top |Diagrama de Classe}} | ||
+ | [[Arquivo:CD-Stub.png]] | ||
+ | {{Collapse bottom}} | ||
− | ==Sistema Robo== | + | ==Sistema Robo - SR== |
{{Collapse top |Atores do Sitema robo}} | {{Collapse top |Atores do Sitema robo}} | ||
− | |||
− | |||
− | * Sistema | + | *SS: Sistema supervisor responsável por indicar ações que serão realizados no robô, coletar informações de localização e validar ou não as caças. |
+ | |||
+ | *Sensor de Luz: É responsável por informar ao robô o caminho que deve ser seguido e onde exite pontos de intersecções. | ||
+ | |||
+ | *Sensor ultrassom: Responsável por verificar e avisar o robô a existência da presença de um outro robô no tabuleiro. | ||
{{Collapse bottom}} | {{Collapse bottom}} | ||
Linha 55: | Linha 396: | ||
{{Collapse top |Casos de uso}} | {{Collapse top |Casos de uso}} | ||
− | Caso de uso: Monitoramento em modo manual <br/> | + | '''Caso de uso:''' Identidade <br\> |
− | Ator | + | '''Ator Primário:''' SS <br\> |
− | Fluxo | + | '''Identificador:''' UCID <br\> |
− | + | '''Sumário:''' O SS fornece ao robô uma cor de identificação<br\> | |
− | + | '''Pré condições:''' Iniciar o Sistema robô <br\> | |
− | + | '''Fluxo Principal:''' <br\> | |
− | + | [1] SS informa ao SR qual sua cor <br/> | |
− | * | + | |
+ | |||
+ | |||
+ | '''Caso de uso:''' Monitoramento <br\> | ||
+ | '''Ator Primário:''' SS <br\> | ||
+ | '''Identificador:''' UCMNT <br\> | ||
+ | '''Sumário:''' Obter a localização do robô<br\> | ||
+ | '''Pré condições:''' Robô estar ativo no tabuleiro<br\> | ||
+ | '''Fluxo Principal:''' <br\> | ||
+ | [1] SS solicita ao SR que deseja informações de localização <br/> | ||
+ | [2] SR responde informando as coordenadas<br/> | ||
+ | '''Exceção:''' Robô está em uma localização diferente da informada<br\ | ||
+ | |||
+ | '''Caso de uso:''' Controle Autônomo<br\> | ||
+ | '''Ator Primário:''' SS<br\> | ||
+ | '''Identificador:''' UCATN <br\> | ||
+ | '''Sumário:''' Informar ao SR em que modo de operação ele vai atuar<br\> | ||
+ | '''Pré condições:''' Robô estar conectado e estar no ponto inicial do tabuleiro<br\> | ||
+ | '''Fluxo Principal:''' <br\> | ||
+ | [1] SS informa ao SR modo autônomo <br/> | ||
+ | |||
+ | |||
+ | '''Caso de uso:''' Controle Manual<br\> | ||
+ | '''Ator Primário:''' SS<br\> | ||
+ | '''Identificador:''' UCMNL <br\> | ||
+ | '''Sumário:''' Informar ao SR em que modo de operação ele vai atuar<br\> | ||
+ | '''Pré condições:''' Robô estar conectado e estar ligado no ponto inicial do tabuleiro<br\> | ||
+ | '''Fluxo Principal:''' <br\> | ||
+ | [1] SS informa ao SR modo manual <br/> | ||
+ | |||
+ | |||
+ | '''Caso de uso:''' Movimento<br\> | ||
+ | '''Ator Primário:''' SR <br\> | ||
+ | '''Identificador:''' UCMO <br\> | ||
+ | '''Sumário:''' Robô começa a se movimentar<br\> | ||
+ | '''Pré condições:''' Robô estar posicionado no tabuleiro em modo autônomo ou manual com as coordenadas atualizadas<br\> | ||
+ | '''Fluxo Principal:''' <br\> | ||
+ | [1] SR inicia movimento de acordo com as informações recebidas<br/> | ||
+ | [2] Sensor de luz verifica a presença da linha <br/> | ||
+ | [3] Sensor de Luz indica ponto de intersecção<br/> | ||
+ | [4] SR para a movimentação | ||
+ | [5] SR atualiza coordenada | ||
+ | '''Pós-condições:''' SR solicita novo movimento<br\> | ||
+ | |||
+ | |||
+ | |||
+ | '''Caso de uso:''' Validar Caça <br\> | ||
+ | '''Ator Primário:''' SR<br\> | ||
+ | '''Identificador:''' UCEC<br\> | ||
+ | '''Sumário:''' O SR, ao chegar em algum ponto, informa que encontrou a caça<br\> | ||
+ | '''Pré condições:''' Robô estar no tabuleiro<br\> | ||
+ | '''Fluxo Principal:''' <br\> | ||
+ | [1] SR indica que encontrou a caça<br/> | ||
+ | [2] SR solicita verificação<br/> | ||
+ | [3] SS informa ao SR caça validada<br/> | ||
+ | [4] SR contabiliza caça | ||
+ | '''Pós-condições:''' SR solicita permissão para a próxima coordenada<br/> | ||
+ | ''' Exceção''': Caça invalida<br/> | ||
+ | [1] SR solicita coordenadas atualizadas | ||
+ | [2] SS fornece coordenadas atuais | ||
+ | [3] SR solicita lista de caças atualizadas | ||
+ | [4] SS fornece lista de caças atualizadas | ||
+ | '''Pós-condições:''' SR solicita permissão para a próxima coordenada<br/> | ||
+ | |||
+ | |||
+ | |||
+ | '''Caso de uso:''' Definir Estratégia <br\> | ||
+ | '''Ator Primário:''' SR <br\> | ||
+ | '''Identificador:''' UCDE<br\> | ||
+ | '''Sumário:''' Definir sequências de movimentos <br\> | ||
+ | '''Pré condições:''' SR receber lista de caças atualizadas <br\> | ||
+ | '''Fluxo Principal:''' <br\> | ||
+ | [1] SR verifica as coordenadas do robô adversário <br/> | ||
+ | [2]SR verifica as coordenadas de todas as caças<br/> | ||
+ | [3]SR organiza a sequencia de coordenadas que irá seguir<br/> | ||
+ | '''Pós-condições:''' Robô inicia a busca<br\> | ||
+ | '''Exceção:''' Lista vazia | ||
+ | [1] SR informa lista vazia | ||
+ | |||
+ | |||
+ | |||
+ | '''Caso de uso:''' Parada de emergência <br\> | ||
+ | '''Ator Primário:''' SR <br\> | ||
+ | '''Identificador:''' UCPE<br\> | ||
+ | '''Sumário:''' impedir o robô de continuar se movimentando <br\> | ||
+ | '''Pré condições:'''SR precisa estar ativo no tabuleiro <br\> | ||
+ | '''Fluxo Principal:''' <br\> | ||
+ | [1]Sendor ultrassom identifica a presença de algum objeto <br/> | ||
+ | [2]SR ultrassom para de se movimentar<br/> | ||
+ | '''Pós-condições:''' Robô solicita atualizar coordenadas<br\> | ||
+ | |||
+ | |||
+ | |||
+ | [[Imagem:UCv3.2.3.png|frame|center|Imagem 1: Diagrama de Casos de uso V3.2.3- Sistema Robô]] | ||
+ | |||
+ | {{Collapse top |DC old}} | ||
+ | [[Imagem:UDSRv2.1.png|frame|center|Imagem 1: Diagrama de Casos de uso - Sistema Robô]] | ||
+ | [[Imagem:DURv2.jpg|frame|center|Imagem 1: Diagrama de Casos de uso V2- Sistema Robô]] | ||
+ | {{Collapse bottom}} | ||
+ | |||
+ | {{Collapse bottom}} | ||
+ | |||
+ | {{Collapse top|Mensagens Trafegadas}} | ||
+ | |||
+ | * Modo Autônomo: | ||
+ | SS solicita para a Classe Controle o MAC do robô; | ||
+ | |||
+ | Classe Controle encaminha ao SS o MAC do robô; | ||
+ | |||
+ | Classe Controle encaminha ao SS o próximo movimento a ser feito pelo robô, que foi calculado pela classe Autônomo; | ||
+ | |||
+ | Classe Controle encaminha ao SS a posição atual do robô, que fora lhe informado pela classe Autônomo; | ||
+ | |||
+ | SS envia para a Classe Controle a lista atual de caças, o controle por sua vez repassa a informação para Autônomo; | ||
+ | |||
+ | SS envia para a Classe Controle a coordenada atual do Adversário, o controle por sua vez repassa a informação para Autônomo; | ||
+ | |||
+ | Classe Controle encaminha ao SS uma solicitação de validação de caça, que fora lhe informado pela classe Autônomo; | ||
+ | |||
+ | SS envia para a Classe Controle a confirmação de que a caça foi validada, o controle por sua vez repassa a informação para Autônomo; | ||
+ | |||
+ | SS envia para a Classe Controle um aviso de Pausa/Retomada da Partida; | ||
+ | |||
+ | SS envia para a Classe Controle um aviso de final de Partida; | ||
+ | |||
+ | * Modo Manual: | ||
+ | SS solicita para a Classe Controle o MAC do robô; | ||
− | + | Classe Controle encaminha ao SS o MAC do robô; | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | SS envia para a classe Controle o próximo movimento a ser feito, o controle por sua vez repassa a informação para Manual; | ||
+ | SS envia para a Classe Controle um aviso de Pausa/Retomada da Partida; | ||
− | + | SS envia para a Classe Controle um aviso de final de Partida; | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | {{Collapse bottom}} | ||
− | + | {{Collapse top|Diagrama de Sequencia}} | |
− | + | *Diagrama de Sequencia Autônomo | |
− | |||
− | * | ||
− | |||
− | |||
− | |||
− | [[Imagem: | + | [[Arquivo:Diagrama_sequencia_autonomo_at.jpg]] |
+ | |||
+ | *Diagrama de Sequencia Manual | ||
+ | [[Arquivo:Diagrama_Sequencia_Manual.jpg]] | ||
+ | |||
+ | {{Collapse bottom}} | ||
+ | |||
+ | {{Collapse top |Diagrama de classes}} | ||
+ | |||
+ | [[Imagem:CDv2_2_2.png|miniatura|Class Diagram|alt=Diagrama de classes para controle do robô|esquerda|x1080px|link=https://wiki.sj.ifsc.edu.br/images/5/52/Controlev1.1.1.png]] | ||
+ | |||
+ | {{Collapse top |Descrição das Classes}} | ||
+ | |||
+ | ==Classe controle== | ||
+ | ===Atibutos=== | ||
+ | * '''- posicao:''' Coordenadas atuais | ||
+ | * '''- destino:''' Próxima coordenada | ||
+ | * '''- velociodadeMax:''' velocidade máxíma do robô | ||
+ | |||
+ | ===Metodos:=== | ||
+ | * '''+ seguirLinha():''' | ||
+ | * '''+ frente():''' Após encontrar um ponto de intersecção ele deve ir até a próxima linha para virar. | ||
+ | * '''+ esquerda():''' rotacionar de 0º a 180º | ||
+ | * '''+ direita():''' rotacionar de 0º a -180º | ||
+ | * '''+ retorna():''' rotacionar 180º | ||
+ | |||
+ | ==Classe Autônomo== | ||
+ | ===Atibutos=== | ||
+ | * '''- listaMovAtualizada:''' Inicialmente contém os movimentos iniciais e atualiza a cada nova estratégia | ||
+ | * '''- coordXAtual:''' Posição X atualizada a cada movimento | ||
+ | * '''- coordYAtual:''' Posição Y atualizada a cada movimento | ||
+ | * '''- coordXInicial:''' Posição X onde o robô irá iniciar no tabuleiro | ||
+ | * '''- coordYIncial:''' Posição Y onde o robô irá iniciar no tabuleiro | ||
+ | * '''- listaSequencia:''' Estratégias de movimento | ||
+ | * '''- coordenadaAdv:''' Guarda a coordenada do adversário a cada movimento | ||
+ | |||
+ | ===Metodos=== | ||
+ | * '''+ calcularMovimentos():''' | ||
+ | * '''+ getPosicao():''' Informa a posicao atual | ||
+ | * '''+ getListaSeq():''' carregar as estratégias | ||
+ | * '''+ getPosAdversario():''' capturar a posicao do adversário | ||
+ | * '''+ setPosicao():''' Atualizar a coordenada caso tenha ocorrido algum erro | ||
+ | |||
+ | ==Classe Manual== | ||
+ | ===Atibutos=== | ||
+ | * '''- coordXAtual:''' Posição X atualizada a cada movimento | ||
+ | * '''- coordYAtual:''' Posição Y atualizada a cada movimento | ||
+ | * '''- coordInicial:''' Posição onde o robô começará no tabuleiro | ||
+ | |||
+ | ===Metodos=== | ||
+ | * '''+ executaComando():''' Informa se quer seguir linha, esq, dir, retornar | ||
+ | * '''+ getPosicao():''' Informa a posição aual | ||
+ | * '''+ serPosicao():''' Atualiza posicao atual do robô | ||
+ | |||
+ | |||
+ | ==Classe template== | ||
+ | ===Atibutos=== | ||
+ | * '''+ publico:''' descricao | ||
+ | * '''- privado:''' descricao | ||
+ | * '''# protegido:''' descricao | ||
+ | |||
+ | ===Metodos=== | ||
+ | * '''+ met1():''' descricao | ||
+ | * '''+ met2():''' descricao | ||
+ | * '''+ met3():''' descricao | ||
+ | |||
+ | |||
+ | {{Collapse bottom}} | ||
+ | |||
+ | {{Collapse top |Classe sensor}} | ||
+ | [[Arquivo:D_class_motor.jpg ]] | ||
+ | {{Collapse bottom}} | ||
+ | |||
+ | {{Collapse top |Classe motor}} | ||
+ | [[Arquivo:D_class_motor_real.jpg]] | ||
+ | {{Collapse bottom}} | ||
{{Collapse bottom}} | {{Collapse bottom}} |
Edição atual tal como às 17h48min de 21 de outubro de 2018
Responsáveis pelo projeto
- Douglas Amorim dos Santos
- Allex Magno
- Filipe Kuhnen
Diário de bordo |
---|
TODO próxima semanaTerminar SR: movimentação automatica (validar a cada novo passo se pode fazer o proximo; Fazer SS Criar classe que comunica com SR 17/09Testes para execução da Classe autônomo e manual realizados. Código está disponível em repositório git. Aula 4 - 20/08
|
Detalhes iniciais
Desenvolvimento
A implementação estará disponível no repositório github do projeto
Conexão ao EV3
Efetuamos a conexão ao ev3 por meio do bluetooth, seguindo as instruções descritas em https://www.ev3dev.org/docs/tutorials/using-bluetooth-tethering/. Após conectarmos via bluetooth acessamos o ev3 via ssh utilizando o putty.
CRONOGRAMA DE ATIVIDADES FUTURAS
Requisitos
Requisitos funcionais e não Funcionais |
---|
Requisitos funcionaisRF01 O sistema deve permitir criação e gerência de cadastro de um robô. Cadastrar no S.A dados do robô via interface de controle: Nome, Usuário, Cor para identificação. RF02 O sistema de deve manter um histórico das partidas realizadas. Quando a partida encerrar, o S.A. irá armazenar nome dos participantes e pontuação. Irá armazenar as 10 últimas partidas. RF03 O sistema deve ser capaz de fazer a autenticação dos robôs cadastrados. Quando a partida for "cadastrada" o S.A. irá autenticar os dados antes de iniciar a partida. Também irá registrar a posição inicial e zerar o score. RF04 Os robôs devem ser capazes de operar nos modos manual e autônomo. O SA vai definir se a partida será modo manual ou mono autônomo. O SS irá configurar o modo no SR. O SR terá uma interface comandos de deslocamento. RF05 O sistema deve validar e contabilizar as caças já encontradas pelo robô. O S.R enviará a localização ao S.A que irá validar a “captura da caça”/chegada primeiro ao ponto. Quando validada a captura, irá incrementar a pontuação. RF06 O sistema deve dar início a partida, sortear os locais das caças e informá-los aos robôs. Quando os robôs estiverem posicionados (ficaram em vértices opostos), o S.A. irá sortear a posição das caças e enviar aos robôs. Após isso se dará o início da partida. RF07 O sistema deve prover uma interface de monitoramento para o robô em modo autônomo. O S.A irá enviar a pontuação das caças validadas para o S.R. O S.R. irá também descrever em sua tela os movimentos do robô e as coordenadas. RF08 O sistema deve prover uma interface de controle e monitoramento para o robôs em modo manual. Será necessário criar para o S.R. uma interface comandos de deslocamento e o monitoramento pode aproveitar a estrutura descrita no RF07. RF09 O sistema deve permitir que, quando em modo autônomo, o robô execute os movimentos programados a partir do algoritmo implementado. Será implementado um algoritmo que irá fazer uso dos sensores de luz e ultrassom para o S.R que será executado quando o modo da partida for autônomo. RF010 O sistema deve permitir pausa e reset da partida. Os jogadores ao requisitar pausa, enviará um comando para S.A, o qual enviará aos S.R. uma requisição de pausa.Com isso todos movimentos que estão organizados na fila serão pausados aguardando uma mensagem para retorno. Quando o S.A enviar um comando de reset ele mandará o robô para posição inicial e irá zerar o score. Após nova autenticação, dará o comando para iniciar novamente. RF011 O sistema deve permitir que os resultados do jogo sejam vistos pelos espectadores em tempo real. Contemplado no RF07 e RF08, através do monitoramento. RF012 O sistema não deve permitir que os robôs se choquem. O S.R. usará o sensor ultrasônico do robô para detectar a presença de outro robô e obstáculos. Ao detectar impedimento ou possibilidade de choque, o S.R. para o deslocamento em curso e manda retornar para a posição imediatamente anterior. RF013 O sistema deve declarar um vencedor assim que todas as caças forem encontradas. Quando todas as caças forem validadas/capturadas, o S.A irá comparar a pontuação e definir o vencedor. Após isso irá registrar a partida na memória (nomes e pontuações dos jogadores) Requisitos não funcionaisRNF01 A interface do sistema de comunicação com o usuário deve ser intuitiva. Será via interface web. RNF02 O tabuleiro será composto por linhas pretas e todos com cor. O tabuleiro será com linhas pretas e os pontos de intersecção será de cor verde. RNF03 O tabuleiro terá as dimensões definidas (2m x 2m). OK RNF04 O tabuleiro será composto por 100 quadrados de dimensões: 20cm x 20cm. OK RNF05 O tabuleiro será limitado por uma borda vermelha. OK, linha vermelha não pode ser tratada como obstáculo, mas robô não pode transpo-la. RNF06 O placar mostrado aos usuários deve ser de fácil identificação. Será implementado na interface web. RNF07 O robô deve ter uma cor para identificação. Contemplado no RF01. |
Testes Funcionais
Teste dos Motores |
---|
Em primeiro momento fizemos um teste básico da movimentação do robô, testamos primeiro a movimentação para frente, e em seguida fizemos um esboço de como o robô faria sua movimentação para virar a esquerda ou direita.
|
Teste dos Sensores |
---|
|
Sistema Auditor - SA
Atores do Sitema Auditor |
---|
SS: responsável por informar ID do robô e solicitar validação de caça Arbitro: |
Casos de uso |
---|
Caso de Uso: Configurar jogo Caso de Uso: Verificar ID Caso de Uso: Lista de caça Caso de Uso: Modo de Jogo Caso de Uso: Cadastro de robô Caso de Uso: Validar Caça |
Sistema Supervisor - SS
Atores do Sitema Supervisor |
---|
Usuário - Responsável por informar a direção de deslocamento e solicitar para validar as caças. |
Casos de uso |
---|
Caso de Uso: Manual Caso de Uso: Automático |
Sistema Robo - SR
Atores do Sitema robo |
---|
|
Casos de uso |
---|
Caso de uso: Identidade <br\>
Ator Primário: SS <br\>
Identificador: UCID <br\>
Sumário: O SS fornece ao robô uma cor de identificação<br\>
Pré condições: Iniciar o Sistema robô <br\>
Fluxo Principal: <br\>
[1] SS informa ao SR qual sua cor
Caso de uso: Monitoramento <br\>
Ator Primário: SS <br\>
Identificador: UCMNT <br\>
Sumário: Obter a localização do robô<br\>
Pré condições: Robô estar ativo no tabuleiro<br\>
Fluxo Principal: <br\>
[1] SS solicita ao SR que deseja informações de localização Caso de uso: Controle Autônomo<br\>
Ator Primário: SS<br\>
Identificador: UCATN <br\>
Sumário: Informar ao SR em que modo de operação ele vai atuar<br\>
Pré condições: Robô estar conectado e estar no ponto inicial do tabuleiro<br\>
Fluxo Principal: <br\>
[1] SS informa ao SR modo autônomo
Caso de uso: Validar Caça <br\>
Ator Primário: SR<br\>
Identificador: UCEC<br\>
Sumário: O SR, ao chegar em algum ponto, informa que encontrou a caça<br\>
Pré condições: Robô estar no tabuleiro<br\>
Fluxo Principal: <br\>
[1] SR indica que encontrou a caça
Caso de uso: Definir Estratégia <br\>
Ator Primário: SR <br\>
Identificador: UCDE<br\>
Sumário: Definir sequências de movimentos <br\>
Pré condições: SR receber lista de caças atualizadas <br\>
Fluxo Principal: <br\>
[1] SR verifica as coordenadas do robô adversário
Caso de uso: Parada de emergência <br\>
Ator Primário: SR <br\>
Identificador: UCPE<br\>
Sumário: impedir o robô de continuar se movimentando <br\>
Pré condições:SR precisa estar ativo no tabuleiro <br\>
Fluxo Principal: <br\>
[1]Sendor ultrassom identifica a presença de algum objeto
|
Mensagens Trafegadas |
---|
SS solicita para a Classe Controle o MAC do robô; Classe Controle encaminha ao SS o MAC do robô; Classe Controle encaminha ao SS o próximo movimento a ser feito pelo robô, que foi calculado pela classe Autônomo; Classe Controle encaminha ao SS a posição atual do robô, que fora lhe informado pela classe Autônomo; SS envia para a Classe Controle a lista atual de caças, o controle por sua vez repassa a informação para Autônomo; SS envia para a Classe Controle a coordenada atual do Adversário, o controle por sua vez repassa a informação para Autônomo; Classe Controle encaminha ao SS uma solicitação de validação de caça, que fora lhe informado pela classe Autônomo; SS envia para a Classe Controle a confirmação de que a caça foi validada, o controle por sua vez repassa a informação para Autônomo; SS envia para a Classe Controle um aviso de Pausa/Retomada da Partida; SS envia para a Classe Controle um aviso de final de Partida;
SS solicita para a Classe Controle o MAC do robô; Classe Controle encaminha ao SS o MAC do robô; SS envia para a classe Controle o próximo movimento a ser feito, o controle por sua vez repassa a informação para Manual; SS envia para a Classe Controle um aviso de Pausa/Retomada da Partida; SS envia para a Classe Controle um aviso de final de Partida; |
Diagrama de classes | ||
---|---|---|
|