最近在调研一下non-target 方式的相机Lidar联合标定,其中包括HK mars实验室开源的项目GitHub - hku-mars/livox_camera_calib: This repository is used for automatic calibration between high resolution LiDAR and camera in targetless scenes.
这个项目在刚开始并没有得到我的足够重视,潜意识里觉得这种基于线特征的匹配不是太靠谱,但是,在仔细阅读代码后,还是觉得很多细节的处理让人收益匪浅。
先谈谈目前对于这个项目的感受吧
优点:
缺点:
Whatever,相比于一些利用枚举法求解最优值的项目,这个项目的方法还是不知道高明到哪里去了。
粗匹配中,会通过枚举的方式会得到很多角度的组合,对于每一个组合,会计算一个metric。然后,选择metric表现最好的欧拉角。
所以,对应的metric是什么呢?
- float cost = (calibra.plane_line_cloud_->size() - pnp_list.size()) *
- 1.0 / calibra.plane_line_cloud_->size();
上面的cost就表示了mertric的组成。其中plane_line_cloud表示了点云中所有的线特征的点。pnp_list包含了lidar和图像所有匹配上的点数。所以,匹配的点数越多,cost越小。
粗匹配的目标就是找到匹配点数最多的外参。以此开始进行优化。
接下来的精匹配,在pnp中,它会不断缩短buildVPnp的匹配距离。每一次缩短匹配距离后,可以匹配上的点会减少。基于缩短的距离,重新选择匹配的点,进行优化。比较有趣的是,它会选择连续进行两次ceres优化。
目前的代码策略是一直按照距离进行迭代更新,没有其他终止条件。
从细节上,对于粗匹配时,损失函数的定义其实不难想到,但是,也没那么容易吧!
在精匹配时,通过距离为阈值,不管更新参与优化的观测,还是一个非常不错的尝试。值得借鉴和学习。