TP2

Introdução

O robô percebe o mundo através de seus sensores. Para que possa desempenhar suas tarefas de modo correto, é necessário um sensoreamento adequado para as atividades a serem desempenhadas. Sensores também são fundamentais para a realização de controle retroalimentados que são muito úteis na robótica.

Objetivos

Construir sensores e colocá-lo no robô para que ele se torne capaz de reconhecer cores e andar seguindo uma linha preta.

Atividades

1 de Outubro

Hoje compreendemos que deveria ser feito! :-) Decidimos que para reconhecer cores será utilizado LDR mesmo, ao invés de infravermelho. A idéia geral é iluminar os blocos com LEDs de diferentes cores, e utilizar esses valores para descobrir a cor do bloco. Não gostamos do resultado dos testes preliminares que fizemos com infravermelho.

3 de Outubro

Longa tarde soldando, colocando termo retrátil, queimando o braço (pobre Elmaia… :-(), furando peças Lego (de destruição, é claro), para finalmente termos um sistema com dois LEDs (um azul e um de alto brilho) e um LDR. Ao colocá-lo na Handyboard… falhamos em reconhecer as cores. Decidimos fazer uma nova mantagem com três LEDs: verde, amarelo, vermelho.

5 de Outubro

A montagem está pronta: três LEDs em um triângulo presos em uma peça Lego. Agora é só testar…

11 de Outubro

O código fonte está quase pronto, falta apenas fazer a função para andar na linha preta.

12 de Outubro

O robô conseguiu reconhecer as cores!…

17 de Outubro

A hora do desespero se aproxima!!! Foram implementadas as funções para coleta de dados via porta serial e feitos os scripts de Matlab para a plotagem dos gráficos e ajustes de curvas.

Funcionamento

Para reconhecer as cores, utilizamos um LDR e três LEDs: verde, amarelo e vermelho. Durante a calibragem, o robô pede para que seja colocado em frente ao sensor cada um dos quatro blocos cuja cor devemos identificar. Com essa calibragem, o robô grava quatro pontos (P_{amarelo}, P_{vermelho}, P_{azul}, P_{verde}) em um espaço tridimensional, onde cada dimensão representa o resultado obtido iluminando com um LED. Ao iniciar o reconhecimento de uma cor, o robô mede o resultado para cada um dos LEDs e utiliza esse dado para criar um ponto, P_{novo}, no espaço tridimensional. Assim, basta encontrar o ponto mais próximo a P_{novo} para reconhecer a cor do bloco.

Dificuldades

Inicialmente tentamos utilizar leds de alto brilho para iluminar os blocos. No entanto, apesar da iluminação ser boa, não conseguimos diferenciar muito bem os blocos.

A primeira estratégia que utilizamos para seguir a linha era manter os dois sensores ópticos na linha preta e caso algum dos sensores saisse da linha, virar para o lado contrário. Esse algoritmo funcionava corretamente para seguir uma linha reta, mas falhava quando haviam curvas de 90º na linha, pois os dois sensores saíam da linha ao mesmo tempo e o robô não sabia para qual lado girar. A alternativa que utilizamos foi manter um sensor na linha preta e outro fora dela. Desse modo, se os dois sensores entrarem na linha o robô vira para um lado, se os dois saírem da linha o robô vira para o outro lado.

Os parâmetros da comunicação serial (baud rate, paridade, stop bits, etc) não estão disponíveis no manual da Handyboard. Esse problema foi contornado lendo os dados enquando a handyboard estava conectada ao IC, que definia os parâmetros corretamente. Somente com o hyperterminal ou minicom não conseguimos extrair os dados da handyboard.

Testes de Calibração

Caracterização do sensor

Após montarmos o sensor e prendê-lo ao robô, prosseguimos com a parte de testes de calibração. Com o robô dentro de uma caixa de papelão fizemos os testes com condição de iluminação controlada, com os três leds disponíveis acesos. Realizamos depois os mesmos experimentos com o robô fora da caixa, condição de iluminação variante. Como os motores podem interferir nas medidas, também coletamos sensoreamentos com os motores funcionando. Os resultados obtidos estão nos gráficos abaixo:

Iluminação Controlada
Sinal no tempo Histograma
a a
Iluminação Variante
Sinal no tempo Histograma
a a
Sensoreamento com o motor ligado
Sinal no tempo Histograma
a a

Procuramos depois levantar empiricamente a relação entre a leitura do sensor e a distância ao objeto. Foram feitas medidas 11 medidas com intervalos de 5 mm. Os resultados estão abaixo:

:cursos:introrobotica:2007-2:grupo10:tp0:luz_X_dist.png

Verificamos que a relação se parecia com uma exponencial decrescente então realizamos um ajuste de curva. Os parâmetros encontrados foram

y = 17.3 exp(-0.24x) + 146.6 exp(-0.009x)

A curva dada por essa relação está traçada junto com os pontos coletados. Esse ajuste é não linear.

Influência da superfície e cor do objeto

A distância ótima para identificação de cores foi identificada como 5mm. Essa distância foi obtida observando o espaçamento entre os pontos dos diferentes blocos, em função da distância do bloco. A distância que gerava um espaçamento máximo (5mm) foi então escolhida. Os histogramas foram apresentados na seção anterior.

Interface de sensores

Foram encontrados os limites inferior e superior para o sinal, numa determinada situação e substituidos no programa normal.c. Os valores utilizados foram 113 e 124. Depois disso coletamos dados normalizados, que são mostrados no gráfico abaixo:

:cursos:introrobotica:2007-2:grupo10:tp0:normal.png

A normalização checa se o valor da medida é maior que o máximo ou menor que o mínimo pois os valores máximos e mínimos não são absolutos, dependendo da condição a medida pode ultrapassar os limites escolhidos.

Resultados e Análise

Verificamos que o valor medido pelo sensor decai com o tempo, quando são iniciadas as medidas. Inicialmente supomos que isso era devido ao transitório do acionamento do led, que pode possuir um tempo de acomodação longo. No entento, realizamos alguns testes mantendo os leds apagados e verificamos que tínhamos o mesmo decaimento. Supomos então que esse efeito pode ser devido a um transitório de estabilização da porta. Para os casos das medidas fora da caixa, a média é uma boa medida da tendência do sensor. Já para o caso da medida na caixa, a mediana seria mais apropriada.

O motor causa uma interferência considerável nas medidas. No entanto, como nesse trabalho a deteção dos blocos é feita com o motor parado, esperamos não ter problemas.

Mídia

Gráficos
Visão Frontal LDR e Infravermelho
s4010039thumb.jpgs4010042thumb.jpg
Close LDR Close Infravermelho
closenarizthumb.jpgcloseirthumb.jpg

Código Fonte

O código fonte está disponível em http://tp1-intro-robotica.googlecode.com/svn/trunk/tp2/

Documentação

cursos/introrobotica/2007-2/grupo10/tp2.txt · Última modificação: 2007/10/18 16:31 (edição externa)