YJZLuckyBoy / liorf

This repo is modified based on LIO_SAM, which remove the feature extraction module and makes it easier to adapt your sensor.
MIT License
368 stars 65 forks source link

Large velocity detected, triggering IMU-preintegration reset --- Livox Horizon Lidar #42

Open venom0619 opened 1 month ago

venom0619 commented 1 month ago

@YJZLuckyBoy I encountered a warning message in my ROS system with the following content:

Large velocity detected, triggering IMU-preintegration reset and unable to build proper map of the environment

  1. Run the following launch commands:

    • roslaunch liorf run_lio_sam_livox.launch
    • roslaunch livox_ros_driver livox_lidar_msg.launch
  2. Modify the lio_sam_livox.yaml configuration file as follows:

    • Set imuTopic to /livox/imu instead of imu_raw.
    • Use pointCloudTopic: "points_raw" for the pointCloudTopic.

Environment:

Can someone help me resolve this issue?

test1-1

test1-2

test1-3

Param File:

liorf:

Topics

pointCloudTopic: "points_raw" # Point cloud data imuTopic: "/livox/imu" # IMU data odomTopic: "odometry/imu" # IMU pre-preintegration odometry, same frequency as IMU gpsTopic: "odometry/gpsz" # GPS odometry topic from navsat, see module_navsat.launch file

Frames

lidarFrame: "base_link" baselinkFrame: "base_link" odometryFrame: "odom" mapFrame: "map"

GPS Settings

useImuHeadingInitialization: false # if using GPS data, set to "true" useGpsElevation: false # if GPS elevation is bad, set to "false" gpsCovThreshold: 2.0 # m^2, threshold for using GPS data poseCovThreshold: 25.0 # m^2, threshold for using GPS data

Export settings

savePCD: false # https://github.com/TixiaoShan/LIO-SAM/issues/3 savePCDDirectory: "/Downloads/LOAM/" # in your home folder, starts and ends with "/". Warning: the code deletes "LOAM" folder then recreates it. See "mapOptimization" for implementation

Sensor Settings

sensor: livox # lidar sensor type, 'velodyne' or 'ouster' or 'livox' or 'robosense' N_SCAN: 6 # number of lidar channel (i.e., Velodyne/Ouster: 16, 32, 64, 128, Livox Horizon: 6) Horizon_SCAN: 4000 # lidar horizontal resolution (Velodyne:1800, Ouster:512,1024,2048, Livox Horizon: 4000) downsampleRate: 1 # default: 1. Downsample your data if too many points(line). i.e., 16 = 64 / 4, 16 = 16 / 1 point_filter_num: 3 # default: 3. Downsample your data if too many points(point). e.g., 16: 1, 32: 5, 64: 8 lidarMinRange: 1.0 # default: 1.0, minimum lidar range to be used lidarMaxRange: 1000.0 # default: 1000.0, maximum lidar range to be used

IMU Settings

imuType: 0 # 0: 6-axis 1: 9-axis imuRate: 200.0 imuAccNoise: 3.9939570888238808e-03 imuGyrNoise: 1.5636343949698187e-03 imuAccBiasN: 6.4356659353532566e-05 imuGyrBiasN: 3.5640318696367613e-05 imuGravity: 9.80511 imuRPYWeight: 0.01

Extrinsics: T_lb (lidar -> imu)

extrinsicTrans: [0.0, 0.0, 0.0] extrinsicRot: [-1, 0, 0, 0, 1, 0, 0, 0, -1]

This parameter is set only when the 9-axis IMU is used, but it must be a high-precision IMU. e.g. MTI-680

extrinsicRPY: [0, -1, 0, 1, 0, 0, 0, 0, 1]

voxel filter paprams

mappingSurfLeafSize: 0.15 # default: 0.4 - outdoor, 0.2 - indoor

robot motion constraint (in case you are using a 2D robot)

z_tollerance: 1000 # meters rotation_tollerance: 1000 # radians

CPU Params

numberOfCores: 4 # number of cores for mapping optimization mappingProcessInterval: 0.0 # seconds, regulate mapping frequency

Surrounding map

surroundingkeyframeAddingDistThreshold: 0.5 # meters, regulate keyframe adding threshold surroundingkeyframeAddingAngleThreshold: 0.2 # radians, regulate keyframe adding threshold surroundingKeyframeDensity: 2.0 # meters, downsample surrounding keyframe poses
surroundingKeyframeSearchRadius: 50.0 # meters, within n meters scan-to-map optimization (when loop closure disabled) surroundingKeyframeMapLeafSize: 0.3 # downsample local map point cloud

Loop closure

loopClosureEnableFlag: true loopClosureFrequency: 1.0 # Hz, regulate loop closure constraint add frequency surroundingKeyframeSize: 50 # submap size (when loop closure enabled) historyKeyframeSearchRadius: 15.0 # meters, key frame that is within n meters from current pose will be considerd for loop closure historyKeyframeSearchTimeDiff: 30.0 # seconds, key frame that is n seconds older will be considered for loop closure historyKeyframeSearchNum: 25 # number of hostory key frames will be fused into a submap for loop closure loopClosureICPSurfLeafSize: 0.3 # downsample icp point cloud
historyKeyframeFitnessScore: 0.3 # icp threshold, the smaller the better alignment

Visualization

globalMapVisualizationSearchRadius: 1000.0 # meters, global map visualization radius globalMapVisualizationPoseDensity: 10.0 # meters, global map visualization keyframe density globalMapVisualizationLeafSize: 1.0 # meters, global map visualization cloud density

Navsat (convert GPS coordinates to Cartesian)

navsat: frequency: 50 wait_for_datum: false delay: 0.0 magnetic_declination_radians: 0 yaw_offset: 0 zero_altitude: true broadcast_utm_transform: false broadcast_utm_transform_as_parent_frame: false publish_filtered_gps: false

EKF for Navsat

ekf_gps: publish_tf: false map_frame: map odom_frame: odom base_link_frame: base_link world_frame: odom

frequency: 50 two_d_mode: false sensor_timeout: 0.01

-------------------------------------

External IMU:

-------------------------------------

imu0: imu_correct

make sure the input is aligned with ROS REP105. "imu_correct" is manually transformed by myself. EKF can also transform the data using tf between your imu and base_link

imu0_config: [false, false, false, true, true, true, false, false, false, false, false, true, true, true, true] imu0_differential: false imu0_queue_size: 50 imu0_remove_gravitational_acceleration: true

-------------------------------------

Odometry (From Navsat):

-------------------------------------

odom0: odometry/gps odom0_config: [true, true, true, false, false, false, false, false, false, false, false, false, false, false, false] odom0_differential: false odom0_queue_size: 10

x y z r p y x_dot y_dot z_dot r_dot p_dot y_dot x_ddot y_ddot z_ddot

process_noise_covariance: [ 1.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.03, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.03, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.04, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.015]

lytkinsa96 commented 1 month ago

The pattern indicates that system fails to initialize (see step "0" in imuPreintegration in odometryHandler).

Try to adjust the priorVelNoise variable.

Also check https://github.com/TixiaoShan/LIO-SAM/issues/104 -- this may help

I encountered a warning message in my ROS system with the following content:

Large velocity detected, triggering IMU-preintegration reset and unable to build proper map of the environment

1. Run the following launch commands:

   * `roslaunch liorf run_lio_sam_livox.launch`
   * `roslaunch livox_ros_driver livox_lidar_msg.launch`

2. Modify the `lio_sam_livox.yaml` configuration file as follows:

   * Set `imuTopic` to `/livox/imu` instead of `imu_raw`.
   * Use `pointCloudTopic: "points_raw"` for the `pointCloudTopic`.

Environment:

* ROS distribution/version: [ROS1 , noetic]

* Operating System: [Ubuntu 20.04]

* using Livox Horizon Lidar

Can someone help me resolve this issue?

test1-1

test1-2

test1-3

venom0619 commented 1 month ago

@lytkinsa96

Thanks for the reply can you be more specific on adjusting the priorVelNoise variable.