MIT-SPARK / Kimera-VIO

Visual Inertial Odometry with SLAM capabilities and 3D Mesh generation.
BSD 2-Clause "Simplified" License
1.56k stars 418 forks source link

How effective is IMU data for odometry? #197

Closed satyamSF closed 12 months ago

satyamSF commented 1 year ago

I am trying to make the Kimera_vio on a mobile robot with Intel D435i. Everything works fine for me as far as mesh generation and 3d reconstruction with kimera_semantics is considered. However, I notice that whenever I try to "slowly" move robot where there are no features in front of the robot or just plain grey floor in sight of the camera, the rviz would show that there is no motion at all. Only when I would have some features, everything works perfect. So my question here is, does IMU not play any significant role here?

Also, I have tested semantics for 3d reconstruction as well and the issue I face there is that if I don't move my robot at all, the semantics package goes to "updating mesh" message alone. I see some complimentary messages "input pointcloud queue getting too big, droping pointclouds" as well. After this, I lose all my frames and only the "world" and "map" frame remains in rviz.

marcusabate commented 1 year ago

The IMU should be pushing the backend to report motion but if the vision frontend is reporting no movement then it becomes a matter of which factors the backend trusts more. If you have an accurate noise model for the imu then it should work. Check if you are using use_2pt_ransac or use_1pt_ransac or similar in the frontend params, this will cause the vision frontend to use the imu for the ransac relative pose estimation and can cause the backend to rely on the imu more.

The second problem sounds like you're running out of memory because the point clouds are getting too big, or there is a slowdown getting messages to the queue. Would recommend opening an issue on the Kimera-Semantics repo with more information (printout of messages, info on your sequence, etc) so we can debug.