====== 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]]