rpng / MINS

An efficient and robust multisensor-aided inertial navigation system with online calibration that is capable of fusing IMU, camera, LiDAR, GPS/GNSS, and wheel sensors. Use cases: VINS/VIO, GPS-INS, LINS/LIO, multi-sensor fusion for localization and mapping (SLAM). This repository also provides multi-sensor simulation and data.
GNU General Public License v3.0
481 stars 80 forks source link

[label:question] Question about Jacobians `Phi_tr` in UpdaterWheel::preintegration_3D #18

Open qpc001 opened 10 months ago

qpc001 commented 10 months ago

in this line:

Phi_tr.block(3, 0, 3, 3) = -R_3D.transpose() * skew_x(R_3D.transpose() * (new_p - p_3D));

I think new_p is equal to (p_3D + R_3D.transpose()*v*dt), then the line comes to:

Phi_tr.block(3, 0, 3, 3) = -R_3D.transpose() * skew_x(R_3D.transpose() * (R_3D.transpose()*v*dt));

But it seems that the final result should be:

Phi_tr.block(3, 0, 3, 3) = -R_3D.transpose() * skew_x(v*dt));

So I think the origin line should be the following code:

Phi_tr.block(3, 0, 3, 3) = -R_3D.transpose() * skew_x(R_3D * (new_p - p_3D));

Just remove the .transpose()

WoosikLee2510 commented 9 months ago

It is very hard to understand your question, could you refer the lines of the code you read and drive it from there? Also, your second eq doesn't seem right - R_3D.transpose() * (R_3D.transpose()*v*dt) the reference frame should match. I.e., cannot multiply the same rotation matrix R_3D.transpose() * R_3D.transpose().

qpc001 commented 9 months ago

It is very hard to understand your question, could you refer the lines of the code you read and drive it from there? Also, your second eq doesn't seem right - R_3D.transpose() * (R_3D.transpose()*v*dt) the reference frame should match. I.e., cannot multiply the same rotation matrix R_3D.transpose() * R_3D.transpose().

很难理解你的问题,你能参考你读到的代码行并从那里驱动它吗? 此外,你的第二个eq似乎不正确- R_3D.transpose() * (R_3D.transpose()*v*dt)参考框架应该匹配。也就是说,不能乘以相同的旋转矩阵R_3D.transpose() * R_3D.transpose()

But the original code in https://github.com/rpng/MINS/blob/bd115706ec2e617b584f0d1aa7c6e2f775817939/mins/src/update/wheel/UpdaterWheel.cpp#L764 is equal to Phi_tr.block(3, 0, 3, 3) = -R_3D.transpose() * skew_x(R_3D.transpose() * (R_3D.transpose()*v*dt));, if new_p= p_3D + R_3D.transpose()*v*dt