introlab / odas

ODAS: Open embeddeD Audition System
MIT License
797 stars 253 forks source link

Tunning ODAS for a noisy robot #280

Open TankyFranky opened 1 year ago

TankyFranky commented 1 year ago

My apologies for the length of this issue. I am trying to be as thorugh as possible as my application for ODAS is a bit unique.

I am working on a robot that uses the ReSpeak 4 mic usb array and ODAS to find the direction of an persons voice and explore the environment until it finds them. My issue is that it appears that ODAS is localizing and tracking many false sources. The microphone array is positioned on the robot as shown.

Mic, Motor, and Computer Layout

I have 4 motors positioned relatively close as well as an onboard computer. The motors and computer fan put out a non-zero amount of background noise (similar to a few computer fans) which I think is interfearing with ODAS's ability to track voices. Here is the output shown in ODAS web using the stock configuration file for the ReSpeak mic array. I have also included the config file. This recording was taken in a quite office (besides standard HVAC noises).

ODAS base settings You can see that two sources are tracked in a silent room. The direction of the sources point towards the forward two motors of the robot.

respeak_4_mic_base.txt

Seperated source WAV recordings

I have also noticed a repeatable characteristic when a sound source is introduced. ODAS will succesfully track that sound source, then when the sound source is removed, the tracked source will shift towards an area populated by noise and remain there endlessly.

I conducted a test following the suggestion in Issue 55, setting the active and inactive mu parameters by speaking in the environment and tunning the mu parameters until only the source I want is being tracked. The values that I landed on and the ODAS web output follows. This was done with a loudspeaker playing an audio book fairly loudly at about 7 meters distance. The issue is that the mu levels are so high that at any further distance from the speaker we lose all tracked sources.

active = (
    { weight = 1.0;
    mu = 0.45;
    sigma2 = 0.0025 }
);

inactive = (
    { weight = 1.0;
    mu = 0.35;
    sigma2 = 0.0025 }
);

Here is a small overview about what I am attempting.

Here are adjustments/filtering technics that I am considering and will most likely try soon.

I would like some advice on how to tune ODAS best for my application and opinions on if any of my planned adjustments. I have been reading through many of the adjustments in the config file and am wondering on how I could potentially adjust the sne component (using MCRA) to filter out more fan/motor noise. Are there also any specific sound files I could play over the loudspeaker to increase my chances of the sound source being succesfully tracked at increased ranges?

Thank you for taking time to answer my questions, I will answer any additional questions you might have.

SeanTasker commented 2 months ago

I realise you created this over a year ago but I've recently been using ODAS, so perhaps this is a bit late.