Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
85256638 opened this issue Sep 19, 2024 · 12 comments

Comments

@85256638
Copy link

85256638 commented Sep 19, 2024

感谢大佬发布高质量的作品。我是用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
Copy link
Author

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

image

image

image

image

image

image

@zfc-zfc
Copy link
Collaborator

zfc-zfc commented Nov 25, 2024

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

image

image

image

image

image

image

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

@sanbens1234
Copy link

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

@85256638
Copy link
Author

85256638 commented Dec 4, 2024

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

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

@85256638
Copy link
Author

85256638 commented Dec 4, 2024

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

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

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

@sanbens1234
Copy link

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

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

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

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

@85256638
Copy link
Author

汇报一下:我又重新看了下大神的视频,我发现我的移动方式有问题,不是视频中的这个样子,因此我又重新按照视频里的移动轨迹,重新做了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
Copy link
Author

85256638 commented Dec 13, 2024

汇报一下:我又重新看了下大神的视频,我发现我的移动方式有问题,不是视频中的这个样子,因此我又重新按照视频里的移动轨迹,重新做了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

@shixiaosongye
Copy link

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

@85256638
Copy link
Author

85256638 commented Dec 15, 2024

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

@85256638
Copy link
Author

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

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

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

@zfc-zfc
Copy link
Collaborator

zfc-zfc commented Dec 16, 2024

汇报一下:我又重新看了下大神的视频,我发现我的移动方式有问题,不是视频中的这个样子,因此我又重新按照视频里的移动轨迹,重新做了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试试

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants