Os sonares, como por exemplo o sonar HC-SR04, podem ser usados nos robots autonomos para detestar os obstáculos no seu caminho e assim evitar colidir com eles.
Para isso é necessário saber como funcionam e se comportam de modo a poder desenhar uma solução capaz de detectar todos os obstaculos presentes na trajectória do robot e evitar as colisões.
Tal como todos os tipos de sensores, as leituras produzidas pelo sonar tem erros, que necessitam de ser conhecidos e filtrados.
Para além disso a forma como os sonares funcionam provocam erros de leitura sistemáticos de grande dimensão em situações especificas que importa tomar em consideração no desenvolvimento de qualquer solução.
No artigo sobre sonares, existe mais informação sobre o funcionamento e os tipos de erro de leitura.
Tendo em consideração os erros de reflexão, e os vários ângulos face ao obstáculo que a trajectória do robot pode pode ter, a primeira questão será saber quantos sonares fixos são necessários para detetar de forma eficaz os obstáculos presentes na trajectória do robot.
Essa quantificação deve tomar em conta que a taxa de actualização das leituras diminui com o aumento do número de sonares que é necessário ler.
Número de sonares fixos necessários para evitar colisões
Nesta avaliação que nao pretende ser exaustiva nem efectuada com grande rigor, pretendo determinar quantos sonares fixos são necessários para evitar com eficácia a colisão de obstaculos usando um algoritmo simples.
Na prática, a tarefa de evitar obstaculos é possivel de ser dividida em duas dimensões distintas:
- Detecção de obstaculos
- Controlo de colisão
Estes artigo é essencialmente orientado para detecção de obstaculos em situações de aproximação a obstaculos com uma orientação não perpendicular, reduzida aos angulos entre 0 e 90 graus.
O recurso a vários sonares fixos é necessário para eliminar ou mitigar os erros de falsa reflexão, que acontecem quando o angulo de incidencia é maior que o angulo critico que define o cone de reflexão, o que provoca leituras demasiado longas e incompativeis com a realidade.
No entanto o aumento do numero de sonares tem implicações na frequencia de actualização das leituras de cada um dos sonares, que diminui em proporção ao número de sonares, e por conseguinte na velocidade de resposta do robot.
Tendo em consideração que deve ser preservado um intervalo minimo superior a 29 milisegundos entre cada emissão do pulso, se tivermos 3 sonares já demoram quase um decimo de segundo a efectuarem a rotação, e 6 demoram quase 2 decimos de segundo. O que significa que no caso dos 6 sonares, um robot, com má distribuição da rotação de sensores, que circule a uma velocidade de 10cm por segundo pode andar quase 2 centimetros entre actualizações dos sonares frontais.
Existe portanto um limite ao numero de sensores possiveis de serem aplicados sem por em causa a velocidade de resposta do robot.
Nos testes efectuados foram usados os sonare HC-SR04 , modificados para funcionarem apenas com um fio de sinal.
Foram avaliadas as leituras efectuadas com vários sonares num Arduino Nano 328p e num programa concebido com base no exemplo NewPing15SensorsTimer da biblioteca NewPing.
Num primeiro conjunto de testes usei os quatro sonares montados no robot, dois apontados para a frente, um de cada lado, e um do lado esquerdo mais um do lado direito, ambos na zona frontal, mas os resultados são dequados apenas a situações com apenas um sonar na frente, ou com um sonar na frente e um de cada lado. Os sonares laterais e frontais fazem um angulo de noventa graus entre si.
Num segundo conjunto de testes, adicionei mais dois sonares ao robot, posicionados na zona frontal, direita e esquerda com uma inclinação de quarenta e cinco graus face aos frontais ou aos laterais.
Os testes foram efectuados com um movel de madeira a servir de obstaculo. Um móvel onde os robots já bateram em experiencias anteriores.
Devido a natureza do obstaculo estes teste tem todos o mesmo angulo do cone reflector. Na realidade o cone reflector pode ter de oito a quase 90 graus, consoante o material que o provoca.
Primeiro conjunto de testes aos angulos de leitura dos sonares
O primeiro conjunto de testes foi documentado com fotografias. Assim o rigor ou a sua falta podem ser avaliados.
Foram efectuadas leituras de 5 em 5 graus de 0 a 90 graus a 2 distancias distintas com tres sonares.
As aproximações ao obstaculo foram simuladas pela direita por isso só importam os sonares da frente: um do lado esquerdo (FL) e outro do direito (FR); e o lateral direito (SR).
As leituras efectuadas estão no quadro abaixo.
No quadro são apenas exibidas as leituras adequadas, no espaços a branco as leituras eram incompativeis com a realidade.
Tendo em consideração que o cone emissor tem cerca de 30 graus de amplitude, os resultados obtidos serão explicados caso o cone reflector ter cerca de 30 graus de amplitude.
Nas imagens abaixo, o cone do pulso emissor está a azul, o cone reflector a roxo, o angulo do eixo do pulso a verde, e o sensor é o ponto preto.
Com uma inclinação de 25, como se pode ver à direita, na imagem acima, graus, o ponto preto está dentro do cone reflector (entre as linhas roxas).
Na mesma imagem, à esquerda, está representada a inclinação de 30 graus, e o ponto preto encontra-se no limite do cone reflector.
Quando se passa para a inclinação dos 35 graus, o sonar está fora do cone reflector.
Este teste demonstrou que a aproximação a um obstaculo rectilinio com uma determinada inclinação pode não ser detectada nas seguintes situações:
- com um sonar apontado para a frente, a partir de uma inclinação de cerca de 30 graus para cada lado do eixo do central do pulso de ultrasons. Neste caso, considerando os 90 graus, 60 deles são cegos;
- com dois sonares a 90 graus, a partir de uma inclinação do robot de cerca de 30 graus para cada lado do eixo do robot, até 60 graus. Ou seja ainda existem cerca de 30 graus cegos em 90 graus;
Estes resultados levaram-me a experimentar adicionar mais um sonar a cada um dos lados do robot, orientados com uma inclinação de 45 graus face aos frontais e laterais existentes.
Segundo conjunto de testes ao angulo dos sonares
O segundo conjunto de testes envolveu quatro sonares HC SR-04, mais um que os testes anteriores. O sonar adicional está montado com uma inclinação de 45 graus.
Foram efectuadas leituras de 5 em 5 graus, de 0 a 90 graus. A 2 distancias distintas com 4 sonares.
As aproximações ao obstaculo foram simuladas pela direita por isso só importam os sonares da frente: um do lado esquerdo (FL) e outro do direito (FR); o lateral direito orientado a 45 graus (RF) e o lateral direito já existente no conjunto de testes anterior(RR).
As leituras efectuadas estão no quadro abaixo.
Os dados neste quadro sugerem que se tomarmos em consideração uma intrepretação selectiva das leituras dos sonares existe uma continuidade de leituras adequadas, que pode ser usada para evitar a colisão.
Conclusão
Os dados recolhidos permitem concluir que o número de sonares aumenta a cobertura angular de detecção de obstaculos, de acordo com o seguinte diagrama.

Os dados recolhidos sugerem que nas circunstancias descritas é necessário pelo menos cinco sonares no robot com a seguinte orientação:
- Pelo menos um sonar apontado para a frente;
- Dois sonares laterais, direito e esquerdo, com uma inclinação de 45 graus face aos frontais;
- Dois sonares lateriais, direito e esquerdo, com uma inclinação de 90 graus face aos frontais;
Fotografias de testes aos sonares
Imagens dos testes realizados durante o primeiro conjunto











Resultados de outro teste doméstico mais extenso
https://forum.arduino.cc/index.php?topic=243076.msg1747862#msg1747862
As per my measurements the facts regarding the HC-SR04 are:
– FOV (full cone): horizontal ~20º, vertical ~13º
– Spatial resolution (full cone): ~0.6-1.4º
– Range: tested from 5 to 200 cm
– Accuracy: relative error ~0/5% (-1.3 ±4.6 %); absolute error ~-0.5/-1.5 cm (-0.4 ±1.2 cm).
– Precision: standard deviation ~0.1/0.5 cm (0.3 ±0.6 cm)