Matlab激光雷达相机联合标定经验分享

2023-05-16

一. 背景介绍

        联合标定是做多传感器融合的基础工作,也是一个没有最好只有更好的研究方向,相关论文也是层出不穷,网上也有许多开源的工作,包括Autoware的工具箱我也试过,感觉标定效果不是特别好,标定效果不稳定,有时候好,有时候不好(也可能当时经验有限,好多点没注意),后来Matlab2020b推出了激光雷达和相机的联合标定教程,简单试了一下,效果不错,2020b中有个bug, 2021a中已经修复了,并且把demo做成了像相机标定一样的工具箱,后来多次标定也总结了一些标定过程中的经验,简单分享一下.

当然如果你有标定间,就不要看了,没标定间的标定精度高的...

二. 标定教程

所有的博客资料都有时效性,官方文档是一直在更新的,参考官方教程,仔细看一遍,可避免一些低级问题.

官方链接:Lidar and Camera Calibration- MATLAB & Simulink- MathWorks 中国

What Is Lidar-Camera Calibration?- MATLAB & Simulink- MathWorks 中国

标定操作视频:帮助中心 - MATLAB & Simulink

标定原理可参考论文:

[1] Zhou, Lipu, Zimo Li, and Michael Kaess. “Automatic Extrinsic Calibration of a Camera and a 3D LiDAR Using Line and Plane Correspondences.” In 2018 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS), 5562–69. Madrid: IEEE, 2018. https://doi.org/10.1109/IROS.2018.8593660.

三. 标定流程:

1. 使用Matlab Camera Calibrator标定相机内参

注意事项:

(1)首先标定板一定要平整,不能轻易因为外力发生弯曲或者随时间发生形变,棋盘格表面选用哑光材料覆盖,确保边缘清晰。

(2)标定板一定要覆盖全整个相机视野,可以将相机视野范围划分为九宫格,确保标定板主体出现在每个格子中,每个位置前后左右倾斜采图。

(3)倾斜标定板幅度不要过大,标定板和相机平面尽量保持在45度以内。

(4)在标定后可以观察重投影误差,可以删除误差大的图片重新标定,删除图片时需要保证样本的均衡性,图像视场的每个区域保留数目应差不多,不能标定板位于图像边缘或角落的全部删除, 最好mean error 在0.25下。

(5)多采图片,标定板一定要出现在图像边缘和四个角,能更好的估计畸变系数。

(6)参考Evaluating the Accuracy of Single Camera Calibration文中所提到一些提高精度的tips:主要针对宽视场的相机,可以计算3个径向畸变系数,切向畸变和skew参数。

How to Improve Calibration Accuracy

Whether or not a particular reprojection or estimation error is acceptable depends on the precision requirements of your particular application. However, if you have determined that your calibration accuracy is unacceptable, there are several ways to improve it:

  • Modify calibration settings. Try using 3 radial distortion coefficients, estimating tangential distortion, or the skew.

  • Take more calibration images. The pattern in the images must be in different 3D orientations, and it should be positioned such that you have keypoints in all parts of the field of view. In particular, it is very important to have keypoints close to the edges and the corners of the image in order to get a better estimate of the distortion coefficients.

  • Exclude images that have high reprojection errors and re-calibrate.

(7)相机内参的标定最好在装车之前完成,这样可以保证采图均匀有效,标定内参效果更好。

(8)如果相机装在车内玻璃下面,应尽可能靠近玻璃,四周用外壳挡住,避免玻璃反光影响图像。内参建议隔着玻璃重新标定。

2. 采集联合标定数据

注意事项:

(1)采集数据前确保传感器刚性连接,不会被随意移动位置,或者震动导致姿态变化.

(2)没有特殊要求,激光雷达和相机原点越近越好,视差小,有利于后期融合算法的开发.

(3)最好做完硬件时间同步再采数据,尽可能保证后期点云和图像是为同一时刻, 这里可以采用市场上一些成熟的时间同步盒,图像采集卡,或者一些成熟的域控制器产品,在保证相机和激光雷达时钟源一致情况下,最好可以读取相机拍摄触发时刻.或者激光雷达触发相机拍照,配置激光雷达相位锁定(旋转式机械雷达)位于相机朝向中心.

(4)传感器驱动:激光雷达点云和图像数据借助ROS发布出来,注意驱动中时间戳获取形式。

(5)离线程序订阅话题根据时间戳,将激光雷达和相机同步数据保存成0001.pcd和0001.jpg文件,名称一致。

(6)标定板最好无白边,黑白格为8*9奇数和偶数,不要完全对称,表面哑光材料覆盖.

(7)标定场地最好水平空旷,标定板附近不要太多杂物,更有利于点云平面的拟合.

(8)标定板参考教程中,要45度摆放,可以更准确拟合角点,不要随意转动.

(9)最好标定板固定采集同步数据,如果人拿着标定板,每个位置保持一秒,不要快速移动.

(10)采集联合数据参考相机标定,标定板要完整覆盖图像视野,可前后移动3-5米采集两组数据.

3. 联合标定

参考官方教程,将输入改为自己生成的点云和图像即可.

注意事项:

(1)拟合点云的ROI不要设置太大,可借助rviz网格找到有标定板在点云中最大最小的边界.

(2)在脚本中detectRectangularPlanePoints函数,可适当调大一下阈值,不然可能无法拟合出平面,得不到有效数据.

(3)对于筛选出来的点云和图像数据对,可先用CameraCalibrator检测一下,检查标定板角点能否正确检出,删除背景和边缘误检的数据对.

(4)在运行过程中观察图像标定板四个边的颜色顺序是否保持一直,如果发生切换,可能导致标定失败,找到对应数据,删除重新标定.

4. 重投影验证效果

将标定得到的tform矩阵保存即可.将点投影到图像观察效果,检查墙体和杆子的边缘拟合程度.

(1)图1 是车辆在50km/h速度下软同步投影效果,可见150m左右车辆点匹配良好.

图1

(2)图2是也在50km/h左右,软同步,未作点云运动畸变补偿,可见图像右侧匹配良好,左侧未能完全匹配,运动补偿可提升匹配效果.

关于运动补偿请参考另外两篇博客

apollo7.0------浅谈激光雷达运动补偿(一)_龙性的腾飞的博客-CSDN博客_apollo运动补偿

apollo7.0------浅谈激光雷达运动补偿(二)--计算解析_龙性的腾飞的博客-CSDN博客_apollo 运动补偿

图2

 以上为个人经验总结,认识有限,错误难免,欢迎交流指正。

感觉标定还比较好用,就是matlab太大了,要是能将matlab工具箱用C++写一个单独的工具就好了,有时间得尝试一下,还有自标定的方法还可以研究研究。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Matlab激光雷达相机联合标定经验分享 的相关文章

  • 检查图像中是否有太薄的区域

    我正在尝试验证雕刻机的黑白图像 更多的是剪贴画图像 不是照片 我需要考虑的主要事情之一是区域的大小 或线条的宽度 因为机器无法处理太细的线条 所以我需要找到比给定阈值更细的区域 以此图为例 竖琴的琴弦可能太细而无法雕刻 我正在阅读有关 Ma
  • 将数据提示堆栈放在轴标签顶部,并在轴位置发生更改后更新轴标签

    此问题仅适用于 unix matlab Windows 用户将无法重现该问题 我在尝试创建位于 y 轴标签顶部的数据提示时遇到问题 下图很能说明问题 正如您所看到的 在 ylabel 附近创建的数据提示将到达 ylabel 文本的底部 而期
  • Matlab颜色检测

    我试图一致地检测同一场景的图像之间的某种颜色 这个想法是根据颜色配置文件识别一组对象 因此 例如 如果给我一个带有绿色球的场景 并且我选择绿色作为我的调色板的一部分 我想要一个具有反映它检测到球的矩阵的函数 任何人都可以为这个项目推荐一些
  • 平衡两轮机器人而不使其向前/向后漂移

    我正在尝试设计一个控制器来平衡 2 轮机器人 约 13 公斤 并使其能够抵抗外力 例如 如果有人踢它 它不应该掉落 也不应该无限期地向前 向后漂移 我对大多数控制技术 LQR 滑模控制 PID 等 都很有经验 但我在网上看到大多数人使用 L
  • 如何为已编译的 MATLAB 创建安装程序并要求用户接受我们的许可条款?

    我正在 MATLAB 中编写程序分发给 Windows 用户 我使用 MATLAB 编译器和 MATLAB r2014a 版本来创建程序 我可以使用 MATLAB 应用程序编译器创建 Windows 安装程序 并且它的工作效果可以接受 但是
  • 直方图均衡结果

    I am trying to code histogram equalization by my self but the results are different from the built in function in matlab
  • Python 或 C 语言中的 Matlab / Octave bwdist()

    有谁知道 Matlab Octave bwdist 函数的 Python 替代品 此函数返回给定矩阵的每个单元格到最近的非零单元格的欧几里得距离 我看到了一个 Octave C 实现 一个纯 Matlab 实现 我想知道是否有人必须用 AN
  • 如何正确从表中删除 NaN 值

    在 Matlab 中阅读 Excel 电子表格后 不幸的是 我的结果表中包含了 NaN 例如这个 Excel 表格 将产生此表 其中出现额外的 NaN 列 我尝试使用以下代码片段删除 NaN measurementCells readtab
  • MATLAB 编译器与 MATLAB 编码器

    两者有什么区别 据我了解 MATLAB Compiler将MATLAB代码包装成 exe文件 这样就可以在不安装MATLAB的情况下使用它 并且只需要MCR 除此之外 MATLAB Builder NE 还可以用于生成与 Net 框架一起使
  • 以 2 为底的矩阵对数

    Logm 取矩阵对数 并且log2 取矩阵每个元素以 2 为底的对数 我正在尝试计算冯 诺依曼熵 它涉及以 2 为底的矩阵对数 我该怎么做呢 如果将 以 2 为底 的矩阵指数定义为B expm log 2 A 或者如果您类似地通过特征分解直
  • matlab中更快的插值方法

    我正在使用 interp1 来插值一些数据 temp 4 30 4 rand 365 10 depth 1 10 dz 0 5 define new depth interval bthD min depth dz max depth ne
  • MATLAB 除法...29/128 应该返回 0 吗?

    我真的不认为这是一个精度问题 答案应该是0 226左右 这是确切的代码 val I i j bucketSize pos val bucketSize I只是我从中获取值的矩阵 以下是 MATLAB 的输出 val 29 bucketSiz
  • 通过 cuFFT 进行逆 FFT 缩放

    每当我使用 cuFFT 绘制程序获得的值并将结果与 Matlab 的结果进行比较时 我都会得到相同形状的图形 并且最大值和最小值位于相同的点 然而 cuFFT 得到的值比 Matlab 得到的值大得多 Matlab代码是 fs 1000 s
  • 如何在 MATLAB 中将矩阵元素除以列总和?

    有没有一种简单的方法可以将每个矩阵元素除以列和 例如 input 1 4 4 10 output 1 5 4 14 4 5 10 14 以下是执行此操作的不同方法的列表 使用bsxfun https www mathworks com he
  • 轴标注问题

    通过运行我编写的以下 matlab 函数 可以互换图中的 x 轴和 y 轴 谁能告诉我问题出在哪里或者帮我解决它吗 预先感谢您的任何帮助 function axislabeling n x 1 1 n y 1 1 n z zeros n n
  • MATLAB问题:在图块中引用变量的值[重复]

    这个问题在这里已经有答案了 可能的重复 matlab 绘图标题中的变量 https stackoverflow com questions 5629458 matlab variable in plot title 我想在图中引用 m 文件
  • MATLAB:图像角坐标和引用元胞数组

    我在比较不同元胞数组中的元素时遇到一些问题 这个问题的背景是我正在使用bwboundariesMATLAB 中的函数可追踪图像的轮廓 该图像是结构横截面 我试图找出整个部分是否具有连续性 即 只有一个轮廓由bwboundaries命令 完成
  • 计算给出数组中最小标准差的子集

    让我们有一个大小的向量N 例如 x rand N 1 我想计算长度子集的最小标准差K在向量中 When N and K很小 很容易找到最好的子集 因为我可以使用nchoosek N K 枚举所有可能的子集 但是当值N and K比我们说的要
  • Matlab下降低图像质量

    问候 我正在尝试找到一种简单的方法来处理图像 以便将其质量从 8 位降低到 3 位 实现这一目标的最简单方法是什么 干杯 如果要线性缩放 只需将每个像素值除以 255 7 即 如果原始图像存储在矩阵 I 中 则让低分辨率图像 J I 255
  • 在Matlab图例中使用Latex?

    我的 matlab 不接受我的 Latex 例如 如果我使用legend b 6 rightarrow b 7 它没有向我显示箭头 我该如何解决这个问题 尝试使用 Latex 解释器 例如 legend b 6 rightarrow b 7

随机推荐

  • 大疆M3508电机使用CAN通信进行速度PID闭环控制详解

    目录 一 简介二 电机通信协议三 电机PID控制原理四 官方代码移植 中断接收五 官方代码移植 查询接收 一 简介 之前写过一篇文章STM32实现四驱小车 xff08 五 xff09 电机控制任务 电机速度PID控制算法 xff0c 其中是
  • 大疆M3508电机位置与速度PID控制及自编上位机调参

    目录 一 简介二 电机位置 速度 电流三闭环PID控制原理三 STM32实现位置 速度控制 xff08 一 xff09 电机数据接收 xff08 二 xff09 一些全局变量 xff08 三 xff09 电机PID初始化与位置 速度PID计
  • 相机内参与外参学习记录与理解

    1内参 内参 xff1a 在小孔成像模型中有一个光点P xff0c 其将光以直线的方式穿过纸板的小孔 光心 xff09 xff0c 射到显示纸板 xff08 物理成像平面 xff09 上 xff0c 其坐标系结构如下图所示 而内参的作用即是
  • 现代颜色技术原理及应用学习记录

    感谢CRFX下面分享的书 第一章
  • 【计算机网络】常见的HTTP报文头部信息

    常见的HTTP报文头部信息 HTTP首部字段根据实际用途被分为以下4种类型 1 通用首部 通用首部字段 xff08 General Header Fields xff09 请求报文和响应报文两方都会使用的首部 Cache Control x
  • imagenet 数据集读取数据速度记录

    电脑配置是固态硬盘 xff0c i7cpu xff0c 不进行计算 xff0c 只读数据 xff0c 不做数据增广 xff0c 只做resize 只看不赞不文明 xff0c 这是大约花费两天时间测试结果 目录 xff1a 1 xff0c 最
  • c++调python踩坑日志

    目录 import array 报错 矩阵互相转换 include numpy相关vs2019配置 数组太长报错 import array 报错 参考 xff1a https blog csdn net weixin 40232401 ar
  • pytorch 半精度训练

    必坑记录 这种训练直接变成nan了结果 实验结果 前者采用正常训练 后者改进为 from torch cuda amp import autocast as autocast 实验发现从一epoch44秒 xff0c 减少为35秒 但是训练
  • earth mover‘s distances学习记录

    https zhuanlan zhihu com p 145739750 后面的感觉没讲清楚 一开始我没想清楚 xff0c 为什么可以把问题转换成线性规划问题 问题转换一下 xff0c 一个工厂有A xff0c B xff0c C三个仓库
  • A Tutorial on Energy-Based Learning(机器学习能量模型)学习记录

    1 Introduction 其中Y是标签 X是输入 基于能量的机器学习模型即是寻找这样一个函数 和输入数据越接近 能量越小 给定一个输入 最好的模型即是对应的Y的值是真实值 这个真实值的能量是最小的 此模型可以做的工作有 预测 Ranki
  • dncnn(残差网络图像去燥记录)

    一 xff0c 生成训练数据 1 xff0c 原文相关知识 we use the noisy images from a wide range of noise levels e g 0 55 to train a single DnCNN
  • win10 10016自动重启错误解决记录

    1 xff0c 没解决 1352127440 xff0c 找到 组件服务 xff0c 然后依次展开组件服务 计算机 我的电脑 DCOM配置 xff0c 找到 9CA88EE3 ACB7 47C8 AFC4 AB702511C276 xff0
  • 无偏估计、有效性、相合性

    定义 xff1a 在已知概率分布函数构造的情况下 xff0c 概率分布的一些参数未知 xff0c 如高斯分布的namda 方差 xff0c 而利用采集到的参数来对未知参数进行估计就是参数估计 比较基础的有矩估计 最大似然估计 而不同的方法对
  • Windows10下安装point-cloud-annotation-tool点云标注工具——吐血之路总结

    零 为了标注点云数据 xff0c 经过多方查找免费开源的标注软件 xff0c 根据使用要求和方便程度最终选择了这款可以在Windows下编译安装的point cloud annotation tool xff0c 基于QT和vtk和PCL进
  • ROS 中CompressedImage消息的发布与订阅

    背景 xff1a 某些情况下需要录图像数据的包 xff0c 非常占空间和带宽 xff0c 尤其对于一些工业相机图像一张好几兆 xff0c 每秒30帧的话一份钟好几个G xff0c 这时候可以选择的订阅压缩图像 xff0c 下面直接来个dem
  • 【C#】简单的串口发送

    一 核心代码 xff1a SerialPort serialPort span class token operator 61 span span class token keyword new span span class token
  • 原生OKHttp以及OKHttpUtil的使用

    Android系统提供了两种HTTP通信类 xff0c HttpURLConnection和HttpClient 尽管Google在大部分安卓版本中推荐使用HttpURLConnection xff0c 但是这个类相比HttpClient实
  • c++编译器配置错误问题clang: error: linker command failed with exit code 1 (use -v to see invocation)

    背景 xff1a ubuntu18 04系统 之前装其他程序的时候安装了一些软件 xff0c 不知道什么时候g 43 43 编译器从 usr bin c 43 43 组里面给删掉了 xff0c 默认的编译器成了clang 43 43 xff
  • apollo7.0------浅谈激光雷达运动补偿(二)--计算解析

    背景介绍 运动补偿相关介绍参考第一篇博客 xff1a apollo7 0 浅谈激光雷达运动补偿 龙性的腾飞的博客 CSDN博客 lidar运动补偿 本篇博客主要解释一下上篇博客中运动补偿的计算部分 xff0c 简单来说就是一个利用四元数球面
  • Matlab激光雷达相机联合标定经验分享

    一 背景介绍 联合标定是做多传感器融合的基础工作 xff0c 也是一个没有最好只有更好的研究方向 xff0c 相关论文也是层出不穷 xff0c 网上也有许多开源的工作 xff0c 包括Autoware的工具箱我也试过 xff0c 感觉标定效