Membros

  • Luis Henrique O. Rios - 2005041500 - lhrios@gmail.com - Ciência da Computação
  • Nayara Maron Costa de Miranda - 2004017060 - nayaramaron@gmail.com - Engenharia de Controle e Automação
  • Rafael Griffo Goes - 2005041674 - griffo@dcc.ufmg.br - Ciência da Computação
  • Rodrigo Moreira López - 2004017176 - rodrigo.mlopez@hotmail.com - Engenharia de Controle e Automação

Trabalho Prático 1

Objetivo

  1. Estrutura e Controle: Desenvolver um robô capaz de ser controlado pela HandyBoard e realizar os seguintes testes:
    • Medir o erro de translação - Atuar os motores por um tempo constante e medir a distância percorrida para P = 20%, 60% e 100%.
    • Medir o erro de rotação - Atuar os motores de forma que o robô gire 90 graus e medir o erro obtido para P = 20%, 60% e 100%. Sugestão: Monte uma vareta comprida sobre o robô.
    • Realizar pelo menos 10 testes para cada medição e construir um gráfico.
  2. Áudio: Escrever um programa que toque uma música na Handy Board utilizando a função tone() do IC. O nome da música deve ser impresso no display. Utilizar os botões start e stop para inicializar e parar a música respectivamente.
  3. Multitarefa: Utilizar a característica multitarefa do IC para tocar uma música enquanto o robô se move para frente. O robô e a música devem ficar em execução durante um tempo de 30 segundos, interrompendo o funcionamento após esse tempo.
  4. Menu: Todas as tarefas devem poder ser acessadas facilmente através de um menu. A facilidade de uso desse menu também será avaliado.
  5. Tarefa do dia da apresentação: Fazer o robô realizar uma trajetória quadrada de 30 cm x 30 cm por 3 vezes consecutivas. O robô deve desenhar numa cartolina sobre o chão a trajetória.

Desenvolvimento

Versões iniciais

Funcionamento

A primeira idéia foi fazer um robô com 2 motores, sendo um para mover em cada sentido (frente/trás e direita/esquerda), sendo que o robô efetivamente não faria curvas, apenas trajetórias com ângulos de 90 graus. Ou seja, para andar em uma direção bastaria acionar o motor responsável por movimentar a esteira que permite o movimento nessa direção e desligar o outro motor, como mostra a foto. A idéia, no entanto, foi abandonada devido ao problemas de atritos que não são constantes ou fáceis de serem contornados. Esses causavam desvios nos movimentos que deveriam ser retilíneos.

A segunda idéia era utilizar 3 motores, um para locomoção frente/trás, outro para suspensão do robô sobre uma “pata” central, e outro para girar o robô suspenso sobre a pata. Uma das principais vantagens dessa abordagem é que nela não seria necessário utilizar o roll-on que é uma peça não pertencente ao kit entregue ao grupo.

Essa idéia foi abandonada devido as inúmeras dificuldades de construção como: onde colocar 3 caixas de redução (para que houvesse controle preciso sobre os motores e torque suficiente para elevar o robô incluindo a handyboard) e criar um equilíbrio de modo que o robô não perdesse a estabilidade quando ele estivesse se apoiando apenas sobre uma “pata”. Obs.: Como mostrado nas fotos, não chegamos a construir as rodas que dariam a movimentação frente/trás.

Fotos

1º Idéia
1º Idéia
2º Idéia:
2º Idéia 2º Idéia 2º Idéia

Versão final

Funcionamento

A versão final consiste em um robô diferencial, com duas rodas tracionadas independentemente e um terceiro apoio esférico (roll-on). A fim de se ter controle mais preciso, foram feitas duas caixas de redução de 125 para 1, uma para cada roda.

Como um dos objetivos era desenhar trajetórias quadradas, as rotações foram feitas colocando-se cada roda para girar para um lado, o que faz com que o robô tenha uma rotação in place. Dessa forma, colocando a caneta na direção do eixo das rodas, os ângulos (quinas) do quadrado são bem definidos.

A estrutura foi muito reforçada (como pode ser observado nas fotos), com diversas barras transversais firmando a construção. Outro detalhe importante da estrutura é a construção de eixos bi-apoiados, ou seja, os eixos das rodas são apoiados em ambos os lados da roda, o que resulta em eixos menos fletidos devido ao peso do robô e da handyboard.

Outro detalhe estrutural é a forma como a handyboard foi presa. Essa estrutura fez com que ela não pudesse sair do lugar inclusive quando o robô é virado de cabeça para baixo.

A diferença entre a 1º versão e a segunda - desse projeto final - é que na segunda versão colocamos a handyboard sobre as rodas. Isso foi necessário para que houvesse atrito suficiente nas rodas, uma vez que com a handyboard sobre o roll-on as rodas derrapavam durante as curvas, o que tornaria impossível desenhar quadrados com um mínimo de precisão.

Fotos

Primeira versão
1º Versão
Versão Final:
vista lateral vista lateral vista superior
vista frontal vista superior

Testes

Medida do erro de translação:

Para esta medida, pré-fixamos uma distância e medimos a variação do tempo que o robô levou para percorrer esta distância. Isso foi feito com intuito de facilitar os testes e julgamos que não afetaria o resultado final tal como as conclusões a seu respeito.

Outra mudança que se tornou necessária no processo de medida em relação às especificações, foi a que as medidas foram para as potências de 40, 60 e 100%, já que para a potência de 20% o robô não se locomovia.

Para a potência de 100%, obtemos 10 medidas de tempo para as distâncias de 30, 45, 60, 90 e 120 cm, cujos valores levantados forneceram o seguinte gráfico gerado no MatLab:

Tempo para percorrer distância com potência = 100%
Gráfico de tempo em função da distância percorrida para potência de 100% após feitas 10 medidas

O mesmo procedimento com as mesmas distâncias foi adotado para 60% da potência máxima, gerando o seguinte gráfico:

Tempo para percorrer distância com potência = 100%
Gráfico de tempo em função da distância percorrida para potência de 60% após feitas 10 medidas

Para 40% mudamos a distâncias para 10, 20, 30, 40 e 50 cm a fim de não gastar muito a bateria do robô com as medidas, obtendo o seguinte gráfico:

Tempo para percorrer distância com potência = 100%
Gráfico de tempo em função da distância percorrida para potência de 40% após feitas 10 medidas

A análise dos gráficos nos mostra, que conhecendo o valor de potência utilizada, é possível fazer uma boa estimativa do valor final da distância percorrida do robô em função do tempo com uma precisão que julgamos ser boa para os nossos propósitos.

* Medida do erro de Rotação -

Para esta medida, ajustamos o robô de forma que ele girasse 90 graus com a potência em 100%, em seguida, mantendo os ajustes do robô, variamos a potência do mesmo de forma a ver a variação do ângulo gerada em decorrência de uma queda de potência:

No dia das medidas não dispunhamos de um transferidor, logo, conseguimos o ângulo através do cálculo de sua tangente.

Ajustado o motor para fazer 90 graus com a potência em 100%, medimos os angulos gerados para as potências de 100%, 60% e 40% da potência do motor:

Angulos obtidos em função da potência Com robô ajustado para 90 graus em 100%
Angulo em função da potência para ajuste em 100%

Como vemos no gráfico acima, o ângulo para a potência em 100% forneceu resultados muito bons, com pouca divergência do valor médio que está muito próximo do desejado. Dando um ZOOM no gráfico na parte referente à potência desejada, podemos ver com mais detalhes o desvio para o intervalo:

Zoom para potência em 100%

Vemos com os gráficos também que à medida que a potência do motor vai diminuindo o valor de ângulo obtido diverge de forma muito grande do valor desejado, fazendo com que haja a necessidade de ajustes de parâmetros em função da potência para um melhor resultado final.

O Código em MatLab Utilizado para gerar os gráficos acima foi o seguinte: Código em Matlab

Software da Handyboard

Para realização dessa tarefa foi necessário construir um pequeno programa capaz de controlar o robô através da handyboard. Esse software foi construído com auxílio da linguagem Interactive C, que será chamada IC a partir desse momento. O IC oferece a facilidade de múltiplas threads algo que foi muito necessário para a implementação de certas funcionalidades.

O programa implementado para controlar o robô interage com usuário através dos botões start, stop e o knob. Em nosso menu o usuário troca de opção usando o botão stop e acessa uma opção usando o botão start. Quando dentro de uma opção do menu o usuário pode usar o knob para alterar um valor númerico se a opção o permitir, ou, usar o botão start para ligar ou desligar uma determinada função. O botão stop faz com que o usuário retorne ao menu principal. Só existe uma excessão a essa regra. No caso do item de tocar a música (que no nosso caso é a música tema do jogo Mário) o botão start inicia a música e o stop para a música. Para voltar o usuário deve apertar stop após parar a execução da música. Essa excessão foi criada porque a especificação do trabalho exige que esses sejam os botões respectivos que iniciam e param e execução da música.

A implementação consiste basicamente de um switch (implementado com if's e else's) que, de acordo com o estado atual, imprime algo no display e realiza uma tarefa específica se pressionado algum botão. As tarefas são executadas como threads independentes o que permite que o menu continue funcionando perfeitamente independente da tarefa executada.

Segue as opções implementadas no menu e uma pequena descrição da cada uma delas:

  • Potência motor vermelho ( motor 1 )

Esse menu é possível ajustar a potência do motor vermelho - a denominação de motor por cores vem do fato de que o robô montado tem uma lado azul e outro vermelho. Esse ajuste é necessário uma vez que os motores e engrenagens de cada roda são diferentes, respondendo de forma diferente ao serem aplicados a uma mesma tensão elétrica. O ajuste se dá por forma de um valor percentual. A tela indica a porcentagem atual, sendo que para alterá-la basta utilizar o knob.

  • Potência motor azul ( motor 3 )

Menu com mesma função do menu a cima, exceto que o ajuste vale para o motor do lado azul do robô. A tela indica a porcentagem atual, sendo que para alterá-la basta utilizar o knob.

  • Andar reto tocando música

Nesse menu é possível começar ou parar de executar a atividade de andar e tocar música por 30 segundos, sendo que essa é uma das tarefas pedidas. Entrando no menu, aperta-se start para começar e para parar. Ao começar, o robô liga ambos motores e começa a tocar a música tema do jogo Mario, parando após 30 segundos. A tela indica se está ativo ou não esse item (0 e 1 respectivamente).

  • Toca música tema do jogo Mario

Esse item é para ativar a tarefa de tocar uma música, começando-a com start e pausando com stop. A música codificada é a música tema do jogo Mario. A tela indica se está ativo ou não esse item (0 e 1 respectivamente).

  • Desenha quadrados

Nesse menu é possível iniciar a outra tarefa, que é desenhar 3 quadrados consecutivos, através da trajetória do robô. Da mesma forma que no menu anterior, aperta-se start para iniciar a atividade ou para interrompe-la. A tela indica se está ativo ou não esse item (0 e 1 respectivamente).

  • Ajuste constante tempo

Nesse item é possível ajustar uma constante que será multiplicada em todos os tempos de espera na atividade de desenhar quadrados. Ela é útil para calibrar o robô de acordo com a carga da bateria (com a bateria mais fraca, para andar 30cm e virar 90º é preciso de ativar os motores por um tempo maior).A tela indica o valor atual, sendo que para alterá-la basta utilizar o knob.

  • Descarregar bateria

A ativação desse item do menu faz com que o robo ligue os 4 motores em potência máxima, com o intuito de descarregar a bateria. Isso é útil quando a bateria já está muito fraca para fazer o robô andar com precisão, e para ajudar a fazer os “ciclos” de carga na bateria, descarregando-a completamente antes de carregá-la novamente. A tela indica se está ativo ou não esse item (0 e 1 respectivamente).

Conclusão

Esse trabalho foi muito proveito pois aprendemos a usar a handyboard com multiplos processos, acionamento de motores e acionamento do beeper. Além disso, a parte dos testes mostrou-nos que, apesar de todos os cuidados, no mundo real é muito difícil atingir uma precisão ótima.

Backup

cursos/introrobotica/2007-2/grupo7/tp1.txt · Última modificação: 2007/10/10 22:27 (edição externa)