====== TP 1 (Tê pê Um) ====== [[http://homepages.dcc.ufmg.br/~lucast/robotica_tp1.pdf|Relatório]] ===== Introdução ===== Este trabalho prático consiste em criar um robô que se movimente sobre rodas e fazer o uso de programação, utilizando uma HandyBoard, para que o robô realize movimentos diversos. A HandyBoard é um controlador muito utilizado em robótica. Os objetivos principais deste trabalho são: * Familiarizar o aluno com o desenvolvimento de software para HandyBoard; * Avaliação experimental dos erros de atuação; * Desenvolvimento de controle simples para o robô. ===== Desenvolvimento ===== ==== Estrutura ==== Precisávamos construir um robô com o LEGO que fosse controlado pela HandyBoard. Conectamos um motor a cada roda, através de engrenagens e correntes, e para o robô ter equilíbrio, colocamos um roll-on na parte da frente. Logo o robô possuía três pontos de apoio, as duas rodas e o roll-on. Tudo isso foi feito ao redor de uma pequena estrutura onde a HandyBoard se localizaria. Feito isso, fizemos um suporte para a caneta. Tentamos colocar no eixo de rotação do robô. ==== Menu ==== O menu foi facilmente implementado. As bibliotecas do IC facilitaram demais nessa parte. O menu possui opções de fácil manuseio. Escolhemos a tarefa que o robô fará, através dos botões START e STOP, e o potenciometro é usado para mudar entre as opções. {{:cursos:introrobotica:2008-2:grupo10:menu.jpg|árvore com figuras geométricas}} ==== Calibração ==== Primeiro foi necessário calibrar no olho uma potência para cada motor que fizesse o robô andar em linha reta. Depois, para cada potência (20%, 40%, 60%, 80% e 100%) e tempo (1, 1.5, 2, 2.5 e 3 segundos) foram feitas 10 medições de distância/ângulo. Os gráficos obtidos podem ser visualizados abaixo na sub-seção Experimentos. Com essas medições pudemos obter equações que nos ajudassem a informar uma distância/ângulo a ser percorrida pelo robô, ao invés de utilizar tempo e potência como parâmetros. Isso auxiliou na execução da trajetória em forma de quadrado e círculo. ==== Experimentos ==== Para translação de potência 20% e rotação de potência 20% e 40%, o robô não se moveu. === **Translação** === == Potência 40 == {{:cursos:introrobotica:2008-2:grupo10:pot40transv.JPG|medições}} {{:cursos:introrobotica:2008-2:grupo10:pot40transmedia.JPG|média}} {{:cursos:introrobotica:2008-2:grupo10:pot40transgraf.JPG|gráfico supimpa}} Equação: y = 2,494x - 1,224 == Potência 60 == {{:cursos:introrobotica:2008-2:grupo10:pot60transv.JPG|medições}} {{:cursos:introrobotica:2008-2:grupo10:pot60transmedia.JPG|média}} {{:cursos:introrobotica:2008-2:grupo10:pot60transgraf.JPG|gráfico supimpa}} Equação: y = 19,596x - 9,094 == Potência 80 == {{:cursos:introrobotica:2008-2:grupo10:pot80transv.JPG|medições}} {{:cursos:introrobotica:2008-2:grupo10:pot80transmedia.JPG|média}} {{:cursos:introrobotica:2008-2:grupo10:pot80transgraf.JPG|gráfico supimpa}} Equação: y = 69,442x - 1,136 == Potência 100 == {{:cursos:introrobotica:2008-2:grupo10:pot100transv.JPG|medições}} {{:cursos:introrobotica:2008-2:grupo10:pot100transmedia.JPG|média}} {{:cursos:introrobotica:2008-2:grupo10:pot100transgraf.JPG|gráfico supimpa}} Equação: y = 98,574x + 20,247 === **Rotação** === == Potência 60 == {{:cursos:introrobotica:2008-2:grupo10:pot60rot.JPG|medições}} {{:cursos:introrobotica:2008-2:grupo10:pot60rotmedia.JPG|média}} {{:cursos:introrobotica:2008-2:grupo10:pot60rotgraf.JPG|gráfico supimpa}} Equação: y = 2,4x - 4,3 == Potência 80 == {{:cursos:introrobotica:2008-2:grupo10:pot80rot.JPG|medições}} {{:cursos:introrobotica:2008-2:grupo10:pot80rotmedia.JPG|média}} {{:cursos:introrobotica:2008-2:grupo10:pot80rotgraf.JPG|gráfico supimpa}} Equação: y = 12,18x -4,14 == Potência 100 == {{:cursos:introrobotica:2008-2:grupo10:pot100rot.JPG|medições}} {{:cursos:introrobotica:2008-2:grupo10:pot100rotmedia.JPG|média}} {{:cursos:introrobotica:2008-2:grupo10:pot100rotgraf.JPG|gráfico supimpa}} Equação: y = 71,82x - 13,5 ==== LEDS ==== A tarefa dos Leds consistiu em escrever um programa que faça um grupo de quatro leds funcionar em sequência. Para ligar os Leds na Handyboard decidimos adotar a dica dada na especificação do trabalho de utilizar saídas digitais da placa. Porém surgiu um desafio, pois de início não encontramos saída digitais, mas apenas entradas digitais. Porém pesquisamos e encontramos a seguinte solução descrita no manual da Handyboard: os pinos SPI, localizados na parte direita superior da placa, logo abaixo do visor, podem ser configurados como saídas digitais. Para isso bastava usar a função //poke// do IC da forma poke(0x1009,0x3c). Então eles seriam mapeados no endereço 0x1008 e para acionar cada um dos leds bastava usar, por exemplo poke(0x1008,0x04) ou poke(0x1008,0x08). É possível ainda acionar mais de um led ao mesmo tempo somando-se os bytes do segundo argumento, como poke(0x1008,0xc). Para desligar os leds bastava usar poke(0x1008,0x01). ==== Multitarefa ==== Utilizando a multitarefa do IC o robô deve ficar por 30 segundos andando de forma livre com os LEDS ligados. E logo após passar o tempo, ambos devem parar. Um processo com os LEDS é executado, usando a função start_process um processo em paralelo é criado, nesse caso, a função de translação, fazendo com que o robô se mova de forma pré-definida. ===== Desafios encontrados e Decisões ===== - Após construir a primeira estrutura do robô, nos deparamos com o problema da redução. O motor não conseguia impulsionar o robô quando ligado diretamente na roda. Isso foi contornado colocando algumas engrenagens e correntes. - Para desenhar o trajeto no papel, precisaríamos de um suporte para a caneta. Porém inicialmente o suporte pressionava a caneta demais para baixo, aumentando o atrito e fazendo com que o robô não se locomovesse direito nem com potência 80%. Para solucionar, fizemos um outro suporte, que não pressionasse a caneta para baixo, assim o atrito foi minimizado para o peso da própria caneta. Para anexar esse novo suporte, por falta de espaço foi preciso estender a estrutura do robô. - Exaustivos testes no olhometro para o robô andar em linha reta. Foram implementadas constantes de correção de potência. - Medir distância percorrida pelo robô utilizando uma régua de 20 cm. - Talvez o maior desafio de todos foi realizar as calibrações, pois com o passar dos testes a HandyBoard ia descarregando, afetando as medições (com altas variações). ===== Resultado ===== [[http://br.youtube.com/watch?v=UhSsChHzaFs|Vídeo da apresentação]] Fotos do robô (clique para ampliar): {{:cursos:introrobotica:2008-2:grupo10:IMG_0289.JPG?300x225|fronteira}}{{:cursos:introrobotica:2008-2:grupo10:IMG_0290.JPG?300x225|perfil... que gato!}} {{:cursos:introrobotica:2008-2:grupo10:IMG_0288.JPG?300x225|traseira, ui...}}{{:cursos:introrobotica:2008-2:grupo10:IMG_0291.JPG?300x225| visão aérea}} {{:cursos:introrobotica:2008-2:grupo10:IMG_0292.JPG?300x225|visão subterrânea}}