TP 1 - O Thundertank
Introdução
O TP1 consiste em criar um robô com rodas, para que esse realize uma série de movimentos e outras instruções.
As principais motivações desse trabalho são:
- o aprendizado do desenvolvimento de softwares para a Handyboard;
- a avaliação experimental dos erros de atuação;
- o desenvolvimento de controle simples para o robô.
Objetivos
Os objetivos desse trabalho são os seguintes:
- desenvolver o robô, utilizando apenas peças LEGO, e que seja controlado apenas pela Handyboard;
- criar um menu, onde possam ser selecionadas as tarefas que o robô deve realizar;
- calibrar o robô, para que esse possa realizar os movimentos necessários de forma correta.
- realizar uma série de experimentos, envolvendo movimentos lineares (de 10, 20 e 30 cm) e movimentos giratórios (de 30, 60 e 90 graus);
- criar um programa para acendimento de 4 LEDs, de forma aleatória;
- criar um programa multi-tarefa, em que o robô deve se movimentar e acionar os LEDs ao mesmo tempo.
- apresentação do robô em sala de aula. Nessa apresentação o robô deverá realizar os movimentos de 3 quadrados de 30 cm de lado, de 3 círculos de 25 cm de raio, além da apresentação do menu e dos objetivos 5 e 6.
Desafios encontrados
O primeiro desafio encontrado foi o de aprender a criar um software para a Handyboard. Apesar da linguagem de programação InteractiveC ser muito parecida com o C (que é uma linguagem que temos certo domínio) algumas tarefas como a própria criação do menu foram bastante trabalhosas.
O segundo desafio encontrado foi a sincronização dos motores. De início, parecia que os dois motores utilizados estavam perfeitamente sincronizados. Mas, à medida que foram feitos os experimentos, com as diversas potências de motor, foi percebido que havia uma diferença entre os motores, que fazia com que o robô realizasse curvas em testes de movimento retilíneo. Esse problema foi resolvido ao dar potências diferentes para os motores.
O terceiro, e talvez maior, desafio encontrado foi a mudança de comportamento do robô a cada bateria de testes realizada. Num dia o robô era calibrado pra realizar suas funções de forma correta, mas no outro dia essas calibrações já não surtiam os mesmos resultados.
Desenvolvimento do projeto e testes
Nessa seção vão ser mostrados maiores detalhes do que foi feito para atingir os objetivos enunciados, além da apresentação em forma de gráficos ou tabelas, de todos os testes realizados.
Montagem do robô
A idéia foi criar um robô com duas rodas e um roll-on para estabilização. A Handyboard ficaria na parte superior e central do robô, para que o centro de gravidade do mesmo não se diferencie muito do centro geométrico.
Todos as ações do robô são controladas pela Handyboard. A seleção das ações é feita através de um menu, em que se utilizam as teclas Start, Stop e o potenciômetro para realizar as escolhas dos itens do menu. A hierarquia do menu será explicada na próxima subseção.
Montagem do menu
O menu foi criado para facilitar a escolha das funções que devem ser realizadas pelo robô a cada momento. A navegação do menu se dá pelos botões START e STOP e pelo potenciômetro presente na Handyboard.
A hierarquia do menu está representada na figura abaixo:
Apertar START é o mesmo que descer na árvore, assim como apertar STOP é mesmo que subir na árvore. O potenciômetro seleciona uma opção entre nós irmãos.
Calibragem do robô
A calibragem do robô serviu para saber como o robô se comportava de acordo com a variação de potência e de tempo, tanto em movimentos retilíneos como movimentos de giro. Para realizar os testes de calibragem deve-se escolher as seguintes entradas do menu:
- no menu inicial escolher Calibragem; no menu Calibragem escolher Retas para realizar a calibragem em movimento retilíneo e Curvas para realizar a calibragem em movimento giratório. Depois, para ambos os casos deve-se escolher o valor de potência e em seguida o valor do tempo em que serão realizados os testes.
Primeiramente foram realizados testes em que o robô fizesse um movimento retilíneo. Para esses testes foram escolhidos 5 potências (20%, 40%, 60%, 80% e 100%) e 10 tempos (0.5s, 1.0s, 1.5s, 2.0s, 2.5s, 3.0s, 3.5s, 4.0s, 4.5s e 5.0s). Para cada potência escolhida, foram realizados testes com todos os tempos, sendo que, para cada tempo, foram realizados 10 testes, de forma a encontrarmos um resultado médio e um desvio padrão. Os resultados obtidos estão demonstrados nos gráficos seguintes.
Pode-se observar, pelos testes, que os desvios padrões de cada medida foram relativamente pequeno, o que mostra uma certa estabilidade do robô em realizar um movimento retilíneo preciso.
Depois foram realizados testes em que o robô fizesse um movimento giratório. Para esses testes foram utilizados os mesmos valores de potências (só que as potências dos motores tinham sinais contrários) e tempos usados nos testes para movimento retilíneo. O número de testes também foi igual. Os resultados obtidos estão demonstrados nos gráficos seguintes.
Uma observação que deve ser feita é que, como um dos motores utilizados era mais rápido do que o outro, a potência de um dos motores foi multiplicada por uma constante, que variou conforme a potência escolhida para a realização dos testes.
Realização dos experimentos
De acordo com os resultados obtidos na calibragem, pôde-se encontrar valores de potência e tempo para que se conseguissem movimentos específicos. Foi escolhido para a realização dos testes retilíneos os motores com potência de 40%. Para realizar os testes de movimento retilíneo deve-se escolher as seguintes entradas do menu:
- no menu inicial escolher Testes; no menu Testes escolher Linear; no menu Linear escolher uma das opções de distância(10cm, 20cm ou 30cm).
Os testes realizados para o movimento retilineo estão apresentados na tabela abaixo.
Distância | Potência | Tempo |
---|---|---|
10 cm | 40% | 0.75 |
20 cm | 40% | 1.47 |
30 cm | 40% | 2.30 |
Foi escolhido para a realização dos testes giratórios os motores com potência de 40%. Para realizar os testes de movimento giratório deve-se escolher as seguintes entradas do menu:
- no menu inicial escolher Testes; no menu Testes escolher Rotação; no menu Rotação escolher uma das opções de ângulo(30, 60 ou 90 graus).
Os testes realizados para o movimento giratório estão apresentados na tabela abaixo.
Ângulo | Potência | Tempo |
---|---|---|
30º | 40% | 0.30 |
60º | 40% | 0.55 |
90º | 40% | 0.89 |
Acendimento aleatório dos LEDs
Para ativar o programa que realiza o acendimento aleatório dos LEDs deve-se escolher as seguintes entradas do menu:
- no menu inicial escolher LEDs.
Ao escolher LEDs no menu, a handyboard irá acionar os 4 leds em uma sequência aleatória e infinita. Cada led acionado permanece aceso por 0.5s antes desse se apagar e outro led ser acionado. A sequência só termina quando o usuário aperta o botão STOP da Handyboard.
Para acender os leds, foram utilizadas as saídas digitais da Handyboard, e a função poke() presente no IC.
Programa multi-tarefa
Para ativar o programa que realiza múltiplas tarefas ao mesmo tempo deve-se escolher as seguintes entradas do menu:
- no menu inicial escolher Multithread.
Ao escolher Multithread no menu, o robô vai acender os 4 leds ao mesmo tempo que faz um movimento retilíneo com 40% de potência dos motores. Depois de 30 segundos, o movimento se interrompe, assim como os leds se apagam.
Programa de apresentação
Para ativar o programa que será apresentado em sala de aula deve-se escolher as seguintes entradas do menu:
- no menu inicial escolher Start.
Para a apresentação, o robô realiza o movimento de um quadrado de 30cm de lado, três vezes e depois um círculo de 25cm de lado três vezes.
Quadrado
Para realizar o quadrado, foram utilizadas as medidas de tempo encontradas tanto nos testes lineares quanto nos testes giratórios. A potência utilizada na realização do quadrado também foi de 40% nos dois tipos de movimentos.
As instruções que o robô executam para criar cada quadrado são:
- um movimento retilíneo de 30cm com 40% de potência por 2.30s;
- um sleep de 0.5s;
- um movimento giratório de 90º com 40% de potência por 0.89s;
- um sleep de 0.5s;
- repete os passos 1, 2, 3 e 4 duas vezes;
- repete o passo 1.
Círculo
Para realizar o círculo, foram feitos testes para ver quais potências deveriam ser colocadas em cada motor, de modo que o robô desenhasse um círculo de 25cm de raio. As potências encontradas foram 90% no motor interno e 17% no motor interno. O robô desenha cada círculo em 12.5s.
Código fonte
O código foi dividido em 4 módulos:
- Menu.c - Contém funções auxiliares para criações de menu;
- MeuMenu.ic - Contém as funções que criam a hierarquia do menu apresentado;
- Funcoes.ic - Contém as funções que realizam as instruções do robô;
- Teste.ic - Contém a função principal.
Os arquivos com os códigos estão no link abaixo: :cursos:introrobotica:2008-2:grupo6:TP1.zip
Conclusão
Nesse trabalho vimos que por mais que fossem feitos ajustes na estrutura do robô ou em sua programação, a execução das tarefas não acontecia exatamente da forma prevista. Isso se deve ao fato da construção do robô e do próprio mundo onde ele se insere apresentar algumas não-linearidades e perturbações, que, por mais que sejam pequenas, geram desvios consideráveis quando somadas. O robô, por não possuir nenhum sensor, representa um sistema de malha aberta e, por esse motivo, qualquer alteração no trajeto ou no sistema não é levado em consideração na execução da tarefa. Como essas perturbações no sistema não podem ser conhecidas sem nenhum sensoreamento, é impossível realizar algum tipo de ação corretiva no sentido de compensá-las. Apesar disso, mesmo o sistema não sendo linear e invariante no tempo, os testes foram imprescindíveis para os ajustes iniciais do programa que desenha as figuras. Eles serviram de guia, sendo que, posteriormente, fizemos ajustes finos para obtermos retas do tamanho desejado, assim como o giro do robô nos ângulos corretos. Além disso,aprendemos como trabalhar com uma handyboard e também suas limitações.
Fotos e vídeos do robô
Vídeo da apresentação: http://www.youtube.com/watch?v=1YApQm4ooRw