Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tunning ODAS for a noisy robot #280

Open
TankyFranky opened this issue Apr 21, 2023 · 1 comment
Open

Tunning ODAS for a noisy robot #280

TankyFranky opened this issue Apr 21, 2023 · 1 comment

Comments

@TankyFranky
Copy link

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.

  • Attempting to track speach at medium to long ranges, say across an office.
  • I don't care about the intelligableness of the speech just that ODAS can track it and can provide a vector pointing at it
  • My experiments will consist of a quiet room except for the noise of the robot and the speak/sound source

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

  • Mounting the mic array at a distance from the robot (giving the robot a unicorn horn)
  • Applying a noise pre-filtering step unsing noisreduce
  • Using an audio classification network on the SSS outputs from ODAS (tested this using mediapip Audio Classification/YAMNet demo but not great results so far because of noise) to determine which vector to follow.

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
Copy link

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

  • Did you find out how to tune the sne component?
  • Have you tried using the spatialfilters configuration to ignore cones from each leg of the robot?
  • Do you have access to another array? Respeak has omnidirectional microphones which would be picking up all of the extra noise. An array with more direction mics might be better in the described scenario? see https://www.ncbi.nlm.nih.gov/pmc/articles/PMC9131248/ for more details on how the separation uses the orientation information.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants