首页 > 其他分享 >3d激光雷达开发(多雷达标定)

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

时间:2022-11-23 23:02:09浏览次数:64  
标签:calibration livox 标定 mapping PCL icp 激光雷达 3d



        有过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来进行,

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

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​

标签:calibration,livox,标定,mapping,PCL,icp,激光雷达,3d
From: https://blog.51cto.com/feixiaoxing/5881890

相关文章

  • 3d激光雷达开发(欧几里得聚类算法)
            图形处理里面有一个聚类算法,叫k-means。基本思想就是默认图像里面有k个区域,每个区域都可以内部聚合、外部松散的组合体,找到了这k个区域,就可以实现图像的分......
  • 3d激光雷达开发(ransac的思想)
        前面我们写了平面分割、圆柱分割这两篇文章。细心的同学可能发现,这里面都提到了ransac,那什么是ransac呢?    所谓ransac,全称是randomsampleconsensus,......
  • 3d激光雷达开发(项目练习)
            网上关于pcl的教程很多,大部分都是翻译过来的。但是怎么把pcl这些教程串在一起,做一个简单的项目,这方面的资料不多。今天,正好看到一个范例项目,很有代表性,值得......
  • 3d激光雷达开发(平面分割)
        平面分割是点云数据经常需要处理的一个功能。在很多场景下面,平面数据都是没有用的。这个时候需要考虑的,就是怎么把平面数据从点云当中分割出去。鉴于此,pcl库给......
  • 3d激光雷达开发(圆柱分割)
        和平面分割一样,pcl也支持圆柱分割。使用的方法和平面分割也差不多,都是基于ransac的基本原理。在pcl官方库当中,也给出了参考代码,注意关联的pcd文件,https://pcl.r......
  • 3d激光雷达开发(ndt匹配)
        除了icp匹配之外,ndt匹配也是使用比较多的一种方法。相比较icp而言,ndt匹配花的时间要少一些。此外,ndt匹配还需要输入估计的yaw、pitch、roll、x、y、z,这个可以根......
  • 3d激光雷达开发(icp匹配)
        所谓匹配,其实就是看两个点云数据里面,哪些关键点是一样的。这样就可以把一个点云移动到另外合适的位置,组成一个新的点云。一般来说,单个机器人上面,3d激光扫描到的......
  • ros +realsenseD435+大象Pro600手眼标定
    踩坑手眼标定的算法网上是比较多的,但是很多都不好用。github上高赞的easy_handeye,试了一下,但是mycobot600没有提供moveit的配置,而我ROS基础不是很好,不太会修改示例代码。折......
  • ASW3642pin√pin替代TS3DV642无需更改电路
    TS3DV642是一种12通道1:2或2:1双向多路替代器/多路解复用器。TS3DV642接入2.6V至4.5V的电源供电,适用于电池供电。电阻(RON)最小和I/O电容较小,能够实现典型值高达7.5GHz的带宽......
  • 3DMAX2018安装
    1.下载3DMAX2018安装包并解压2.打开解压后的文件点击Setup选择语言和安装位置点击下一步安装完成后点击enteraserialnumber输入序列号066-66666666,密钥128J1后点......