===== Trabalho Prático 3 ===== ==== Código ==== {{:cursos:introrobotica:2006-2:grupo6:tp3.zip|Código IC do TP-3}} ==== Exercício 1 ==== Todos os sensores opto-refletores já foram recebidos 100% montados e operantes, logo, não foram necessárias fazer os experimentos do exercício 1. Os sensores já apresentavam uma resposta aceitável com a montagem original. ==== Exercício 2 ==== A realização do exercício 2 foi simples. Logo após a montagem do sensor opto-refletor do lado robô, os testes já puderam ser feitos. Após pequenas modificações do código "wallfol3.c", o robô já foi colocado para andar e colher dados, e a cada corrida foram alterados os parâmetros do ganho proporcional e ganho derivativo. Abaixo seguem o gráfico dos dados coletados {{:cursos:introrobotica:2006-2:grupo6:wallfol.PNG}} O primeiro teste, em azul claro, foi feito com a rotina "hard turn" (potência dos motores de 30 / 0). Assim, quando o robô saía do intervalo definido, parava completamente uma roda, enquanto a outra girava o robô para o lado certo. Isso causa uma variação enorme na distância da parede, com desvio padrão de 73.5, o que normalmente não é o resultado desejado. No segundo teste, em amarelo, foi usada a rotina "soft turn", onde o robô está constantemente em movimento, mas apenas diminui a velocidade de uma roda quando ele sai do intervalo (potência dos motores de 60 / 45). A variação foi bem menor que no teste anterior, tendo um desvio padrão 3 vezes menor. Os 3 últimos testes foram feitos com controle proporcional, e o ganho proporcional variou de 0,333 para 0,125. Com o ganho mais alto ainda ficou evidente uma ocilação, mas ainda menor que a da rotina "soft turn". O ganho proporcional de 0,2 apresentou o melhor resultado, ficando praticamente todo o tempo dentro do intervalo, e apresentando um desvio padrão de apenas 4,3. OBS: Para calcular as médias e desvios padrões, foram desconsiderados as primeiras medições, pois a arrancada do robô gera um período de transição antes de entrar em um regime permanente. Foram feitas 40 medições por segundo. === Conclusão === Para uma parede reta, certamente a melhor técnica para manter a distância constante é a do controle proporcional. Caso a parede tenha curvas ou quinas, cada caso deve ser estudado separadamente, pois não existe uma resposta única que atenda a todos os problemas. Veja-o em ação [[http://www.youtube.com/watch?v=ibgMA_cE3s4|aqui]] Veja as tabelas {{:cursos:introrobotica:2006-2:grupo6:wallfol.xls|aqui}} ==== Exercício 3 ==== Após a construção do aparato similar à figura 5.9, os problemas começaram a aparecer. Não foi possível localizar o arquivo "qencdr10.icb", então foi necessário criar as rotinas à mão. Após criadas, foi encontrado outro problema: a velocidade de análise de leitura dos sensores era muito devagar, não chegando nem aos pés dos 1000Hz que seria possível fazer com os arquivos certos. Logo, foi necessária a introdução de uma redução extra, para que o shaft encoder girasse numa velocidade baixa o bastante. Uma vez contornados esses problemas, os testes seguiram em um bom ritmo, e seus resultados são mostrados abaixo. {{:cursos:introrobotica:2006-2:grupo6:pd.PNG}} Primeiro foi feito o teste com ganho proporcional de 5, e sem ganho derivativo. Saindo de uma posição inicial de 100 com o objetivo de parar em 0, o equilíbrio foi atingido depois de 95 ciclos de medição, com uma ocilação de amplitude razoável. No segundo teste foi incluído um ganho derivativo de 2. A amplitude de ocilação caiu ligeiramente, mas o equilíbrio demorou mais para ser alcançado, com 101 medições. O melhor resultado foi observado com um ganho derivativo de 3, com ocilações mínimas, e equilíbrio em 82 medições. Com um ganho derivativo de 4, o sistema passa a se tornar mais instável, ocilando várias vezes em torno de 0, demorando para chegar no equilíbrio, com 150 medições. No caso de ganho 5 ou mais, o sistema fica completamente instável, e o equilíbrio nunca é alcançado. === Conclusão === O a introdução de uma parcela derivativa no controle da posição de uma roda mostrou-se bem útil, diminuindo sensivelmente o tempo necessário para a obtenção de equilíbrio. Apesar disso, os valores escolhidos devem ser bem pensados, pois caso o ganho derivativo seja grande demais, o sistema torna-se instável. Veja-o em ação [[http://www.youtube.com/watch?v=3t9GV0JwLCM|aqui]] Veja as tabelas {{:cursos:introrobotica:2006-2:grupo6:pd.xls|aqui}} ==== Exercício 4 ==== Vários problemas também foram encontrados durante a implementação do algoritmo Wavefront para o controle deliberativo. Após breves alterações no código de exemplo disponibilizado nesse site, tentamos botar o robô para andar em um campo improvisado. Após a entrada da posição inicial do robô, goal e obstáculos, os cálculos realizados pelo robô eram tantos que excediam a memória da Handy Board. Várias alterações foram feitas no código, tentando solucionar o problema, mas independente disso, se o goal estivesse mais longe do que 4 quadrados do ponto de partida, o algoritmo entrava em um loop que ultrapassava os limites de memória. Diante dos fatos, o grupo decidiu criar um algoritmo wavefront completamente novo, tomando como base as informações do site da General Robotics. Após algumas horas de trabalho duro, o algoritmo estava completo, e no final provou ser mais rápido, mais confiável e com limites muito maiores do que o código de exemplo. É possível navegar em um grid de dimensões 41x41, dentro dos limites de memória da Handy Board. Junto com o algoritmo wavefront, é também utilizado técnicas de controle proporcional do shaft encoder, para garantir que o robô ande em linha reta, e faça as curvas de 90o precisamente, acumulando o mínimo de erros durante seu percurso até o objetivo. === Conclusão === A criação de um algoritmo wavefront mais simples possibilitou um entendimento mais completo de sua funcionalidade. Também facilitou os passos de otimização que se seguiram. Utilizando em conjunto um controle mais preciso da movimentação do robô, foi possível que ele percorresse caminhos relativamente complicados, sem que houvesse erros ou desvios. Veja-o em ação [[http://www.youtube.com/watch?v=03OSa0zE0tU|aqui]]