Tabela de conteúdos

Membros

Trabalho Prático 2

Tarefas

Nessa secção apresentaremos as tarefas propostas nesse trabalho juntamente da solução de cada uma delas.

Tarefa 1 - Caracterização do sensor

Parte 1

Monte o sensor ótico no seu robô

Esta tarefa foi realizada com o sensor LDR ao invés do sensor ótico. Isto devido a não familiarização inicial com os sensores. Como nos foi explicado o TP após a realização desta primeira tarefa, coletamos os dados e fizemos as análises errôneamente. Devido a grande quantidade de dados, bem como de gráficos feitos, não refizemos tudo para o sensor ótico. Acreditamos que esta decisão não afeta de forma significativa o resultado do TP final, uma vez que no mesmo não utilizamos estes dados e sim os dados adquiridos nas tarefas posteriores.

Parte 2

Coloque um objeto (uma peça de lego) a uma distância de cerca de 3mm do sensor.

Não foi utilizada peça de lego e sim os blocos coloridos que nos foram fornecidos.

Parte 3

Mantenha as condições de iluminação constantes. Uma das maneiras é cobrir a montagem (robô + objeto) com uma caixa de papelão

As condições de iluminação foram mantidas contantes ao colocarmos o robô no interior de uma caixa e desligarmos as luzes do local e, pelo fato de ser a noite, acreditamos que não houve variação significativa na iluminação do ambiente.

Parte 4

Adquira dados por cerca de 5 segundos.

Foram adquiridas 500 amostras, durante 5 segundos, em cada teste realizado.

Parte 5

Plote um gráfico (MatLab ou Excel) dos dados adquiridos, no qual devem constar o valor médio e o desvio padrão. Como você pode descrever o seu dado?

Os gráficos, médias e desvios padrões foram obtidos por meio do MATLAB. Os resultados seguem abaixo:

Gráficos
fig1_tp2.jpg fig2_tp2.jpg fig3_tp2.jpg
fig4_tp2.jpg fig5_tp2.jpg

As médias adquiridas foram praticamente iguais para todos os blocos, os únicos dados que diferiram um pouco foram os coletados para o bloco amarelo.

Parte 6

Repita os itens I a V sem manter as condições de iluminação contantes, plotando o gráfico da mesma maneira. Qual foi o impacto da (variação ) da iluminação ambiente no dado adquirido?

Os resultados e as observações desta parte se encontram adiante:

Gráficos
fig6_tp2.jpg fig7_tp2.jpg fig8_tp2.jpg
fig9_tp2.jpg fig10_tp2.jpg

A variação dos valores foi muito maior se comparadas com o caso anterior, onde as condições de iluminação foram mantidas constantes. A diferença entre as cores dos blocos se tornou muito mais perceptível, porém muito variável, isto é, as perturbações causada pelo ambiente influenciam muito a resposta do sensor, o qual pode fornecer valores muito diferentes entre pequenos intervalos de tempo.

Parte 7

Levante curvas relacionando a distância de um obstáculo com o valor medido. Realize diversas medidas para cada distância e trace um gráfico Sinal×Distância, mostrando a média e o desvio padrão para cada ponto. Observando o comportamento do sinal, encontre uma função que descreva a relação. A função é linear? Se não for, para qual(is) faixa(s) de valores ela pode ser aproximada por funções lineares?

Foram coletados valores do sensor para distâncias de 0,5cm a 5cm, variando de 0,5cm entre cada distância. As regiões lineares aproximadas foram evidenciadas nos gráficos e suas funções explicitadas em seguida. Foram encontradas duas “regiões lineares”. Os gráficos e as funções foram realizados no MATLAB. Os resultados obtidos foram:

Gráficos
fig11_tp2.jpg fig12_tp2.jpg
fig13_tp2.jpg fig14_tp2.jpg

Funções encontradas para o bloco amarelo:

Primeira aproximação: entre 3.5cm e 2cm

 P(x)= -8.1968 x + 87.2922

Segunda aproximação: entre 2cm e 0cm

 P(x)= -26.9124 x + 122.234

Funções encontradas para o bloco vermelho:

Primeira aproximação: entre 3.5cm e 2cm

 P(x)= -14.432 x + 112.073

Segunda aproximação: entre 2cm e 0cm

 P(x)= -21.0564 x + 125.062

Funções encontradas para o bloco azul:

Primeira aproximação: entre 3.5cm e 2cm

 P(x)= -11.5328 x + 100.031

Segunda aproximação: entre 2cm e 0cm

 P(x)= -28.95 x + 135.027

Funções encontradas para o bloco verde:

Primeira aproximação: entre 3.5cm e 2cm

 P(x)= -8.8676 x + 87.0014

Segunda aproximação: entre 2cm e 0cm

 P(x)= -32.387 6x + 133.752

As regiões lineares foram aproximadas pelas retas pontilhadas. O bloco vermelho, apenas, não foi tão bem aproximado quanto os outros blocos. Se colocada uma histerese, poderíamos fazer tais aproximações lineares, as quais relacionam a cor com a distância, sendo a faixa linear considerada a mesma, visto que o sensor é único.

Parte 8

Repita os itens I a V com ambos os motores acionados. Descreva e explique o resultado obtido.

Os gráficos obtidos para cada bloco, com os motores acionados, podem ser visualizados a seguir. O gráfico que contém as médias encontradas compara as médias obtidas em ambos os casos: com o motor ligado e desligado.

Gráficos
fig15_tp2.jpg fig16_tp2.jpg fig17_tp2.jpg
fig18_tp2.jpg fig19_tp2.jpg

O sinal coletado pelo sensor sofreu uma diminuição de valor. O motor entrou como uma outra fonte de perturbação do sinal. Deve-se levar em consideração que o sistema foi submetido às mesmas condições relatadas nos itens I-V, ou seja, foi colocado no interior de uma caixa e a luz do local foi desligada, havendo apenas a luz do monitor do computador. Porém as medições foram feitas em horário diferentes do dia, um foi feito à noite e outro pela manhã. Portanto, mesmo sendo realizados os mesmos procedimentos, acreditamos que a mudança de horário das medições poderia ter ajudado a diferenciar os valores coletados com os motores ligados. Todavia achamos que o motor ligado influencia de fato na medição, devido a vibrações, por exemplo.

Tarefa 2 - Validação

Coloque o mesmo objeto utilizado a 4 distâncias diferentes das usadas anteriormente e determine o erro médio entre o valor medido pelo sensor e o valor calculado pela sua função.

Seguimos a especificação acima e encontramos os seguintes resultados:

Erro médio para o amarelo
Erro= 10.5491

Erro médio para o vermelho
Erro= 8.7676

Erro médio para o azul
Erro= 14.615

Erro médio para o verde
Erro= 11.2846

A validação foi feita sendo consideradas as duas faixas lineares, portanto foram encontradas duas funções e realizados dois testes para cada uma. O erro médio, porém, foi calculado com os quatro erros encontrados, sem distinção da função utilizada. Ela apresentou resultados não muito satisfatórios principalmente pelo motivo já citado anteriormente que é o recolhimento de dados em horas diferente do dia, de noite ou de dia. Não foi feito um reajuste para tal perturbação, ou mudança de ambiente, por isso os resultados possuíram um erro tão grande.
Podemos perceber que o LDR de fato não pode ser utilizado para detecção de cor, pois os valores médios foram praticamente iguais para todos os blocos, sendo a variação entre as medidas muito grandes. Devido a este fato, utilizamos nas próximas tarefas o sensor ótico.

Tarefa 3 - Influência da superfície e cor do objeto

Parte 1

Utilizando os blocos coloridos de isopor disponíveis no laboratório, determine qual a melhor distância que permita distinguir entre blocos de diferentes cores.

A melhor distância encontrada para detecção de cores foi de 8mm, onde a saída do sensor fornece valores mais diferenciados.

Parte 2

Crie uma interface que mostre o bloco identificado na tela da Handy Board.

O código que tem essa interface de reconhecer blocos ( e de calibragem para realizar tal tarefa) é o mesmo da apresentação, sendo que o código está disponível em um link na última seção, que trata da última tarefa.

Parte 3

Descreva a metodologia usada para determinar a distância. A partir dos valores medidos, apresente um histograma que descreva o comportamento do sensor.

Sugestão tirar:(Para obtermos os valores citados a cima, utilizamos o seguinte procedimento: para algumas distâncias, fizemos, para cada uma 200 medições para os quatro blocos. Em seguida, tiramos a média das médias, duas a duas, sendo que do valor obtido, podemos concluir que quanto maior melhor, uma vez que valores altos implicam em grandes diferenças de valores obtidos entre blocos diferentes.)
Substituir por:
O procedimento utilizado para a escolha da mellhor distância de medida para o sensor foi baseado nos histogramas encontrados para as diferentes medidas feitas. O melhor valor foi considerado como sendo a distância na qual o sensor fornecia valores mais diferentes para as cores e menos valores diferentes para cada cor. Em outras palavras, a melhor distância foi retirada apartir dos hitogramas que mais diferenciaram as cores e possuiram um menor desvio possível. As figuras abaixo evidenciam os resultados encontrados.

Histogramas
parte3amarelo.jpg parte3azul.jpg
parte3verde.jpg parte3vermelho.jpg

O histograma para cada bloco, na distância designada pelo grupo como a melhor distância para medição, é mostrado abaixo.

Histograma
melhordistancia.jpg

Tarefa 4 - Interface de sensores

Parte 1

Leia as seções 2.4 a 2.6 e 3.1 a 3.4.

Feito.

Parte 2

Faça os exercícios 1, 2 e 3 do item “Normalizing Exercices” da pg 85.

Seguem abaixo os exercícios:

Exercício 1:

Para testes do sensor, colocamos os valores de MIN e MAX correspondes ao valor mínimo e máximo, respectivamente, obtidos do sensor ( que foram medidos apontando-o para superfície preta e para a luz).
Em caso de aplicações em que se deve diferenciar 2 tonalidades (preto e branco por exemplo) , deve-se utilizar como valores MIN e MAX, os valores que o sensor obtêm apontado para cada cor.

Os valores MIN e MAX foram determinados executando o seguinte código na handy-board, que apenas lê um sensor analógico e imprime o valor lido. Monitorando o valor impresso para diversas situações (tampando o sensor, apontando-o para a lâmpada, etc), foi possível determinar o valor MIN e MAX.

void main(){
    while( 1 ){
        while ( stop_button() ){
            printf( "%d\n" , analog(5) );
        }
    }
}

Exercício 2:

Sim, a função funciona como previsto. Os valores que conseguimos obter é de 0 a 100, uma vez que os valores MIN e MAX foram determinados.

Segue, abaixo, o código utilizado para testar a função normalize.

int normalize ( int light ){
   int MAX_LIGHT = 250; // determinado empiricamente
   int MIN_LIGHT = 4;   // determinado empiricamente
   int output = 100 -  ((light - MAX_LIGHT) * 100) / (MIN_LIGHT - MAX_LIGHT);
   if (output < 0 ) output = 0 ;
   if (output > 100) output = 100;
 
   return output ;
}
 
void main(){
   while(1){
      printf("Normal = %d\n" , normalize( analog(4) ) );
      msleep( 100L );
   }
}

Exercício 3:

Valores negativos ou valores maiores que 100 podem ser obtidos caso o sensor obter um valor que esta abaixo da constante MIN_LIGHT ou um valor a cima da constante MAX_LIGHT. Isso pode ocorrer, por exemplo, se foi feita uma calibragem errada ou então usou-se um sensor com uma calibragem de outro sensor.

Parte 3

Inicialmente construa apenas um foto-resistor (LDR) (conforme mostrado nas figuras 3.28 e 3.29). Teste esse sensor, conectando-o a uma das portas analógicas da Handy Board (leia atentamente o texto na página 72 : “Not All Ports Are Created Equal”) e escreva um programa para imprimir continuamente o valor da tensão medida (na página 110 há um exemplo).

Segue abaixo o código para ler e imprimir o valor de um sensor analógico continuamente:

void main(){
    while(1) {
        printf("%d\n", analog(5));
    }
}
Parte 4

Assim que dominar o processo para um sensor, construa e conecte outro LDR a uma outra porta analógica e repita os testes. Lembre-se de implementar uma boa interface para interação com o programa e utilize os botões start e stop, para interagir com o programa. Observe como as leituras variam dependendo da qualidade da isolação da luz externa (a parte traseira desses componentes não bloqueia a luz como você poderia imaginar).

Segue abaixo o código para ler e imprimir o valor de sensores analógicos, sendo que o botão start serve para mudar o sensor que está sendo avaliado:

void main(){
   int sensor = 3;
   while(1){
      if ( start_button() ){
        if ( sensor == 3 ) sensor = 5;
        else sensor = 3 ;
      }
      printf("Sensor %d: %d\n" , sensor , analog(sensor) );
      sleep(0.5);
   }
}

Tarefa 5 - Sensoriamento avançado

Leia a seção 6.5 do livro, prestando atenção nos conceitos sobre calibração, condicionamento, e processamento dos sinais de sensores. Faça os exercícios de calibração utilizando o histórico dos sinais medidos (item 6.64, página 293). Complete a montagem do HandyBug com os sensores de luz (LDR) e implemente a função de seguir a linha escura.

Depois de concluirmos a primeira parte dessa tarefa, montamos os sensores em nosso robô como mostrado na secção de fotos. Optamos por utilizar sensores óticos ao invés de sensores de luz para detectar a presença da faixa preta. Os sensores óticos foram escolhidos porque possuem fonte de luz própria (no caso infra-vermelho). Isso faz com que a interferência e o ruído causado por fatores externos alterem muito pouco os valores fornecidos pelo mesmo. Por exemplo, realizamos alguns testes no período da noite quando é necessário ligar as lâmpadas para iluminação do laboratório. Assim, fizemos leitura com essas luzes ligadas e com elas desligas. Os valores encontradas foram praticamente os mesmos. Além dessa pequena influência causada por fatores externos ao sensor, os valores retornados quando o mesmo encontra-se sobre a faixa preta e fora dela, ou seja, sobre a mesa (que possui cor branca), são muito discrepantes, o que facilita a detecção. Sobre a faixa, os sensores (de acordo com várias medições que realizamos) retornam o valor 140 (os valores retornados por sensores analógicos variam de 0 a 255). Já sobre a mesa, o valor retornado é aproximadamente 9. Considerando que a influência sofrida pelos sensores é muito pequena e que a discrepância é grande não criamos uma função de calibração para os sensores.

Com essa montagem foi possível implementar a função de seguir a linha (fita) escura. Antes de apresentar o algoritmo usado, descreveremos como são feitas as leituras nos sensores. Para evitar que um ruído atrapalhe a decisão, cada vez que desejamos ler o valor de um sensor usamos uma função que realiza um número de leituras (esperando um pequeno tempo em milisegundos entre cada uma delas) e o valor retornado é a média aritmética dos valores medidos.

As leituras dos sensores podem configurar quatro situações: os dois sensores na fita preta, apenas o sensor vermelho (ou seja, aquele montado na parte vermelha do robô) fora da faixa, apenas o sensor azul fora da faixa e ambos fora da fita.

Quando ambos estão fora da fita o robô faz um movimento espiralado buscando posicionar-se de modo que algum dos sensores voltem a ficar sobre a fita preta. Assim que esse estado é atingido, o robô deixa de fazer espirais e executa os procedimentos associados ao novo estado: um sensor sobre a faixa preta e outro fora.

Com os dois sensores sobre a faixa preta, o procedimento executado é acionar ambos os motores de forma a tentar obter um movimento retilíneo - que não alcançado devido às inúmeras diferenças entre motores e engrenagens de cada lado do robô. O robô faz isso até que um de seus sensores saia de cima da fita.

Quando o robô está no estado em que apenas um sensor está sobre a faixa significa que o mesmo está saindo para o lado do sensor que não está sobre a faixa - uma vez que na nossa montagem no estado “normal” ambos os sensores ficam sobre a faixa escura - ou seja, o algoritmo consiste em reduzir a potência do motor do lado oposto ao que o robô está saindo da faixa. Assim, o robô irá retornar à faixa de forma suave, o que ajuda a diminuir a “propagação do erro”.

Código do programa

Tarefa 6 - Tarefa a ser mostrada no dia da apresentação

O robô deve ser capaz de identificar a cor dos blocos fornecidos ao grupo e informar na tela da Handy Board. O robô deverá se locomover seguindo a linha preta da mesa montada no laboratório.

Com a interface para reconhecer cor de blocos, e com a função de seguir a linha escura, o robô está pronto para a apresentação.

Fotos

As fotos mostram como foram feitas as montagens dos sensores e da fiação.

Foto1 Foto2 Foto3

Vídeo

Funcionamento

Conclusão

Nesse trabalho tivemos a oportunidade de trabalhar com sensores. Desse modo, foi possível fazer um controle mais elaborado do robô. Os sensores exigem calibração e testes para que o comportamento do mesmo diante dos fatores externos possa ser detectado e, assim, o controle do robô possa ser construído para atender à tarefa especificada. Além disso os testes mostram-se úteis na programação do controle do robô e na escolha do sensor que usaríamos.

Desse modo, construímos com sucesso o robô que cumpre as tarefas que deverão ser mostradas no dia da apresentação desse trabalho prático.

Backup

Backup