rpng / open_vins

An open source platform for visual-inertial navigation research.
https://docs.openvins.com
GNU General Public License v3.0
2.06k stars 616 forks source link

NaN problem in dynamic initialization #312

Closed CanCanZeng closed 1 year ago

CanCanZeng commented 1 year ago

Hi, I got NaN velocity for sigmas_vel and sigmas_bg and sigmas_ba sometimes in dynamic initialization, thus cause the system crash later. Maybe the calibration between camera and imu is not very accurate, can you give me some advice on solving this problem?

goldbattle commented 1 year ago

We should probably check that there are no NaNs after covariance recovery... It seems that either the data is invalid or it is some type of degenerate motion. Have you tried increasing the min reciprocal number so that it is more strict (larger)?

On Fri, Mar 3, 2023 at 9:00 PM CanCanZeng @.***> wrote:

Hi, I got NaN velocity for sigmas_vel and sigmas_bg and sigmas_ba sometimes in dynamic initialization, thus cause the system crash later. Maybe the calibration between camera and imu is not very accurate, can you give me some advice on solving this problem?

— Reply to this email directly, view it on GitHub https://github.com/rpng/open_vins/issues/312, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAQ6TYWOAWFEZQTXR5RAPMDW2KO5HANCNFSM6AAAAAAVPIAG3A . You are receiving this because you are subscribed to this thread.Message ID: @.***>

CanCanZeng commented 1 year ago

Yes, you are right! I find that the NaN most probabaly caused by degenerate of motion. So I both increase the min reciprocal number and check the distance between the first frame and the last frame, if the distance is too small, the motion may degenerated. This strategy has worked so far, don't know if there will be other cases in the future.

goldbattle commented 1 year ago

You can try to change the init_imu_thresh and init_max_disparity as when the platform is stationary static initialization can be used directly and skip dynamic initialization. If you have stereo, then you should be able to always initialize right away with the dynamic init (don't know if I have tested this, but since features can be triangulated, it should work).