Tabela de conteúdos

SAS - Seek and Shoot

INTRODUÇÃO

O terceiro trabalho prático requeria a construção de um robô móvel com o algoritmo de controle deliberativo Wavefront implementado, um sensor de partida sensível a luz e a montagem de uma catapulta capaz de arremessar pequenas bolinhas de um lado do campo ao outro.

MONTAGEM

A fim de manter todas as funcionalidades dos trabalhos anteriores adicionadas as funcionalidades deste trabalho algumas modificações estruturais ocorreram. A mudança estrutural mais importante realizada foi na parte de tração do robô. A quantidade de redução entre o motor e a roda foi aumentada e criou-se mais rotações nos eixos onde o shaft-encoder está instalado. Desta forma solucionou-se o principal problema do trabalho anterior relacionado à odometria, pois nesta nova montagem o shaft-encoder conseguiu gerar pulsos suficientes para realizarmos um controle eficiente (aproximadamente 18 pulsos/cm, contra 3,42 da versão anterior).

Comparação dos eixos entre as versões.

Visão geral do robô.

Sensor de partida

Para a construção do sensor de partida foi utilizado um LDR (CdS), pois o sinal de partida nada mais é que o acender de uma lâmpada e o LDR tem por característica variar o valor resultante de acordo com a luminosidade ambiente. Este sensor foi ligado a uma porta digital, dessa forma quando o valor lido fosse o valor digital 1 o algoritmo começava a ser executado, uma thread era criada para contar 60s e então paralizar toda a execução do robô.

A montagem do sensor foi feita em uma peça lego e instalada na parte inferior do robô como mostrado na figura abaixo.

Imagem do sensor de partida.

Catapulta

A implementação da catapulta foi realizada em etapas: prototipação, construção da versão final e acoplamento da catapulta no robô. O fato do grupo não ter um projeto de catapulta muito bem estruturada levou-nos a dividir esta etapa em três “sub etapas”.

O primeira passo foi elaborar protótipos de catapultas capazes de arremessar objetos de um lado do campo ao outro. Felizmente nosso primeiro protótipo funcionou bem e a ideia foi levada em frente. No protótipo, com a catapulta armada manualmente, estimamos a carga a qual o motor conseguiria suportar, e com isso foi implementada uma redução de 200/1.

Entre a versão experimental e a versão final ocorreram duas mudanças importantes: a estrutura foi construída de maneira mais compacta e resistente ao impacto gerado pelo arremesso; e a haste que arma a catapulta foi trocada por uma maior com o objetivo de gerar uma força maior no arremesso. Ao finalizar a estrutura foi criado um suporte para o motor com o objetivo de testar se as reduções seriam suficientes. A execução bem sucedida do mesmo possibilitou com que o motor conseguisse girar a haste que arma a catapulta com muita facilidade. Entretanto a distância na qual a bolinha foi arremessada foi insatisfatória e resolvemos aumentar a quantidade de elásticos que geram a força para catapulta arremessar. Mesmo dobrando a quantidade de elásticos o motor continuou armando a catapulta com facilidade e a distância que o objeto percorrida foi aumentada significativamente.

O acoplamento da catapulta com a estrutura do robô continha alguns riscos: manter o robô dentro do limite de tamanho estipulado, a reação ao tiro da catapulta poderia desmontar a estrutura do robô e/ou atrapalhar o seu direcionamento. Além destes riscos havia a dificuldade natural de criar um acoplamento resitente ao impacto do tiro. Para juntar as partes utilizou-se de placas de lego, como mostra a figura a seguir, tentando maximizar a área de contato entre elas com o objetivo de mantê-las mais presas uma a outra.

Devido a forma a qual foi realizado a montagem da catapulta no robô a reação na estrutura do mesmo não foi um problema. Foram realizados testes os quais a catapulta ficou disparando por minutos e a estrutura do robô se manteve firme. Talvez a maior dificuldade tenha sido manter o robô dentro do limite de comprimento, 30cm, e seu tamanho final ficou 33cm.

Abaixo o vídeo do funcionamento da catapulta.

Wavefront

O algoritmo de controle deliberativo implementado foi o WaveFront e seu código está disponibilizado neste link. As células do mapa utilizado pelo algoritmo possuem dimensões de 30cm x 30cm. O algoritmo basicamente monta um mapa do seu ambiente, especificando a pose inicial do robô, a posição final desejada e também os obstáculos do ambiente. O mapa é iniciado com suas bordas e obstáculos com valores máximos, para impedir que esses sejam transpostos. Então, partindo da posição final desejada, as posições do mapa vão sendo visitadas, aumentando o seu valor de uma unidade do valor da posição vizinha anterior. A vizinhança considerada é aumentada gradualmente através de um caminhamento em largura, considerando uma vizinhança de von Neumann, indicada na figura abaixo, que assinala a cada célula o número mínimo de passos necessários para se chegar no objetivo. Após preenchida a matriz, o caminho ótimo pode ser encontrado partindo-se do início seguindo-se a direção contrária ao gradiente.

Vizinhança de Von Neumann

Não tivemos muita dificuldade para implementar o algoritmo, já que todas as funções já estavam prontas. As únicas alterações que foram necessárias fazer é referente às dimensões do ambiente utilizado e quanto as funções de controle cinemático. Era preciso mapear o campo de competição e ainda corrigir o código para considerar as bordas do mapa que causavam erros de execução. Incorporamos também o nosso controle proporcional-derivativo às funções de movimentação do algoritmo.

CONCLUSÃO

Neste trabalho foi construído um robô móvel dotado de um controle deliberativo. O algoritmo Wavefront implementado se mostrou bastante eficiente para navegação em ambiente conhecido, fazendo com o que o robô descreva rotas corretas e precisas. Sua principal desvantagem é a necessidade de um mapa como entrada. A catapulta e o sensor de partida foram implementados com sucesso e, durante a execução do trabalhos todas as tarefas obtiveram bom desempenho. Mesmo precisando alterar o controle cinemático do trabalho antigo para que o robô descrevesse trajetórias mais retilíneas, conseguimos atender o prazo estipulado.

O robô foi capaz de se posicionar em direcão a uma fonte de luz polarizada e então atirar objetos nessa direção. Além disso, também se movimentou no campo de competição, se desviando dos obstáculos colocados de acordo com o algoritmo WaveFront. Descrevemos os passos da montagem e as dificuldades encontradas em cada passo, bem como os resultados da execução das tarefas.

VÍDEOS DE DEMONSTRAÇÃO

CÓDIGO FONTE

Código Fonte