====== SAS - Seek and Shoot ====== {{:cursos:introrobotica:2011-2:grupo10:logo_sas.png|}} ==== 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). {{:cursos:introrobotica:2011-2:grupo10:eixos.jpg|Comparação dos eixos entre as versões.}} {{:cursos:introrobotica:2011-2:grupo10:fgeral.jpg|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. {{:cursos:introrobotica:2011-2:grupo10:ldr.jpg|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. {{:cursos:introrobotica:2011-2:grupo10:placa.jpg|}} 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 [[http://www.verlab.dcc.ufmg.br/_media/cursos/introrobotica/2006-2/arquivos/wavefront.zip|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. {{:cursos:introrobotica:2011-2:grupo10:220px-vierer-nachbarschaft.png|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 ==== {{:cursos:introrobotica:2011-2:grupo10:tp3.rar| Código Fonte}}