激光雷达点云 相机图像 信息融合 联合标定 | 您所在的位置:网站首页 › 雷达图灵tur官网 › 激光雷达点云 相机图像 信息融合 联合标定 |
激光雷达点云 相机图像 联合标定 信息融合
一、前期对于相关概念的理解1、信息融合之前,第一步:激光雷达与相机联合标定2、激光雷达的点云与相机的图像的信息融合
二、激光雷达 相机 联合标定步骤1、使用livox自家的标定程序2、使用autoware的标定模块进行相机、激光雷达的联合标定
三、标定之后,将激光点云与图像进行融合如何将二维图像检测到的bounding box投影到三维点云得到三维检测框呢?在将点云转换到像素坐标系时,会出现一些点在转换之后,其在像素坐标系下的坐标已经超出了图片的尺寸,因此需要将这些点进行剔除:订阅多个话题,如何实现话题之间的同步处理(也即多传感器融合)?
一、前期对于相关概念的理解
1、信息融合之前,第一步:激光雷达与相机联合标定
设备:livox雷达+DJI的云台相机H20T ①、为什么要进行标定,标定的目的: 参考资料: 【无人驾驶-激光雷达与相机联合校准–“5算法”】中提到标定的目的标定的一些原理: https://blog.csdn.net/xueluowutong/article/details/80950915 【立体视觉】世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的关系 上图中计算的是由三维点云到像素平面的转换,可以用来: 1、可以由点云计算得到某一点在像素坐标系中的位置u,v,进而获得此位置像素的rgb,将其赋给点云,便可实现点云着色。 2、可以由点云计算出某一点在像素坐标系中的位置u,v,然后,在位置u,v,绘制一个点,如果愿意的话,可以按照距离给这个点着色,实现将点云投影到图像中。 那么,当知道像素平面的一个点的坐标u,v,如何得到这个像素点的距离信息? ②、如何进行激光雷达相机的联合标定: 【激光雷达和相机的联合标定(Camera-LiDAR Calibration)之Autoware】 【autoware官网标定教程】【视频教程链接】 ★★★【livox自家的:Lidar-Camera外参标定】 【Camera Laser Calibration Tool】 ★★★★★【视觉激光雷达信息融合与联合标定】 ★★★★【无人驾驶汽车系统入门(二十二)——使用Autoware实践激光雷达与摄像机组合标定】 【Camera-Lidar Calibration with Autoware】 【代码讲解lidar与camera融合】 【合集!自动驾驶 Camera-Lidar、Camera-IMU 等联合标定相关博客总结!】 【合集!标定合集】 【matlab官网标定教程Lidar and Camera Calibration】 【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的源码进行学习,看看是怎么将图像中检测到的目标物,在点云中产生三维检测框的。 进入标定的主界面,里面参数的意义为: 参考: 【Autoware 标定工具 Calibration Tool Kit 联合标定 Robosense-16 和 ZED 相机!】【激光雷达和相机的联合标定(Camera-LiDAR Calibration)之Autoware】,里面会有相机内参的标定的相关介绍。配置标定板棋盘格参数: Pattern Size(m):标定板中每个格子的边长,单位 m,我的标定板每个格子长 0.025 mPattern 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::Ptr fused_cloud(new pcl::PointCloud); for (int m = 0; m if (point.y > 0 && point.y rows) { pcl::PointXYZRGB fused_3d_point; cv::Vec3b rgb_pixel = your_image_as_opencv_mat->at(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节点中需要订阅两个及两个以上的话题时,这些话题的频率不一致,需要保持对这 些话题数据的同步,且需要同时接收数据一起处理然后当做参数传入到另一个函数中。 |
CopyRight 2018-2019 实验室设备网 版权所有 |