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.
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:
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:
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.
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”.
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.
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.
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:
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: