LiDAR_IMU_Init icon indicating copy to clipboard operation
LiDAR_IMU_Init copied to clipboard

Livox Horizon反复多次标定,内置IMU的线加速度比激光雷达的线加速度差别非常大,几乎无法重合

Open 85256638 opened this issue 1 year ago • 12 comments
trafficstars

感谢大佬发布高质量的作品。我是用Horizon和其内置的imu进行标定,室外场景,每次激光雷达的线加速度比IMU的线加速度大非常多:

image image

校准结果如下:

Initialization result:
Rotation LiDAR to IMU (degree)     = -1.148407  0.976242  0.077176
Translation LiDAR to IMU (meter)   = -0.079951  0.089463 -0.023574
Time Lag IMU to LiDAR (second)     = -0.008057
Bias of Gyroscope  (rad/s)         = -0.014254  0.000652  0.017108
Bias of Accelerometer (meters/s^2) = -0.010185  0.009784 -0.010027
Gravity in World Frame(meters/s^2) = -0.548225  0.268300 -9.790994

Homogeneous Transformation Matrix from LiDAR to IMU: 
 0.999854 -0.001688  0.017006 -0.079951
 0.001347  0.999798  0.020064  0.089463
-0.017037 -0.020038  0.999654 -0.023574
 0.000000  0.000000  0.000000  1.000000


Refinement result:
Rotation LiDAR to IMU (degree)     = -2.308273  2.146560  0.307814
Translation LiDAR to IMU (meter)   =  0.014408 -0.026519 -0.045003
Time Lag IMU to LiDAR (second)     = -0.008057
Bias of Gyroscope  (rad/s)         =  0.002983 -0.000369 -0.002918
Bias of Accelerometer (meters/s^2) = -0.000807  0.009512 -0.047373
Gravity in World Frame(meters/s^2) = -0.536506  0.255392 -9.765394

Homogeneous Transformation Matrix from LiDAR to IMU: 
 0.999284 -0.006876  0.037206  0.014408
 0.005368  0.999166  0.040474 -0.026519
-0.037453 -0.040245  0.998488 -0.045003
 0.000000  0.000000  0.000000  1.000000

另外一组同样的设备,同样的场景校准结果如下: image image

校准结果如下:

Initialization result:
Rotation LiDAR to IMU (degree)     = -0.648640  0.525992 -0.899704
Translation LiDAR to IMU (meter)   = -0.125558  0.074944 -0.008613
Time Lag IMU to LiDAR (second)     = -0.008028
Bias of Gyroscope  (rad/s)         = 0.003915 0.001149 0.004719
Bias of Accelerometer (meters/s^2) = -0.010200 -0.009895 -0.004655
Gravity in World Frame(meters/s^2) = -0.074485  0.187377 -9.807927

Homogeneous Transformation Matrix from LiDAR to IMU: 
 0.999835  0.015596  0.009355 -0.125558
-0.015700  0.999814  0.011174  0.074944
-0.009179 -0.011319  0.999894 -0.008613
 0.000000  0.000000  0.000000  1.000000


Refinement result:
Rotation LiDAR to IMU (degree)     = -1.405847  1.788843  0.014381
Translation LiDAR to IMU (meter)   = -0.032261  0.003270 -0.116524
Time Lag IMU to LiDAR (second)     = -0.008028
Bias of Gyroscope  (rad/s)         = 0.000219 0.000296 0.001392
Bias of Accelerometer (meters/s^2) = -0.013455 -0.018133 -0.038624
Gravity in World Frame(meters/s^2) = -0.037713  0.161751 -9.782781

Homogeneous Transformation Matrix from LiDAR to IMU: 
 0.999513 -0.001017  0.031198 -0.032261
 0.000251  0.999699  0.024540  0.003270
-0.031214 -0.024520  0.999212 -0.116524
 0.000000  0.000000  0.000000  1.000000

我的horizon.yaml 配置文件如下:

common:
    lid_topic:  "/livox/lidar"
    imu_topic:  "/livox/imu"

preprocess:
    lidar_type: 1                # Livox series LiDAR
    feature_extract_en: false
    scan_line: 6
    blind: 1

initialization:
    cut_frame_num: 5 # must be positive integer
    orig_odom_freq: 10
    mean_acc_norm: 1 # 1: for livox built-in IMU
    online_refine_time: 20.0
    data_accum_length: 500
    Rot_LI_cov: [ 0.00005, 0.00005, 0.00005 ]
    Trans_LI_cov: [ 0.00001, 0.00001, 0.00001 ]

mapping:
    filter_size_surf: 0.3
    filter_size_map: 0.4
    gyr_cov: 50
    acc_cov: 2
    b_acc_cov: 0.0001
    b_gyr_cov: 0.0001
    det_range:     260.0

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: false  # true: output the point cloud scans in IMU-body-frame

pcd_save:
    pcd_save_en: true
    interval: -1                 # how many LiDAR frames saved in each pcd file; 
                                 # -1 : all frames will be saved in ONE pcd file, may lead to memory crash when having too much frames.

希望大佬指点迷津,不吝赐教!

85256638 avatar Sep 19 '24 08:09 85256638

汇报一下:我又重新看了下大神的视频,我发现我的移动方式有问题,不是视频中的这个样子,因此我又重新按照视频里的移动轨迹,重新做了5次校准。结果好了不少,但是还是不够理想:

image

image

image

image

image

image

85256638 avatar Sep 20 '24 04:09 85256638

汇报一下:我又重新看了下大神的视频,我发现我的移动方式有问题,不是视频中的这个样子,因此我又重新按照视频里的移动轨迹,重新做了5次校准。结果好了不少,但是还是不够理想:

image

image

image

image

image

image

加速度的质量很依赖于LO的精度,而LO的精度比较依赖场景,可以尽量选一个平面特征多的场景,比如地下车库,建筑物内部。可以看看你的yaml参数表吗?

zfc-zfc avatar Nov 25 '24 12:11 zfc-zfc

你好,请教一下关于horizon用lidar-imu-init的方法标定,我启动roslaunch lidar_imu_init livox_horizon.launch后,为什么很快三个方向的进度条就都满了?雷达还在原地,根本没有给他三个方向的激励.输出的标定结果也显然完全不对.感谢!

sanbens1234 avatar Nov 29 '24 10:11 sanbens1234

你好,请教一下关于horizon用lidar-imu-init的方法标定,我启动roslaunch lidar_imu_init livox_horizon.launch后,为什么很快三个方向的进度条就都满了?雷达还在原地,根本没有给他三个方向的激励.输出的标定结果也显然完全不对.感谢!

有可能是你的场景太小了,近处有障碍物,试试放在室外?

85256638 avatar Dec 04 '24 05:12 85256638

汇报一下:我又重新看了下大神的视频,我发现我的移动方式有问题,不是视频中的这个样子,因此我又重新按照视频里的移动轨迹,重新做了5次校准。结果好了不少,但是还是不够理想: image image image image image image

加速度的质量很依赖于LO的精度,而LO的精度比较依赖场景,可以尽量选一个平面特征多的场景,比如地下车库,建筑物内部。可以看看你的yaml参数表吗?

哎…我系统重装了…我改天再装一次测试一下。

85256638 avatar Dec 04 '24 05:12 85256638

汇报一下:我又重新看了下大神的视频,我发现我的移动方式有问题,不是视频中的这个样子,因此我又重新按照视频里的移动轨迹,重新做了5次校准。结果好了不少,但是还是不够理想: image image image image image image

加速度的质量很依赖于LO的精度,而LO的精度比较依赖场景,可以尽量选一个平面特征多的场景,比如地下车库,建筑物内部。可以看看你的yaml参数表吗?

哎…我系统重装了…我改天再装一次测试一下。

请问你最后跑出来point-lio的结果怎么样?我看x和y基本没问题,z轴漂移的问题比较严重.另外,标定imu与lidar的时间差似乎没有意义,因为我看源代码,那个参数time_diff_lidar_to_imu最后没有被赋值并使用

sanbens1234 avatar Dec 04 '24 09:12 sanbens1234

汇报一下:我又重新看了下大神的视频,我发现我的移动方式有问题,不是视频中的这个样子,因此我又重新按照视频里的移动轨迹,重新做了5次校准。结果好了不少,但是还是不够理想: image image image image image image

加速度的质量很依赖于LO的精度,而LO的精度比较依赖场景,可以尽量选一个平面特征多的场景,比如地下车库,建筑物内部。可以看看你的yaml参数表吗?

哎…我系统重装了…我改天再装一次测试一下。

请问你最后跑出来point-lio的结果怎么样?我看x和y基本没问题,z轴漂移的问题比较严重.另外,标定imu与lidar的时间差似乎没有意义,因为我看源代码,那个参数time_diff_lidar_to_imu最后没有被赋值并使用

我没有测试过point-lio,有机会测试

85256638 avatar Dec 13 '24 05:12 85256638

汇报一下:我又重新看了下大神的视频,我发现我的移动方式有问题,不是视频中的这个样子,因此我又重新按照视频里的移动轨迹,重新做了5次校准。结果好了不少,但是还是不够理想: image image image image image image

加速度的质量很依赖于LO的精度,而LO的精度比较依赖场景,可以尽量选一个平面特征多的场景,比如地下车库,建筑物内部。可以看看你的yaml参数表吗?

谢谢大佬,我这回换成地下停车场了,线加速度貌似有改善,我总共测试了两次。但是还是不如别人测试出的结果:

测试1:

image

image

image

Initialization Result 1:

Initialization result:
Rotation LiDAR to IMU (degree)     = -1.651767 -0.310123  0.687265
Translation LiDAR to IMU (meter)   = -0.110982 -0.013314 -0.034078
Time Lag IMU to LiDAR (second)     = -0.002122
Bias of Gyroscope  (rad/s)         = 0.001023 0.003493 0.000672
Bias of Accelerometer (meters/s^2) =  0.009924  0.009901 -0.007683
Gravity in World Frame(meters/s^2) = -0.626068  0.481949 -9.778132

Homogeneous Transformation Matrix from LiDAR to IMU: 
 0.999913 -0.011833 -0.005755 -0.110982
 0.011994  0.999515  0.028756 -0.013314
 0.005412 -0.028822  0.999570 -0.034078
 0.000000  0.000000  0.000000  1.000000


Refinement result:
Rotation LiDAR to IMU (degree)     = -1.509254 -0.334247  0.964456
Translation LiDAR to IMU (meter)   =  0.036230  0.024046 -0.013446
Time Lag IMU to LiDAR (second)     = -0.002122
Bias of Gyroscope  (rad/s)         =  0.000203 -0.001716  0.000412
Bias of Accelerometer (meters/s^2) =  0.019986  0.019764 -0.030311
Gravity in World Frame(meters/s^2) = -0.617381  0.476924 -9.759885

Homogeneous Transformation Matrix from LiDAR to IMU: 
 0.999841 -0.016671 -0.006274  0.036230
 0.016831  0.999514  0.026235  0.024046
 0.005833 -0.026336  0.999636 -0.013446
 0.000000  0.000000  0.000000  1.000000

测试2:

image

image

image

Initialization Result 2:

Rotation LiDAR to IMU (degree)     = -0.826641 -0.225618 -0.182743
Translation LiDAR to IMU (meter)   =  0.005643  0.086310 -0.078526
Time Lag IMU to LiDAR (second)     = -0.001803
Bias of Gyroscope  (rad/s)         = -0.003765 -0.003836 -0.002947
Bias of Accelerometer (meters/s^2) =  0.010071  0.009823 -0.010104
Gravity in World Frame(meters/s^2) = -0.524762  0.383424 -9.788448

Homogeneous Transformation Matrix from LiDAR to IMU: 
 0.999987  0.003246 -0.003891  0.005643
-0.003189  0.999891  0.014439  0.086310
 0.003937 -0.014426  0.999888 -0.078526
 0.000000  0.000000  0.000000  1.000000


Refinement result:
Rotation LiDAR to IMU (degree)     = -0.308096 -0.541690  0.925623
Translation LiDAR to IMU (meter)   =  0.076496  0.050379 -0.016162
Time Lag IMU to LiDAR (second)     = -0.001803
Bias of Gyroscope  (rad/s)         =  0.002440 -0.002316 -0.000287
Bias of Accelerometer (meters/s^2) = -0.003373  0.011977 -0.019799
Gravity in World Frame(meters/s^2) = -0.476321  0.350985 -9.767144

Homogeneous Transformation Matrix from LiDAR to IMU: 
 0.999825 -0.016102 -0.009539  0.076496
 0.016153  0.999856  0.005223  0.050379
 0.009453 -0.005377  0.999941 -0.016162
 0.000000  0.000000  0.000000  1.000000

两次测试的.yaml文件都是一样的:

common:
    lid_topic:  "/livox/lidar"
    imu_topic:  "/livox/imu"

preprocess:
    lidar_type: 1                # Livox series LiDAR
    feature_extract_en: false
    scan_line: 6
    blind: 1

initialization:
    cut_frame_num: 5 # must be positive integer
    orig_odom_freq: 10
    mean_acc_norm: 1.0 # 1: for livox built-in IMU
    online_refine_time: 20.0
    data_accum_length: 500
    Rot_LI_cov: [ 0.00005, 0.00005, 0.00005 ]
    Trans_LI_cov: [ 0.00001, 0.00001, 0.00001 ]

mapping:
    filter_size_surf: 0.05
    filter_size_map: 0.15
    gyr_cov: 50
    acc_cov: 2
    b_acc_cov: 0.0001
    b_gyr_cov: 0.0001
    det_range:     260.0

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: false  # true: output the point cloud scans in IMU-body-frame

pcd_save:
    pcd_save_en: true
    interval: -1                 # how many LiDAR frames saved in each pcd file; 
                                 # -1 : all frames will be saved in ONE pcd file, may lead to memory crash when having too much frames.


@zfc-zfc

85256638 avatar Dec 13 '24 05:12 85256638

您好请问下这类数据对比图您是怎么绘制出来的呀? image

shixiaosongye avatar Dec 14 '24 08:12 shixiaosongye

@shixiaosongye 项目目录里面有个matlab_codelog 文件夹。 用matlab_code里面的代码来读取log里面的标定结果就可以绘出上面的图。 如果运行code有错误的话,可以让chatgpt小改一下就行了。

85256638 avatar Dec 15 '24 07:12 85256638

你好,请教一下关于horizon用lidar-imu-init的方法标定,我启动roslaunch lidar_imu_init livox_horizon.launch后,为什么很快三个方向的进度条就都满了?雷达还在原地,根本没有给他三个方向的激励.输出的标定结果也显然完全不对.感谢!

有可能是你的场景太小了,近处有障碍物,试试放在室外?

你用的是激光雷达内置的IMU还是外置的IMU?

85256638 avatar Dec 15 '24 07:12 85256638

汇报一下:我又重新看了下大神的视频,我发现我的移动方式有问题,不是视频中的这个样子,因此我又重新按照视频里的移动轨迹,重新做了5次校准。结果好了不少,但是还是不够理想: image image image image image image

加速度的质量很依赖于LO的精度,而LO的精度比较依赖场景,可以尽量选一个平面特征多的场景,比如地下车库,建筑物内部。可以看看你的yaml参数表吗?

谢谢大佬,我这回换成地下停车场了,线加速度貌似有改善,我总共测试了两次。但是还是不如别人测试出的结果:

测试1:

image

image

image

Initialization Result 1:

Initialization result:
Rotation LiDAR to IMU (degree)     = -1.651767 -0.310123  0.687265
Translation LiDAR to IMU (meter)   = -0.110982 -0.013314 -0.034078
Time Lag IMU to LiDAR (second)     = -0.002122
Bias of Gyroscope  (rad/s)         = 0.001023 0.003493 0.000672
Bias of Accelerometer (meters/s^2) =  0.009924  0.009901 -0.007683
Gravity in World Frame(meters/s^2) = -0.626068  0.481949 -9.778132

Homogeneous Transformation Matrix from LiDAR to IMU: 
 0.999913 -0.011833 -0.005755 -0.110982
 0.011994  0.999515  0.028756 -0.013314
 0.005412 -0.028822  0.999570 -0.034078
 0.000000  0.000000  0.000000  1.000000


Refinement result:
Rotation LiDAR to IMU (degree)     = -1.509254 -0.334247  0.964456
Translation LiDAR to IMU (meter)   =  0.036230  0.024046 -0.013446
Time Lag IMU to LiDAR (second)     = -0.002122
Bias of Gyroscope  (rad/s)         =  0.000203 -0.001716  0.000412
Bias of Accelerometer (meters/s^2) =  0.019986  0.019764 -0.030311
Gravity in World Frame(meters/s^2) = -0.617381  0.476924 -9.759885

Homogeneous Transformation Matrix from LiDAR to IMU: 
 0.999841 -0.016671 -0.006274  0.036230
 0.016831  0.999514  0.026235  0.024046
 0.005833 -0.026336  0.999636 -0.013446
 0.000000  0.000000  0.000000  1.000000

测试2:

image

image

image

Initialization Result 2:

Rotation LiDAR to IMU (degree)     = -0.826641 -0.225618 -0.182743
Translation LiDAR to IMU (meter)   =  0.005643  0.086310 -0.078526
Time Lag IMU to LiDAR (second)     = -0.001803
Bias of Gyroscope  (rad/s)         = -0.003765 -0.003836 -0.002947
Bias of Accelerometer (meters/s^2) =  0.010071  0.009823 -0.010104
Gravity in World Frame(meters/s^2) = -0.524762  0.383424 -9.788448

Homogeneous Transformation Matrix from LiDAR to IMU: 
 0.999987  0.003246 -0.003891  0.005643
-0.003189  0.999891  0.014439  0.086310
 0.003937 -0.014426  0.999888 -0.078526
 0.000000  0.000000  0.000000  1.000000


Refinement result:
Rotation LiDAR to IMU (degree)     = -0.308096 -0.541690  0.925623
Translation LiDAR to IMU (meter)   =  0.076496  0.050379 -0.016162
Time Lag IMU to LiDAR (second)     = -0.001803
Bias of Gyroscope  (rad/s)         =  0.002440 -0.002316 -0.000287
Bias of Accelerometer (meters/s^2) = -0.003373  0.011977 -0.019799
Gravity in World Frame(meters/s^2) = -0.476321  0.350985 -9.767144

Homogeneous Transformation Matrix from LiDAR to IMU: 
 0.999825 -0.016102 -0.009539  0.076496
 0.016153  0.999856  0.005223  0.050379
 0.009453 -0.005377  0.999941 -0.016162
 0.000000  0.000000  0.000000  1.000000

两次测试的.yaml文件都是一样的:

common:
    lid_topic:  "/livox/lidar"
    imu_topic:  "/livox/imu"

preprocess:
    lidar_type: 1                # Livox series LiDAR
    feature_extract_en: false
    scan_line: 6
    blind: 1

initialization:
    cut_frame_num: 5 # must be positive integer
    orig_odom_freq: 10
    mean_acc_norm: 1.0 # 1: for livox built-in IMU
    online_refine_time: 20.0
    data_accum_length: 500
    Rot_LI_cov: [ 0.00005, 0.00005, 0.00005 ]
    Trans_LI_cov: [ 0.00001, 0.00001, 0.00001 ]

mapping:
    filter_size_surf: 0.05
    filter_size_map: 0.15
    gyr_cov: 50
    acc_cov: 2
    b_acc_cov: 0.0001
    b_gyr_cov: 0.0001
    det_range:     260.0

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: false  # true: output the point cloud scans in IMU-body-frame

pcd_save:
    pcd_save_en: true
    interval: -1                 # how many LiDAR frames saved in each pcd file; 
                                 # -1 : all frames will be saved in ONE pcd file, may lead to memory crash when having too much frames.

@zfc-zfc

可以看看initialization阶段的点云地图是否清晰,如果不清晰,可能需要调整下LO的参数。 另外,把data_accum_length调大到1500试试

zfc-zfc avatar Dec 16 '24 06:12 zfc-zfc