雷视融合算法

联合标定

目的

​ 联合标定的作用就是建立点云的point和图像pixel之间的对应关系,需要获取相机与激光雷达外参,将点云3维坐标系下的点投影到相机3维坐标系下。。这样一来,当激光雷达和相机同时工作时,它们获取的数据可以在同一坐标系下进行比较和融合,从而产生更准确、一致的感知结果。。通过联合使用激光雷达和相机,系统可以充分利用两种传感器的优点,综合利用激光雷达的距离信息和相机的视觉信息,减少各自的盲区和局限性。这样可以增强对物体的检测、跟踪和识别能力,提高自动驾驶车辆的安全性和精确性,以及机器人导航和三维重建等应用的效果。

相机内参标定

​ 相机内参标定的作用是确定相机的内部参数,以便对图像进行准确的测量和分析。相机内参标定是计算机视觉和计算机图形学领域中的一项重要任务,它的作用是确定相机的内部参数,以便对图像进行准确的测量和分析。相机内参包括相机的焦距、光心位置以及图像畸变等参数。这些参数对于实现几何校正、三维重建、目标跟踪、摄像机姿态估计等计算机视觉任务至关重要相机内参包括相机的焦距、光心位置以及图像畸变等参数。这些参数对于实现几何校正、三维重建、目标跟踪、摄像机姿态估计等计算机视觉任务至关重要。相机内参标定可以精确地测量物体的尺寸、距离和角度等。通过知道相机的内参,可以将图像中的像素坐标映射到真实世界中的物理坐标,实现对物体的精确测量。

方法步骤
一、硬件:

1、标定板,规格 8X6(黑白格子中间交点)

2、相机及其配件(共 5 件):

二、软件驱动:

1、相机驱动:

① 安装依赖 dependency:

$ sudo apt-get install v4l-utils

② 设置:

$ sudo sh -c ‘echo 1000 > /sys/module/usbcore/parameters/usbfs_memory_mb’

③ 在任意英文路径的空文件夹中新建 src 文件夹,拷贝驱动至 src 文件夹中:

④ 在 src 同级目录运行:

$ catkin_make
$ source devel/setup.bash # or source devel/setup.zsh
$ roslaunch usb_cam leoparding_camera.launch

2、相机标定程序:

首先获取依赖项并编译驱动程序。

$ rosdep install camera_calibration

确保您的单目相机通过 ROS 发布图像。让我们列出主题以检查图像是否已发布:

$ rostopic list

这将向您显示所有已发布的主题,请检查是否有image_raw主题。大多数 ROS 摄像头驱动程序提供的默认主题是:

/camera/camera_info
/camera/image_raw

如果有多个摄像头或在其自己的命名空间中运行驱动程序,则主题名称可能会有所不同。

3、连接相机,电脑运行驱动:

可能会报错,提示无法触发问题,此时需要更改 launch 文件,更改之前需要确定 usb 接口号是多少。

打开终端输入:

$ cd /dev
$ ls

插拔 usb 线,观察那个名字出现变化:

一般新usb会在最后一列出现变化,仔细观察,并记下设备号,打开leoparding_camera.launch 文件:

在第三行 value=”/dev/video0”处修改设备号。

4、运行驱动:

$ source devel/setup.bash
$ roslaunch usb_cam leoparding_camera.launch

运行成功:

5、运行标定程序

执行如下命令:

$ rostopic list
$ rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108
image:=/cam_front/image_raw camera:=/camera --no-service-check

标定界面如下:

为了获得良好的校准,您需要在相机框架中移动棋盘,以便:

  • 摄像机左、右、上、下视场的棋盘格

    • X 条 - 视野中的左/右
    • Y 条线 - 视野中的顶部/底部
    • 尺寸条 - 朝向/远离相机并倾斜
    • 棋盘格填满整个视野

    • 棋盘向左、向右、向上、向下倾斜(倾斜)

      在每个步骤中,保持棋盘静止不动,直到图像在校准窗口中突出显示。

      移动结束后点击 CALIBRATE 会灰屏(正常):

      结束以后点击 SAVE 按钮,成果数据会保存在 /tmp/calibrationdata.tar.gz。大功告成!

      更换相机后重新插拔 USB。

      相机外参标定

      ​ 相机外参标定的作用是的作用是确定相机的外部参数,即相机在世界坐标系中的位置和姿态。相机外参包括相机的位置(平移向量)和姿态(旋转矩阵或四元数)。通过外参标定,我们可以了解相机相对于世界坐标系的位置和方向,从而实现相机与世界的几何关系的建模。通过相机外参标定,可以将相机拍摄的图像与三维场景中的点对应起来,从而实现三维重建。相机外参标定可以提供相机的姿态信息,包括旋转矩阵或四元数。这对于进行摄像机姿态估计、目标跟踪和虚拟现实等应用非常重要。通过知道相机的姿态,可以推断相机的朝向、角度和方向等信息。通过相机外参标定,可以将图像中的特征点与世界坐标系中的特征点对应起来,从而实现相机的视觉定位。这对于室内导航、增强现实等应用非常有用。此外,相机的外参还可以将多相机建立起联系,可以让使用者多视角的查看同一空间的内容,可以让视觉、雷达算法对多个摄像头产生联系。

      1、下载标定板:

      Downloads · ethz-asl/kalibr Wiki (github.com)

      注:利用棋盘格标定:12X9格子

      步骤1:撰写yaml配置文件:命名为 checkerboard.yaml

      target_type: 'checkerboard' #gridtype
      targetCols: 11               #number of internal chessboard corners
      targetRows: 8               #number of internal chessboard corners
      rowSpacingMeters: 0.02      #size of one chessboard square [m]
      colSpacingMeters: 0.02      #size of one chessboard square [m]
      

      2、修改相机帧率

      rosrun topic_tools throttle messages /camera/color/image_raw 4.0 /color
      rosrun topic_tools throttle messages /camera/infra1/image_rect_raw 4.0 /infra_left
      rosrun topic_tools throttle messages /camera/infra2/image_rect_raw 4.0 /infra_right
      

      建议使用较低的帧率录制bag包(4hz),注意这里将相机话题修改成/color、 /infra_left 、/infra_right

      3、录制bag包

      rosbag record -O test1 /color /infra_left /infra_right
      

      在相应文件夹下出现test1.bag

      4、利用kalibr进行标定

      kalibr_calibrate_cameras --target /home/nvidia/biaoding/checkerboard.yaml --bag /home/nvidia/biaoding/test1.bag --models pinhole-radtan --topic /color /infra_left /infra_right
      

      5、标定结果

      标定结束后会生成3个文件,分别是txt、yaml、pdf;

      txt文件中存储着相机外参

      激光雷达内参标定

      ​ 激光雷达内参是内部激光发射器坐标和雷达自身坐标器之间的转换关系。这个数据基本出厂就会给定。

      激光雷达外参标定

      ​ 外参是激光雷达与其他坐标系(例如车辆后轴中心)之间的坐标系转换关系。自动驾驶系统需要进行外参标定,即激光雷达自身坐标系与车体坐标系的关系;激光雷达、相机和车体需要用刚体进行连接,两者间的相对姿态和位移固定不变;为建立激光雷达之间及激光雷达与车辆之间的相对坐标关系,需要对激光雷达的安装进行标定,并使激光雷达数据从激光雷达坐标系转换至车体坐标系上;当存在多个激光雷达的时候,也需要激光雷达之间进行标定来获取更大的感受范围。

      1、准备工作

      需要按图规格制作一个镂空的标定板,可以找打印店订做如图规格的标定板

      2、硬件准备,准备一个相机和激光雷达,两者间进行刚性固定。

      3、打开调试按钮

      velo2cam_calibration/include/velo2cam.utils.h中第30行的

      #define DEBUG 1
      

      改为

      #define DEBUG 0
      

      改完直接重新编译。

      4、调试相机

      source devel/setup.bash
      roslaunch velo2cam_calibration  mono_pattern.launch camera_name:=/camera image_topic:=image_raw  frame_name:=camera_optical_link
      

      效果如下,检测成功的话会检测四个出AprilTag,估计出四个圆心的位置。

      5、调试雷达

      source devel/setup.bash
      roslaunch velo2cam_calibration lidar_pattern.launch cloud_topic:=/lidar/pointcloud
      

      点云话题写自己的点云话题,因为雷达的视场角是360度的,场景复杂的话需要进行手动点云筛选才能识别到标定板的准确位置。

      在这里插入图片描述

      再新开一个终端窗口运行:

      rosrun rqt_reconfigure rqt_reconfigure

      通过新出来的窗口调整点云的范围,最好是调整到只剩下标定板。

      确保经过单个园的线束大于等于3。

      6、标定

      source devel/setup.bash
      roslaunch velo2cam_calibration  registration.launch sensor1_type:=mono sensor2_type:=lidar
      

      一直输入Y,知道询问是否换个姿态继续时,需要把板子挪位置,然后继续输入Y,直到完成大于三个姿态。

      7、检测结果

      打开雷达显示即标定整合软件查看标定后效果

      雷视融合算法

      1、编译

      catkin_make
      

      2、启动sh运行算法,sh中可以修改话题名称和bag包路径。

      bash star.sh
      

      3、算法效果

      详情可以联系我们,下面是联系方式!!