LIO-SAM icon indicating copy to clipboard operation
LIO-SAM copied to clipboard

What is the difference between * and *_ incremental?

Open Jack1412 opened this issue 1 year ago • 2 comments

What is the difference between * and *_ incremental, how to understand it. Thank you! Below is a test image: What is the difference between * and *_ incremental

Jack1412 avatar Feb 22 '23 02:02 Jack1412

As far as I understand from the code, here is the difference:

Non-incremental odometries are the best last guess of the robot's location. It may jump after loop closures and GPS measurement integrations.
At the same time, *_incremental odometries are smooth. Those are unaffected by the global optimization (loop closure, GPS updates), and only reflect the best guess of the last motion. The best guess of the last motion is added to the previous incremental odometry. This type of odometry is widely used when the robot jumps badly affect the algorithm, for instance, during robot control, etc.

How those two _incremental odometries are used in LIO-SAM:

Incremental laser odometry ( .../mapping/odometry_incremental ) is used by the IMU Preintegration node to adequately estimate IMU Bias. In case it would use a last-best-guess .../mapping/odometry, the graph would contain sudden jumps, and IMU Bias would be estimated not correctly. Probably, the best way would be to reconstruct that graph every time, using a best-guess path, but I think that would be computationally much heavier.
Incremental IMU odometry ( odometry/imu_incremental ) is used for deskewing in imageProjection.cpp. Again, if it would always store the last best guess, jumps of the position would deskew the pointcloud in the wrong way.

Please correct me if I am wrong. Hopefully, this reply would help.

sevahul avatar Feb 28 '23 14:02 sevahul

As far as I understand from the code, here is the difference:

Non-incremental odometries are the best last guess of the robot's location. It may jump after loop closures and GPS measurement integrations. At the same time, *_incremental odometries are smooth. Those are unaffected by the global optimization (loop closure, GPS updates), and only reflect the best guess of the last motion. The best guess of the last motion is added to the previous incremental odometry. This type of odometry is widely used when the robot jumps badly affect the algorithm, for instance, during robot control, etc.

How those two _incremental odometries are used in LIO-SAM:

Incremental laser odometry ( .../mapping/odometry_incremental ) is used by the IMU Preintegration node to adequately estimate IMU Bias. In case it would use a last-best-guess .../mapping/odometry, the graph would contain sudden jumps, and IMU Bias would be estimated not correctly. Probably, the best way would be to reconstruct that graph every time, using a best-guess path, but I think that would be computationally much heavier. Incremental IMU odometry ( odometry/imu_incremental ) is used for deskewing in imageProjection.cpp. Again, if it would always store the last best guess, jumps of the position would deskew the pointcloud in the wrong way.

Please correct me if I am wrong. Hopefully, this reply would help.

so, if I want to apply LIO-SAM on robot navigation, I should subscribe odometry_incremental?

Nothand0212 avatar Jul 04 '23 09:07 Nothand0212