TRABALHO PRÁTICO 2
O robô utilizado no desenvolvimento do TP2 é aquele do TP1, ainda com esteiras e reduzido, porém com pequenas adaptações estruturais para o posicionamento dos sensores.
Caracterização do sensor
A primeira etapa de caracterização constitui-se na montagem dos sensores, testes de medição, análise dos sinais de saída dos sensores, exibição e interpretação dos resultados através de gráficos.
Os sensores de proximidade foram fixados ao chassi do robô, apontando para fora do veículo, e foram denominados “dianteira” e “traseira”.
O comportamento dos sensores foi estudado colocando-os a uma pequena distância de um objeto. A distância variou de 0 a 6mm. Para garantir a exatidão destas distâncias utilizou-se peças LEGO da seguinte maneira:
- 0mm - N/A.
- 2mm - moeda de 10 centavos (2mm de espessura).
- 3mm - peça LEGO que possui quina de 90 graus (lado sem as bolinhas de encaixe).
- 4mm - peça LEGO que possui quina de 90 graus (lado com as bolinhas de encaixe).
- 6mm - duas das peças anteriores, unidas (lado sem as bolinhas de encaixe).
Distância fixa
O primeiro ensaio foi realizado com iluminação constante e também em ambiente normal, para uma distância fixa de 3mm. Para garantir iluminação constante utilizou-se uma caixa de sapatos fechada para cobrir o sistema robô-sensores. O teste em ambiente normal foi realizado no laboratório com luzes acesas, aproximadamente às 19h.
O sinal de saída dos sensores foi amostrado 256 vezes em um intervalo de 5 segundos, com distância fixa de 3mm:
Distância variável
Um segundo ensaio foi realizado para se levantar a curva que expressa a relação da distância sensor-objeto com a saída do sensor:
Como se observa no gráfico acima, a relação não é linear. Tomando faixas de largura 1mm, a relação pode ser considerada linear. Por exemplo, entre 2 e 3 mm, ou 3 e 4 mm. Entretanto, como na prática, frações de milímetro podem ser desprezíveis, não é possível levantar uma função que descreva esse comportamento, nem mesmo por faixas.
Influência dos motores
O teste foi repetido com os motores acionados e iluminação ambiente. Sabe-se que os motores utilizados são cargas basicamente indutivas e que sua operação produz ruídos eletromagnéticos que intereferem na leitura dos sensores.
Observou-se um grande offset no sinal de saída dos sensores nesta condição, quando comparado com as leituras anteriores. Além deste ganho DC, observou-se também que o sinal oscilava em torno de 3 unidades durante a fase de aceleração dos motores, e de 1 unidade quando estes se encontravam em rotação “constante”.
Validação
Como explicado anteriormente, não foi possível realizar uma aproximação linear ou polinomial para a curva saída do sensor x distância. Por isso, não realizou-se a validação encontrando valores a partir da função.
Uma forma possível de se tratar casos não-lineares é tabelar resultados de inúmeros ensaios, para assim relacionar as duas variáveis.
Influência da superfície e cor do objeto
A identificação de cores baseia-se no fato de que a saída de um sensor, para uma dada distância, varia de acordo com a cor do objeto colocado frente a ele. O sensor utilizado para esta tarefa é o de proximidade, e a distância ótima para a detecção, determinada empiricamente é de 3mm.
Primeiramente, realizou-se uma espécia de calibração na qual determinou-se as faixas de valores correspondentes a cada cor. Em seguida, implementou-se uma rotina de detecção constituída basicamente de um switch-case.
Rotina de calibração:
- Requisita que o usuário coloque frente ao sensor dianteiro blocos na seguinte seqüência de cores: nenhum bloco; azul; vermelho; verde; amarelo.
- Os valores de saída do sensor são filtrados através de um filtro da mediana, e assim determina-se o limite inferior e superior de cada faixa, sendo que cada faixa corresponde a uma determinada cor.
Rotina de detecção:
- Com o objeto posicionado frente ao sensor, amostra-se dez vezes o valor de saída do sensor.
- As amostras são filtradas pelo filtro da mediana.
- O valor filtrado atual é então comparado com os limites de faixa então definidos na calibração.
- Imprime a cor correspondente à faixa na qual o valor atual se encontra.
Por vezes ocorrem falhas na detecção, pois o valores de resposta do sensor para alguma cores apresentam-se próximos. Este problema poderia ser resolvido com o emprego de um sensor de maior sensibilidade.
A partir dos valores medidos, para cada cor, construiu-se os gráficos para os dois sensores:
Sensoriamento avançado
A função implementada nesta etapa do trabalho foi a de seguir uma linha escura, com a utilização de sensores de luz (Light Dependent Resistor - LDR). Estes sensores são elementos basicamente resistivos, cuja resistência varia com a incidência de luz.
Inicialmente, testaram-se ambos os sensores sem nenhum tipo de cobertura e estes apresentaram respostas satisfatórias à incidência de luz. Em seguida, cobriram-se os LDR com tubos termo-retráteis, e observou-se perda de sensibilidade, sendo que um dos sensores não apresentava variações de resposta quando oposto a um objeto branco ou preto. Mais tarde, descobriu-se que este sensor era defeituoso e foi substituído.
O primeiro passo foi o desenvolvimento de uma rotina de calibração dos sensores, para definir os dois intervalos de resposta que corresponderiam às duas cores: branca e preta. O robô foi equipado com sensores de proximidade, portanto, a calibração destes sensores também se fez necessária.
A rotina de calibração consiste de posicionar os LDR, nesta ordem: sobre a faixa escura, fora da faixa escura (superfície branca). Em seguida, os sensores de proximidade devem ser posicionados, nesta ordem: longe de paredes, “encostado” em uma parede.
Para cada posição, o sinal de saída dos sensores é amostrado 256 vezes com intervalos de 20ms e estes valores são filtrados através do filtro de mediana. Obtidas as medianas referentes às posições “sobre a faixa escura” e “sobre superfície branca”, é determinada a média aritmética delas, o que se chamou de ponto médio.
Em tempo de execução, a resposta dos sensores é amostrada 4 vezes com intervalos de 2ms, e obtém-se as medianas. Feito isso, para toda mediana maior que o ponto médio, considera-se que o sensor se encontra sobre a faixa escura. Medianas menores que o ponto médio significam que o sensor está fora da faixa. O mesmo procedimento se aplica aos sensores de proximidade.
Um dos entraves desta etapa foi definir qual seria a posição ótima dos LDR no chassi do robô.
Inicialmente, pensou-se em fixar os sensores de forma que ficassem dentro da faixa escura. Esta configuração funcionou bem para a parte reta, porém o robô não percebia as encruzilhadas, isto é, o local onde a faixa forma um “T”.
Uma nova configuração foi adotada, e manteve-se um sensor dentro da faixa escura e o outro fora. O resultado foi melhor, entretanto, o robô percebia as curvas apenas para um dos lados, como era esperado.
Por fim, posicionaram-se os sensores simetricamente fora da faixa. Com esta configuração, o robô percebeu as interseções, entretanto, foi necessário definir para qual direção ele giraria nestes casos, uma vez que ele não está apto a decidir por um caminho.
Uma vez definido que os sensores ficariam fora da faixa escura, se fez necessário definir qual a distância entre cada sensor e a faixa. Inicialmente, fixou-se os sensores o mais próximo da faixa, o que funcionou bem até que o robo ficou na diagonal em relação à faixa preta e neste caso os dois sensores “sentiram” a faixa e o robô tentou virar para os dois lados ao mesmo tempo. A distância entre os sensores e a faixa foi então aumentada, o que otimizou o resultado. Concluiu-se que colocar os sensores próximos às esteiras (rodas) seria melhor, pois garantiria uma menor probabilidade de que o robô ficasse em uma diagonal em relação à faixa.
Definidas as questões estruturais, implementou-se a rotina de direcionamento do robô. Durante o trajeto, caso o robô vire para o lado errado, ele encontrará uma parede em sua frente, o que caracteriza uma exceção, e criou-se uma rotina para tratá-la.
O processo de seguir a faixa escura pode ser organizado na seguinte ordem:
- 1. Calibração
- 2. Loop infinito
- 3. Caso exista uma exceção, trata-a.
- 4. Senão:
- 4.1. Se os dois sensores estão fora da faixa escura: anda em linha reta.
- 4.2. Se os dois sensores estão sobre a faixa escura: gira para a direita do robô.
- 4.3. Se apenas o sensor da direita está sobre a faixa: acelera o motor da esquerda.
- 4.4. Se apenas o sensor da esquerda está sobre a faixa: acelera o motor da direita.
- Tratamento da exceção (encontrou um obstáculo): o robô executa marcha-ré por uma quantidade pré-fixada de tempo e volta ao algoritmo padrão. Encontrando uma faixa escura, ele voltará a segui-la.
Códigos IC TP2
- Códigos implementados para o TP2 - Ler readme.txt para descrição de cada fonte.