====== TP3 ====== ===== Relatório ===== Versão para download: {{:cursos:introrobotica:2010-2:grupo05:ttf-tp3.pdf|}} ===== Introdução ===== ==== Problemas encontrados ==== Um dos maiores problemas encontrados neste TP foi a montagem do shaft encoder. Tínhamos de início duas chaves óticas iguais, no entanto uma delas estava queimada.Conseguimos outra chave ótica com outro grupo, porém, a nossa chave ótica emitia o feixe de infra-vermelho na ponta do sensor, já a do outro grupo emitia o feixe na parte inferior do sensor. Para resolver este problema tivemos que isolar a parte inferior do emissor da chave ótica com termo-retrátil. Assim, foi possível utilizar os shaft-encoders para a realização do controle PD no robô. Outro problema encontrado, foi a falta de um sensor optico reflexivo para ser usado na frente do robô para que seja possível fazer curvas"inside". A falta do sensor, se deve ao fato que nenhum vendedor de nenhuma loja do centro sabia o que era o sensor óptico reflexivo. Tentamos pelos nomes de sensor óptico reflexivo e sensor óptico, porém sem sucesso. Uma breve explicação sobre o sensor foi dada aos vendedores, mas novamente sem sucesso.Utilizamos então o sensor LDR, mas como sua resposta era muito lenta e ele variava muito com a luz, não foi possível sua utilização. ===== Resistência Ideal ===== A HandyBoard possui uma resistência interna de 47k ohm, então quando se liga uma resistência nos sensores, elas ficam em paralelo. Utilizando um potenciômetro, determinamos que a resistência que determina a melhor sensibilidade do sensor é de 300k ohm . No entanto, tínhamos disponível somente a resistência de 320k ohm, e portanto, utilizamos a resistência de 320k ohm. Fato que não prejudicou em nada as tarefas que foram realizadas. ===== Wall Following ===== ==== Three-State Algorithm ==== Nessa seção vamos apresentar os resultados da implementação de Three-State Algorithm feita pelo grupo. {{:cursos:introrobotica:2010-2:grupo05:3_state.jpg|Gráfico 3 state}} Comparando-se o gráfico, referente ao algoritmo de três estados, do livro com o obtido pelo nosso robô, percebe-se que tanto o do livro quanto o nosso possuem grandes variações de sinais. No entanto, nosso gráfico possui alguns "overshoot's",que são oriundos dos momentos em que o robô, por algum motivo, encostou-se na parede e também no momento em que ele chegou próximo a uma quina de parede. ==== Hard vs Gentle Turning ==== O nosso robô não conseguiu fazer curvas “inside”. Fato este que tem a seguinte explicação: Utilizamos dois sensores, um na frente do robô(para que seja detectada a parede frontal) e um sensor na lateral do robô(para que ele siga a parede lateral). O algoritmo utilizava o sensor lateral enquanto o frontal não detectava a parede. No momento em que o sensor frontal detectava a parede, o robô virava para a direita até que a parede deixa-se de ser detectada. A partir do momento em que a parede deixava de ser detectada, o algoritmo voltava a se basear no sensor lateral, procurando assim seguir a parede.O problema era que quando o robô virava para a direita a parede se distanciava muito,fazendo com que o robô não concluísse sua tarefa, ficando “garrado” nas quinas da parede. Já as curvas outside foram realizadas com sucesso. - O algoritmo hard turn, utilizava os motores sempre com potência 0 ou 100, já o algoritmo gentle turn , utilizava os motores com potência 50 ou 100. Como o algoritmo gentle turn, mantinha os motores com uma diferença de potência menor que o hard turn, as “viradas” eram muito mais suaves , fazendo com que o gentle se comportasse de uma maneira muito melhor do que o hard, seguindo a parede. Gráfico do gentle turning: {{:cursos:introrobotica:2010-2:grupo05:following_gentle.jpg| Gráfico gentle turning}} Já nas quinas, a situação se inverte. No hard turn, o robô consegue virar na quina com muita facilidade.No modo gentle turn, o robô “abre” muito a curva, pois o seu motor interno tem metade da potência do externo. Grafico hard turning: {{:cursos:introrobotica:2010-2:grupo05:following_hard.jpg| Grafico hard turning}} ==== Three-State vs Hard/Gentle Turning ==== O algoritmo de três estados , até o momento, foi o que realizou a curva interna com maior facilidade. Fato este que pode ser explicado pelo fato do algoritmo trabalhar com uma potência menor nos motores se comparado aos outros algoritmos. ==== Proporcional Three-State ==== O algoritmo de 3 estados que realiza a “virada” mais forte quanto mais longe estiver o robô da parede foi o melhor algoritmo de seguir a parede e vice-versa. Como ele aplicava a potência proporcionalmente, chegava um ponto que o robô andava em paralelo à parede ou próximo disso. {{:cursos:introrobotica:2010-2:grupo05:pp.jpg|Gráfico 3 stage proporcional}} A quina também foi superada facilmente neste algoritmo. ===== Controle PD ===== Para esta atividade, implementamos somente o controle proporcional, que foi feito da seguinte maneira: * O shaft-encoder nos fornecia o número de pulsos “gerados pela roda”. * Então, se a roda da esquerda estivesse fornecendo 37 pulsos, e a da direita 35 pulsos, a potência do motor da direita era incrementada até que a roda atingisse os 37 pulsos. * Assim foi possível fazer com que o robô andasse distâncias pré-estabelecidas e também fazer giros em 90º, ambos com um erro muito pequeno. ====== Código ====== {{:cursos:introrobotica:2010-2:grupo05:tp3.tar.gz|}} ===== Bibliotecas utilizadas ===== Não tivemos problemas em utilizar bibliotecas de terceiros, visto que todas apresentavam boas instruções de uso e/ou comentários. ==== Shaft Encoding ==== O driver responsável pelo shaft encoding foi a biblioteca sencdr.icb fornecida por Fred Martin, disponível em: [[http://handyboard.com/oldhb/software/encoders.html ]] ==== Comunicação Serial ==== A comunicação serial foi feita utilizando-se as bibliotecas conio.c e serialio.c fornecidas por Richard F. Drushel, disponíveis em: [[http://www.verlab.dcc.ufmg.br/cursos/introrobotica/2010-2/drushell]] ==== Wave Front ==== O algoríto de Wave Front fornecido pelo professor e disponível em: [[http://www.verlab.dcc.ufmg.br/cursos/introrobotica/2010-2/tp3]]