Hey there,
For my ouster Lidar os1 - 64, and Xsens Mti-680 G. Lio - sam has been setup successfully. The problem which occurs with my lio sam is even after using ptpd synchronization there is still time difference between the ouster lidar and the xsens Imu. The details of the timestamps are as follows.
For the IMU -
rostopic echo /imu/data/header/stamp
secs: 1696934867
nsecs: 493420447
secs: 1696934867
nsecs: 493469791
secs: 1696934867
nsecs: 493500406
secs: 1696934867
nsecs: 493528903
secs: 1696934867
nsecs: 536161880
secs: 1696934867
nsecs: 536211368
For The ouster lidar -
rostopic echo /ouster/points/header/stamp
secs: 1696934920
nsecs: 209591040
secs: 1696934920
nsecs: 309561600
secs: 1696934920
nsecs: 409493760
secs: 1696934920
nsecs: 509417472
secs: 1696934920
nsecs: 609329920
secs: 1696934920
nsecs: 709219328
secs: 1696934920
nsecs: 809160960
secs: 1696934920
nsecs: 909127168
The command I had used is as follows - sudo ptpd -i enp2s0 -M.
This makes the imu drift everytime with ros warning - "Large velocity, reset IMU-preintegration!". My Params.yaml file has following parameters.
lio_sam:
Topics
pointCloudTopic: "ouster/points" # Point cloud data
imuTopic: "/imu/data" # IMU data
odomTopic: "odometry/imu" # IMU pre-preintegration odometry, same frequency as IMU
gpsTopic: "gps/xsens" # GPS odometry topic from navsat, see module_navsat.launch file
useImuHeadingInitialization: true # 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: ouster # lidar sensor type, 'velodyne' or 'ouster' or 'livox'
N_SCAN: 64 # number of lidar channel (i.e., Velodyne/Ouster: 16, 32, 64, 128, Livox Horizon: 6)
Horizon_SCAN: 1024 # lidar horizontal resolution (Velodyne:1800, Ouster:512,1024,2048, Livox Horizon: 4000)
downsampleRate: 1 # default: 1. Downsample your data if too many points. i.e., 16 = 64 / 4, 16 = 16 / 1
lidarMinRange: 1.0 # default: 1.0, minimum lidar range to be used
lidarMaxRange: 100.0 # default: 1000.0, maximum lidar range to be used
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
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
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
Hey there, For my ouster Lidar os1 - 64, and Xsens Mti-680 G. Lio - sam has been setup successfully. The problem which occurs with my lio sam is even after using ptpd synchronization there is still time difference between the ouster lidar and the xsens Imu. The details of the timestamps are as follows. For the IMU -
rostopic echo /imu/data/header/stamp
secs: 1696934867 nsecs: 493420447
secs: 1696934867 nsecs: 493469791
secs: 1696934867 nsecs: 493500406
secs: 1696934867 nsecs: 493528903
secs: 1696934867 nsecs: 536161880
secs: 1696934867 nsecs: 536211368
For The ouster lidar - rostopic echo /ouster/points/header/stamp
secs: 1696934920 nsecs: 209591040
secs: 1696934920 nsecs: 309561600
secs: 1696934920 nsecs: 409493760
secs: 1696934920 nsecs: 509417472
secs: 1696934920 nsecs: 609329920
secs: 1696934920 nsecs: 709219328
secs: 1696934920 nsecs: 809160960
secs: 1696934920 nsecs: 909127168
The command I had used is as follows - sudo ptpd -i enp2s0 -M. This makes the imu drift everytime with ros warning - "Large velocity, reset IMU-preintegration!". My Params.yaml file has following parameters. lio_sam:
Topics
pointCloudTopic: "ouster/points" # Point cloud data imuTopic: "/imu/data" # IMU data odomTopic: "odometry/imu" # IMU pre-preintegration odometry, same frequency as IMU gpsTopic: "gps/xsens" # GPS odometry topic from navsat, see module_navsat.launch file
Frames
lidarFrame: "os_lidar" baselinkFrame: "base_link" odometryFrame: "odom" mapFrame: "map"
GPS Settings
useImuHeadingInitialization: true # 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: ouster # lidar sensor type, 'velodyne' or 'ouster' or 'livox' N_SCAN: 64 # number of lidar channel (i.e., Velodyne/Ouster: 16, 32, 64, 128, Livox Horizon: 6) Horizon_SCAN: 1024 # lidar horizontal resolution (Velodyne:1800, Ouster:512,1024,2048, Livox Horizon: 4000) downsampleRate: 1 # default: 1. Downsample your data if too many points. i.e., 16 = 64 / 4, 16 = 16 / 1 lidarMinRange: 1.0 # default: 1.0, minimum lidar range to be used lidarMaxRange: 100.0 # default: 1000.0, maximum lidar range to be used
IMU Settings
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, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, -1.0] extrinsicRPY: [0.0, -1.0, 0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]
extrinsicRot: [1.0, 0.0, 0.0,
0.0, 1.0, 0.0,
0.0, 0.0, 1.0]
extrinsicRPY: [1.0, 0.0, 0.0,
0.0, 1.0, 0.0,
0.0, 0.0, 1.0]
LOAM feature threshold
edgeThreshold: 1.0 surfThreshold: 0.1 edgeFeatureMinValidNum: 10 surfFeatureMinValidNum: 100
voxel filter paprams
odometrySurfLeafSize: 0.4 # default: 0.4 - outdoor, 0.2 - indoor mappingCornerLeafSize: 0.2 # default: 0.2 - outdoor, 0.1 - indoor mappingSurfLeafSize: 0.4 # 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.15 # seconds, regulate mapping frequency
Surrounding map
surroundingkeyframeAddingDistThreshold: 1.0 # 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)
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 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]
Could you please suggest any of the solutions for this error. Thankyou!