Como lidar com a diafonia do sonar

10

Nosso robô possui uma matriz circular de 12 sensores de sonar que são assim:

insira a descrição da imagem aqui

Os próprios sensores de sonar são muito bons. Usamos um filtro passa-baixo para lidar com o ruído, e as leituras parecem bastante precisas. No entanto, quando o robô se depara com uma superfície plana como uma parede, algo estranho acontece. Os sonares não mostram leituras que indicariam uma parede; ao contrário, parece uma superfície curva.

A plotagem abaixo foi feita quando o robô estava de frente para uma parede. Veja a curva nas linhas azuis, em comparação com a linha vermelha reta. A linha vermelha foi produzida usando uma câmera para detectar a parede, onde as linhas azuis mostram leituras filtradas do sonar.

insira a descrição da imagem aqui

Acreditamos que esse erro ocorre devido à diafonia, na qual o pulso de um sensor de sonar bate na parede em ângulo e é recebido por outro sensor. Este é um erro sistemático, por isso não podemos realmente lidar com isso como faríamos com o ruído. Existem soluções para corrigir isso?

Robz
fonte
relacionados: "Questão Ultrassônica por Telêmetro Múltiplo" . Devo copiar e colar minha própria resposta de lá para cá?
David Cary

Respostas:

10

Este é um problema comum e um de muitos. A detecção acústica é um campo de estudo complicado, parte significativa da qual é adivinhada que caminho uma onda sonora percorreu entre enviá-la e recebê-la. Como você notou, assumir que foi direto e voltou direto produzirá resultados estranhos na prática.

Para realmente resolvê-lo, você precisará usar um sistema que coloque uma frequência e / ou comprimento de tom únicos em cada sensor. Isso pode ser levado a extremos significativos, por exemplo , modulação pseudo-aleatória de largura de pulso com salto de frequência para eliminar a interferência dos sensores de sonar em robôs móveis .

Há também uma solução de baixa tecnologia, que é bastante direta em conceito. Se você quisesse simplesmente detectar a diafonia, seria uma questão de disparar o pulso de um único sensor entre o disparo de todos os pulsos dos sensores. Se você detectar o pulso de retorno com qualquer outro sensor, saberá que está em uma situação de diafonia.

Na prática, isso é um grande desperdício: observe que isso reduz pela metade o número de amostras que você pode colher. Portanto, você pode melhorar a implementação dividindo os sensores em grupos em que cada membro do grupo está longe o suficiente dos outros para que não receba diafonia. A versão mais robusta dessa abordagem é fazer com que os grupos sejam pseudo-aleatórios, o que não apenas permite a média dos erros ao longo do tempo, mas também ajuda na detecção de diafonia em uma base de sensor individual.

No seu caso particular, você tem o benefício adicional de um sensor de câmera que você mostrou retornando um valor mais correto para os intervalos. As estratégias para combinar medições separadas (e possivelmente conflitantes) em uma única estimativa mais precisa são seu próprio tópico muito amplo (chamado de fusão , exemplo 1 , exemplo 2 ), mas muito relevante para o que você está fazendo aqui.

Ian
fonte
5

Alguns sensores, como o Maxbotix MB1200 XL-MaxSonar-EZ0, possuem um sistema de encadeamento integrado onde um sensor aciona o próximo sensor após o término da medição. Dessa forma, você pode ter N sensores e garantir que apenas um esteja disparando ao mesmo tempo, mas que o próximo sensor seja acionado assim que o primeiro receber seu retorno. Essa solução é simples, mas obviamente reduz bastante a quantidade de dados que você obtém por unidade de tempo. As soluções de Ian estão muito mais próximas do ideal.

foobarbecue
fonte
4

É possível usar vários sensores ultrassônicos em um único robô? Sim: "Usando vários sensores de sonar" .

Como você já descobriu, um sensor geralmente recebe ecos de pings enviados por outro sensor. Existem várias maneiras de lidar com a sensibilidade cruzada, aproximadamente pela ordem mais simples:

  • Faça ping apenas em um transdutor por vez, ignorando todos os outros transdutores enquanto aguarda que os "ecos fantasmas" do transdutor atual se extinguam antes de executar o ping no próximo transdutor. Isso é muito mais rápido do que girar mecanicamente um único transdutor. Talvez isso seja rápido o suficiente, a menos que seu robô esteja colidindo com coisas quase na velocidade do som.
  • Use transmissores ou receptores de ângulo de feixe relativamente estreitos (ou ambos) por sensor e aumente o ângulo de um sensor para o próximo para que um sensor não possa ouvir o eco de outro (a menos que o material na frente do transdutor cause algumas reflexões laterais estranhas ) - sensores angulados aproximadamente o mesmo que o ângulo do feixe. Infelizmente, isso deixa "pontos cegos" entre os transdutores, onde os objetos não podem ser vistos por nenhum transdutor.
  • Alguma combinação - por exemplo, aumente o ângulo de um sensor para outro, de modo que um sensor ouça ecos de seus 2 vizinhos (cerca da metade do ângulo do feixe); alterne entre executar ping nos transdutores pares (ignorando os transdutores ímpares) e executar ping nos transdutores ímpares (ignorando os transdutores pares).
  • Cada transdutor operando em uma frequência diferente. Infelizmente, todos os transdutores ultrassônicos de baixo custo, com poucas exceções , são ajustados para ressoar a 40 kHz. Ao ouvir uma variedade de sinais, esses transdutores podem apenas "ouvir" sinais que estão dentro de alguns kHz de 40 kHz. Você precisará equilibrar (a) Quanto mais longe estiver o 40 kHz de um transdutor projetado para 40 kHz, menos sensível ele será; portanto, você deseja uma frequência "relativamente próxima" a 40 kHz; e (a) Quanto mais próximas todas as frequências estiverem juntas, mais difícil será discriminar entre elas; portanto, você deseja um conjunto de frequências que se espalhem "relativamente distantes". Não sei se existe um bom compromisso ou não. Caso contrário, você está preso a (c) usar sensores mais caros ajustados a outras frequências,sensores de "largura de banda larga" não sintonizados em nenhuma frequência específica.
  • Use vários tempos de transmissão para descartar ecos fantasmas. Digamos que você transmita da esquerda, retarde 2 ms (não o suficiente para permitir que os ecos diminuam), depois transmita da direita, ... depois que os ecos diminuam, depois transmita da esquerda, retarde 3 ms e depois transmita da o certo. Se o receptor certo receber um eco de volta 5 ms depois nas duas vezes, você pode ter certeza de que é um eco real; se o receptor direito receber eco 5 ms depois na primeira vez, 6 ms depois na segunda vez, provavelmente é um fantasma do receptor esquerdo. (Existem técnicas muito mais sofisticadas de "espectro de dispersão" para separar muitos transmissores, todos usando a mesma frequência ao mesmo tempo.)
  • Combine os sinais de todos os receptores. Se você tiver um transmissor central que apita em todas as direções (ou equivalentemente, você tem transmissores apontados em todas as direções e os executa ping no mesmo instante), e o primeiro eco retornado atinge primeiro o receptor esquerdo (depois, o direito) receptor ouve um eco), você sabe que o obstáculo mais próximo está mais próximo do lado esquerdo do que do lado direito. (Existem técnicas mais sofisticadas de "arranjo faseado" que combinam sinais de todos os receptores e técnicas ainda mais sofisticadas de "formação de feixe" para ajustar levemente os tempos de transmissão de todos os transmissores.)

PS: Você já viu "Infravermelho vs. Ultrassônico - o que você deve saber" ?

(Sim, eu já disse isso antes, na "Multiple Ultrasonic Rangefinder Question" .)

David Cary
fonte