====== 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: |{{:cursos:introrobotica:2006-2:grupo2:dianteira.jpg?320x231|Clique para ampliar!}}| {{:cursos:introrobotica:2006-2:grupo2:grafico2.jpg?320x231|Clique para ampliar!}}| == 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: {{:cursos:introrobotica:2006-2:grupo2:var_dist.jpg?320x231|Clique para ampliar! }} 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. |{{:cursos:introrobotica:2006-2:grupo2:motor_dianteira.jpg?320x231|Clique para ampliar!}}| {{:cursos:introrobotica:2006-2:grupo2:motor_traseira.jpg?320x231|Clique para ampliar!}}| 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: |{{:cursos:introrobotica:2006-2:grupo2:cores1.jpg?320x231|Clique para ampliar!}}| {{:cursos:introrobotica:2006-2:grupo2:cores2.jpg?320x231|Clique para ampliar!}}| ---- ==== 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 ==== * {{:cursos:introrobotica:2006-2:grupo2:grupo2tp2codes.zip|Códigos implementados para o TP2}} - Ler readme.txt para descrição de cada fonte.