激光雷达点云 相机图像 信息融合 联合标定


一、前期对于相关概念的理解

1、信息融合之前,第一步:激光雷达与相机联合标定

设备:livox雷达+DJI的云台相机H20T

①、为什么要进行标定,标定的目的:
参考资料:

  1. 【无人驾驶-激光雷达与相机联合校准–“5算法”】中提到标定的目的

标定的一些原理:
https://blog.csdn.net/xueluowutong/article/details/80950915

【立体视觉】世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的关系

在这里插入图片描述

在这里插入图片描述
上图中计算的是由三维点云到像素平面的转换,可以用来:

1、可以由点云计算得到某一点在像素坐标系中的位置u,v,进而获得此位置像素的rgb,将其赋给点云,便可实现点云着色

2、可以由点云计算出某一点在像素坐标系中的位置u,v,然后,在位置u,v,绘制一个点,如果愿意的话,可以按照距离给这个点着色,实现将点云投影到图像中

那么,当知道像素平面的一个点的坐标u,v,如何得到这个像素点的距离信息?


②、如何进行激光雷达相机的联合标定:

  1. 【激光雷达和相机的联合标定(Camera-LiDAR Calibration)之Autoware】

  2. 【autoware官网标定教程】【视频教程链接】

  3. ★★★【livox自家的:Lidar-Camera外参标定】

  4. 【Camera Laser Calibration Tool】

  5. ★★★★★【视觉激光雷达信息融合与联合标定】

  6. ★★★★【无人驾驶汽车系统入门(二十二)——使用Autoware实践激光雷达与摄像机组合标定】

  7. 【Camera-Lidar Calibration with Autoware】

  8. 【代码讲解lidar与camera融合】

  9. 【合集!自动驾驶 Camera-Lidar、Camera-IMU 等联合标定相关博客总结!】

  10. 【合集!标定合集】

  11. 【matlab官网标定教程Lidar and Camera Calibration】

  12. 【Autoware 标定工具 Calibration Tool Kit 联合标定 Robosense-16 和 ZED 相机!】


2、激光雷达的点云与相机的图像的信息融合

单一传感器不可避免的存在局限性,为了提高系统的稳健性,采取多传感器融合的方案,融合又包含不同传感器的时间同步空间同步

个人感觉,这是一种前融合。

参考资料:
【1】★★★ 激光雷达与相机融合(五)-------ros实时版点云投影到图像平面
【2】点云图像融合(点云着色):介绍了如何使用标定的结果进行相机图像与点云进行融合。
【3】无人驾驶传感器融合系列(十)—— 目标追踪之相机与激光雷达数据融合

一些介绍相机与点云融合的方法:
【1】https://github.com/LidarPerception/kitti_lidar_camera
【2】https://blog.csdn.net/qq_33801763/article/details/78959205
【3】Sensor fusion after intrinsic and extrinsic calibration - Autoware


二、激光雷达 相机 联合标定步骤

1、使用livox自家的标定程序

使用过程中,遇到的一些问题:
①、在计算相机内参的时候,cameraCalib.cpp中需要注释掉//imshow("Camera Calibration" , view_gray);,个人感觉主要原因还是NX板子上的opencv没有装好。
②、在计算图像角点的时候,需要将corner_photo.cpp中的104行-108行中涉及到opencv的代码注释掉,不然也无法正常计算下去。
③、ceres还是得安装1.14才能行。参考:https://blog.csdn.net/qq_41586768/article/details/107541917

2、使用autoware的标定模块进行相机、激光雷达的联合标定

参考链接:ubuntu16.04安装Autoware1.11和联合标定工具包calibration以及相关问题介绍(亲测有效)

遇到的一些问题的解决参考链接:使用calibration_toolkit时,编译的小问题。

终于编译完成了,接下来,对autoware的源码进行学习,看看是怎么将图像中检测到的目标物,在点云中产生三维检测框的。

进入标定的主界面,里面参数的意义为:

参考:

  1. 【Autoware 标定工具 Calibration Tool Kit 联合标定 Robosense-16 和 ZED 相机!】
  2. 【激光雷达和相机的联合标定(Camera-LiDAR Calibration)之Autoware】,里面会有相机内参的标定的相关介绍。

配置标定板棋盘格参数:

  1. Pattern Size(m):标定板中每个格子的边长,单位 m,我的标定板每个格子长 0.025 m
  2. Pattern Number:标定板长X宽的单元格数量 - 1,我的标定板是长有 12 个格子,宽有 9 个,所以填 11x8,减一是因为标定检测的是内部角点

三、标定之后,将激光点云与图像进行融合

如何将二维图像检测到的bounding box投影到三维点云得到三维检测框呢?

官网中相关的介绍为:

Requirements

Input Topics:

Camera intrinsics (sensor_msgs/CameraInfo)
Camera-LiDAR extrinsics (tf)
Object Detections results from a Vision Detector (autoware_msgs/DetectedObjectArray)
Object Detections results from a Range Detector (autoware_msgs/DetectedObjectArray)

难道还需要点云的目标检测框才能做匹配吗?

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

在将点云转换到像素坐标系时,会出现一些点在转换之后,其在像素坐标系下的坐标已经超出了图片的尺寸,因此需要将这些点进行剔除:

pcl::PointCloud<pcl::PointXYZRGB>::Ptr fused_cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
for (int m = 0; m < uv.cols(); m++) 
{
    cv::Point point;
    point.x = uv(0, m);
    point.y = uv(1, m);

    // Store corners in pixels only of they are on image plane
    if (point.x > 0 && point.x < your_image_as_opencv_mat->cols) 
    {
        if (point.y > 0 && point.y < your_image_as_opencv_mat->rows) 
        {

            pcl::PointXYZRGB fused_3d_point;
            cv::Vec3b rgb_pixel = your_image_as_opencv_mat->at<cv::Vec3b>(point.y, point.x);
            // Get x,y,z values of this point from original raw point cloud
            fused_3d_point.x = matrix_lidar_points_in_lidar_frame(0, m);
            fused_3d_point.y = matrix_lidar_points_in_lidar_frame(1, m);
            fused_3d_point.z = matrix_lidar_points_in_lidar_frame(2, m);

            // get r,g,b value of this point from segmented image
            fused_3d_point.r = rgb_pixel[2];
            fused_3d_point.g = rgb_pixel[1];
            fused_3d_point.b = rgb_pixel[0];

            //put cicles into your image
            cv::circle(*your_image_as_opencv_mat, point, 1, cv::Scalar(0, 0, 255), 2, 8, 0);

            fused_cloud->points.push_back(fused_3d_point);
        }
    }
}

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

2021.05.22:

订阅多个话题,如何实现话题之间的同步处理(也即多传感器融合)?

在ROS节点中需要订阅两个及两个以上的话题时,这些话题的频率不一致,需要保持对这

些话题数据的同步,且需要同时接收数据一起处理然后当做参数传入到另一个函数中。

  • 17
    点赞
  • 238
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值