Objetivos: Aprimorar o uso de sensores para que o robô siga uma parede e iniciar o uso de controladores dos tipos proporcional e derivativo para atuarem nos motores do robô.
Controle PD: Foram montados shaft-encoders no robô, de modo que cada roda possuía um contador de revoluções por pulsos medidos pelos sensores break-beam dos shaft-encoders. esses sensores detectam a rotação das rodas através de engrenagens com furos pois, à medida que roda, os sensores detectam se há ou não furos. Para cada mudança de furo os sensores contam um pulso. As figuras seguintes mostram a montagem realizada.
Com os pulsos dos shaft-encoders, foi possível determinar o quanto cada roda girou e em qual velocidade. Essas variáveis, modificadas pelos parâmetros PD, determinaram as potências dos motores. Após algumas tentativas e erros, os ganhos proporcional e o derivativo foram definidos como 1 e 4, respectivamente. Para esses ganhos, foram medidos a posição, a velocidade e a potência do motor esquerdo em vários instantes. O gráfico a seguir mostra como ele se comportou ao se aproximar de seu objetivo, que era a posição 0:
O robô ainda passou por testes para andar em linha reta, utilizando o controle PD e os shaft-encoderes nas duas rodas. Ainda assim, uma roda sempre terminava seu movimento antes que a outra, mesmo tendo as duas o mesmo objetivo. Dessa maneira foi necessário corrigir a velocidade de uma das rodas, não só pelo controle PD, mas também pela detecção do movimento da outra. No menu da handy-board foi feita uma função para determinar a distância desejada que o robô andasse.
Detecção da parede: O sensor ótico foi colocado ao lado do robô, na parte da frente, de modo a detectar se a parede está se aproximando. As fotos seguintes ilustram a posição do sensor no robô:
Foi feita a calibração de proximidade da parede com o robô pelo sensor. Utilizou-se os valores lidos por ele para determinar o comportamento do robô. Foram utilizados 3 algoritmos, o de 3 estados, o de hard-turn e o de gentle turn.
Algoritmo 3 states: Como o sensor foi colocado à esquerda do robô, se o valor do sensor diminuísse de um valor chamado de “perto” o robô viraria à direita. Se esse valor, porém, ultrapassasse o valor “longe”, o robô viraria à esquerda. Caso contrário, o robô se manteria, teoricamente, em linha reta. Um experimento foi realizado e o robô seguiu a parede com comportamento bem satisfatório. Com os valores “perto” e “longe” assumindo 10 e 239, respectivamente, foram coletados os valores obtidos pelo sensor no decorrer do tempo. O gráfico a seguir mosttra esses valores:
Um potenciômetro foi colocado com o sensor ótico para tentar melhorar o comportamento do robô ao seguir a parede. Após alguns testes optou-se mesmo por uma resistência de valor 0, ou seja o comportamento do robô sem o potenciômetro não foi melhorado após sua alocação ao robô.
Algoritmos Hard-Turn e Gentle-Turn: Para esses algoritmos, apenas a variável “perto” é calibrada, passando os motores a girar de forma a virar à direita caso o valor do sensor ultrapasse essa variável e à esquerda caso o sensor tenha valor abaixo dessa. A diferença é que no hard-turn a potência de giro do motor é mantida em 100% do valor definido e no gentle-turn seu valor é reduzido à metade.
Algoritmo genérico: Foi criado um algoritmo também com 3 estados que alterava a potência do motor para quanto mais longe da parede mais rápido o robô girava pra esquerda, e vice-versa.
O resultado dos testes com os vários algoritmos implementados mostra que o hard-turn é mais rápido, porém bate muito na parede. Ao contrário, o gentle-turn não bate, porém é lento. O 3 states é melhor por ser rápido e não bater tendo que, é claro, as calibrações serem feitas adequadamente. Os melhores valores são em torno de 10 e de 240, respectivamente, para as variáveis “perto” e “longe”.
Controle Deliberativo: Utilizando o algoritmo Wavefront, o robô foi programado para traçar um caminho pré-definido, como se desviando de obstáculos. A programação desse caminho, bem como das posições inicial e final do robô em relação a essa rota, são definidas através do menu da handy-board.
Vídeos: A seguir, vídeos do robô executando as funções descritas:
Seguindo a parede Algoritmo Wavefront
Códigos-fonte utilizados: tp3.lis