首页 > mlcc激光雷达与相机外参标定初体验

mlcc激光雷达与相机外参标定初体验

论文阅读模块将分享点云处理,SLAM,三维视觉,高精地图相关的文章。公众号致力于理解三维视觉领域相关内容的干货分享,欢迎各位加入我,我们一起每天一篇文章阅读,开启分享之旅,有兴趣的可联系微信[email protected]

mlcc介绍

本文主要实战应用这篇文章的代码,https://github.com/hku-mars/mlcc。我们知道目前大部分的开源方案要实现相机和激光雷达之间的外参标定需要两者有共同的视角。而本文则实现了即便相机与激光雷达在同一时刻没有共同视角的情况下,通过点云重建和位姿的优化不仅实现了多个激光雷达的外参标定,也完成了相机和激光雷达的外参标定。本文详细记录使用的流程和可能遇到的问题。

这篇文章的详细介绍在之前的内容中有更为详细的介绍:

绝了!多个激光雷达和相机的快速且鲁棒的外参标定方法(代码开源)

代码实现了一种基于自适应体素化的快速、准确、无目标的多激光雷达和相机外参标定,在理论层面上,我们将激光雷达外参校准与光束调整方法相结合,推导了成本函数的二阶导数w.r.t.作为加速优化的外参的优化方法,在实现层面,采用自适应体素化技术,将激光雷达点云动态分割成大小不等的体素,减少了特征匹配过程中的计算时间。

在多激光雷达和激光雷达与相机外参标定中,都采用自适应体素化来加速特征匹配过程,将点云贴图动态分割为大小不同的体素,以便每个体素中只包含一个平面特征,这个过程充分提高了整个标定流程。

c84cbc8e27afdee37dbc71d369ab345b.png

编译过程

首先是准备ROS环境,本人使用的16.04对应的ros版本

需要的第三放库有

  • PCL 1.8 

  • ceres solver 1.14.x 

  • OpenCV 3.4.14 

  • Eigen 3.3.7

如果编译遇到的了问题,那么就需要按照github上安装对应的版本的第三方库

而我在编译的时候遇到了一些问题如下:

(1)error: ‘integer_sequence’ is not a member of ‘std’

解决方法:

#set(CMAKE_CXX_FLAGS "-std=c++14")

set(CMAKE_CXX_STANDARD 14)

(2)error: ‘ScalarBinaryOpTraits’ is not a class template

 struct ScalarBinaryOpTraits {

       解决方案:主要是ceres与eigen 版本不符合  这里我使用CMakeLists.txt直接指定eigen-3.3.7可解决。

16864160fc2127f83f50abb35b34686b.png

mlcc运行

对整个工程的介绍,整个工程代码是比较清晰且代码还比较友好。

config文件下有相机的标定参数以及程序中需要用到的阈值

Voxel.down_sample_size: 0.02   下采样的体素的大小

Plane.min_points_size: 60  平面特征的最小数量

Ransac.dis_threshold: 0.03  RANSAC 的最小距离

Ransac.iter_num: 200  迭代次数

include 头文件其中common.h,mypcl.hpp是公共的头文件。

source为主程序cpp文件,实现了三部标定激光雷达外参的代码以及激光雷达和相机外参标定的代码。并提供了将点云转化为dat文件的功能。

scene1,scene2为作者提供的demo数据集,以及需要的初始位姿和外参。

launch文件下保存着为运行标定的launch文件。

激光雷达之间的外参标定步骤

Step 1: 基于激光雷达的点云位姿优化(需要提供初始位姿在 scene-x/original_pose)

roslaunch mlcc pose_refine.launch

Step 2: 激光雷达外参的优化 (需要提供初始的外参在config/init_extrinsic)

roslaunch mlcc extrinsic_refine.launch

ee18baaad629562e78d0a8c1332b4d7e.png

Step 3: 位姿与外参的联合优化

roslaunch mlcc global_refine.launch

雷达与相机之间的外参标定

roslaunch mlcc calib_camera.launch

最后对点云进行贴图的效果如下:

99e55fd0b7fe9195f319868e21294cd0.png

0b7b90648b5ec6c06ebe3c05b6e05aeb.png

写在最后

如果要在自己的数据上进行测试,需要将点云转换为“.dat”格式,在source文件中tobinary.cpp可以查看详细的代码。这种标定方法需要从完整的rosbag中分割出合适的单帧点云和图像,同时还应提供激光雷达姿态和外参初始值,这些初始值可通用SLAM和手眼标定算法获得。

对于不同的激光雷达外参标定,在测试自己数据集的时候可能需要修改参数“adaptive_voxel_size, feat_eigen_limit 和 downsampling_size,以调整精度和速度。

582437c11a57bdb85c1e8f0ae47c54b6.png

目前,出于调试原因,作者将激光雷达外参标定过程分为三个步骤,在未来的版本中,将把它们结合在一起,使其使用更加方便。

资源

三维点云论文及相关应用分享

【点云论文速读】基于激光雷达的里程计及3D点云地图中的定位方法

3D目标检测:MV3D-Net

三维点云分割综述(上)

3D-MiniNet: 从点云中学习2D表示以实现快速有效的3D LIDAR语义分割(2020)

win下使用QT添加VTK插件实现点云可视化GUI

JSNet:3D点云的联合实例和语义分割

大场景三维点云的语义分割综述

PCL中outofcore模块---基于核外八叉树的大规模点云的显示

基于局部凹凸性进行目标分割

基于三维卷积神经网络的点云标记

点云的超体素(SuperVoxel)

基于超点图的大规模点云分割

更多文章可查看:点云学习历史文章大汇总

SLAM及AR相关分享

【开源方案共享】ORB-SLAM3开源啦!

【论文速读】AVP-SLAM:自动泊车系统中的语义SLAM

【点云论文速读】StructSLAM:结构化线特征SLAM

SLAM和AR综述

常用的3D深度相机

AR设备单目视觉惯导SLAM算法综述与评价

SLAM综述(4)激光与视觉融合SLAM

Kimera实时重建的语义SLAM系统

SLAM综述(3)-视觉与惯导,视觉与深度学习SLAM

易扩展的SLAM框架-OpenVSLAM

高翔:非结构化道路激光SLAM中的挑战

SLAM综述之Lidar SLAM

基于鱼眼相机的SLAM方法介绍

扫描下方微信视频号二维码可查看最新研究成果及相关开源方案的演示:

如果你对本文感兴趣,请点击“原文阅读”获取知识星球二维码,务必按照“姓名+学校/公司+研究方向”备注加入免费知识星球,免费下载pdf文档,和更多热爱分享的小伙伴一起交流吧!

以上内容如有错误请留言评论,欢迎指正交流。如有侵权,请联系删除

扫描二维码

                   关注我们

让我们一起分享一起学习吧!期待有想法,乐于分享的小伙伴加入免费星球注入爱分享的新鲜活力。分享的主题包含但不限于三维视觉,点云,高精地图,自动驾驶,以及机器人等相关的领域。

分享及合作:群主微信“920177957”(需要按要求备注) 联系邮箱:[email protected],欢迎企业来联系公众号展开合作。

点一下“在看”你会更好看耶

d1e2fd825946fcf68c303c37b6d76443.gif

更多相关: