Grupo 4 - MoU - Masters of Universe! Campeão!!!

Prévia da Competição

Introdução

A descrição do ambiente e o regulamento da competição atual, “Robôs de Elite”, pode ser encontado na página da mesma.

Desenvolvimento

Após divulgado o regulamento da competição, discutimos algumas estratégias e optamos por construir um robô “varredor” cuja estratégia básica, a princípio, seria percorrer a lateral da mesa da competição, coletando os blocos sobre a linha preta e trazendo-os novamente para a base. A figura abaixo descreve esta estratégia.

:cursos:introrobotica:2007-2:grupo4:estrategia1.jpg

Além disso, procuramos aproveitar a estrutura do robô do trabalho anterior para a competição.

Preparativos para a prévia

Para o dia da prévia deveríamos mostrar a capacidade do nosso robõ de poder ser calibrado em 1 minuto, responder à partida (dada pela luz no chão da mesa) e de pontuar, isto é, coletar blocos criminosos.

Para aimplementar o robõ varredor, acoplamos braços à parte da frente, para que os blocos coletados fiquem armazenados entre eles. A foto abaixo mostra uma versão 0.1 do nosso “aspira”:

:cursos:introrobotica:2007-2:grupo4:previa_1.jpg

Para a prévia, nosso robô utiliza 2 shaft encoders (um para cada roda), dois sensores óticos infra-vermelhos, dois sensores LDR com polaróide (para formar um arranjo diferencial e fazer com que o robô se oriente) e dois sensores de toque localizados nas pontas dos braços.

O robô percorre a lateral da mesa utilizando algoritmos de seguir parede, de forma similar ao que foi feito no trabalho anterior. Quando os dois sensores de toque a frente do mesmo são acionados ao mesmo tempo, o robô supõe que bateu em uma parede e faz uma manobra para virar para a esquerda.

Complementos para a competição

Para a competição, as principais modificações implementadas foram:

  • Diminuir a redução do robô, para que ele ficasse mais rápido.
  • Implementação de uma segunda estratégia.
  • Monitoramento e tratamento de situações de falhas.

A primeira das tarefas mostrou-se necessária porque o tempo de 1 minuto era suficiente apenas para que o robô percorresse a lateral da mesa uma única vez. Diminuimos a redução reduzindo o tamanho da primeira engrenagem que gira com a mesma velocidade linear que o eixo do motor.

A segunda estratégia que desenvolvemos foi a seguinte: o robô vai até o meio da mesa, somente, (ele detecta que passou do meio da mesa através de um sensor ótico, que detecta a linha preta), percorre o meio da mesa na direção da linha preta presente no meio e depois volta. Quando ele volta ele passa a executar a estratégia padrão novamente. Para implementar esta estratégia retiramos um sensor ótico do lado esquerdo do robô, que não estava sendo usado, e o colocamos apontado para o chão.

Como diminuimos a redução do robô, tornou-se necessário o robô detectar que voltou à base e descarregar os blocos coletados. Isso foi feito guardando o lado da base na hora da partida - guardamos o índice do sensor que acusa alta lumnosidade quando detectamos é iniciada a partida. Quando o robô descobre que voltou à base, ele faz uma manobra para descarregar os blocos na mesma. após feito isso, como supomos que falta pouco tempo para acabar a partida, fazemos o robô andar reto até o meio da mesa e voltar, na esperança de coletar mais algum bloco.

O tratamento de situações de falha foi outra modificação importante que incorporamos ao nosso robô.Isto foi feito através de um processo separado em nosso software. Esta thread separada faz as seguintes verifiçãoes, continuamente: caso o valor do número de pulsos de qualquer um dos encoders não varie por mais de 2 segundos, ou caso qualquer um dos sensores de toque permaneça acionado por mais de 2 segundos, então este processo notifica ao processo mestre que ocorreu uma falha. A thread mestre interrompe, então , o processo que executava a estratégia do robô, sem se procupar com as falhas, e faz com que o robô efetue uma ré. Após isso, tentamos proseguir com a execução da estratégia, assim como voltamos a monitorar se ocorrem imprevistos.

No nosso software nós temos, então, 5 threads executando concorrentemente:

  • Uma thread mestre ou principal que inicia todas as outras. Responsável também por tratar situações de falha e por encerrar todas as tarefas de desligar os motores, ao fim de 60 segundos.
  • Duas threads para acumular o total de pulsos dos encoders de cada uma das rodas do robô.
  • Um processo para executar uma das duas estratégias.
  • Um processo para monitorar contiinuamente situações de falha, através do monitoramento dos sensores e encoders.

Abaixo temos uma foto da versão final do nosso robô, Pacato, que no dia 6 de Dezembro transformou-se em Gato Geurreiro e sagrou-se campeão da competição de robótica!

:cursos:introrobotica:2007-2:grupo4:IMG_6071-2.JPG

Código

Apresentação mostrada antes da competição

Conclusão

Com estes preparativos, conseguimos construir um robô para atender aos requisitos da competição, e assim ele está pronto para participar ativamente da mesma.

cursos/introrobotica/2007-2/grupo4/previa.txt · Última modificação: 2007/12/10 12:02 (edição externa)