Bagaimana menghadapi crosstalk sonar

10

Robot kami memiliki array sensor 12 sonar yang berbentuk seperti ini:

masukkan deskripsi gambar di sini

The sensor sonar sendiri cukup bagus. Kami menggunakan filter low-pass untuk menangani kebisingan, dan bacaannya tampaknya cukup akurat. Namun, ketika robot menemukan permukaan datar seperti dinding, sesuatu yang aneh terjadi. Sonar tidak menunjukkan bacaan yang mengindikasikan dinding, sebaliknya, tampak seperti permukaan melengkung.

Plot di bawah ini dibuat ketika robot itu menghadap tembok. Lihat kurva di garis biru, dibandingkan dengan garis merah lurus. Garis merah diproduksi dengan menggunakan kamera untuk mendeteksi dinding, di mana garis biru menunjukkan bacaan sonar yang disaring.

masukkan deskripsi gambar di sini

Kami percaya kesalahan ini disebabkan oleh crosstalk, di mana pulsa sensor satu sonar memantul dari dinding pada sudut dan diterima oleh sensor lain. Ini adalah kesalahan sistematis, jadi kita tidak bisa benar-benar menghadapinya seperti halnya dengan kebisingan. Apakah ada solusi di luar sana untuk memperbaikinya?

Robz
sumber
terkait: "Beberapa Pengintai Ultrasonik Pertanyaan" . Haruskah saya menyalin dan menempelkan jawaban saya sendiri dari sana ke sini?
David Cary

Jawaban:

10

Ini adalah masalah umum, dan salah satu dari banyak masalah. Penginderaan akustik adalah bidang studi yang rumit, yang sebagian besar dihabiskan untuk menebak jalur gelombang suara apa yang diambil antara mengirim dan menerimanya. Seperti yang Anda perhatikan, dengan asumsi bahwa itu langsung keluar dan langsung kembali akan menghasilkan hasil yang aneh dalam praktek.

Untuk benar-benar menyelesaikannya, Anda harus menggunakan sistem yang menempatkan frekuensi unik dan / atau panjang nada pada setiap sensor. Ini dapat diambil ke ekstrem yang signifikan, misalnya Modulasi Lebar Pulsa Pseudo-Random Hopping Frekuensi untuk Menghilangkan Crosstalk Sensor Sonar pada Robot Seluler .

Ada juga solusi berteknologi rendah, yang konsepnya cukup mudah. Jika Anda hanya ingin mendeteksi crosstalk, itu adalah masalah menembakkan pulsa sensor tunggal di antara penembakan pulsa semua sensor. Jika Anda mendeteksi pulsa balik dengan sensor lain, Anda tahu bahwa Anda berada dalam situasi crosstalk.

Dalam praktiknya, ini cukup boros: perhatikan bahwa ini secara efektif membagi dua jumlah sampel yang dapat Anda ambil. Jadi, Anda dapat meningkatkan penerapannya dengan membagi sensor menjadi grup di mana setiap anggota grup cukup jauh dari yang lain sehingga tidak akan menerima crosstalk. Versi paling kuat dari pendekatan ini adalah untuk membuat kelompok itu sendiri menjadi pseudorandom yang tidak hanya memungkinkan kesalahan rata-rata keluar dari waktu ke waktu tetapi membantu deteksi crosstalk pada basis sensor individu.

Dalam kasus khusus Anda, Anda memiliki manfaat tambahan dari sensor kamera yang telah Anda perlihatkan mengembalikan nilai yang lebih benar untuk rentang. Strategi untuk menggabungkan pengukuran yang terpisah (dan mungkin bertentangan) menjadi satu perkiraan yang lebih akurat adalah topiknya sendiri yang sangat luas (disebut fusi , contoh 1 , contoh 2 ), tetapi yang sangat relevan dengan apa yang Anda lakukan di sini.

Ian
sumber
5

Beberapa sensor, seperti Maxbotix MB1200 XL-MaxSonar-EZ0, memiliki sistem rangkaian daisy yang dibangun di mana satu sensor memicu sensor berikutnya setelah selesai pengukurannya. Dengan cara ini Anda dapat memiliki N sensor dan memastikan bahwa hanya satu yang menembak sekaligus tetapi ada sensor berikutnya yang menyala segera setelah yang pertama telah mengumpulkan kembalinya. Solusi ini sederhana tetapi jelas sangat mengurangi jumlah data yang Anda dapatkan per satuan waktu. Solusi Ian jauh lebih dekat ke optimal.

foobarbecue
sumber
4

Apakah mungkin menggunakan beberapa sensor ultrasonik pada robot tunggal? Ya: "Menggunakan Beberapa Sensor Sonar" .

Seperti yang sudah Anda ketahui, satu sensor sering menerima gema ping yang dikirim oleh sensor lain. Ada beberapa cara untuk menangani sensitivitas silang, kira-kira dalam urutan yang paling sederhana terlebih dahulu:

  • Ping hanya satu transduser pada satu waktu, mengabaikan semua transduser lainnya sambil menunggu "hantu bergema" dari transduser saat ini mati sebelum melakukan ping transduser berikutnya. Ini jauh lebih cepat daripada memutar transduser secara mekanis. Mungkin ini akan cukup cepat, kecuali jika robot Anda menabrak benda dengan kecepatan suara yang hampir sama.
  • Gunakan pemancar atau penerima sudut balok yang relatif sempit (atau keduanya) per sensor, dan tingkatkan sudut dari satu sensor ke sensor lainnya sehingga satu sensor tidak dapat mendengar gema dari yang lain (kecuali benda-benda di depan transduser menyebabkan beberapa pantulan lateral yang aneh ) - sensor yang dipisah kira-kira sama dengan sudut balok. Sayangnya, ini meninggalkan "titik buta" antara transduser di mana objek tidak dapat dilihat oleh transduser apa pun.
  • Beberapa kombinasi - misalnya, tambah sudut dari satu sensor ke sensor lainnya sehingga satu sensor hanya mendengar gema dari 2 tetangganya (sekitar setengah sudut balok); kemudian bergantian antara melakukan ping transduser genap (mengabaikan transduser ganjil) dan ping transduser ganjil (mengabaikan transduser genap).
  • Setiap transduser beroperasi pada frekuensi yang berbeda. Sayangnya, semua transduser ultrasonik berbiaya rendah, dengan beberapa pengecualian , disetel untuk beresonansi pada 40 kHz. Saat mendengarkan berbagai sinyal, transduser ini hanya dapat "mendengar" sinyal yang berada dalam beberapa kHz 40 kHz. Anda harus menyeimbangkan (a) Semakin jauh dari 40 kHz yang Anda gunakan pada transduser yang dirancang untuk 40 kHz, semakin tidak sensitif, sehingga Anda ingin frekuensi "relatif dekat" ke 40 kHz; dan (a) Semakin dekat semua frekuensinya, semakin sulit untuk membedakannya, sehingga Anda menginginkan seperangkat frekuensi yang tersebar "berjauhan". Saya tidak tahu apakah ada kompromi yang baik atau tidak - jika tidak, Anda terjebak dengan (c) menggunakan sensor yang lebih mahal yang disetel ke frekuensi lain,Sensor "bandwidth lebar" tidak disetel ke frekuensi tertentu.
  • Gunakan berbagai timing pengiriman untuk menyingkirkan gema hantu. Katakanlah Anda mentransmisikan dari kiri, tunda 2 ms (hampir tidak cukup untuk membiarkan gema mati), kemudian mentransmisikan dari kanan, ... setelah gema mati, kemudian mentransmisikan dari kiri, tunda 3 ms, kemudian mentransmisikan dari hak. Jika penerima yang tepat mendapatkan kembali gema 5 ms kemudian kedua kali, maka Anda bisa yakin itu adalah gema nyata; jika penerima yang tepat mendapat gema kembali 5 ms nanti pertama kali, 6 ms nanti kedua kalinya, itu mungkin hantu dari penerima kiri. (Ada teknik "spread spectrum" yang jauh lebih canggih untuk memisahkan banyak pemancar semua menggunakan frekuensi yang sama pada waktu yang sama.)
  • Gabungkan sinyal dari semua penerima. Jika Anda memiliki satu pemancar pusat yang ping ke segala arah (atau Anda memiliki pemancar yang menunjuk ke segala arah, dan Anda mem-ping semuanya pada saat yang bersamaan), dan gema pertama yang Anda dapatkan kembali mengenai penerima di sebelah kiri terlebih dahulu (kemudian di sebelah kanan di sebelah kanan). penerima mendengar gema), Anda tahu bahwa hambatan terdekat lebih dekat ke sisi kiri daripada sisi kanan. (Ada teknik "array bertahap" yang lebih canggih yang menggabungkan sinyal dari semua penerima, dan teknik "beamforming" yang lebih canggih untuk sedikit menyesuaikan waktu transmisi semua pemancar.)

PS: Pernahkah Anda melihat "Infrared vs. Ultrasonic - Yang Harus Anda Ketahui" ?

(Ya, saya sudah mengatakan ini sebelumnya, di "Multiple Ultrasonic Rangefinder Question" .)

David Cary
sumber