Trabalho Prático 3
O objetivo deste trabalho prático é familiarizar o aluno com os sensores ópticos e de toque, que serão os instrumentos utilizados pelo robô para a percepção do ambiente e para a tomada de decisões. Além disso, o aluno também deverá se familiarizar com as técnicas básicas de controle, com o intuito de garantir uma resposta do robô compatível com a referência desejada.
Objetivos
- Inicialização automática. Utilizando sensor óptico ou LDR apontado para baixo, o robô deve detectar o instante em que a luz na base do campo é acesa. Esse comportamento deve funcionar corretamente mesmo que a luz permaneça acesa;
- Orientação com sensores de toque. Essa tarefa assume que uma de quatro orientações será fornecida ao robô por meio da interface do seu sistema (0 graus a frente do robô aponta para o campo adversário; 90 graus a frente do robô aponta para a esquerda do seu campo; 180 graus a frente do seu robô aponta para trás e 270 graus a frente do robô aponta para a direita do seu campo). Seu robô será colocado na orientação correspondente, e deverá confirmar a orientação por meio apenas de sensores de “toque” (switches). Por exemplo, se ele estiver apontando para frente, essa confirmação pode ser realizada fazendo com que o robô dê uma ré e os sensores de toque indiquem que ele encostou na parte traseira do campo.
- Simple Feedback Control (Seção 5.1 RE). Utilizando um sensor óptico para “medir” a distância à parede, implemente o algoritmo Wall Following para seguir paredes com Gentle Turn (Seçao 5.1.2 RE).
- Shaftencoders. Utilizar sensores breakbeam para construir shaftencoders (Secao 3.7 e 3.8 RE). Implementar um controlador PD para fazer com que o robô siga uma linha reta (Seção 5.2 RE) por X segundos o tempo deve ser ajustado na hora da apresentação.
Desenvolvimento do Robo
Inicialização Automática
Nesta etapa, utilizamos um sensor LDR apontado para baixo e corretamente isolado da luz ambiente por meio de um tubo de termo retrátil. Para detectar o instante em que a luz na base do campo é acesa foi implementado um algoritmo que, dado os valores de intensidades com a luz acesa e apagada, encontramos o valor médio. Quando a intensidade for menor que este valor médio, o robô deverá iniciar automaticamente. Durante os experimentos, podemos observar que o algoritmo não falhou nenhuma vez, já que o LDR, por ficar abaixo do robô e tunelado com cabo termoretrátil era pouquíssimo influênciado por iluminação externa, além das medidas oferecerem uma grande diferença ( Entre 8 e 250).
Orientacao com sensores de Toque
Nesta etapa, o robô deve confirmar sua orientação utilizando somente sensores de toque. Para isso foram instalados quatro sensores de toque – dois na dianteira e dois na traseira – dispostos nas extremidades do robô, com o intuito de confirmar se o robô está totalmente encostado em uma parede ou apenas com uma lateral encostada. No caso de somente uma lateral estar encostada, o robô aciona o motor da lateral não encostada até que ela também encoste na parede, orientando o robô corretamente diante do campo. O algoritmo tem como entrada o valor do ângulo:
-Se for 0 graus, de ré até encostar na parede.
-Se for 90 graus, vire 90 graus e de ré até encostar na parede.
-Se for 180 graus, ande para frente até encostar na parede.
-Se for 270 graus, vire 90 graus e de ré até encostar na parede.
Para garantir que o robô virasse 90 graus, usamos os shaftencoders instalados nas engrenagens contando o número de contagens necessários para virar 90 graus.
Simple Feed Back Control
Utilizamos um sensor LDR juntamente com um LED branco, posicionados a direita do robô, para “medir” a distância à parede e implementamos o algoritmo Wall Following com Gentle Turn para seguir paredes. A idéia do algoritmo é que, dado uma calibração inicial com uma medida da distanciância da parede, faça leituras no LDR, se o valor for maior que a média da calibração diminua a potência no motor direito (para virar a direita), se o valor for menor que a média diminua a potência do motor esquerdo.
Shaft-Encoders
Utilizamos sensores breakbeam em cada uma das rodas para a análise da diferença de velocidade/potencia entregue pelos motores. Essa diferença é usada na implementação do contolador P, cujo objetivo é fazer com que o robô siga uma inha reta. Para isso implementamos o seguinte controlador:
Erro= NvoltasEsquerda – NvoltasDireita;
MotorEsquerda(Potência Ganho*Erro);
MotorDireita(Potência + Ganho*Erro);
Conclusões
Este trabalho nos permitiu uma maior familiarização com os sensores ópticos, de toque e shaftencoders, suas características e detalhes de instalação. Um dos maiores problemas foi a calibração dos sensores ópticos essenciais para o Wall Following, que era influenciada por detalhes do ambiente, como luminosidade e distância dos objetos. Outro problema foi o posicionamento dos shaftencoders no robô já construído e a taxa de amostragem proveniente desses encoders, essencial para o bom funcionamento do controlador projetado. O posicionamento dos sensores de toque assim como de todos os outros também foi levado em consideração, uma vez que auxiliam o robô a se orientar e tomar decisões.
Código fonte
Principal.c – Função principal que abre o menu.
Sensortp3.c – Engloba todas as funções que controlam as leituras dos sensores.