• lidar_camera_calib代码解读-优化部分


    碎碎念

    最近在调研一下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.

    这个项目在刚开始并没有得到我的足够重视,潜意识里觉得这种基于线特征的匹配不是太靠谱,但是,在仔细阅读代码后,还是觉得很多细节的处理让人收益匪浅。

    先谈谈目前对于这个项目的感受吧

    优点:

    • 特征的提取不复杂(没有利用语义这些)但是看起来有效
    • 优化的迭代方式有效(损失函数的有效建立 + 迭代过程的细节处理)
    • 最后结果看起来不错

    缺点:

    • 不太适用于低线数的机械雷达
    • 点云线特征的提取有点慢,相比于图像。
    • 对于环境的要求还是比较高的(相比于一些端对端的calib网络)
    • 和ros的结合有点鸡肋,项目内容似乎并不依赖ros的通信机制

    Whatever,相比于一些利用枚举法求解最优值的项目,这个项目的方法还是不知道高明到哪里去了。

    rough calibration

    粗匹配中,会通过枚举的方式会得到很多角度的组合,对于每一个组合,会计算一个metric。然后,选择metric表现最好的欧拉角。

    所以,对应的metric是什么呢?

    1. float cost = (calibra.plane_line_cloud_->size() - pnp_list.size()) *
    2. 1.0 / calibra.plane_line_cloud_->size();

    上面的cost就表示了mertric的组成。其中plane_line_cloud表示了点云中所有的线特征的点。pnp_list包含了lidar和图像所有匹配上的点数。所以,匹配的点数越多,cost越小。

    粗匹配的目标就是找到匹配点数最多的外参。以此开始进行优化。

    refine calibration

    接下来的精匹配,在pnp中,它会不断缩短buildVPnp的匹配距离。每一次缩短匹配距离后,可以匹配上的点会减少。基于缩短的距离,重新选择匹配的点,进行优化。比较有趣的是,它会选择连续进行两次ceres优化。

    目前的代码策略是一直按照距离进行迭代更新,没有其他终止条件。

    总结

    从细节上,对于粗匹配时,损失函数的定义其实不难想到,但是,也没那么容易吧!

    在精匹配时,通过距离为阈值,不管更新参与优化的观测,还是一个非常不错的尝试。值得借鉴和学习。

  • 相关阅读:
    多线程案例(单例、阻塞队列、生消模型、定时器)
    Kubernetes部署
    Python3高级特性(五)之容器(container)
    开源办公套件LibreOffice
    计算机网络概述
    Node 版本切换
    Matlab创建文字云
    [附源码]Python计算机毕业设计Django疫苗药品批量扫码识别追溯系统
    @zabbix监控设备网络设备温度Temp及告警配置 (sensor)
    JavaScript复习笔记 (八)表单&文件
  • 原文地址:https://blog.csdn.net/m0_47096428/article/details/126570936