cggos / imu_x_fusion

IMU + X(GNSS, 6DoF Odom) Loosely-Coupled Fusion Localization based on ESKF, IEKF, UKF(UKF/SPKF, JUKF, SVD-UKF) and MAP
https://msf.cgabc.xyz/
GNU General Public License v3.0
919 stars 163 forks source link

question about the measurementH of VO #5

Open SkyPigZhu opened 3 years ago

SkyPigZhu commented 3 years ago

I see code "Eigen::Quaterniond q1(vo_q.toRotationMatrix() * Tcb.linear());" Is not the same as the formula in your article

cggos commented 3 years ago

@SkyPigZhu the formula of the measurement Jacobian in code measurementH() is defined as -r(x)/delta X while the form of h(x)/delta X is defined in my article.

SkyPigZhu commented 3 years ago

ok, thanks , and I find that if the measurement is not very accurate(such as the position has a average error of 15 mm , angle error is 5-6degree), the eskf system's perfoemance is not very good , the corrected vel is not accurate , and the corrected positoion will be volatility, can give some suggestions about the problem?

SkyPigZhu commented 3 years ago

Eigen::Quaterniond q1(vo_q.toRotationMatrix() Tcb.linear()); Eigen::Matrix4d m4 = quat_left_matrix((q2 q0).normalized()) * quat_right_matrix(q1.conjugate());

why the code is q1 = vo_q.toRotationMatrix() * Tcb.linear() ,but thr formula in article is q1= cb.linear()?

cggos commented 3 years ago

Eigen::Quaterniond q1(vo_q.toRotationMatrix() Tcb.linear()); Eigen::Matrix4d m4 = quat_left_matrix((q2 q0).normalized()) * quat_right_matrix(q1.conjugate());

why the code is q1 = vo_q.toRotationMatrix() * Tcb.linear() ,but thr formula in article is q1= cb.linear()?

the formula of the measurement Jacobian in code measurementH() is defined as -r(x)/delta X while the form of h(x)/delta X is defined in my article.

the definition of measurement residual and Jacobian matrix in the code is as below:

522466259

1046787145

cggos commented 3 years ago

ok, thanks , and I find that if the measurement is not very accurate(such as the position has a average error of 15 mm , angle error is 5-6degree), the eskf system's perfoemance is not very good , the corrected vel is not accurate , and the corrected positoion will be volatility, can give some suggestions about the problem?

@SkyPigZhu it is a demo project that i wrote to study and practice sensor fusion algrithms, and it is not accuracy and robust in some cases. you can optimize it and fork and pull request.

zzhh00 commented 3 years ago

@cggos Thanks for your codes. Besides what is the meaning of the subscript bn in the measurement function h(x)?

cggos commented 3 years ago

@cggos Thanks for your codes. Besides what is the meaning of the subscript bn in the measurement function h(x)?

@zzhh00 the Bn is the IMU coordinate of the nth frame

cggos commented 3 years ago

presentation of the algorithm: https://www.researchgate.net/publication/353330937_IMU_and_VO_Loose_Fusion_based_on_ESKF

zzhh00 commented 3 years ago

@cggos Are you sure it is bn instead of bm?

cggos commented 3 years ago

@cggos Are you sure it is bn instead of bm?

@zzhh00 you can reference the sketch below which the code based on or the presentation/publication in ResearchGate

MSF-2

zzhh00 commented 3 years ago

@cggos Thanks for your reply. However why the measurement is not Tc0cm? As your formula, the measurement is Tc0cm*Tcmcn=Tc0cn. It is obvious that cm refers to the measurement frame from camera. We get the Tcmcn through imu, why we use the value of imu in the measurement function?

cggos commented 3 years ago

@zzhh00

zzhh00 commented 3 years ago

@cggos Thank you.