Relatório - Controle

1- Introdução

O Trabalho Prático 4 tem como objetivo familiarizar o aluno com técnicas de controle básicas, por meio da realização das tarefas pedidas: Com um par de LDR`s o robô deveria ser capaz de se alinhar com as luzes polarizadas presentes no campo. Elaborar um algoritmo que permitisse ao robô seguir paredes - wall following - com o uso de um sensor óptico reflexivo para a medição da distância. O robô devera ser capaz de encontrar a presença de blocos enquanto se move e identificar a sua cor. Com base na cor identificada ele devera realizar uma ação. O robô devera realizar trajetórias similares às realizadas no trabalho prático 2 - formar uma reta, um triangulo e um quadrado - utilizando shaft encoders. O tamanho do trajeto devera ser variavel.

robotp4.jpg
Figura 1: Robo SACI

2- Principais Decisões

Para este trabalho utilizamos um sensor óptico-reflexivo para medir a distancia. Para seguir a parede o sensor foi colocado na lateral do robo com um angulo de 45 graus em relação a parede para que com um controle proporcional o robô pudesse seguir paredes e ainda fazer esquinas (internas e externas), mesmo se os ângulos delas fossem maiores que 90 graus. O mesmo sensor foi utlizado para verificar a presenca de blocos. Nesse caso colocamos o sensor na parte frontal do robo. Importante resaltar que foi usado somente um sensor devido a falta de portas analogicas disponiveis na placa, uma vez duas das portas nao funcionaram.
Foi feita a manutenção do sistema mecânico do robô, mostrado no trabalho prático 2, que garante a trajetória retilínea do robô sem o auxilio dos shaft encoders dando a eles a unica função de contar a distancia percorrida pela esteira, por esse mesmo motivo nao foi usado controle proporcional derivativo.

2.1- Localização

Para a localização do robô em relação as duas fontes de luz, utilizamos os conceitos de LDR diferencial e polarização estudados em sala de aula. Dois filtros F1 e F2 em combinação com dois LDRs foram foram montados para alinhar o robô com as duas fontes de luz L1 e L2 presentes no campo. Os LDRs foram inseridos na parte superior do robô, ambos recebendo informações na mesma direção (frente do robô). Como as fontes de luz possuem polarizações diferente, os filtros foram posicionados de forma que o filtro F1 deixa passar grande parte da luz de L1 e bloqueia grande parte da luz L2 e o filtro F2 deixa passar grande parte da luz de L2 e bloqueia grande parte da luz L1.
Para identificar o robô com a fonte de luz foi feito o seguinte cálculo: o robô faz um giro de 360º armazenando assim valores de entradas de cada LDR. O LDR que possuir menor valor após esse movimento de rotação representá qual fonte de luz o robô está mais próximo. Por exemplo, se o LDR com filtro L1 retornar o valor mais baixo de todos os valores adquiridos, então o robô está mais próximo da fonte de luz L1.
No processo de rotação do robô, além de armazenar os valores obtidos pelos dois sensores, uma regra de três simples é calculada para saber qual o ângulo que o robô girou para cada valor armazenado nos sensores. Assim, para fazer o alinhamento com a fonte de luz, o robô gira a quantidade de graus correspondente ao menor valor encontrado nos sensores.


Figura 2: LDR para localização das luzes

2.2- Simple Feedback Control

Para seguir a parede foi utilizado um contolador proporcional. Inicialmente é obtido um valor de referência do sensor para determinada distância até a parede. Utilizando o valor instantâneo medido e subtraindo essa referência temos o erro que multiplicado pelo ganho Kp é usado como valor da potência a ser entregue ao motor responsável pela realização da curva. Nessa configuração, o robô não era capaz de seguir paredes quando havia quina interna acentuada.
Como o robô possui movimentos de rotação e translação mecanicamente desacoplados, o refinamento do controle para que ele superasse as restrições acima, foi facilitado: Em vez de só atuar no movimento de rotação, quando o valor do controle ultrapassava um certo threshold determinado empiricamente, o excedente era multiplicado por uma outra constante, também determinada empiricamente, e utilizado para reduzir a potência do motor responsável pela translação. Assim, ao chegar perto da quina o sensor ficava muito próximo da parede e a translação cessava ou o robô dava ré para poder obter espaço e realizar a rotação em torno do seu próprio eixo.

opticoref.jpg
Figura 3: Sensor optico reflexivo na lateral do robo

2.3- Shaft-encoders

Um sensor break-beam foi utilizado para construir o conceito de shaft encoders visto em sala de aula. Escolhemos engrenagem de canto de 24 dentes como shaft encoders para maior resolução da rotação do robô. Implementamos um controlador, como exigido no enunciado do trabalho, para controlar a velocidade do robô para que ele seja capaz de realizar três caminho diferentes: reta, quadrado e triângulo.
Para realizar o caminho reta (ou os lados do quadrado ou do triângulo), medimos o raio R da roda utilizada no robô. Medimos também o valor V retornado pelo shaft encoder após um giro de 360º da roda de raio R. Assim, a distância percorrida pelo robô será de 2*Pi*R quando o shaft encoders retornar o valor V. Dada uma distância D escolhida através do Menu usando o knob, o cálculo para saber o valor V’ que o shaft encoder deve retornar quando o robô percorrer a distância D é:

			V’ = V*D/2*Pi*R

Utilizando as rotinas da biblioteca fencdr5.icb do Iteractive C, é possível obter os valores que o shaft encoder retorna. Assim, ao receber uma distância D e calcular o V’, o motor que realiza a translação é acionado e só para quando a variável que recebe o valor do shaft encoder for V’. Para realizar as rotações (para o quadrado e triângulo), medimos o valor de Vr do shaft encoder no final de uma rotação de 360º. Precismos saber os valores Vn e Vt medidos pelo shaft encoder dos ângulos de 90º (para o quadrado e o triângulo retângulo isósceles) e de 135º (para o triângulo retângulo) , respectivamente , para que o robô realize a rotação necessária. Assim:

			Vn = 90*Vr/360
			Vt = 135*Vr/360

Com esses valores, o motor de rotação é acionado e só para quando o shaft encoder retornar Vn o Vt (dependendo da aplicação).


Figura 4: Shaft Encoder

2.4- Tomada de decisão

Nessa tarefa, o robô deve se movimentar em linha reta, e caso encontre algum bloco azul, verde, amarelo ou vermelho, ele deve parar, identificar a cor do bloco, se movimentar em linha reta para trás e realizar alguma possível ação:

			Bloco Azul → vire à direita 90 graus e ande para frente;
			Bloco Amarelo → vire à esquerda 90 graus e ande para frente;
			Bloco Vermelho → gire 180 graus e ande para frente;
			Bloco Verde → emita um sinal sonoro.

O algoritmo para a identificação das cores é o mesmo utilizado no Trabalho Prático 3 (Sensores), seção 2.1 utilizando o LED RGB e o sensor LDR (também explicados no Trabalho Prático 3).
Para identificação do bloco foi usado o sensor Óptico-Reflexivo, pois ele apresentou uma melhor variação na distância entre o robô e algum objeto. O sensor Óptico-Reflexivo é acionado quando o robô começa a se movimentar. Ao encontrar algum bloco o LED RGB é acionado, a leitura é realizada, a identificação da cor do bloco é feita, e a ação referente a cor desse bloco é concluída com sucesso.

opticofrente.jpg
Figura 5: Sensor optico reflexivo frontal e LED com LDR

3- Desafios

Para a realização da tarefa de seguir a parede, foi necessária a implementação de um braço no robô pois a faixa de distância que o sensor óptico reflexivo era capaz de detectar era de 0 a aprox. 3 cm. Se acoplado diretamente ao robô a distância entre o robô e a parede seria insuficiente para que o robô manobrasse, seguindo a esquina por exemplo. Utilizar as funções do IC referentes ao shaft encoder não foi uma tarefa tão trivial dado que necessitamos de procurá as bibliotecas necessárias para utilizar as rotinas desejadas. Como duas das portas analógicas da placa HandyBoard não estavam funcioando, não podemos incluir mais um sensor optico reflexivo. Sendo assim, precisamos utilizar o mesmo sensor para seguir parede e para a tarefa de identificar bloco, tendo que na hora da tarefa reconfigurar a localização desse sensor.

4- Software

Utilizando o IC, um programa foi escrito para realizar as tarefas descritas nas seções acima. Para mover o robô de um ponto a outro em uma determinada distância, como para localizar bloco, seguir parede, alinhar com a luz, o motor de translação e rotação são acionados pelo código. Para identificar a cor de um determinado bloco, o algoritmo descrito na seção 2.1 foi utilizado. Para ligar ou desligar o LED RGB ou receber informações de sensores como LDR, óptico-reflexivo ou break-beam, funções do IC foram utilizadas na implementação da coleta de dados dessas tarefas.

4.1- Menu

Utilizando o IC e carregando o programa implementado 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). Todas as tarefas descritas nas seções anteriores podem ser acessadas pelo Menu.

5- Resultados

Os videos abaixo mostram resultados para cada uma das tarefas pedidas:

Localizacao e Simple Feedback Control:

Shaft-encoders e Tomada de decisao

6- Conclusão

O trabalho prático 4 permitiu a implementação de algoritmos de controle em tarefas mais complexas do que as vistas anteriormente. Nelas foi possível lidar com a teoria de controle na prática, visualizar a mudança na resposta do robô quando parâmetros eram variados e constatar a similaridade com os modelos teóricos estudados. Além disso a realização das tarefas apresentadas de maneira eficaz, foi de grande importância para fornecer alternativas de como realizar os objetivos da competição.

cursos/introrobotica/2015-1/grupo03/tp04.txt · Última modificação: 2015/06/03 20:10 por introrobotica-grupo3