核心参考:旷视科技的知乎专栏-实践之Camera-Lidar标定
需要标定相机内参+相机&LiDAR外参,约束方法分为两种
方案 | 内容 | 备注 |
---|---|---|
3D-3D | 利用激光测量的三维激光点+相机测量的标定板三维坐标 | 本文讲解 |
3D-2D | 利用激光测量的三维激光点+相机测量的图像二维特征(点特征,线段特征) | 类似于多目摄像机的PnP算法,PnL |
标定过程的通常做法是先利用少量观测求解外参数的初始值,然后利用多帧数据的约束进行最小二乘优化对初始值进行 refine
初始参数求解
假设标定板平面在相机坐标系 \(c\) 中的参数为 \(\pi ^ { c } = [ n ^ { c } , d ] \in \mathbb{R} ^ { 4 }\) ,其中 \(n^c \in \mathbb{R}^3\) 是平面的三维法向量, \(d\) 是相机坐标系原点到平面的距离。平面上的一个三维点在相机坐标系下的坐标为 \(P^c \in \mathbb{R}^3\) ,点在平面上满足:
假设从激光坐标系 \(l\) 到相机坐标系之间的旋转和平移为 \(R_{cl}=R_{3\times 3}\) , \(t_{cl}=t_{3\times 1}\) 。如果知道激光坐标系中某个激光点 \(P^l\) 落在标定板上,则通过点在平面上这个约束能够构建关于外参数的方程:
上述方程能够提供一个约束,通过多个这样的约束就能求解外参数。求解时,一个直观的想法是利用 g2o 或者 ceres 等优化工具构建非线性最小二乘进行优化求解。但是对于非线性最小二乘问题,需要知道外参数的一个初始值,如果初始值不准确,则有可能会优化到局部最小值。因此,一个合理的求解流程应该是闭式解提供初始值,对该初始值利用多帧数据进行优化,得到更准确的标定结果。
虽然平面约束对于 2D 激光和 3D 激光而言是一样的,但 2D 激光和 3D 激光闭式求解外参数的方式稍有不同。因为 3D 激光的激光点更多,从而可以直接计算激光点云的法向量,利用这个法向量简化外参数计算流程。
2D雷达标定
激光点从LiDAR坐标系到Camera坐标系公式为
考虑到,激光为 2D 激光,激光束形成的平面不妨假设为 xy 平面,即 \(z=0\) ,此时有 \(P^l=[ x , y , 0 ] ^ { T }\),上式整理为
\(H\) 具有9个参数,2D雷达具有2个约束,因此需要5组点得到基本数据 \(R^T_{lc}\)和\(t_c\)
P.S. \(R_{cl}\)为正交矩阵,因此需要进行正交化(Frobenious Norm)
3D雷达标定
在3D的情况下,输入不再是点,而是平面,对前方程进行改造可以得到如下公式 (式一不再存在位移t)
我们发现上式只与\(R _ { c l }\)有关,下式与\(R _ { c l }, t_{cl}\)有关,所以优先解决上式。由上式可得最小二乘模式
因为其他的因式都是确定的,为了让整体最小,就要关注其中的这个因式,希望它能够取到最大值
因为\(n_{1\times3}·R_{3\times3}·n_{3\times1}\)得到的是\(1\times1\)矩阵,一定等于自身的Trace,而Trace具有回转平移的性质,即\(\operatorname{Trace}(ABC)=\operatorname{Trace}(BCA)=\operatorname{Trace}(CAB)\),因此有
对H进行SVD分解,可以得到\(H=UAV^{T}\),其中\(U\)和\(V\)为\(3\times 3\)正定矩阵,\(V\)为\(3\times 3\)非负对角阵。而由某定理可知,\(R_{cl}\)应为\(R_{cl}=VU^{T}\)。得到\(R_{cl}\)后,带入下式可以用最小二乘法计算\(t_{cl}\)
参数优化
使用LM算法进行优化(我的博客LM算法)
参数化使用\(SO_3\)或者四元数,可以查看博客旋转矩阵&四元数
同时,把激光的点想象成一个采样方式,2D激光就是确定一条线,对线进行采样,从这一群点能够还原得到一条最置信的线,而这个线对平面的约束只有2。同理,3D激光就是一个面,对面进行采样,从这群点能够得到一个最置信的平面,而这个面的约束有3。
系统可观性
参考文献[3]的第二章
TODO 没看懂
充分旋转标定板
既然采集数据时只平移标定板不行,那是否意味着简单旋转一下标定板就可以了呢?比如标定板只绕着 y 轴旋转。这里可通过设置不同的旋转矩阵去验证 H 矩阵是否有零空间。通过简单修改代码(注释或反注释设置旋转矩阵的那几行代码),运行后会发现:标定时需要充分旋转 x 和 y 两个轴,标定过程中标定板只旋转一个轴一样会存在零空间基底。
这意味着拿着标定板旋转时,需要充分旋转 roll 和 pitch。更直白一点,假设在长方形的标定板中心画了个十字线,那请绕着十字线的两个轴充分旋转,比如绕着竖轴旋转,然后还要绕着横轴旋转。