| [[#Execução de programas na linguagem Python|Execução de programas na linguagem Python]]
| style="text-align: center;" | OK
| style="text-align: center;" |
| style="text-align: center;" |
|
|
|
|
|
|
|-
| [[#Teste de sensores e motor|Teste de sensores e motor]]
| style="text-align: center;" |
| style="text-align: center;" | parcial
| style="text-align: center;" |
|
|
|
|
|
|
|-
| [[#Estudo do artigo do Borenstein e pesquisas sobre métodos de localização| Estudo do artigo do Borenstein e pesquisas sobre métodos de localização]]
| style="text-align: center;" |
| style="text-align: center;" | OK
| style="text-align: center;" |
|
|
|
|
|
|
|-
| Definir método para localização
| style="text-align: center;" |
| style="text-align: center;" | OK
| style="text-align: center;" |
|
|
|
|
|
|
|-
| Definir regras do jogo
| style="text-align: center;" |
| style="text-align: center;" | OK
| style="text-align: center;" |
|
|
|
|
|
|
|-
| [[#Entrega do sumário executivo|Entrega do sumário executivo]]
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | OK
|
|
|
|
|
|
|-
| [[#Casos de uso e requisitos|Casos de uso e requisitos]]
| style="text-align: center;" |
| style="text-align: center;" |
| style="text-align: center;" | parcial
|
|
|
|
|
|
|}
=Estrutura do EV3=
=Estrutura do EV3=
Linha 221:
Linha 97:
'''RNF04''' O tabuleiro deve ser formado por 100 blocos com dimensões de 0,2 metros por 0,2 metros. <br>
'''RNF04''' O tabuleiro deve ser formado por 100 blocos com dimensões de 0,2 metros por 0,2 metros. <br>
'''RNF05''' O tabuleiro deve ter 6 cores (vermelho, azul, amarelo, verde, branco e marrom). <br>
'''RNF05''' O tabuleiro deve ter 6 cores (vermelho, azul, amarelo, verde, branco e marrom). <br>
'''RNF06''' Ao redor do tabuleiro deve ter um contorno preto de 0,15 metros. <br>
'''RNF06''' Ao redor do tabuleiro deve ter um contorno preto de 0,05 metros. <br>
'''RNF07''' Cada robô deve ter uma cor para identificação. <br>
'''RNF07''' Cada robô deve ter uma cor para identificação. <br>
Linha 464:
Linha 340:
==Diagrama de Sequência==
==Diagrama de Sequência==
[[Arquivo:ModoManualDiaSeq.jpg|850px]]
==Códigos==
==Códigos==
Linha 621:
Linha 496:
==Diagramas de Sequência==
==Diagramas de Sequência==
[[Arquivo:Configurar Partida (CSU-SA01).png|850px]]
Inicialmente, na primeira versão do robô, utilizamos um modelo adaptado do Gyro Boy LEGO® MINDSTORMS® Education EV3. Porém por questões de desempenho optamos por montar de uma forma diferente, este novo formato foi criado pela equipe.
As interfaces de entrada e saída utilizadas no controle do robô seguem a nomenclatura tabela:
Interfaces
Input
Output
1
Sensor de Toque
A
Motor Direita
2
Sensor Ultrassônico
B
3
Sensor de Giro
C
4
Sensor de Cor
D
Motor Esquerda
EV3 criado e montado pela Equipe
3 Acesso via WiFI
Para acessar o robô via rede Wi-Fi utilizamos um dispositivo Wi-Fi (TP-Link N500) conectado à porta USB do EV3 e acessamos as configurações de rede na tela do EV3 para obter o endereço IP. A partir de um computador conectado na mesma rede local que o robô, configuramos o software Moba para gerar uma interface gráfica de programação e permitir o envio de arquivos via SSH ao software do EV3.
O tutorial completo pode acessado neste link.
4 Execução de programas na linguagem Python
O primeiro código em Python enviado ao EV3 foi um teste no sensor de toque. O objetivo do programa é acionar o led verde do EV3 quando o sensor de toque for pressionado.
Teste do Sensor de Toque
5 Teste de sensores e motor
Teste dos Motores
Teste do Sensor de Cor
Teste do Sensor de Giro
Teste do Sensor de Ultrassônico
6 Estudo do artigo do Borenstein e pesquisas sobre métodos de localização
RF01 O robô entra em funcionamento a partir de instruções originadas no sistema de auditoria. RF02 O robô inicia em uma posição aleatória. RF03 O robô deve descobrir sua localização no tabuleiro. RF04 O robô deve encontrar alvos aleatoriamente escolhidos pelo sistema. RF05 O robô deve informar ao sistema supervisor quando um alvo for encontrado. RF06 O robô deve funcionar de modo autônomo ou manual. RF07 O robô em modo autônomo deve ser capaz de tomar decisões quanto ao seu deslocamento evitando chocar-se com outro robô. RF08 O sistema de auditoria notifica o sistema supervisor sobre o início e o término de uma partida e quando um alvo for alcançado por um adversário. RF09 O sistema de auditoria deve gerenciar os dados da partida e ser capaz de apresentar esses dados ao público em tempo real. RF10 O sistema de auditoria deve gerar randomicamente a quantidade de alvos escolhido pelo juiz. RF11 O sistema de auditoria deve permitir a pausa, reinício ou término de uma partida. RF12 O sistema de auditoria deve permitir que se escolha o modo de funcionamento manual ou autônomo para o robô. RF13 O sistema supervisor deve repassar ao robô as informações sobre a partida recebidas do sistema de auditoria.
Requisitos Não Funcionais
RNF01 O sistema de auditoria deve ser compartilhado entre os robôs. RNF02 O sistema de auditoria deve conter um banco de dados com as informações sobre os alvos e um placar para consulta dos robôs. RNF03 O tabuleiro deve ter dimensões de 2 metros por 2 metros. RNF04 O tabuleiro deve ser formado por 100 blocos com dimensões de 0,2 metros por 0,2 metros. RNF05 O tabuleiro deve ter 6 cores (vermelho, azul, amarelo, verde, branco e marrom). RNF06 Ao redor do tabuleiro deve ter um contorno preto de 0,05 metros. RNF07 Cada robô deve ter uma cor para identificação.
Restrições
As limitações encontradas pela equipe para o desenvolvimento do projeto envolvem:
A quantidade de sensores disponíveis para integrar ao robô.
Atraso no processamento de programas grandes ou travamento da plataforma do EV3.
Limitação de horas livres semanalmente que a equipe pode se dedicar ao desenvolvimento do projeto.
9 Casos de uso
Atores
9.1 Casos de Uso do Sistema de Auditoria:
Juiz
Sistema Supervisor
Câmera
9.2 Casos de Uso do Sistema Supervisor:
Jogador (modo manual)
Sistema do Robô
Sistema de Auditoria
9.3 Casos de Uso do Sistema do Robô:
Sistema Supervisor
Sensor Ultrassônico
Diagramas de Casos de Uso
Casos de Uso do Sistema do Robô
9.3.1 Receber Modo de Operação (CSU-SR01)
Sumário: O Sistema Supervisor informa modo de operação. Ator Primário: Sistema Supervisor. Fluxo Principal:
O Sistema Supervisor informa ao sistema qual modo de operação.
O sistema habilita o modo de operação selecionado, modo autônomo ou modo manual.
Regras de Negócio: RN08.
9.3.2 Jogar Manual (CSU-SR02)
Sumário: O Sistema do Robô joga em modo manual. Ator Primário: Sistema Supervisor. Ator Secundário: Sensor Ultrassônico. Precondições: Receber a operação modo manual do Sistema Supervisor. Fluxo Principal:
O Sistema Supervisor habilita o Sistema do Robô para jogar em modo manual.
Ao detectar algum obstáculo o Sensor Ultrassônico dispara uma exceção no Sistema do Robô executando uma função de desvio de rota.
9.3.3 Jogar Automático (CSU-SR03)
Sumário: O Sistema do Robô joga em modo automático. Ator Primário: Sistema Supervisor. Precondições: Receber a operação modo automático do Sistema Supervisor. Fluxo Principal:
O Sistema Supervisor informa ao Sistema do Robô o modo de operação automático;
O Sistema do Robô joga em modo automático.
9.3.4 Detectar Robô (CSU-SR04)
Sumário: O Sensor Ultrassônico detecta a presença de outro robô. Ator Primário: Sensor Ultrassônico. Fluxo Principal:
O Sensor Ultrassônico verifica com frequência a presença de outro robô ao redor do perímetro;
O sensor pode ser utilizado pelo modo automático ou pelo modo manual;
9.3.5 Relatar Alvo Encontrado (CSU-SR05)
Sumário: O sistema informa o Sistema Supervisor o encontro de alvos. Ator Primário: Sistema Supervisor. Precondições: O Sistema Supervisor está identificado pelo sistema, o sistema deve estar em modo automático. Fluxo Principal:
O Sistema do Robô localiza um alvo no tabuleiro.
O sistema informa o Sistema Supervisor sobre os alvos localizados.
Regras de Negócio: RN03.
9.3.6 Receber Localização dos Alvos (CSU-SR06)
Sumário: O Sistema Supervisor informa a localização dos alvos. Ator Primário: Sistema Supervisor. Precondições: O Sistema Supervisor está identificado pelo sistema. Fluxo Principal:
O Sistema Supervisor informa ao sistema a localização dos alvos.
O Sistema do Robô usa a informação sobre a localização dos alvos para decidir sobre qual o próximo movimento a ser feito.
Casos de Uso do Sistema Supervisor
9.3.7 Jogar Manual (CSU-SS01)
Sumário: O Sistema Supervisor foi habilitado para operar manualmente. Ator Primário: Sistema do Robô. Atores Secundários: Sistema de Auditoria e Jogador Fluxo Principal:
O Sistema Supervisor habilita o Sistema do Robô para jogar em modo manual.
O Sistema Supervisor disponibilizada ao jogador o acesso a interface de comandos do robô.
O jogador opera em modo manual, determinando a direção de locomoção do robô.
9.3.8 Gerenciar Jogo Automático (CSU-SS02)
Sumário: O Sistema Supervisor foi habilitado para operar de forma autônoma. Ator Primário: Sistema de Auditoria. Ator Secundário: Sistema do Robô. Precondições: O jogador deve optar pela opção autônoma. Fluxo Principal:
O Sistema de Auditoria define o modo autônomo no Sistema Supervisor.
O modo de operação será autônomo.
9.3.9 Relatar Alvo Encontrado (CSU-SS03)
Sumário: O Sistema Supervisor informa ao Sistema de Auditoria que um alvo foi encontrado. Ator Primário: Sistema do Robô. Ator Secundário: Sistema de Auditoria. Precondições: O Sistema do Robô encontrou um alvo. Fluxo Principal:
O Sistema do Robô informa ao Sistema Supervisor que encontrou um alvo.
O Sistema de Supervisor relata ao Sistema de Auditoria para conferência.
Regras de Negócio: RN03.
9.3.10 Validar Robô (CSU-SS04)
Sumário: Verificar se o Robô está cadastrado no Sistema de Auditoria. Ator Primário: Robô. Ator Secundário: Sistema de Auditoria. Fluxo Principal:
O Sistema Supervisor consulta o Sistema de Auditoria para verificar se o robô está ou não está cadastrado.
Regras de Negócio: RN07.
Casos de Uso do Sistema de Auditoria
9.3.11 Configurar Partida (CSU-SA01)
Sumário: Juiz utiliza o Sistema de Auditoria para configurar os dados para a partida. Ator Primário: Juiz. Ator Secundário: Sistema Supervisor. Fluxo Principal:
O Juiz seleciona o modo de operação, manual ou autônomo, e os robôs que participaram da partida;
O Juiz inicia a partida;
Dados são mandados para o Sistema Supervisor.
O Juiz dá inicio a partida.
9.3.12 Verificar Histórico (CSU-SA02)
Sumário: O Juiz verifica o histórico das partidas. Ator Primário: Juiz. Ator Secundário: Sistema Supervisor. Fluxo Principal:
O Juiz solicita ao Sistema de Auditoria consulta ao histórico das partidas.
O Juiz visualiza a tabela de partidas jogadas com seus respectivos resultados.
Fluxo Alternativo:
Se o sistema não possuir o registro de partidas anteriores, ou seja, se não tiver ocorrido partidas anteriormente, o mesmo informa ao Juiz a não ocorrência de partidas.
Regras de Negócio: RN01.
9.3.13 Cadastrar Robôs (CSU-SA03)
Sumário: O Juiz realiza o cadastro dos robôs para a partida. Ator Primário: Juiz. Ator Secundário: Sistema Supervisor. Fluxo Principal:
Os robôs que participaram da partida, são cadastrados pelo Juiz através do Sistema de Auditoria.
O cadastro consiste no nome do robô e seu IP.
Os cadastros são enviados para os Sistemas Supervisor.
Fluxo Alternativo:
Caso o robô já esteja cadastrado, o sistema informará ao Juiz.
Fluxo de Exceção:
Se o nome do robô já estiver cadastrado na partida, o sistema informará ao Juiz. Este deve escolher outro nome.
Regras de Negócio: RN01, RN07.
9.3.14 Iniciar Partida (CSU-SA04)
Sumário: O Juiz inicia a partida através do Sistema de Auditoria. Ator Primário: Juiz. Ator Secundário: Sistema Supervisor. Fluxo Principal:
Ao iniciar a partida o Sistema gera randomicamente as posições dos alvos.
As posições dos alvos são enviadas para o Sistema Supervisor de cada jogador.
O Sistema de Auditoria apresenta ao Juiz o tabuleiro com os alvos posicionados e a contagem do tempo de início da partida.
Regras de Negócio: RN01, RN05.
9.3.15 Pausar Partida (CSU-SA05)
Sumário: O Juiz usa o Sistema de Auditoria para pausar a partida. Ator Primário: Juiz. Ator Secundário: Sistema Supervisor. Fluxo Principal:
O Sistema de Auditoria apresenta o encontro de todos os alvos para o Juiz, este envia ao Sistema de Auditoria a requisição de término da partida.
O Juiz, quando necessário, requisita uma pausa na partida ao Sistema de Auditoria.
Regras de Negócio: RN01.
9.3.16 Validar Alvo Modo Autônomo (CSU-SA06)
Sumário: A Câmera valida o encontro do alvo usando o Sistema de Auditoria. Ator Primário: Câmera. Fluxo Principal:
A Câmera visualiza o tabuleiro e os jogadores.
Ao ocorrer o encontro do jogador com o alvo a Câmera envia uma mensagem ao Sistema de Auditoria validando o encontro do alvo.
9.3.17 Validar Alvo Modo Manual (CSU-SA07)
Sumário: A Câmera valida o encontro do alvo usando o Sistema de Auditoria. Ator Primário: Juiz. Fluxo Principal:
O Juiz visualiza o tabuleiro e os jogadores.
Ao ocorrer o encontro do jogador com o alvo o Juiz envia uma mensagem ao Sistema de Auditoria validando o encontro do alvo.
Regras de Negócio
Nome
Descrição
Acesso ao Sistema (RN01)
O Sistema Supervisor terá acesso constantemente ao Sistema de auditoria para verificar o mapeamento e as posições dos alvos no tabuleiro.
Tomada de Decisão (RN02)
Ao realizar a leitura da cor através do sensor de cor, o robô saberá seu posicionamento atual e por consequência tomará a decisão referente ao posicionamento seguinte.
Atualização do Placar (RN03)
Ao encontrar um alvo o Sistema do Robô enviará uma mensagem ao sistema, para atualização do placar.
Delimitação do Tabuleiro (RN04)
A faixa preta ao redor do tabuleiro indicará as limitações do mesmo.
Sorteio de Posições (RN05)
O Sistema de Auditoria gerará randomicamente as posições dos alvos.
Detecta Adversário (RN06)
Através do sensor ultrassônico o robô detecta outro robô e altera seu caminho.
Quantidade de Jogadores (RN07)
São cadastrados dois jogadores por partida.
Modo de Operação (RN08)
O Sistema Supervisor habilita o modo de operação selecionado, modo autônomo ou modo manual.
10 Etapa 1
Nesta etapa foram feitos os diagramas e implementações do modo manual sem o Sistema de Auditoria.
10.1 Diagrama de Classe
10.2 Diagrama de Sequência
10.3 Códigos
Nesta seção apresentamos os códigos implementados na Etapa 1 do projeto. O primeiro código é o encapsulamento dos códigos dos motores para os movimentos do robô. O segundo código é a Web Service do robô que recebe da página Web os comandos para movimentar o robô. Os códigos da página Web estão no arquivo comprimido no final desta seção.
Código manual.py:
from ev3dev.ev3 import *
from time import sleep
def oeste(self):
while not self.ts.value():
angle = self.gy.value()
print(str(angle) + " " + self.units)
self.mA.run_timed(time_sp = 300, speed_sp = 100)
if angle >= 90:
self.mA.stop(stop_action = "brake")
break
def leste(self):
while not self.ts.value():
angle = self.gy.value()
print(str(angle) + " " + self.units)
self.mA.run_timed(time_sp = 300, speed_sp = -120)
if angle <= -90:
self.mA.stop(stop_action = "brake")
break
def sul(self):
for x in range(0, self.steps):
print ("1 passo")
self.mA.run_timed(time_sp = 1000, speed_sp = -400)
self.mD.run_timed(time_sp = 1000, speed_sp = -400)
sleep(1)
def andar(self):
for x in range(0, self.steps):
print ("1 passo")
self.mA.run_timed(time_sp = 1000, speed_sp = 400)
self.mD.run_timed(time_sp = 1000, speed_sp = 400)
sleep(1)
def alinhar(self):
print("alinhando")
if self.dire == 2:
while not self.ts.value():
angle = self.gy.value()
print(str(angle) + " " + self.units)
self.mD.run_timed(time_sp = 500, speed_sp = 120)
if angle <= 1:
self.mD.stop(stop_action = "brake")
break
elif self.dire == 3:
while not self.ts.value():
angle = self.gy.value()
print(str(angle) + " " + self.units)
self.mA.run_timed(time_sp = 500, speed_sp = 120)
if angle >= -1:
self.mA.stop(stop_action = "brake")
break
else:
pass
</syntaxhighlight>
Código webservice.py:
!/usr/bin/pythonfrom
from flask import Flask, jsonify
from flask import abort
from flask import make_response
from flask_cors import CORS, cross_origin
from flask import request
from flask import url_for
from flask.ext.httpauth import HTTPBasicAuth
from manual import *