激光雷达-相机外参联合标定通过手动选取3D-2D点利用PnP求解
程序员文章站
2022-07-12 09:52:45
...
0、写在前面
差不多快半年没有更新博客了,这里先感慨一下找工作的不容易。
这个激光雷达-相机联合标定的需求是因为我前段时间所做的项目中有一个需求,需要给点云添加对应的温度。没错,给点云加温度,从红外相机中获取到温度。
1、激光雷达->相机的坐标变换
什么是激光雷达到相机坐标系的变换?
激光雷达坐标系下的一个3D点(x, y, z)
通过外参矩阵(R, t)
转换到相机坐标系,在通过相机内参转到像素平面得到2D点(u,v)
2、怎么解这个外参矩阵
为了解这个(R, t)
矩阵,我们至少需要三对匹配点,利用三对匹配点的就变成了PnP中的P3P问题。具体的原理可以参考高翔slambook中第七章中相关内容
3、怎么获取匹配点对
之前用过Autoware的Calibration ToolKit ,它可以自动识别到图像和点云中的标定板,这在小范围场景下是可行的。
如果相机和激光雷达安装的位置很高,导致标定板在视野中很小,那么此时标定板就捕获不到了。那么有没有别的方法呢?
答案是可以的,我们可以在图像和点云中自己选取匹配的点对,通过鼠标的监听方式。但这种方式带来的困难也显而易见的,我们能确定这是同一块区域,但是对区域里的具体的点的选择确实困难的,概括来说就是:
- 确定这是匹配点
- 鼠标点的准
4、PnP求解3D-2D问题
可以调用opencv中的PnP方法完成求解
bool solvePnP( InputArray objectPoints, InputArray imagePoints,
InputArray cameraMatrix, InputArray distCoeffs,
OutputArray rvec, OutputArray tvec,
bool useExtrinsicGuess = false, int flags = SOLVEPNP_ITERATIVE );
代码我上传到了github,觉得不错的话可以star哦!
PnPCameraLiDAR