ctu-mrs / mrs_vins_imu_filter

Filtering of IMU data to be used in VINS algorithms
5 stars 1 forks source link

Resources about the filter #1

Closed maulanaazhari closed 1 month ago

maulanaazhari commented 2 months ago

Hi! Thanks for sharing this!

There are some questions I would like to ask regarding the filters. Is there any results comparison between with and without the filter? Background theory about the filter? or guidelines in implementing this filter in our setup?

These information would be really helpful for us to decide whether to use it or not

Thank you!

petrlmat commented 2 months ago

Hi, we don't have any direct comparison of with and w/o filtering. From our experience, when the IMU is rigidly attached to the same frame as the motors, the amplitude of the vibrations is so high that VIO algorithms cannot work at all without filtering. Of course, it depends on the specific VIO/LIO algorithm but generally, they tend to rely on the inertial measurements a lot.

As for the design of the filter, first, you should analyze the spectrum of the IMU noise while the UAV is hovering and while flying at full thrust to establish the range of vibration frequencies. Then you can experiment either with a notch filter that covers this range or you can design a low-pass filter (LPF) that filters out all high frequencies. We generally use a 1st order Butterworth LPF on our drones. The attenuation of a 1st order filter at the cutoff frequency is 3 dB and the slope is 20 dB/decade, so the cutoff frequency should be lower than the actual frequency of the vibrations. We didn't experiment with higher-order filters, which have a higher slope but also a higher delay.

maulanaazhari commented 1 month ago

Thanks for the explanation.

Our setup is quite similar with your experience. Specifically we tried to use open_vins with oakd single camera with its IMU. So far we experienced a really big vibration around +/- 7 m/s^2 and once we used the filter it was reduced to around +/- 3 m/s^2. Unfortunately we failed to get a good result with open_vins + mrs_vins_imu_filter.

Do you have any suggestions?

petrlmat commented 1 month ago

Our biggest issue was that the IMU data was sent in batches from the OAK-D camera with delays of tens of ms between the batches. (see https://github.com/luxonis/depthai-ros/issues/474) . We did not manage to make open_vins reliable with the OAK-D so we focused on developing our own camera + IMU solution. Regarding the vibrations we have ~3 m/s^2 with our IMU module and HW dampening and ~0.2m/s^2 after filtration.

maulanaazhari commented 1 month ago

Thank you very much for the insights, I also notice the batches of IMU from OAK-D. However, we managed to make open_vins works with handheld data (not flying the drone), so we thought it was mainly the vibration problem. Anyway, we will try other camera-imu setup.