mlcc激光雷达与相机外参标定初体验
Posted Being_young
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mlcc激光雷达与相机外参标定初体验相关的知识,希望对你有一定的参考价值。
论文阅读模块将分享点云处理,SLAM,三维视觉,高精地图相关的文章。公众号致力于理解三维视觉领域相关内容的干货分享,欢迎各位加入我,我们一起每天一篇文章阅读,开启分享之旅,有兴趣的可联系微信dianyunpcl@163.com。
mlcc介绍
本文主要实战应用这篇文章的代码,https://github.com/hku-mars/mlcc。我们知道目前大部分的开源方案要实现相机和激光雷达之间的外参标定需要两者有共同的视角。而本文则实现了即便相机与激光雷达在同一时刻没有共同视角的情况下,通过点云重建和位姿的优化不仅实现了多个激光雷达的外参标定,也完成了相机和激光雷达的外参标定。本文详细记录使用的流程和可能遇到的问题。
这篇文章的详细介绍在之前的内容中有更为详细的介绍:
绝了!多个激光雷达和相机的快速且鲁棒的外参标定方法(代码开源)
代码实现了一种基于自适应体素化的快速、准确、无目标的多激光雷达和相机外参标定,在理论层面上,我们将激光雷达外参校准与光束调整方法相结合,推导了成本函数的二阶导数w.r.t.作为加速优化的外参的优化方法,在实现层面,采用自适应体素化技术,将激光雷达点云动态分割成大小不等的体素,减少了特征匹配过程中的计算时间。
在多激光雷达和激光雷达与相机外参标定中,都采用自适应体素化来加速特征匹配过程,将点云贴图动态分割为大小不同的体素,以便每个体素中只包含一个平面特征,这个过程充分提高了整个标定流程。
编译过程
首先是准备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::jet, T, BinaryOp>
解决方案:主要是ceres与eigen 版本不符合 这里我使用CMakeLists.txt直接指定eigen-3.3.7可解决。
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
Step 3: 位姿与外参的联合优化
roslaunch mlcc global_refine.launch
雷达与相机之间的外参标定
roslaunch mlcc calib_camera.launch
最后对点云进行贴图的效果如下:
写在最后
如果要在自己的数据上进行测试,需要将点云转换为“.dat”格式,在source文件中tobinary.cpp可以查看详细的代码。这种标定方法需要从完整的rosbag中分割出合适的单帧点云和图像,同时还应提供激光雷达姿态和外参初始值,这些初始值可通用SLAM和手眼标定算法获得。
对于不同的激光雷达外参标定,在测试自己数据集的时候可能需要修改参数“adaptive_voxel_size, feat_eigen_limit 和 downsampling_size,以调整精度和速度。
目前,出于调试原因,作者将激光雷达外参标定过程分为三个步骤,在未来的版本中,将把它们结合在一起,使其使用更加方便。
资源
三维点云论文及相关应用分享
【点云论文速读】基于激光雷达的里程计及3D点云地图中的定位方法
3D-MiniNet: 从点云中学习2D表示以实现快速有效的3D LIDAR语义分割(2020)
PCL中outofcore模块---基于核外八叉树的大规模点云的显示
更多文章可查看:点云学习历史文章大汇总
SLAM及AR相关分享
扫描下方微信视频号二维码可查看最新研究成果及相关开源方案的演示:
如果你对本文感兴趣,请点击“原文阅读”获取知识星球二维码,务必按照“姓名+学校/公司+研究方向”备注加入免费知识星球,免费下载pdf文档,和更多热爱分享的小伙伴一起交流吧!
以上内容如有错误请留言评论,欢迎指正交流。如有侵权,请联系删除
扫描二维码
关注我们
让我们一起分享一起学习吧!期待有想法,乐于分享的小伙伴加入免费星球注入爱分享的新鲜活力。分享的主题包含但不限于三维视觉,点云,高精地图,自动驾驶,以及机器人等相关的领域。
分享及合作:群主微信“920177957”(需要按要求备注) 联系邮箱:dianyunpcl@163.com,欢迎企业来联系公众号展开合作。
点一下“在看”你会更好看耶
以上是关于mlcc激光雷达与相机外参标定初体验的主要内容,如果未能解决你的问题,请参考以下文章