Testes para execução da Classe autônomo e manual realizados. Código está disponível em repositório git.
3 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
!/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:
4 Aula 3 - 13/08
1ª apresentação das atividades passadas na aula 2 (06/08) e pontos a serem corrigidos foram requisitados.
5 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
6 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.
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;
9 Diagrama de Sequencia
Diagrama de Sequencia
Diagrama de Sequencia Autônomo
Diagrama de Sequencia Manual
10 Diagramas de Classe
Diagrama de classes
Class Diagram
Descrição das Classes
11 Classe controle
11.1 Atibutos
- posicao: Coordenadas atuais
- destino: Próxima coordenada
- velociodadeMax: velocidade máxíma do robô
11.2 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º
12 Classe Autônomo
12.1 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
12.2 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
13 Classe Manual
13.1 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
13.2 Metodos
+ executaComando(): Informa se quer seguir linha, esq, dir, retornar
+ getPosicao(): Informa a posição aual
+ serPosicao(): Atualiza posicao atual do robô
14 Classe template
14.1 Atibutos
+ publico: descricao
- privado: descricao
# protegido: descricao
14.2 Metodos
+ met1(): descricao
+ met2(): descricao
+ met3(): descricao
Classe sensor
Classe motor
15 Requisitos
Requisitos funcionais e não Funcionais
15.1 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)
15.2 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.
16 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:
!/usr/bin/env python3
from ev3dev.ev3 import *
from time import sleep
m = LargeMotor('outD')
m1 = LargeMotor('outA')
Foi realizado teste com a classe sensor usando o seguinte código como exemplo, retirado do site Using Sensors
!/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>
17 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})
18 Sistema Supervisor - SS
Atores do Sistema Supervisor
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.
19 Sistema Arbitro - SS
Atores do Sistema Arbitro
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.
20 Sistema Robo
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ô
Sistema Supervisor é responsável pelo controle e monitoração do robô, que pode ser manual ou autônomo.
Atores do Sistema Supervisor
Sistema Arbitro.
Usuário.
Casos de uso
Caso de uso: Manual <br\>
Ator Primário: SS <br\>
Pré condições: Comunicação ativa entre SS e SR e comunicação ativa entre SS e SA.<br\>
Fluxo Principal: <br\>
[1] SS recebe do SA o modo de jogo
[2] SS informa as caças para o usuário.
[3] SS aguarda instruções do usuário.
Caso de uso: Autônomo <br\>
Ator Primário: SS <br\>
Pré condições: Comunicação ativa entre SS e SR e comunicação ativa entre SS e SA.<br\>
Fluxo Principal: <br\>
[1] SS recebe do SA o modo de jogo
[2] SS solicita a lista das caças.
[3] SS envia a lista das caças para o SR.
[4] SS mantém as informações de cada movimentação para o usuário.
22 Sistema Arbitro - SA
Sistema Arbitro é responsável pelo cadastros dos robôs, define lista de caças e modo de jogo.
Atores do Sistema Arbitro
Sistema Supervisor.
Casos de uso
Caso de uso: Lista de caças <br\>
Ator Primário: SA <br\>
Pré condições: Comunicação ativa com os dois SS's.<br\>
Fluxo Principal: <br\>
[1] SA sorteia onde ficarão as caças
[2] SA envia a lista para os SS's.
Caso de uso: Modo de jogo <br\>
Ator Primário: SA <br\>
Pré condições: Comunicação ativa com os dois SS's.<br\>
Fluxo Principal: <br\>
[1] SA define se jogo é manual ou autônomo.
[2] SA envia para os SS´s.
Caso de uso: Cadastro de robô <br\>
Ator Primário: SA <br\>
Pré condições: Comunicação ativa com os dois SS's.<br\>
Fluxo Principal: <br\>
[1] SA solicita os Id´s dos robôs.
[2] SA recebe as identificações.
[3] SA verifica se não possui duplicidade nos ID's. Exceção: Duplicidade de ID: SA solicita uma nova ID.<br\
Caso de uso: Validar caça <br\>
Ator Primário: SA <br\>
Pré condições: Comunicação ativa com os dois SS's.<br\>
Fluxo Principal: <br\>
[1] SA aguarda do SS as coordenadas da caça.
[2] SA verifica as coordenadas
[3] SA valida a caça.
[4] SA envia para SS a validação. Exceção: Caça invalida: SA envia mensagem de caça invalida para SS.<br\