YWL0720 / FAST-LOCALIZATION

A LiDAR-Inertial localization package based on FAST-LIO2, operating with a known prior map.
GNU General Public License v2.0
144 stars 17 forks source link

Only the first frame can match #10

Open BcnMa opened 7 months ago

BcnMa commented 7 months ago

My lidar is a MID360, placed upside down on the robot, mapped through your FAST LIO package, and ran the result in FAST-LOCALIZATION, but only the first frame matched and the effect was good, and then it started Very serious drift, how should I solve it?

YWL0720 commented 7 months ago

If it's convenient, you can send me your dataset and I'll conduct a test to check where the problem is coming from.

BcnMa commented 7 months ago

Thank you for your help,here is the link to my dataset. https://drive.google.com/file/d/1uvcEL8cqEKgXLLmhEUKVqklCAnA39RL1/view?usp=drive_link

seungjae99 commented 2 months ago

@YWL0720

Hello, thank you for your excellent work.

I'm currently experiencing the same issue. Initially, everything fits well, but after 2-3 seconds, it starts to drift significantly.

I used an Xsens IMU, so I updated the mid360.yaml file according to the results from LiDAR_IMU_Init.

common:
    lid_topic:  "/livox/lidar"
    imu_topic:  "/imu/data"
    time_sync_en: false         # ONLY turn on when external time synchronization is really not possible
    time_offset_lidar_to_imu: -0.005871 # Time offset between lidar and IMU calibrated by other algorithms, e.g. LI-Init (can be found in README).
                                  # This param will take effect no matter what time_sync_en is. So if the time offset is not known exactly, please set as 0.0
    localization_mode: 1          # 1 for given init pose, 2 for dynamic init
preprocess:
    lidar_type: 1                # 1 for Livox serials LiDAR, 2 for Velodyne LiDAR, 3 for ouster LiDAR, 
    scan_line: 4
    blind: 0.5

mapping:
    acc_cov: 0.1
    gyr_cov: 0.1
    b_acc_cov: 0.0001
    b_gyr_cov: 0.0001
    fov_degree:    360
    det_range:     100.0
    extrinsic_est_en:  true      # true: enable the online estimation of IMU-LiDAR extrinsic
    extrinsic_T: [ -0.005493, 0.100548, 0.063784 ]
    extrinsic_R: [ 2.955009, 0, 0,
                   0, 0.446404, 0,
                   0, 0, -2.249927]

publish:
    path_en:  true
    scan_publish_en:  true       # false: close all the point cloud output
    dense_publish_en: true       # false: low down the points number in a global-frame point clouds scan.
    scan_bodyframe_pub_en: true  # true: output the point cloud scans in IMU-body-frame

pcd_save:
    pcd_save_en: true
    interval: -1  

Here is my bag file.

https://drive.google.com/file/d/1xo4kczCZlenbRv1dfkr0bpFXZ9oRMS62/view?usp=drive_link

thanks

BcnMa commented 2 months ago

My problem was finally solved by the ICP algorithm

seungjae99 commented 2 months ago

My problem was finally solved by the ICP algorithm

Could you please explain the ICP algorithm in more detail? i'm beginner, so I appreciate your help.

I have changed the extrinR and extrinT values to vector<double> extrinT = {-0.005493, 0.100548, 0.063784}; vector<double> extrinR = {2.955009, 0, 0, 0.446404, 0, 0, 0, -2.249927};

That i got from the calibration result. but anything changed.

Now, I'm looking into the ICP algorithm section of the global_localization() function in the lasermapping.cpp file, but I'm not sure what to modify. Should I change the setMaxCorrespondenceDistance()?

thanks