Trabalho Computacional
PD1
Resgate de pessoas por robôs
em terrenos acidentados
Romário Espíndula
Camilo Avancini
Porquê robôs?
Prós:
• Não se machucam
• Podem fazer coisas que humanos não fazem
• Não colocam mais pessoas em risco
Contras:
• Não tomam decisões sozinhos, a não ser que a
decisão esteja expressada no código.
• As decisões tem que ser expressadas através de
cálculos matemáticos, muitas vezes complexas.
Primeira etapa – Definição do Plano
Para que o robô possa andar, primeiro devemos
descrever como ele se movimentará no plano
onde se encontra.
Os robôs podem utilizar câmeras, sensores (
sonoros, infra-vermelho,etc... ), entre outros
dispositivos que lhe forneçam um “overview” do
plano onde se encontra.
No nosso caso limitamos o plano à formas
geométricas em 2D.
Primeira etapa – Definição do Plano
Nosso maior problema em relação ao plano era
como verificar se um ponto poderia ser
utilizado pelo robô em seu movimento, ou se
ele estava ocupado por algum polígono.
Para definirmos o plano de forma facilitada,
decidimos utilizar polígonos regulares
(
triangulo, circulo e quadrado ) , e estipulamos
um tipo de dado de entrada padrão a todos a
ser dado, como mostrado no próximo slide.
Primeira etapa – Definição do Plano
Os polígonos são definidos de acordo com os
desenhos acima.
O plano é definido por uma lista de tuplas do tipo:
(nomedopoligono,(Xi,Yi),lado)
Exemplo: [(“circ”,(3,3),2)]
Isso gerará um circulo de centro em x=3 e y=3,
com raio=2
Primeira etapa – Verificação no plano
Como fizemos a entrada de forma generalizada,
possibilitou criar uma função que dado um
ponto (X,Y) faz um “scan” em todo o plano e
verifica se aquele ponto pertence à algum
polígono, retornando um valor booleano
(False) caso isso ocorra.
Permitindo que pudéssemos analisar os passos
do robô para que ele não executasse nenhum
movimento que não era possível.
Segunda etapa – Movimento do robô
Como expressar através de uma lógica
matemática um movimento que deve
demonstrar um certo grau de inteligência?
Idéias básicas:
• Deve perseguir o local onde deseja estar
• Deve desviar dos obstáculos no caminho
• Deve buscar o melhor caminho, ou mais
próximo que puder disso.
Segunda etapa – Movimento do robô
Após várias tentativas e lógicas diferentes,
construímos um conceito de movimento que
segue algumas etapas.
Segunda etapa – Movimento do robô
O primeiro passo da lógica é sempre tentar se
aproximar o máximo que puder do ponto a ser
perseguido. Neste caso são as setas que NÃO
estão circuladas de vermelho.
Segunda etapa – Movimento do robô
O segundo é que caso esses movimentos não
sejam possíveis, retornar a um ponto anterior
( movimentos circulados de vermelho ) e
tentar seguir por outro ponto.
Segunda etapa – Movimento do robô
O problema é que como a primeira lógica manda
ele se aproximar o máximo possível do ponto
desejado, logo o robô executará o passo
novamente para o ponto, finalizando o
movimento do robô em um loop “infinito” de ida
e volta para aquele mesmo ponto.
Para evitar problemas desse tipo utilizamos várias
funções para evitar redundâncias nos
movimentos. Tornando-o de certa forma
“inteligente”.
Exemplos do programa – Sem OpenGL
[("Resgate 1","45 metros percorridos aproximadamente","33s a uma velocidade de 2m/s,
adicionado de 10s (tempo de captura)","Pontos por onde o robo passou para executar o
resgate da vitima: [(12.0,-12.0),(11.0,-11.0),(10.0,-10.0),(10.0,-9.0),(9.0,-8.0),(8.0,-7.0),(7.0,6.0),(6.0,-7.0),(5.0,-8.0),(4.0,-9.0),(3.0,-9.0),(2.0,-9.0),(1.0,-9.0),(0.0,-9.0),(-1.0,-9.0),(-2.0,8.0),(-3.0,-7.0),(-4.0,-8.0),(-4.0,-9.0),(-4.0,-8.0),(-3.0,-7.0),(-2.0,-8.0),(-1.0,-9.0),(0.0,-9.0),(1.0,9.0),(2.0,-9.0),(3.0,-9.0),(4.0,-9.0),(5.0,-8.0),(6.0,-7.0),(7.0,-6.0),(8.0,-7.0),(9.0,-8.0),(10.0,9.0),(10.0,-10.0),(11.0,-11.0),(12.0,-12.0)]"),("Resgate 2","35 metros percorridos
aproximadamente","28s a uma velocidade de 2m/s, adicionado de 10s (tempo de
captura)","Pontos por onde o robo passou para executar o resgate da vitima: [(12.0,12.0),(11.0,-11.0),(10.0,-10.0),(10.0,-9.0),(9.0,-8.0),(8.0,-7.0),(7.0,-6.0),(6.0,-5.0),(5.0,4.0),(4.0,-3.0),(3.0,-2.0),(2.0,-1.0),(1.0,0.0),(1.0,1.0),(1.0,0.0),(2.0,-1.0),(3.0,-2.0),(4.0,3.0),(5.0,-4.0),(6.0,-5.0),(7.0,-6.0),(8.0,-7.0),(9.0,-8.0),(10.0,-9.0),(10.0,-10.0),(11.0,11.0),(12.0,-12.0)]"),("Resgate 3","67 metros percorridos aproximadamente","44s a uma
velocidade de 2m/s, adicionado de 10s (tempo de captura)","Pontos por onde o robo passou
para executar o resgate da vitima: [(12.0,-12.0),(11.0,-11.0),(10.0,-10.0),(10.0,-9.0),(9.0,8.0),(8.0,-7.0),(7.0,-6.0),(6.0,-5.0),(5.0,-4.0),(4.0,-3.0),(3.0,-2.0),(2.0,-1.0),(1.0,0.0),(0.0,1.0),(1.0,2.0),(-2.0,2.0),(-3.0,3.0),(-4.0,4.0),(-5.0,5.0),(-6.0,6.0),(-7.0,7.0),(-8.0,8.0),(-9.0,8.0),(10.0,9.0),(-11.0,10.0),(-11.0,11.0),(-11.0,10.0),(-10.0,9.0),(-9.0,8.0),(-8.0,8.0),(-7.0,7.0),(6.0,6.0),(-5.0,5.0),(-4.0,4.0),(-3.0,3.0),(-2.0,2.0),(-1.0,2.0),(0.0,1.0),(1.0,0.0),(2.0,-1.0),(3.0,2.0),(4.0,-3.0),(5.0,-4.0),(6.0,-5.0),(7.0,-6.0),(8.0,-7.0),(9.0,-8.0),(10.0,-9.0),(10.0,-10.0),(11.0,11.0),(12.0,-12.0)]")....
Exemplos do programa – Com
OpenGL
Exemplos do programa – Plano
esperado
Outros exemplos
Outros exemplos
Outros exemplos
Download

Trabalho Computacional