Relatório - Robotica Movel

1- Introdução

Este trabalho consiste na construção de um robô móvel, isto é, um dispositivo mecânico capaz de se movimentar. O primeiro objetivo é fazer com que o robô seja capaz de realizar três tipos de caminhos - uma linha reta, um triângulo retângulo isósceles e um quadrado. Usando uma cartolina, o dispositivo mecânico deve deixar demarcada a trajetória feita. O robô deve iniciar e terminar os trajetos nos pontos vermelhos indicados na figura 1 abaixo:


Figura 1: Caminhos que devem ser traçados pelo robô

O segundo objetivo consiste na execução de três tarefas simultâneas (usando o multitarefa do IC). Enquanto o robô caminha, ele deve ser capaz de acender e alternar as cores do LED (RGB) na sequência: azul, verde e vermelho, além de emitir diferentes sons.

Além dessas duas tarefas, o trabalho também tem por objetivo fazer uma Avaliação Experimental indicando os possíveis erros de Translação e Rotação do robô, e a criação de um Menu na placa Handyboard para realizar facilmente as tarefas descritas acima.

robo_por_cima.jpg
Figura 2: Saci visto por cima e de lado.

1.1- Principais Decisões

Conforme a especificação do trabalho, o robô construído deveria conter no máximo dois motores elétricos (DC) de 9V cada. A idéia inicial era usar uma configuração diferencial: um motor para cada roda. Contudo, tal configuração levaria à necessidade de se fazer uma calibração empírica, tanto do movimento de translação quanto do movimento de rotação, uma vez que os motores não têm a mesma velocidade para uma dada potência. Sendo assim, para eliminar a necessidade de calibrar o robô e aumentar sua precisão, foi decidido que um motor seria responsável pelo movimento de translação enquanto o outro faria a rotação através de um sistema mecânico conhecido como “Double Differential Tank Steering”. O sistema permite o desacoplamento dos movimentos de translação e rotação por meio de uma montagem com dois diferenciais em paralelo que é freqüentemente utilizada em veículos com esteiras. Esse sistema impede a utilização de toda a potência disponível, isto é, para cada tarefa individual, translação ou rotação, somente um motor pode estar ligado. Com isso, o robô se move com uma boa precisão ao custo de se mover com uma velocidade reduzida.

Devido à necessidade de se usar uma caneta para marcar o trajeto e do arranjo do sistema de transmissão, optou-se pelo uso de esteiras ao invés de rodas como elemento de locomoção. Com a utilização de rodas, como não existe deslizamento entre elas e a superfície, o eixo de rotação do robô se localizaria na metade da linha que conecta as duas rodas motoras do robô (pensando em um robô diferencial com duas rodas motoras e uma livre) e devido à transmissão, não seria possível posicionar a caneta nesse ponto. Com a utilização de esteiras o centro de rotação depende tanto da extensão do contato entre elas e a superfície, quanto do centro de gravidade do robô, de forma a permitir a mudança da posição da caneta para uma área onde houvesse espaço para sua fixação.

Vários motores e combinações de redução foram testados para que o robô operasse com torque e velocidade aceitáveis. A combinação mais eficiente foi resultado de uma transmissão inicial com polia-correia e pouca redução, fazendo uso de relativamente alto torque dos motores escolhidos.

Foi pedido que o robô acionasse três LEDs, um azul, um vermelho e um verde, porém o LED adquirido pelo grupo foi do tipo RGB, ou seja, capaz de emitir as três cores fundamentais (vermelho (R), verde (G) e azul (B)), assim como cores resultantes da combinação entre elas. Para emitir cada uma das cores requeridas é necessário “fechar o circuito elétrico” para cada um dos terminais do LED correspondente à cada cor. Tal circuito requer a conexão de resistores (com valores apropriados de resistências) entre a fonte de tensão da Handyboard e o LED, a fim de fornecer a corrente elétrica necessária para emitir cada cor fundamental e não queimá-lo. Assim, soldamos os resistores, fios e conectores de tal forma a garantir a confiabilidade e a robustez do circuito e permitir o encaixe adequado dos terminais do LED nos conectores e consequentemente nas saídas digitais da Handyboard. Portanto não foi necessário utilizar mais de um LED neste trabalho para cumprir a respectiva tarefa de acender e piscar as cores.

2- Desafios

Várias dificuldades foram encontradas na realização deste Trabalho Prático. Controlar as saídas relativas aos LEDs não foi uma tarefa fácil, dado que suas localizações são de difícil acesso e a conexão de fios é prejudicada.
Em relação à programação utilizando o IC, foi desafiador usar funções de multitarefas não conhecidas, além da criação de uma configuração de menu intuitiva e boa.

Acreditamos que o maior desafio foi definir precisamente a trajetória (translação e rotação) que o robô Saci realizou. Como o sistema era em malha aberta, o robô realizava trajetórias diferentes sem quaisquer alterações no software ou no hardware, exceto pela descarga da bateria que diminuía a potência dos motores, dificultando assim uma calibragem precisa.

A escolha da redução apropriada também foi uma tarefa que levou algum tempo: se a redução for alta a velocidade fica muito baixa e tem-se um torque excedente desnecessário. Pouca redução e a velocidade do motor ficava muito baixa. Fazer um balanço entre torque e velocidades foi um desafio considerável pois boa parte da estrutura era alterada para acomodar o novo trem de engrenagens.

3- Avaliação Experimental

A placa utilizada no trabalho, a Handyboard, possui bateria interna limitada. Os dois motores utilizados, embora sejam idênticos em suas estruturas físicas e especificações, apresentam comportamentos diferentes e, como o controle realizado - exigido neste trabalho - é em malha-aberta (sem realimentação), a precisão dos valores necessários das variáveis tempo e potência - que acionam cada motor para movimentar o robô e traçar os caminhos determinados - é dificultada. Dessa forma, erros de rotação e de translação foram inevitáveis.

3.1- Erro de Translação

Para verificar o erro do movimento de translação do robô realizamos o seguinte teste: após verificar a potência mínima necessária fornecida ao motor responsável pela translação para o robô começar a andar (aproximadamente 50%), determinamos três valores de potência para realizar as medições, sendo estes a potência mínima (com uma margem de segurança em relação ao limiar), a potência máxima permitida e um valor intermediário - 60%, 80% e 100%. Para cada potência, acionamos o motor por um tempo constante (15 segundos) e medimos a distância percorrida (demarcada na cartolina). Realizamos 3 testes para cada potência e plotamos o gráfico “Erro de Translação do Robô - Distância [cm] vs. Potência [%]”, no qual é informado os valores máximo, mínimo, média e desvio padrão das medidas realizadas. O resultado obtido é mostrado na figura abaixo:


Figura 3: Grafico Erro de Translação do Robô – Distância[cm] vs. Potência[%].

De acordo com a figura acima, percebe-se que o erro de translação é inversamente proporcional à potência aplicada ao motor. Isso se deve ao fato de que, quanto menor a potência, mais lentamente o motor se move, o que faz com que seu desempenho seja mais suscetível às irregularidades do ambiente externo, como o atrito, assim como um possível desequílibrio no balanço de cargas do robô (difícil de mensurar).

3.2- Erro de Rotação

Já para verificar o erro do movimento de rotação do robô realizamos o seguinte teste: novamente verificamos a potência mínima necessária fornecida ao motor responsável pelo movimento, no caso, a rotação, para o robô começar a girar (aproximadamente 70%), determinamos três valores de potência para realizar as medições, sendo estes a potência mínima (com uma margem de segurança em relação ao limiar), a potência máxima permitida e um valor intermediário - 80%, 90% e 100%. Para cada potência, acionamos o motor por um tempo constante (10 segundos) e medimos o ângulo realizado (com o auxílio de uma vareta colocada na frente do robô e apontada na direção inicial do movimento - 0º). Realizamos 3 testes para cada potência e plotamos o gráfico “Erro de Rotação do Robô - ngulo [º] vs. Potência [%]”, no qual é informado os valores máximo, mínimo, média e desvio padrão das medidas realizadas. O resultado obtido é mostrado na figura abaixo:


Figura 4: Grafico Erro de Rotação do Robô – Ângulo[º] vs. Potência[%].

De acordo com a figura acima, percebe-se que o erro angular é próximo para as potências aplicadas ao motor. Uma possível explicação é o fato de que, como a faixa de potências utilizada é pequena, as três potências utilizadas foram bem próximas, não sendo possível caracterizar bem o comportamento do robô ao se mover devagar ou rápido.

3.3- Testes

Varios testes foram feitos para fazer a calibração dos motores,
Segue abaixo teste de translação e rotação.


4- Software

Utilizando o IC, um programa foi escrito para realizar a calibração dos motores e controlar os caminhos demarcados pelo robô. Uma função para cada caminho definido na especificação do trabalho foi implementada. Para mover o robô de um ponto a outro em uma determinada distância, o motor de translação é acionado pelo código e desligado após realizar a trajetória. Para girar o robô em um determinado ângulo, o motor de rotação é acionado pelo código e desligado após realizar o giro.

4.1- Multitarefa

Foi exigida na especificação do trabalho prático 2 a realização de multitafera utilizando o IC. O robô deve realizar ao mesmo tempo e em 20 segundos, algum tipo de movimento, acender LEDs na sequência de cores azul, verde e veremelho e emitir algum tipo de som. Três funções foram criadas: uma para realizar o movimento do robô, outra para acender os LEDs na ordem indicada, e uma para emitir um som. Para a emissão do som utilizamos a função tone() do IC e escolhemos a música “Família Adams”. As frequências das notas da música foram calculadas pelo grupo. As funções poke(), bit_set() e bit_clear() do IC foram usadas para controlar e acender o LED na ordem exigida. Para realizar a multitarefa, cada uma das três funções criadas foram passadas como parâmetro para a função start_process() do IC. Dessa forma, todo o código implementado nessas funções realizavam em paralelo. Após 20 segundos, todas as tarefas são canceladas usando a função kill_process() do IC. É importante ressaltar que o caminho escolhido para a multitarefa foi um círculo.
Segue abaixo um pequeno vídeo mostrando o robô Saci realizando a multitarefa:


4.2- Menu

Utilizando o IC e o carregando na Handyboard, um menu foi implementado. O menu é bastante intuitivo dizendo quais botões devem ser utilizados para selecionar ou trocar alguma opção (ou usar o knob se for o caso). Cada caminho que o robô faz (reto, triângulo ou quadrado) pode ser selecionado pelo menu, assim como a opção de Multitarefas. Além das opções exigidas no Trabalho Prático 2, o menu também possui opções extras, como ligar apenas um dos motores, testar uma cor específica de um LED ou escolher uma música a ser emitida pela placa. De modo geral, o menu possui funcionalidades importantes e bem descritas pelo mesmo.

5- 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.

cursos/introrobotica/2015-1/grupo03/tp02.txt · Última modificação: 2015/04/29 23:13 por introrobotica-grupo3