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:
Os objetivos desse trabalho são os seguintes:
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.
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.
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.
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.
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:
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.
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:
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:
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 |
Para ativar o programa que realiza o acendimento aleatório dos LEDs deve-se escolher as seguintes entradas do menu:
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.
Para ativar o programa que realiza múltiplas tarefas ao mesmo tempo deve-se escolher as seguintes entradas do menu:
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.
Para ativar o programa que será apresentado em sala de aula deve-se escolher as seguintes entradas do menu:
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.
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:
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.
O código foi dividido em 4 módulos:
Os arquivos com os códigos estão no link abaixo: :cursos:introrobotica:2008-2:grupo6:TP1.zip
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.
Vídeo da apresentação: http://www.youtube.com/watch?v=1YApQm4ooRw