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

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 446: Linha 446:
 
[1] SA envia caça inválida para SS
 
[1] SA envia caça inválida para SS
  
{{Collapse bottom})
+
{{Collapse bottom}}
  
 
==Sistema Robo - SR==
 
==Sistema Robo - SR==

Edição das 08h17min de 1 de outubro de 2018

Responsáveis pelo projeto

  • Douglas Amorim dos Santos
  • Allex Magno
  • Filipe Kuhnen
Diário de bordo

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

  1. !/usr/bin/env python3
  2. so that script can be run from Brickman

from ev3dev.ev3 import *

  1. Connect ultrasonic and touch sensors to any sensor port
  2. 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"

  1. can have 2 statements on same line if use semi colon
  1. Put the US sensor into distance mode.

us.mode='US-DIST-CM'

units = us.units

  1. reports 'cm' even though the sensor measures 'mm'
  1. US sensor will measure distance to the closest
  2. 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.


Detalhes iniciais

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

Cronograma

Cronogramag1.jpg

Desenvolvimento

A implementação estará disponível no repositório github do projeto

Mensagens trafegadas

Lista de mensagens
  • 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;

Diagrama de Sequencia

Diagrama de Sequencia
  • Diagrama de Sequencia Autônomo

Diagrama sequencia autonomo at.jpg

  • Diagrama de Sequencia Manual

Diagrama Sequencia Manual.jpg

Diagramas de Classe

Diagrama de classes
Diagrama de classes para controle do robô
Class Diagram
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


Classe sensor

D class motor.jpg

Classe motor

D class motor real.jpg

Requisitos

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.

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.

  • Movimentação para frente:

  1. !/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:

  1. !/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>

Teste dos Sensores
  • Foi realizado teste com a classe sensor usando o seguinte código como exemplo, retirado do site Using Sensors

  1. !/usr/bin/env python3
  2. so that script can be run from Brickman

from ev3dev.ev3 import *

  1. Connect ultrasonic and touch sensors to any sensor port
  2. 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"

  1. can have 2 statements on same line if use semi colon
  1. Put the US sensor into distance mode.

us.mode='US-DIST-CM'

units = us.units

  1. reports 'cm' even though the sensor measures 'mm'
  1. US sensor will measure distance to the closest
  2. 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>

Sistema Auditor - SA

Atores do Sitema Auditor


Casos de uso

Caso de Uso: Lista de caça Ator Primário: SS Identificador: UCLC Sumário: Configuração das listas de caças Pré-Condições: Comunicação ativa com ambos SS Fluxo Principal: [1] SA sorteia posição das caças [2] SA envia para os SS lista de caças

Caso de Uso: Modo de Jogo Ator Primário: SS Identificador: UCMJ Sumário: Configuração do modo de Jogo Pré-Condições: Comunicação ativa com ambos SS Fluxo Principal: [1] SA define o modo de jogo [2] SA envia modo de jogo para os SS Caso de Uso: Cadastro de robô Ator Primário: SS Identificador: UCCR Sumário: Configuração dos robôs Pré-Condições: Comunicação ativa com ambos SS Fluxo Principal: [1] SA solicita aos SS IDs dos robôs [2] SA recebe os IDs [3] SA verifica se não possui duplicidade de ID Exceção: Duplicidade de ID [1] SA solicita uma nova ID

Caso de Uso: Validar Caça Ator Primário: SS Identificador: UCVC Sumário: Validação de caças Pré-Condições: Comunicação ativa com ambos SS Fluxo Principal: [1] SA aguarda receber a coordenada das caças [2] SA Verifica as coordenadas [3] SA valida a caça e acrescenta a pontuação do robô [4] SA envia para SS a validação Exceção: Caça inválida [1] SA envia caça inválida para SS

Sistema Robo - SR

Atores do Sitema robo
  • 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.
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
[2] SR responde informando as coordenadas
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


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


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
[2] Sensor de luz verifica a presença da linha
[3] Sensor de Luz indica ponto de intersecção
[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
[2] SR solicita verificação
[3] SS informa ao SR caça validada
[4] SR contabiliza caça Pós-condições: SR solicita permissão para a próxima coordenada
Exceção: Caça invalida
[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


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
[2]SR verifica as coordenadas de todas as caças
[3]SR organiza a sequencia de coordenadas que irá seguir
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
[2]SR ultrassom para de se movimentar
Pós-condições: Robô solicita atualizar coordenadas<br\>


Imagem 1: Diagrama de Casos de uso V3.2.3- Sistema Robô
DC old
Imagem 1: Diagrama de Casos de uso - Sistema Robô
Imagem 1: Diagrama de Casos de uso V2- Sistema Robô

{{Collapse bottom})

{{Collapse bottom})