====== 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: {{:cursos:introrobotica:2006-2:grupo2:graftp3.jpg?320x231|Clique para ampliar!}} ---- ==== 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 10x10, composição inicial 1x1, pois 0x0 resultava em erro em tempo de execução. Considerando-se a frente do robô posicionado na coordenada 1x1, 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. ---- ==== Códigos IC TP3 ==== {{:cursos:introrobotica:2006-2:grupo2:tp3src.zip|Códigos implementados para o TP3}}