Nessa secção apresentaremos as tarefas propostas nesse trabalho juntamente da solução de cada uma delas.
Utilizando sensores ópticos. Seção 3.6.5, exercícios 1 e 2, utilizando um potenciômetro para ajustar a resistência do item 1.
Exercício 1: Após o teste com algumas resistências 2.2k, 4.7k, 10k e 1k (unidades Ohm) concluímos que sem nenhuma resistência adicional o sensor funciona melhor. Isso porque com resistências adicionais o espectro de valores encontrados é menor (mais estreito).
Exercício 2: a) Utilizando a fórmula V=RI, onde V=5-2=3 volts, R=330 Ohms a corrente será 0.00909 ampèr. Essa corrente é igual a 9.09 mA.
b) Os leds estão organizados em paralelo. Logo, pelo valor de corrente anterior, sabendo que o máximo de corrente que a handyboard consegue fornecer em um canal é 100 mA o número de leds total é 100/9.09=11.0011. Ou seja, 11 leds.
Simple Feedback Control. Seção 5.1.3, exercícios 1 a 4, utilizando um sensor óptico para “medir” a distância à parede (conforme Seção 3.6.5, exercício 4), em vez do “bend-sensor” utilizado nos exemplos do Capítulo 5.
Exercício 1: Implementamos o algoritimo “three-state” e, comparando o comportamento do robô com o comportamento representado no gráfico, podemos dizer que o comportamento foi bem semelhante.
Exercício 2: A pergunta está ambígua. Entendemos que se trata de comparação entre os dois algoritmos para seguir parede. Utilizando a técnica “gentle turn” o resultado é melhor, como observado nos gráficos e no comportamento do nosso robô utilizando cada um dos algoritmos.
Exercício 3: Com o nosso robô, e nossa implementação, o melhor resultado foi obtido utilizando o algoritmo “gentle turn”. Os critérios usados para fazer essa avaliação foram: capacidade do algoritmo de lidar com paredes que possuam curvas (na secção de vídeos mostramos um exemplo disso) ou paredes que se encontrem com outras formando um ângulo de 90 graus e a forma como o robô segue a parede, ou seja, se de uma forma muito artificial ou mais natural. A forma artificial é basicamente não realizar movimentos naturais que seriam de um ser dotado de inteligência que segue uma parede. Movimentos bruscos e ficar sempre aproximando e afastando dessa parede são as características de um movimento artificial que foram observadas no robô. Nesse critério particular o “three state progressivo” é o melhor. No entanto, considerando ambos critérios percebemos que o melhor é o “gentle turn”.
Exercício 4: A implementação é simples, uma vez que basta fazer a diferença da distância com o objetivo e somar ( ou subtrair ) nas potências de cada um dos motores.
Controle PD. Faça a montagem mostrada na Figura 5.9. Seção 5.2.3, exercícios 1 e 4. Utilize os sensores break-beam para construir os shaft-encoders.
Exercício 1: Para encontrar os melhores valores fomos testando diversos valores e avaliando o comportamento apresentado. Como resultado, encontramos que o melhor valor de Pgain é 10, e Dgain é 0. O valor nulo do ganho derivativo se deve a precisão do encoder, uma vez que como existem poucas variações ( poucos pulsos por revolução ) a variação da diferença entre os encoders de cada roda é muito pequena e não muito consistente, o que faz com que o comportamento do robô seja melhor sem o ganho derivativo.
Exercício 4: Os principais problemas encontrados foram:
Além de outros problemas comuns, tal como oscilações devido a elasticidade dos pneus das rodas, atritos inconsistentes de engrenagens, diferença da resposta dos motores com a descarga da bateria, etc.
Controle Deliberativo. Implemente e teste o algoritmo Wavefront para realizar o controle deliberativo. Mais informações podem ser obtidas no livro Introduction to Robotics, McKerrow, p 431-478 ou em sites como http://generalrobotics.org/labs/lab05/. Um exemplo de código - Wavefront. Use células de tamanho 30cm x 30cm (paviflex do piso).
Devido a alguns problemas no código fornecido ( posicionamento inicial limitado, falhas caso não haja caminho, etc), optamos por implementar o nosso próprio algoritmo Wavefront, uma vez que o mesmo pode ser implementado de forma simples utilizando recursão. Criamos um grid não muito grande (já que usariamos um algoritmo recursivo) de 7×7. Como inicialmente todas as laterais são preenchidas com obstáculos o grid no qual o robô realmente pode usar é 5×5. A descrição da posição inicial e final do robô, juntamente dos obstáculos são feitos através do menu com auxílio do knob.
Com o algoritmo implementado, o robô apresentou desempenho muito bom ao seguir o caminho encontrado pelo algoritmo. Para trajetos com um número pequeno de curvas (até 2) e distância percorrida menor que 5 quadros o erro apresentado é desprezível. Usando um caminho mais longo (12 quadros) e mais curvas o erro já é maior, aproximadamente + ou - quatro centímetros de distância da posição final onde o robô deveria estar. O principal causador desses erros são as curvas. Uma curva mal feita leva a um afastamento muito grande do ponto de destino. Já os erros que surgem durante as trajetórias retilíneas afetam muito pouco o destino final por que são raros e sempre menores que os erros durante as curvas.
Segue um link com o código fonte de nosso trabalho:código fonte.
É necessário salvar o arquivo com extensão ”.avi”.