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激光雷达和相机联合标定最好最方便的方法! #36

Open
xiehao-ai opened this issue Dec 11, 2023 · 6 comments

Comments

@xiehao-ai
Copy link

感谢作者的开源代码!

曾经尝试过6种方法进行livox雷达和相机的联合标定,包括livox官方开源的那两个。从效果上看,还是基于标定板的方法靠谱,很多自动标定的方法对采集环境的要求太高,现实很难找到理想的场地去完成标定;matlab高版本中也有集成的激光雷达相机联合标定方法,但是使用起来稍微繁琐一点,而且标定效果也不稳定。

由于作者的开源代码标定的效果太好了,完美解决了我遇到的问题,欣喜之余分享一下我使用作者代码标定的一些经验。

使用多台设备多次标定,结果都是一次成功。
如果使用该方法标定结果稍有差异(很少出现),可以将代码中生成的标定板3d点和2d点存下来,使用livox官方提供的手工标定方法,直接替换那两个存储3d和2d点的txt文件,使用同时优化外参和内参的方法,可以达到理想的标定效果。

系统环境:ubuntu20.04,pothon3.8,ROS1-noetic
激光雷达: Livox-AVIA
相机:1200W/800W像素
高质量黑白棋盘格标定板及单杆立式固定支架

我配置的环境:
pip install numpy==1.23
pip install scipy
pip install scikit-learn
pip install rospy
pip install rospkg
pip install pyyaml
pip install transforms3d
sudo apt-get install ros-noetic-ros-numpy

建立链接:
ln -s /usr/bin/python3 /usr/bin/python

由于使用的为python3,相关源码需要进行修改:
我使用的相机没有对应的ROS驱动,因此图像采集使用cheese,代码中图像采集相关的代码被我注释掉了

cd /path/to/your/ACSC/ros/livox_calibration_ws/src/calibration_data_collection/scripts

打开文件夹下唯一的py文件,修改第11、40、41、310、328、344行

Line11: import thread 修改为 import _thread

Line40、41: 将第41行注释掉,并将第40行取消注释

Line 310: 将该行注释掉

Line328: thread.start_new_thread 修改为 _thread.start_new_thread

Line344: 将此行注释掉

修改ros中的launch文件
cd path/to/your/ACSC/ros/livox_calibration_ws/src/calibration_data_collection/launch/lidar_camera_calibration.launch
将config-path 设置为 data_collection.yaml 的路径

之后catkin_make编译,按照作者的教程就可以进行标定了,我采集了30组数据左右

最后放一张标定效果图像:
Uploading 0.jpg…

@xiehao-ai
Copy link
Author

0

@QianZhao-xd
Copy link

你好,我也是使用AVIA激光雷达进行的实验,但是效果不太好,从您这个结果图来看AVIA的视场角好像是不大的,是有什么调整的方式吗,我的Avia拍摄出来的标定板上的点云格子之间边界不清晰,大概能有1~2cm重合的绿线,不知道是不是这个原因我的结果误差很大,想请问一下您是否有这种情况呢
微信图片_20240423115430

@xiehao-ai
Copy link
Author

你好,我也是使用AVIA激光雷达进行的实验,但是效果不太好,从您这个结果图来看AVIA的视场角好像是不大的,是有什么调整的方式吗,我的Avia拍摄出来的标定板上的点云格子之间边界不清晰,大概能有1~2cm重合的绿线,不知道是不是这个原因我的结果误差很大,想请问一下您是否有这种情况呢 微信图片_20240423115430

  1. “我的Avia拍摄出来的标定板上的点云格子之间边界不清晰,大概能有1~2cm重合的绿线,不知道是不是这个原因我的结果误差很大”,绿色细线有可能是不同的标定板材质的影响,而且Livox雷达本身采集到的点云也是有噪声的,获得的标定板点云并不是那么干净。
  2. “我也是使用AVIA激光雷达进行的实验,但是效果不太好”,有完整的点云投影图片吗,从你发的图片上看不出整体的标定效果。
  3. "AVIA的视场角好像是不大的,是有什么调整的方式吗”,雷达的视场角是固定的,雷达和相机需要考虑视野匹配,我用的相机的视野在水平方向上比雷达大,在垂直方向上比雷达小,在实际标定过程中我修改了config/data_collection.yaml中BOUND,改为: [2, 12, -8, 8, -2, 2],这个要根据自己使用的雷达和相机的视野进行设置
  4. 我在实际标定中也遇到过标定效果不理想的情况,可能的原因如下:a) 相机内参不够准确 b)图像没有进行去畸变处理 c)采集的标定数据不够理想(比如标定板的放置方式,可参照论文中的摆放要求)。
  5. 如果标定效果没有满足你的要求,可以修改config/sample.yaml中OPTIMIZE_TH值,我将其改为了80,利用该论文中的方法去检测标定板3D点和2D点,然后将这些点存下来,使用Livox官方的标定代码同时优化内参和外参,可以得到理想的标定效果。

@xiehao-ai
Copy link
Author

你好,我也是使用AVIA激光雷达进行的实验,但是效果不太好,从您这个结果图来看AVIA的视场角好像是不大的,是有什么调整的方式吗,我的Avia拍摄出来的标定板上的点云格子之间边界不清晰,大概能有1~2cm重合的绿线,不知道是不是这个原因我的结果误差很大,想请问一下您是否有这种情况呢 微信图片_20240423115430

“我的Avia拍摄出来的标定板上的点云格子之间边界不清晰,大概能有1~2cm重合的绿线,不知道是不是这个原因我的结果误差很大,想请问一下您是否有这种情况呢”:从我的经验来看,这不是影响标定效果的根本原因,你可以看一下我的标定图像(其实当时应该上传一张去畸变的图像......),格子之间也有线存在。具体原因需要知道你更多的实验细节再进行分析

@QianZhao-xd
Copy link

非常感谢!!
1、我整体的标定结果如下,使用的相机视场角是比激光雷达小的,结果上看有的误差就非常大,可以看到重投影误差已经有2cm了。
image
image
image
2、我也尝试过使用官网的方法进行优化,但是效果也不太好,所以才在想会不会因为绿色的线导致点云角点检测这里误差较大。
image
image

@xiehao-ai
Copy link
Author

非常感谢!! 1、我整体的标定结果如下,使用的相机视场角是比激光雷达小的,结果上看有的误差就非常大,可以看到重投影误差已经有2cm了。 image image image 2、我也尝试过使用官网的方法进行优化,但是效果也不太好,所以才在想会不会因为绿色的线导致点云角点检测这里误差较大。 image image

  1. 我一般采集20-30组数据进行标定,建议多采集几组数据。
  2. 你的标定板底端到支腿的距离偏小,这个距离我不确定是否可以通过作者源码(计算垂直方向不同层级之间水平范围的变化)正确的提取出标定板点云。建议参照我图像中的标定板摆放方式,标定板底端到支腿之间的距离大一些。
  3. 从第二张图上看,我感觉标定板距离雷达和相机有点近(不清楚你的雷达和相机相对位置关系),我一般在距离雷达和相机3-9米的范围内进行采集,多次变换标定板位置,尽可能多的覆盖视野,设备左右两侧的拍摄数量最好保持平衡。
  4. 结合自己使用的标定板修改源码配置文件中每行每列棋盘格的个数。
  5. 在使用Livox官方的标定方法时,3D角点和2D角点是手工选取的吗,个人建议3D角点使用作者源码进行提取(写个脚本处理源码生成的pkl文件),2D角点使用opencv进行提取,然后运行Livox官方标定方法同时优化内参和外参。
  6. 如果需要进一步分析原因,最好可以给出你使用的标定板材质以及采集的点云和图像文件。

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

2 participants