rpng / open_vins

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

Why is the error status updated without subtracting H*delta{x}? #195

Closed wangyuanbiubiubiu closed 3 years ago

wangyuanbiubiubiu commented 3 years ago

Openvins uses the error-state Kalman Filter method,I find that in the error status update , you don't subtract Hdeltax.(StateHelper::EKFUpdate) `Eigen::VectorXd dx = K res;` I think it should be K(res-H *delta_x), why is there no part about delta_x in the code?

goldbattle commented 3 years ago

Hi, we use an Extended Kalman Filter since these are non-linear measurements. The docs provide an example for how to do it with a linear measurement. https://docs.openvins.com/update.html

I recommend you read up on EKFs or just take a look a wikipedia: https://en.wikipedia.org/wiki/Extended_Kalman_filter

TLDR: We can calculate a perfect residual without linearization errors, so we might as well to avoid the taylor series errors. res = z_meas - h(state)

linzha0 commented 3 years ago

May I ask why the measurement Jacobian H is derivatived with measurement z w.s.t to error-state, but not residual r w.s.t. to error-state? Thanks for the help.

goldbattle commented 3 years ago

Once you linearize the system through a taylor series expansion (which requires the derivative of z in respect to the state), you have a linear measurement. A linear measurement you can directly read out the derivative (and thus the two derivatives you mention will be exactly equal to each other).

poudyalbot commented 3 years ago

Dear sir, im interested in research on the field of visual inertial slam. Recently we are seeing lots of commercialization of slam products like arcore, arkit,slamcore,magic leap , hololens and on the research side we have lots of opensource solutions but my question is what is the main difference between visual inertial slam algorithm developed by companies that makes them robust and efficient whereas opensource code is not. Which aspect of the algorithm we need to work on if we want to make in run on raspberry pi type devices and jetson nano. Thank you

goldbattle commented 3 years ago

Answered via issue #200.