TRABALHO PRÁTICO 3
O robô utilizado no desenvolvimento do TP3 é aquele do TP2, porém aqueles sensores que não seriam utilizados nesta etapa foram removidos, deixado apenas um dos sensores óticos.
Simple Feedback Control - Seção 5.1.3
A realização dos exercícios propostos na seção 5.1.3 se deu com a utilização de apenas um sensor ótico, constituído de um par diodo-emissor e fototransistor. O sensor adotado nesta etapa é o mais sensível, ou seja, aquele que apresenta no sinal de saída, uma maior diferença para as situações de “objeto próximo” e “nenhum objeto”.
Nos exercícios de 1 a 4, implementou-se diferentes algoritmos para a tarefa de seguir paredes, mantendo distância constante da mesma: gentle-turn, hard-turn, e o three-state. A partir das observações feitas nos ensaios pode-se apontar que:
- Algoritmo gentle-turn: como esperado, este algoritmo mostrou-se o mais indicado para seguir paredes em linha reta, mantendo distância constante, pois a oscilação do robô em relação à parede (referência), possui menor amplitude.
- Algoritmo hard-turn: este algoritmo apresenta maior oscilação do robô em relação à referência, portanto não é o mais adequado para a tarefa de seguir a parede. Todavia, apresentou melhor resultado para realização de curvas abruptas, como em uma quina.
- Algoritmo three-state: este foi o algoritmo escolhido para a apresentação e será explicado abaixo. Este apresenta menores oscilações, pois ao contrário dos outros algoritmos, possui estados distintos para virar para os lados e para andar em linha reta.
Inicialmente, definem-se dois limiares (thresholds), com base em duas situações: “sensor próximo à parede” e “sensor distante da parede” (nada). Assim, derivam-se as possíveis combinações, como exemplificado abaixo:
Suponha que o valor na saída do sensor para a situação “próximo à parede” seja 10 e para “distante da parede” seja 200.
- A média dos valores 200+10 é portanto 105.
- A média para a situação “próximo à parede” é: (10+105)/2 = 57.5
- A média para a situação “distante da parede” é: (200+105)/2 = 152.5
Com esses valores definem-se os intervalos e as respectivas ações:
- de 0 a 57.5: robô vira de forma a se afastar da parede.
- de 57.5 a 152.5: robô anda em linha reta.
- 152.5+: robô vira de forma a se aproximar da parede.
O gráfico abaixo expressa esse comportamento para um curto intervalo de tempo:
Controle Deliberativo - Wavefront
A implementação do algoritmo wavefront não apresentou grandes problemas. Utilizou-se o exemplo disponível no site e para que este rodasse, alterou-se as constantes (potências) do algoritmo.
O algoritmo utiliza um grid 10×10, composição inicial 1×1, pois 0x0 resultava em erro em tempo de execução. Considerando-se a frente do robô posicionado na coordenada 1×1, definiu-se como posição Y, as linhas, e X as colunas.
Na inicialização do procedimento, devem ser informadas as posições inicial e final do robô, bem como o número de obstáculos e as coordenadas do grid que possuem tais obstáculo. Considerou-se que cada obstáculo ocupava uma célula do grid. Inseridas as informações na handy-board, esta processa bastante e define a rota a ser traçada pelo robô para cumprir a missão, contornando os obstáculos.
O deslocamento do robô pelo grid não utilizou nenhuma estratégia de controle, e sim uma rotina de calibração por aprendizagem, através da qual é indicado para o robô, como é o ambiente. Basicamente, registram-se os tempos gastos para percorrer uma célula do grid em linha reta, girar 90 graus para a esquerda e para a direita. Assim, é possível que o robô realize o wavefront com sucesso, para qualquer que seja a dimensão de uma célula do grid, e também para diferentes tipos de assoalho.
Talvez o maior problema para este algoritmo sejam as dimensões do grid, uma vez que a handy-board não dispõe de memória extensa para armazenamento de código e processamento.