rpng / open_vins

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

Dynamic Initialization Can Linear System be Directly Leveraged? #286

Closed jiachenglihxl closed 1 year ago

jiachenglihxl commented 1 year ago

I have read the dynamic initialization part, and, I am wandering if it is possible to only use linear result to init the VIO. Because solve the whole BA requires a lot Computing Power

WoosikLee2510 commented 1 year ago

What's 'linear result'?

yangyulin commented 1 year ago

Linear results are the one directly got by IMU and SFM alignment.

The linear results can be used for initialization. But they are too noisy. Maybe will have a higher failure rates.

Initialization is a one-time thing. I feel it is worth to wait for a good initialization for the system to start

Sent from my iPhone

On Nov 17, 2022, at 11:17 PM, jiachenglihxl @.***> wrote:

 I have read the dynamic initialization part, and, I am wandering if it is possible to only use linear result to init the VIO. Because solve the whole BA requires a lot Computing Power

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.

jiachenglihxl commented 1 year ago

Thanks for your reply, but the thing is that, for example, to solve the full BA may requires more than 0.6s in my Raspberry Pi(less than 30 iterations). If we need to calculate the covariance, it may cost even more... This means after we get the initial state, we need to integrate more than 0.6s to the current which may cause error. By the way, what if I use the stereo, and I get the accurate extrinsic parameter, do you think, is it still necessary to solve the full BA? I think in this configuration using the Linear results may enough.

goldbattle commented 1 year ago

You can try to skip the optimization problem, but I would recommend just tuning the BA parameters it to reduce its run time. You can reduce the number of threads (better for embedded platforms), and reduce the number of features and number of keyframes used.

The issue with just using the linear system is how to recover the initial covariance of the system? This isn't that straightforward, but one could simply hardcode an initial covariance, and directly use the linear system result (estimator might become over confident, or diverge possibly).

jiachenglihxl commented 1 year ago

You can try to skip the optimization problem, but I would recommend just tuning the BA parameters it to reduce its run time. You can reduce the number of threads (better for embedded platforms), and reduce the number of features and number of keyframes used.

The issue with just using the linear system is how to recover the initial covariance of the system? This isn't that straightforward, but one could simply hardcode an initial covariance, and directly use the linear system result (estimator might become over confident, or diverge possibly).

Thanks for you reply, for the covariance issue, I find in the static initial part, the covariance is a just hardcoded one. So, is the covariance really that matters?

By the way , I find in my Raspberry Pi, sloving the initial covariance is really slow and easily to fail. I still haven't figure out the reason.

goldbattle commented 1 year ago

When the system is static, one can very easily design the covariance prior. When moving, how does one determine how accurate the initial orientation and velocity is?