lukasvst / dm-vio-ros

ROS wrapper for DM-VIO: Delayed Marginalization Visual-Inertial Odometry
GNU General Public License v3.0
111 stars 21 forks source link

inc too small, break. #13

Closed JensCallewaert closed 1 year ago

JensCallewaert commented 1 year ago

Hi, me again.

When I try to run the algorithm, it never switches to VIO and stays on Visual-only. This, of course, gives me bad results. I tried to look in the code to find how everything gets calculated but I don't seem to understand why it happens.

I get my calibration from Kalibr, i use EquiDistant because RadTan did not work when trying to calibrate the IMU with my camera.

Screenshot from 2023-04-25 10-08-50 Screenshot from 2023-04-25 10-09-29 calib1.zip

If anyone understand what's going on here, I'd love to hear from you how I can fix this. Cheers!

lukasvst commented 1 year ago

inc too small, break is a normal output of the algorithm during processing. I would recommend to set quiet=1 to suppress some of the commandline output.

Looking at your camera.txt, I think you need to change Pinhole to Equidistant, otherwise the algorithm will expect pre-rectified images. Note that even without IMU, the tracking should still be very accurate (and the pointcloud should look good), as long as you move the camera slowly and carefully. If this is not the case you first need to improve camera calibration before trying to add an IMU.

If VIO still does not initialize, it is best to have a look at the output lines starting with CoarseIMUInit normalized error: DM-VIO will wait with initializing VIO until the variance is smaller than a threshold and will do a full reset if the error is larger than a threshold. If the printed error is always large (even with good visual-only tracking), this suggests that IMU data / IMU calibration / IMU time synchronization is wrong; or that your IMU noise values are too small:

Also, I would highly recommend first trying out the system with the EuRoC and TUM-VI noise values (euroc.yaml / tumvi.yaml), rather than using your own noise values. Switching to own noise values is only recommended if you test it and it improves the results.

JensCallewaert commented 1 year ago

Hi again,

I found the problem. My IMU was only publishing at 10Hz, which is of course way to slow. I managed to amp it up to 97Hz and it went better.

However, I found that the MPU9250 is way too noisy for this kinda stuff and I might order something else. So at the moment, I'll switch to sample data just to be able to have some results.

And I also got RadTan working by switching my IMU to 97Hz.