-
Notifications
You must be signed in to change notification settings - Fork 790
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
Supplement and Adjust OpenVINS Parameters #1145
Conversation
5c14809
to
5a03ad9
Compare
Although OpenVINS will accept features within a certain range in FeatureInitializer. But it only knows the distance of the features when they are triangulated. In the feature detection and tracking stage, if we want to exclude some image areas, such as parts occluded by the robot or vehicle body, we need to use masks. Now we have two mask methods. One is to use pre-drawn mask images like original OpenVINS. The other is to borrow the kVisDepthAsMask parameter in RTAB-Map. This makes the configuration more convenient and the range is adjustable. Using masks can reduce the outlier ratio of feature detection and tracking, making RANSAC more likely to be correct. |
What is this issue? Has it been solved yet? |
Good question, not sure if it was a bug in g2o or in the integration with g2o. We would need to try with latest g2o version to see if there is a problem. Note that I didn't use that code for the past 5 years (and never tested live on a camera, just on euroc dataset) |
I've fixed the covariance part. Now these can be merged. |
Great thank you! |
Hi, @matlabbe
I added more OpenVINS params. Enabling online calibration sometimes improves accuracy, but may also hurt the performance due to degenerate motions. You can refer to the conclusion of this video. Dynamic initialization may be useful for odom reset. Even if it is enabled, the system will try static initialization first. There are also several feature initializer params which may need to be tuned in outdoor scenes.
There’s no need to merge this PR right away. There is another important issue to resolve. We are not using covariance properly. When I was testing in some large scenes recently, I found that after successful loop closure, some neighbor links would be stretched extremely long. And VIO has been working correctly, so I thought it should be a covariance problem. I checked other issues and found that we should use twist covariance, but now pose covariance is set. We should not be able to use get_marginal_covariance() to obtain twist covariance. Because v_IinI and w_IinI are not in the state vector, there is only v_IinG. It seems that twist covariance can only be obtained using fast_state_propagate(). Then we need to rotate it into the base frame. Do I understand correctly?