【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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 ICPpcl::PointCloud<pcl::PointXYZ>::Ptr ICP_output_cloud(new pcl::PointCloud<pcl::PointXYZ>); //not use,but necessarypcl::GeneralizedIterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> icp;icp.setTransformationEpsilon(0.0000000001); //0.0000000001icp.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激光雷达开发(多雷达标定)相关推荐

  1. 3d激光雷达开发(入门)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 大约在2017年的时候,学习百度的apollo系统的时候,就知道3d激光雷达了.3d激光雷达和普 ...

  2. 3d激光雷达开发(pcl安装和使用)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 之前讨论过,目前3d激光雷达这块,算法部分用的最多的就是pcl库.网上很多教程都是讲pcl在li ...

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

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 做点云开发的,很少有不知道pcl库的,这一点就有点像做数字图像处理的,很少有不知道opencv的 ...

  4. 3d激光雷达开发(lidar使用)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 安装好了pcl库之后,下面就是需要想办法采集真实的雷达数据了.和camera不同,3d雷达一般需 ...

  5. 3d激光雷达开发(平面映射)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 3d点云当中,一个经常用到的方法就是先找到一个平面,然后将点映射到平面上面.这个里面用到的数据结 ...

  6. 3d激光雷达开发(ndt匹配)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 除了icp匹配之外,ndt匹配也是使用比较多的一种方法.相比较icp而言,ndt匹配花的时间要少 ...

  7. 3d激光雷达开发(icp匹配)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 所谓匹配,其实就是看两个点云数据里面,哪些关键点是一样的.这样就可以把一个点云移动到另外合适的位 ...

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

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 法向量在3d点云当中扮演很重要的一个角色.一个三维数据点的特征,不仅和它自己有关,还和它周围的点 ...

  9. 3d激光雷达开发(ransac的思想)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 前面我们写了平面分割(https://blog.csdn.net/feixiaoxing/art ...

最新文章

  1. 网络负载均衡-负载均衡器
  2. @@identity、scope_identity()、IDENT_CURRENT('tablename')函数的区别
  3. HTML, CSS. JS的各种奇淫技巧
  4. spring boot打包文件后,报错\No such file or directory
  5. 数据中心背后的地缘政治学
  6. STM32之CAN---工作/测试模式浅析
  7. 李飞飞:云原生分布式数据库面临哪些机遇与挑战?
  8. EOS 帐户权限操作--你找不到的干货 (原创) 续集-EOS 3.0
  9. 交流伺服系统设计指南_交流设计
  10. android 动态修改菜单,如何在Android的“选项”菜单上更改MenuItem?
  11. 正则表达式 贪婪与懒惰
  12. 线段树(SegmentTree)学习笔记
  13. Spark技术互动问答分享
  14. python能做后端吗_【后端开发】python能做回归么
  15. 学习一种新编程语言要做的14个练习
  16. 电脑怎么设置计算机系统,细说电脑怎么设置wifi
  17. Error while sending STMT_PREPARE packet. PID=29294
  18. java满天星星代码_纯Java代码实现流星划过天空
  19. Apache Kafka教程A系列:与Storm整合
  20. 《SolidWorks 2014中文版完全自学手册》——1.2 SolidWorks 2014简介

热门文章

  1. 在View页面,使用@if(){ }输出判断正确的内容
  2. 视图中获取控制器中数据的方式
  3. iptables用法简介
  4. 探究操作系统的内存分配(malloc)对齐策略
  5. 数字签名和加密的基本原理及其区别?
  6. html之浮动和定位
  7. [2-sat]HDOJ3622 Bomb Game
  8. 基于jQuery向下弹出遮罩图片相册
  9. 剑指Offer:打印从1到最大的n位数
  10. 值类型与引用类型传递的艺术