O Robô

Hardware

O Pulga possui dois sensores LDR com filtro para detectar as bases, um sensor LDR para detectar a presença ou não de blocos, um sensor infravermelho para detectar a partida e diferenciar blocos inocentes de blocos bandidos, um encoder em cada roda, além de dois sensores de toque na frente esquerda e direita. É um robô diferencial, simplificando o controle.

Software

O Pulga foi programado segundo o paradigma comportamental. Funciona de forma reativa, sem depender de uma localização precisa para capturar os blocos e levá-los até a base. Sua única dependência para funcionar adequadamente são as luzes polarizadas que iluminam ambas as bases.

O robô utiliza as luzes polarizadas para caminhar em direção à base adversária. Ele utiliza as paredes para caminhar em diagonal, de forma a explorar o ambiente. Caso encontre um bloco durante o percurso, o Pulga verifica se é um inocente ou um bandido. Se for um inocente, o Pulga recua, liberando-o. Se for um bandido, ele é levado até a base. Para ir até a sua própria base, o robô segue a luz polarizada. Porém, dessa vez ele procura fazer um caminho reto em direção à luz, ao invés de andar em diagonal, de forma a chegar na base o mais rápido possível. Caso o robô chegue no final da base adversária sem pegar nenhum bloco, ele passa a explorar o ambiente em direção à sua própria base.

O Pulga verifica se chegou no final da base adversária ou no final da sua base pelo valor dos sensores LDR. O tanto que ele irá se aproximar do final de uma base até retornar pode ser calibrado. Quando o robô possui um bloco, a forma de detectar se ele chegou no final da base é diferente. Caso um dos sensores de toque se ative e o robô esteja virado em direção à sua base, ele considera que chegou no final da base, e pode liberar o bloco. Como ele está seguindo a luz, ele consegue deixar o bloco no local correto.

A programação foi realizada utilizando três camadas, como pode ser visto abaixo:

:cursos:introrobotica:2007-2:grupo10:tp0:diagrama.png

A camada Toque é responsável por fazer o robô girar quando os sensores de toque se ativam, permitindo que ele explore o ambiente quicando nas paredes. Além disso, essa camada também é responsável por verificar se o robô chegou no final de sua base.

A camada Retornar é responsável por fazer o robô andar em direção à luz de sua base, permitindo que ele deixe um bloco capturado no local apropriado. Essa camada só é ativada quando o robô percebe que capturou um bloco.

A camada Explorar é responsável por fazer o robô explorar o ambiente. Ele utiliza as luzes para se orientar, mas nessa camada ele não busca andar reto em direção à luz, como na camada Retornar. Devido ao efeito da camada Toque, o robô anda em diagonal, quicando nas paredes, maximizando a exploração do ambiente.

Dificuldades e Decisões de Implementação

Tivemos várias dificuldades durante a implementação:

  • Entender e implementar adequadamente um algoritmo no paradigma comportamental.
  • Saber a orientação do robô no cenário. Dependemos muito das lâmpadas para identificar a orientação.
  • Controlar o robô de forma precisa dentro do paradigma comportamental. Para evitar conflitos entre as threads, acabamos tendo que implementar a maior parte do controle baseado em tempo.

Prévia

Dia 04/12/2007 às 00:50 é terminado o Pulga. Todos os testes foram feitos, e o bugs encontrados, corrigidos. Iniciamos a etapa de aguardar ansiosamente pela prévia, afinal, todo o destino do grupo dependia de uma boa apresentação do Pulga.

Após apresentação de alguns grupos sentimos um certo alívio, mas Murph existe, e apesar de testes exaustivos, algo poderia dar errado. Quando chegou nossa vez de apresentar, o Pulga demonstrou-se melhor do que esperávamos e pegou 5 (CINCO) bloquinhos… Alegria total.

Até tal ponto não acreditávamos ter um robô capaz de ganhar, afinal, robôs com grandes braços e comedores estavam no campo, mas vimos que o Pulga era bastante eficiente.

PS.: Pegamos o maior número de blocos na prévia :-D

Competição

É começada a competição. Mario apresenta o objetivo do evento. Todos os grupos se apresentam, nós, os últimos, não aguentávamos de ansiedade. Primeira batalha, adivinha… Pulga x Chuck Norris.

O Pulga conseguiu pegar 4 bloquinhos e nós não aguentávamos mais de tanta alegria. Mas as batalhas foram passando, e o Pulga… Arrebentando.

Fim da 3a rodada: Pulga com 31 pontos, 2o colocado com 24 pontos. Mas a soberba precede a queda… brincadeira, mas estávamos quase certos da vitória.

4a rodada… Pulga x Gato Guerreiro. Tudo corria bem, o Pulga pegando os bloquinhos e pontuando, até que o Gato Guerreiro pegou todos nosso blocos. Até ai tudo bem, poderiámos ganhar ainda, a diferença de pontos era grande e ainda tinhamos +/- 30 segundos. De repente uma colisão, o Gato Guerreiro empurrou o Pulga, e devido a um bloco atrás do Pulga, servindo de encalsse, fez com que o Pulga tombasse, e devido a força do Gato Guerreiro, foi arrastado até a base inimiga.

Resultado… Pulga perde de 45 a 32. 8-O

Conclusão

Primeira conclusão: Nem sempre o melhor vence. O Pulga era o único que varria todo o campo através do algoritmo Wander, utilizando as paredes para virar. O Pulga era o único que via a luz de qualquer lugar do campo (horas e mais horas de montagem e calibragem para tal feito). O Pulga era o único que reconhecia a cor do bloco. Mas o que o Pulga não tinha ? A melhor estratégia ? Mais força ? Vai saber …

Segunda conclusão: O trabalho árduo foi recompensado. Mesmo não tendo ganhado, recebemos vários elogios a respeito do robô. Até mesmo durante o discurso de vitória do MoU fomos citados.

Terceira conclusão: Perder não é bom :-( Até a prévia nem acreditávamos ter um robô competitivo. Depois e durante a competição fomos ficando cada vez mais certos da vitória, e ela não veio.

O resumão de tudo é que o trabalho foi extremamente gratificante, principalmente porque o Pulga fez exatamente o que pensamos, e lutou bravamente até o final. Não foi fácil chegar onde chegamos, mas estamos contentes com o resultado.

Mídia

Fotos
Visão Frontal Sensor de Base
Sensor de Bloco Visão Lateral
Roteamento dos Fios Sensor de Toque
cursos/introrobotica/2007-2/grupo10/final.txt · Última modificação: 2007/12/10 20:19 (edição externa)