3d激光雷达开发(多雷达标定)

Posted 费晓行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3d激光雷达开发(多雷达标定)相关的知识,希望对你有一定的参考价值。

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        有过camera开发经验的朋友都知道,camera有两种标定。一种是内参标定,主要是标定切向畸变、径向畸变等参数;一种是外参标定,主要是把数据从摄像头坐标系转移到全局坐标系。举个例子来说,车上的传感器很多,但每个传感器获得的数据都是以自己的坐标系为基础获得的,要想把这些数据整合在一起,必须有一个统一的车坐标系,其他传感器的数据转到这个统一的车坐标系上,才能继续进行后面的工作。

        camera是这样,3d lidar也是这样的。单个雷达的覆盖范围是有限的,必须要把所有lidar的数据整合到一个坐标系下面才有意义。以livox为例,大家可以看看这篇文章,https://livox-wiki-cn.readthedocs.io/zh_CN/latest/tutorials/sensor_calibration.html。目前标定方法主要有两种,一种是手动标定,一种是自动标定。

1、手动标定

        https://github.com/Livox-SDK/Livox-SDK/wiki/Calibrate-extrinsic-and-display-under-ros-cn

        手动标定,顾名思义,就是依靠手动调节x、y、z、yaw、pitch、roll来获得对应的标定值。判定的标准就是自己的双眼,看看两片点云关键点有没有拟合在一起。对livox来说,手动标定可以直接用livox viewer来进行,

2、自动标定

        https://github.com/Livox-SDK/Livox_automatic_calibration 

        自动标定,就是说自己准备点云数据,让算法来帮助我们获得x、y、z、yaw、pitch、roll。livox也为我们提供了对应的代码文件和编译脚本。下面就是对应的CMakeLists文件,

CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)

PROJECT(livox_calibration)
set(CMAKE_BUILD_TYPE Release) # this is Important ! ! ! ! !

find_package(PCL 1.7 REQUIRED)

link_directories($PCL_LIBRARY_DIRS)
add_definitions($PCL_DEFINITIONS)

include_directories($PCL_INCLUDE_DIRS include)

set(CMAKE_CXX_FLAGS "$CMAKE_CXX_FLAGS -std=c++11")

FILE(GLOB SRCS0 src/mapping/*.cpp)
FILE(GLOB SRCS1 src/calibration/*.cpp)
FILE(GLOB SRCS2 src/ransac/*.cpp)

add_executable (mapping  $SRCS0 )
target_link_libraries (mapping $PCL_LIBRARIES $LIBS)

add_executable (calibration  $SRCS1 )
target_link_libraries (calibration $PCL_LIBRARIES $LIBS)

add_executable (fitline  $SRCS2 )
target_link_libraries (fitline $PCL_LIBRARIES $LIBS)

        从编译文件可以看出,总共生成三个文件,分别是mapping、calibration、fitline。mapping负责准备pcd文件,calibration负责标定,fitline负责改进和优化。编译生成后,只要自己准备好pcd文件放在指定的目录,依次执行三个文件即可,从run.sh可以看出这一点

#!/bin/bash 
./mapping
./calibration
./fitline

        进一步分析这三个程序,可以看到标定的基本原理还是icp,相关代码位于src/calibration/calibration.cpp文件中。

    //prepare ICP
    pcl::PointCloud<pcl::PointXYZ>::Ptr ICP_output_cloud(new pcl::PointCloud<pcl::PointXYZ>); //not use,but necessary
    pcl::GeneralizedIterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> icp;
    icp.setTransformationEpsilon(0.0000000001); //0.0000000001
    icp.setMaxCorrespondenceDistance(10);
    icp.setMaximumIterations(35);
    icp.setRANSACIterations(0);
    icp.setMaximumOptimizerIterations(50); // default 20

  

3、其他标定

        livox也提供了摄像头和lidar的标定方法,有兴趣的同学可以看一下。

        https://github.com/Livox-SDK/livox_camera_lidar_calibration

以上是关于3d激光雷达开发(多雷达标定)的主要内容,如果未能解决你的问题,请参考以下文章

3d激光雷达开发(法向量预测)

阿里巴巴开源:一次采集轻松解决多摄像机和3D激光雷达标定

激光雷达与应用

3d激光雷达开发(从halcon看点云pcl库)

激光雷达运动畸变的去除

详解2D激光雷达运动畸变去除