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

OBJETIVOS

O objetivo principal do trabalho é construir um robô móvel, ou seja, um robô capaz de se movimentar. Ele deve ser capaz de fazer um percurso de linha reta (30 cm de ida e 30 cm de volta, de um quadrado de lado 30 cm e um triângulo retângulo isósceles de cateto 30 cm. A figura exemplifica o trajeto:

Um segundo objetivo do trabalho consiste em utilizar o processo de multitarefa da HandyBoard, fazendo com que o robô seja capaz de se movimentar e acender um led RGB alternadamente.

DESENVOLVIMENTO

Para a realização do trabalho, o design do robô foi se alterando progressivamente uma vez que a medida em que ele foi sendo construído problemas foram ocorrendo. O projeto do robô inicial atendeu às expectativas e estava realizando o percurso satisfatoriamente. Entretanto devido as deformidades apresentadas pela roda grande do kit Lego, o elevado valor de atrito impossibilitou a continuidade do projeto. A foto mostra o projeto inicial e sua respectiva caixa de engrenagem:

A partir do problema apresentado, severas modificações tiveram que ser feitas no robô para que o problema do atrito fosse resolvido. Com a utilização de rodas menores todo sistema de engrenagens e transmissão teve que ser modificado, para que ele pudesse se locomover. Com as modificações ele se locomoveu perfeitamente e o problema do atrito foi reduzido. Porém ao rabiscar o trajeto na folha de cartolina, o percurso ficou inconstante e dessa maneira foi decidido alterar novamente seu design.

O ROBÔ

Para a configuração do novo robô foi decidido utilizar três rodas esféricas. Opção que melhorou bastante o torque do robô ao realizar uma curva. Outra modificação extremamente significativa foi o posicionamento da caneta no meio do robô, que possibilitou uma maior estabilidade além de um desenho mais exato das formas geométricas a serem desenhadas. Importante ressaltar que a caneta não foi presa, o que diminuiu consideravelmente o atrito. A caixa de redução, como mostra a figura abaixo fez uma redução de 15:1. Outra mudança bastante importante foi uma diminuição do robô, uma melhor distribuição de seu peso e uma melhora na transmissão, possibilitando um melhor deslocamento em relação ao antigo.

A PROGRAMAÇÃO

Ao ligar a HandyBoard é escolhida a potência para os motores. Devido as inconsistências do primeiro projeto da movimentação da caneta devido a potência do motor, local que o mesmo funcionaria e outras adversidades foi pensada uma calibração para o robô. A calibração foi dividida em três partes:

CALIBRAÇÃO DO ALINHAMENTO

Essa calibração permite a correção da diferença de potência dos motores uma vez que devem girar de maneira igual. Para isso, é feito um teste em que o robô anda por alguns segundos. Após analisar quem gira mais rápido, a partir do botão knob presente na HandyBoard a potência do motor esquerdo é alterada de acordo com a necessidade.

CALIBRAÇÃO DA DISTÂNCIA

Essa calibração permite a correção da distância para o robô andar 30 cm. Para isso, é feito um teste em que o robô anda numa certa potência por um determinado tempo. É medida a distância com uma régua e inserida na HandyBoard a partir do botão knob. O algoritmo então calcula o tempo necessário para andar 30 cm.

CALIBRAÇÃO DO ÂNGULO

Essa calibração permite a correção da distância para o robô fazer o ângulo mais próximo de 90°. Para isso, é feito um teste em que o robô faz uma curva. É medido o ângulo com um transferidor e inserido na HandyBoard a partir do botão knob. O algorítmo então calcula o tempo necessário para fazer o ângulo de 90°.

MULTITAREFA

Para a multitarefa foi usada a função poke() para configuração das saídas digitais e as funções start_process() e kill_process() para a execução das tarefas simultâneas, as quais consistem em fazer o robô andar enquanto acende o led RGB na sequência azul, verde e vermelho. Para isso foi feita a função raio() que movimenta o robô e a função led_RGB(). Nessa última foi usada a função poke(0x1009, 0x3c) para configurar os pinos J6 como saídas digitais e, para acioná-las, foram usadas as funções poke(0x1008, 0x4), correspondente a saída MOSI, poke(0x1008, 0x8) correspondente a saída SCK e poke(0x1008, 0x10), correspondente a a saída SS.

GRÁFICOS

CONCLUSÃO

O trabalho prático 2 nos permite observar que para um robô móvel, somente um controle em malha aberta, mesmo que todo o sistema mecânico tenha uma boa precisão e que todos os movimentos sejam bem calibrados, existem variáveis sobre as quais não se tem domínio. Tais variáveis, como mudança nos atritos entre as peças devido à aplicação de alguma força, mudança no atrito do robô com a superfície, mudança na eficiência dos motores à medida que suas temperaturas de operação aumentam, e folgas inerentes ao conjunto de peças LEGO, acabam por afetar significativamente o desempenho do robô. Assim, a falta de realimentação no controle do sistema (malha fechada) é um fator considerável na execução das tarefas pelo robô, influenciando diretamente nos seus resultados. Logo, garantir erro nulo é praticamente impossível neste contexto.

Portanto, é possível concluir que mesmo que a programação (software) contenha apenas comandos e trajetórias simples, estes só serão executados com boa precisão pelo robô (hardware) caso o controle em malha fechada seja implementado. Para tal, devem ser utilizados sensores adequados para que o robô consiga “perceber os próprios erros” e, assim, realizar ações de correção para que as tarefas possam ser realizadas de maneira consistente.

VÍDEOS