Kit Iniciante Robótica - 9. Robô Anticolisão




Quando estava desenvolvendo os exercícios anteriores da apostila, você provavelmente começou a pensar, "Quero fazer meu robô desviar de objetos", como nos da Robocore sabemos tudo o que você quer, criamos este experimento que atenderá suas necessidades introduzindo como o sensor funciona e sua implementação para detectar obstáculos e medir a distância entre o obstaculo e o robô.

O HC-SR04 trabalha medindo o tempo que uma onda ultrassônica demora para atingir um objeto e voltar. Com esse tempo de ida e volta e a velocidade do som é possível determinar, com auxilio do Julieta a distancia. No sensor, você notará que existem dois cilindros que lembram dois olhos. Um deles é o emissor e o outro o detector.

Características do sensor


Como seu funcionamento se baseia no comportamento de ondas sonoras, o sensor ultrassônico tem algumas limitações. Uma delas é quando mede distancia com objetos angulados, pois quanto mais angulado o objeto esta em relação ao sensor, maior é a dificuldade que a onda ultrassônica tem para retornar ao receptor este efeito ocorre pois objetos muito angulados desviam a trajetória das ondas sonoras. Nota: Mesmo se tratando de ondas sonoras, os ouvidos não são sensíveis a tais ondas pois os sensores trabalham em frequências maiores que a frequência audível.

Detectando Obstáculos


Nesse exemplo iremos simplesmente ler e imprimir os valores do Sensor Ultrassônico para compreender melhor seu funcionamento, para isso vamos usar a biblioteca FalconRobot responsável por obter o tempo de resposta do sensor e calcular a distancia.

Carregue esse código de exemplo para a sua Plataforma Falcon. Para isso, vá em: Arquivo->Exemplos->RoboCore Falcon Robot Library->Exp5_1_DeviatingObstacles ou copie e cole o código de exemplo abaixo.



Após carregar o código para seu robô, abra o Monitor Serial para visualizar a leitura do sensor. Você deve observar uma janela assim:




Exercício: Verificando erros de medição com objetos não perpendiculares.

Para compreender os efeitos que objetos angulados podem causar nas leituras do sensor, faça os seguinte procedimentos a seguir.
Com o robô conectado ao seu computador:
  • Coloque o seu robô sobre sua mesa.
  • Posicione na frente do robô, algum objeto paralelo a mesa. Nessas condições será possível verificar que as leituras do sensor estão corretas, pois será possível verificar que não há grandes variações nas leituras

  • Agora posicione um objeto a frente do sensor com uma angulação maior que 30º com relação a mesa, neste momento quando verificamos as leituras do sensor podemos verificar que as leituras variam muito e portanto o sensor não consegue medir a distância de objetos com muita angulação, resultado dos fenômenos mecânicos que baseiam o funcionamento do sensor.


Agora sabendo como fazer a leitura do sensor ultrassônico é possível programar o robô para evitar colisões assunto que será desenvolvido loga abaixo.

Experimento: Robô Anticolisão.

Sistemas anticolisão são amplamente utilizados hoje em diferentes áreas. Desde o sistema ACAS em aeronaves, que ajudam os pilotos a tomarem ações eficazes para não haver uma colisão entre avião e outros objetos, até sistemas mais simples, encontrados em alguns veículos de passeio. O que esses sistemas tem em comum? A leitura de sensores que auxiliam o usuário ou mesmo fazem com que sejam tomadas atitudes sem a interferência de uma pessoa.
Pensando nisso, este experimento se torna muito interessante, já que vamos fazer com que nosso robô "entenda" o ambiente que está inserido sozinho, e tome ações a partir disso. Atualmente existem competições de robótica onde o robô precisa evacuar uma sala sem ação de humanos, e essa técnica pode ser usada neste caso.

Vamos fazer um exercício mental, pensando qual objetivo queremos alcançar e o que devemos fazer para alcançar esse objetivo. Assim, iremos determinar quais passos devemos trilhar para atingirmos o objetivo do experimento.

Qual objetivo que queremos alcançar ?

Fazer com que o robô ande sem colidir com objetos.

O que devemos fazer para alcançar o objetivo?

Configurar as portas digitais dos motores 1 e 2 e do sensor ultrassonico; fazer a leitura do sensor; e finalmente, acionar os motores, quando a distancia lida pelo sensor for menor que determinada distância.

É claro que em aeronaves e carros existem sensores por toda parte. Em nosso caso iremos fazer algo mais simples, mas muito legal: se houver algum obstáculo na frente do robô, ele deverá tomar uma atitude sozinho. Agora que os passos estão determinados vamos segui-los para desenvolver a programação para o robô anticolisões.

Passo 1:


Configurar as portas digitais dos motores 1 e 2 e do sensor ultrassônico.

Para isso serão utilizadas as funções "FalconRobotMotors", onde é determinado quais pinos da placa Julieta serão usados para os motores, e "FalconRobotDistanceSensor", para o sensor de distância. Como estamos usando funções da biblioteca "FalconRobot.h" não se esqueça de incluí-la também.


Passo 2:


Fazendo a leitura do sensor.

O que devemos ter em mente é que o robô deve atualizar a posição de objetos à sua frente a todo momento e, a partir disso, decidir como acionar os motores. Assim, a primeira coisa que fazemos dentro do void loop é a leitura do sensor ultrassônico HC-SR04 e o armazenamento dessa informação em uma variável. Para a leitura do sensor ultrassônico utilize a função "FalconRobotDistanceSensor".


Passo 3:


Acionar os motores.

Após a leitura do sensores, precisamos determinar uma condição com base nas leituras, para que o robô tome uma decisão. Neste caso, como o propósito é que o robô mude de direção se chegar próximo a objetos, a condição é que se a distância lida for menor que 20cm, devemos parar e girar para um lado (aqui iremos fazer para a direita, mas nada lhe impediria de girar para o outro lado). Para isso, vamos utilizar uma das estruturas condicionais mais usadas, o if ou, em português, "se". Fazendo mais uma vez o exercício mental, o comando dado ao robô deveria ser algo como:


Convertendo o código acima o código seria:



Agora, reúna todas as partes do código e envie-o para a placa:



Resultado esperado:
Com este código o robô de sempre movimentará a direita quando se aproxima a uma distancia menor que 20cm.



Solução de Problemas


Meu robô não está andando no sentido correto!

Inverta a ligação dos motores.

Meu robô não está ligando os motores.

Verifique a chave liga desliga da placa. Verifique também se os motores estão ligados corretamente. Certifique-se se a placa Julieta esta sendo alimentada por alguma fonte externa (pilhas), os motores não serão acionados se a placa for alimentada apenas com a USB.