Trabalho Prático 02 - Robótica Móvel

1. Introdução

O trabalho prático 2 consiste na montagem de uma estrutura em lego para comportar motores (atuadores) e sensores tal que, em conjunto com programas embarcados na Handy Board, formem um robô móvel.

Os robôs móveis são projetados de acordo com o meio em que irão atuar e a finalidade de suas tarefas. Logo quanto ao meio são classificados como Terrestres, Aéreos, Aquáticos e Espaciais. No caso deste trabalho, pelas tarefas requisitadas, foi preciso projetar um robô móvel terrestre.

As tarefas a resem realizadas serão implementadas utilizando controle em malha aberta já que não é permitida a utilização de nenhum sensor. Sendo assim, os programas que fornecerão os sinais controle dos motores foram baseados em observações experimentais após alguns ensaios com o robô.

Neste trabalho também foi praticado o conceito de programação paralela, ao colocar dois programas (duas tarefas) a serem executados paralelamente. A programação paralela consiste na utilização de threads, as quais compartilham o tempo de execução de um mesmo processador, para realização de tarefas distintas de forma virtualmente simultânea.

2. Objetivo

O objetivo deste projeto é a contrução de um robô móvel terrestre para realização de algumas tarefas específicas. Destre as tarefas foi requisitada uma tarefa de Locomoção, uma de Avaliação experimental e uma de Multitarefa, além de um menu que comporte todas estas. Deve-se utilizar somente dois motores e nenhum sensor, o que impossibilita fechar uma malha de controle.

Portanto, a aplicação de conceitos de controle em malha aberta foi utilizada para avaliar experimentalmente a locomoção do robô em diferentes percursos. Além disto, computacionalmente, buscou-se introduzir a utilização de métodos de programação paralela para execução de tarefas “simultâneas” e a utilização de saídas digitais.

3. Metodologia

Tarefa de Locomoção

Na tarefa de Locomoção é importante que o robô consiga completar os seguintes trajetos:

Fig. 1

O primeiro trajeto consiste em uma linha reta, em que o robô deve ser capaz de seguí-la nos dois sentidos, devendo completar o caminho uma vez em cada um destes.

O segundo trajeto consiste em um triângulo reto e o terceiro em um quadrado. O robô deve ser capaz de completar apenas uma vez esses percursos.

Avaliação experimental

Na avaliação experimental foi testada a influência da diferença de desempenho dos dois motores, sendo que esta tem grande influência quanto à execução das tarefas de navegação que o robô foi e será requisitado a realizar.

Destre os ensaios a serem realizados, foi feito um para calcular os erros de translação e um para calcular os erros de rotação.

No ensaio do erro de tranlação, os motores foram acionados simultaneamente e por um tempo constante, sendo, então, medida a distância final. Os valores de potência em ambos motores utilizados nestes ensaios foram de 20%, 50% e 100%.

No ensaio do erro de rotação, os motores foram acionados de forma a realizar giros de 90º, sendo, então, medidos os valores dos ângulos alcançados e calculado o erro em relação à expectativa de 90º.

Os testes foram realizados repetidas vezes e com os dados coletados foi plotado um gráfico para representar a média, o máximo e o mínimo deles.

Multitarefa

Utilizando a propriedade multitarefa do Interactive C, duas tarefas foram requisitadas ao robô, a realização de uma das trajetórias feitas anteriormente e o acionamento de 3 LEDs de cores Azul, Verde e Vermelho em sequência.

Os LEDs serão ligados à Handy Board nas entradas digitais que foram configuradas em saídas digitais. As funções poke(), bit_set() e bit_clear foram utilizadas para este fim, além de também acionarem os LEDs.

Menu

Um menu foi desenvolvido para acessar cada uma das tarefas a serem realizadas.

4. Resultados

Montagem

As seguintes imagens descrevem a montagem final do robô:

Fig. 2 Fig. 3 Fig. 4

Optou-se pela construção de um robô com rodas pelas vantagens que oferecem como robôs móveis. Tais robôs apresentam grandes ganhos em estabilidade, manobrabilidade e controlabilidade.

Optou-se também pela utilização do número mínimo de rodas suficientes para estabilidade, que são três. Das três rodas, duas são rodas padrões de tamanho médio, já que as tarefas não apresentam obstáculos para q sejam necessárias rodas maiores. A última é uma roda esférica que garante alto grau de mobilidade ao robô.

A caneta foi posicionada no centro de rotação do robô, de forma que, nos vérices da trajetória, não fossem gerados arcos quando o robô executasse alguma rotação.

Fig. 5 Fig. 6

Os LEDs utilizados possuem cor azul, verde e vermelho. Foram incluídos para utilização na Multitarefa. Os LEDs tiveram seu anôdo ligados em um mesmo fio para conexão na porta Ground da Handy Board, enquanto cada anôdo foi ligado a uma porta de saída digital diferente. As saídas digitais foram configuradas pelos comandos poke(), bit_set() e bit_clear(), em Interactive C.

Avaliação experimental

Na avaliação experimental, foram coletados os dados de erro de translação e erro de rotação como especificado.

O gráfico que representa o Erro de Translação encontra-se abaixo:

Fig. 7

Para o valor de potência P=20%, devido a característica própria da montagem do robô este não conseguiu mover com tão pouca potência, logo os testes foram realizados somente para as potências de 50% e 100%.

O gráfico que representa o Erro de Rotação encontra-se abaixo:

Fig. 8

Potências baixas também não foram suficientes na rotação, porém na rotação o valor de potência de 50% também não movimentou o robô, logo esta potência foi substituído pela potência de 70%.

Multitarefa

A tarefa de Multitarefa foi desenvolvida ao utilizar o conceito de Multithread em Interactive C, em que uma nova unidade de trabalho paralela foi gerada para realizar a lógica de acionamento dos LEDs paralelamente com a execução de um dos percursos da tarefa de Locomoção. A handy board apesar de ter somente entradas digitais, tem a possibilidade de ter estas configuradas como saídas digitais. As saídas para ligar os LEDs foram configuradas pelas funções poke(), bit_set() e bit_clear().

Programação

De acordo com a necessidade de cada um dos trajetos foram desenvolvidas as funções: Girar90(): motores com potência para que o robô gire 90º; Girar135(): motores com potência para girar 135º; Girar180(): motores com potência para girar 135º; Andar30(): motores com potência para andar em linha reta por 30cm.

As potências dos motores foram adaptadas de modo a compensar a diferença entre eles. Essas diferenças são advindas das características próprias de cada motor, sendo assim faz-se necessária a análise dessa diferença, o que foi feito na tarefa de Avaliação experimental.

5. Vídeo: Trajetória triângular