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:
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
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.
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 |
- Video: Link para YouTube
- Video Pulga: Link para download
- Apresentação: Link para download
- Código Fonte: Link para o código
- Outros: Link para diretório no Google
