gogojjh / M-LOAM

Robust Odometry and Mapping for Multi-LiDAR Systems with Online Extrinsic Calibration
http://gofile.me/4jm56/zU2yvg3bH
462 stars 89 forks source link

Estimator::buildCalibMap() #7

Closed narutojxl closed 3 years ago

narutojxl commented 3 years ago

Hi doctor jiao, Thanks for your excellent work! When we building local map for each laser sensor, for auxiliary lidar(its index n ≠ IDX_REF), why we assign primary lidar's point into auxiliary lidar, surf_points_local_map_[n], when the for loop n ≠ IDX_REF. pose_local_[n][i] is the transform from primary lidar's pivot frame to auxiliary lidar's i frame, including primary lidar to itself. For example the line 1095 and the 1099. I'm curious about this, don't guess the reason. Could you please give a little explain :), thanks in advance! https://github.com/gogojjh/M-LOAM/blob/2276310f985705a0ee07274068ece3ade798f806/estimator/src/estimator/estimator.cpp#L1084-L1102

gogojjh commented 3 years ago

If you check our paper, the function of buildCalibMap() do two things:

  1. build the local map (lower resolution) of the primary (first) LiDAR and match it with the current point cloud of the primary LiDAR -> for a better odometry
  2. build the local map (higher resolution) of the primary LiDAR and match it with the current point cloud of the auxiliary (other) LiDARs -> for calibration

To make the implementation consistent, the code looks like clumsy... hope you can understand

narutojxl commented 3 years ago

Hi doctor jiao @gogojjh, Thanks for your detailed and kind reply. I'm sorry i have not read the code when ESTIMATE_EXTRINSIC == 0, which calls buildLocalMap(); in this case. The local map of auxiliary laser is constructed by all frames of auxiliary laser in the window. When ESTIMATE_EXTRINSIC == 1, which calls buildCalibMap(); to build.
Thanks again :) , my problems are solved, close it now.