【文献分享】基于线特征的激光雷达和相机外参自动标定

news2024/12/29 14:25:00

论文题目:Line-based Automatic Extrinsic Calibration of LiDAR and Camera

中文题目:基于线特征的激光雷达和相机外参自动标定

作者:Xinyu Zhang, Shifan Zhu, Shichun Guo, Jun Li, and Huaping Liu

作者机构:清华大学汽车安全与能源国家重点实验室

论文链接:https://www.researchgate.net/publication/354877994_Line-based_Automatic_Extrinsic_Calibration_of_LiDAR_and_Camera

为了解决外参逐渐漂移的问题,提出了一种基于线的方法,可以在真实场景中实现激光雷达和相机的自动在线外参标定。首先,从点云和图像中提取和过滤线特征。然后,利用自适应优化方法提供精确的外部参数。然后在KITTI基准上用地面真值对其进行了评估。实验验证了标定方法的准确性。在数百帧的在线实验中,本文提出的方法自动校正了误标定误差,达到了0.2度的精度,验证了它在各种场景下的适用性。

1 引言

本文提出的目的:

  1. 传统的手动校准方法需要专门设计对象,如标定板或手动选择点,这导致校准过程繁琐。
  2. 长时间的运行和不同的载荷会导致外部参数的轻微漂移和累计误差,因此需要自动在线标定对其进行调整。

本文主要贡献:

  • 提出了一种能在线自动估计六自由度(6-DOF)参数的外参标定方法。该方法利用一般的直线特征减少了传感器之间的漂移误差,不需要人工选择点和特殊目标,因此能够适用于任何给定的场景。
  • 提出了一种点云线提取方法,利用点云处理方法过滤噪声数据,准确提取线特征。
  • 引入自适应优化方法和结果置信度估计方法,实现了向正确方向优化和高效计算标定结果。

2 算法概述

提出的方法分为三个步骤:

  1. 在图像和点云的特征提取之前进行一系列的预处理
  2. 从图像和点云中提取线特征,通过特征滤波进行细化
  3. 最后,通过对初始外部参数添加小扰动,将点云线特征投影到像素帧上,并对每个扰动的得分进行计算和优化

本文的算法框架如下:

3 算法框架

3.1 问题表述

激光雷达与相机的外参标定问题在于确定两者之间正确的变换矩阵。将问题定义为求旋转角向量θ=(θx;θy;θz),平移向量t=(tx,ty,tz);点云记为 P t P_t Pt,图像记为 I i j t I^t_{ij} Iijt,表示点I和像素ij在第t帧的值。通过将LiDAR点投影到图像上计算成本分数,目标函数定义为:
S t = ∑ t = n − w n I i j t [ α ∑ p t p t ∈ F h t T t p t + ( 1 − α ) ∑ p t p t ∈ F v t T t p t ] / w S_t = \sum_{t=n-w}^n I^t_{ij}[\alpha \sum_{p_t}^{p_t \in F_h^t} T_tp_t+(1-\alpha)\sum_{p_t}^{p_t \in F_v^t}T_tp_t]/w St=t=nwnIijt[αptptFhtTtpt+(1α)ptptFvtTtpt]/w

其中每个LiDAR点 p t p_t pt分别迭代水平特征 F h F_h Fh和垂直特征 F v F_v Fv。系数α对水平和垂直线特征赋予不同的权重。本文将α赋值为0.65,以增强对水平误差的约束。另外,w是滑动窗口的大小。考虑之前的w帧,计算第t帧的分数。

通俗的说就是:将激光雷达点检测到的水平线特征和竖直线特征分别通过转换矩阵T,变换到相机坐标系中,然后投影到图像上,然后通过一个在图像上的滑动窗口计算得分。

3.2 图像处理

在图像处理中,首先将RGB图像转换为灰度图像;然后通过[1]中的线特征提取算法进行线特征提取;然后对灰度图像进行距离变换。

下图展示了这个过程。

图(b)中的白色边缘和图©中的白色线条分别代表聚类的边缘特征和线特征。如图(b)所示,应用距离变换模型后,聚类后的边缘特征更加无序。相反,图©中的线特征组织得更好,产生的灰度变化更小。它可以允许更大的搜索步长,从而防止优化过程进入局部解决方案。

白色像素表示提取的特征,灰度变化表示到边缘或线特征的距离。像素越白,越接近这些线特征的中心

3.3 雷达处理

在激光雷达处理中,其原理是利用距离不连续性来获得更多的边线特征。为了实现这一目标,采用局部映射的方法,将三帧点云合并为一帧,使一帧能呈现更多的点。具体来说,利用NDT方法计算当前帧和前两帧之间的变换矩阵。

在单帧和三合一帧中提取的边界线点对比如下图所示。图(a)显示了通过将三帧点云 P t − 2 : t P_{t−2}:t Pt2:t转换为一帧点云得到的更密集的点云,与图(b)中的另一帧点云相比,可以显示更多的点。这可以提高提取性能,特别是在应用低光束激光雷达时。

然后将更密集的点云转换成图像,每个像素存储对应雷达点的距离信息。通过比较当前点与相邻点之间的距离,消除离相邻点太远的离群点,提取出更精确的线特征。需要注意的是,本文考虑了多个激光束之间的距离信息。这使得可以提取水平特征,从而使用线特征最小化水平和垂直误差。水平线特征 F h F_h Fh和垂直线特征 F v F_v Fv分别存储在两个不同的点云中。在此设置中,忽略了很少出现的平面相交线特征,有利于提高计算效率。

3.4 特征过滤

在上面的处理之后,得到了无序的线特征。下面采用两步过滤方法来消除异常值。

**第一步:**由于点云已经转换成图像形式,因此设计了一个卷积核来过滤掉距离所有八个相邻点超过一定阈值的点。这种过滤方法可以去除所有的异常点以及与地面对应的点。剩余的特征可以被识别为线特征。

过滤前后的线特征如下图所示。

**第二步:**使用聚类算法去除相邻点很少的线特征,剔除短于8像素的线特征。

以上两个过滤步骤可以提供更有条理的点云线特征,保证后续步骤的优化效果更好

3.5 自适应优化

在优化之前,已经将LiDAR线特征提取到图像上,并计算投影到灰色区域的LiDAR点的比例。

为了准确地找到解,采用了两个搜索步骤。

  1. 首先,为了防止搜索陷入局部解,采用图像线特征宽、灰度变化小、步长相对较大的粗糙搜索,可以快速发现可能包含最佳解的区域。
  2. 然后,应用更细的图像线特征和更大的灰度变化,以及更小的步长,以获得更精确的校准结果。

当激光雷达点投射到灰色区域的比例超过一定阈值时,就会发生这两步大小和灰度变化之间的切换。


为了提高计算效率,提出了一种自适应优化方法,使优化向着正确的方向进行。

将当前像素得分与相邻的728个得分进行比较。在此过程中,如果搜索程序发现得分较高的参数,则停止当前搜索过程,并在得分较高的位置开始新的搜索过程。此外,当达到设定的迭代次数或找到最佳分数时,该搜索过程将停止,从而可以提高计算效率。另外,还使用滑动窗口来设置优化过程中需要考虑的帧。在本文中,为了防止从错误的方向进行优化搜索或陷入局部最优解,使用了三帧。因此,最终优化的外部参数应该在滑动窗口的所有帧中都超过其他参数。

4 实验与结果

在KITTI数据集的不同场景下进行了两次实验。

4.1 精度分析

图(a)和(b)给出了实验一的结果,图©和(d)给出了实验二的结果。在这两个实验中,在X、Y、Z轴上增加了1度的旋转偏置,并对地面真值参数增加了0.05米的变换偏置。然后,每10帧添加0.5度的旋转偏差。需要指出的是,1度旋转偏置是正还是负是随机的。实验将标定误差与地面真实值进行了比较。此外,还测试了检测误校准的能力和纠正偏差的速度。

在不计算人为误差的情况下,横摇、俯仰、偏航的最大误差始终在0.5度以内。由于激光雷达具有较高的水平分辨率,偏航的校准结果最为精确。尽管激光雷达在垂直方向上的分辨率要低得多,并且该方向上的3D特征呈现频率较低,但由于采用了自适应优化算法,并且该方向的权重较高,因此所提出方法仍然可以达到较高的精度。总体而言,在所有维度上的平均旋转误差为0.12度,低于大多数离线校准技术。

4.2 纠错速度分析

在上图(a)和(b)中,黑色箭头1、2、3和4指向添加偏差的框架。对于箭头1和3提出的方法立即纠正了偏差,而没有显示置信度下降,而对于黑色箭头2和4,红色部分在两帧内变为绿色(图(a)),这意味着偏差在两帧内得到了纠正。实验二也出现了同样的情况(图©和(d))。

在KITTI数据集上更多场景下的整体校准结果如下图所示,说明本文方法适用于不同场景。

5 总结

本文提出了一种在线自动标定激光雷达和相机外部参数的方法。与以前的自动化方法不同,这种新的校准方法不需要在场景中放置标记。作者证明了点云和图像的线特征是校正校准偏差的鲁棒特征。人为添加的偏置可以在一到两帧内得到纠正,比其他方法更快。此外,文中还说明了当前校准结果的置信度可以计算,并进一步用于提高计算效率和精度。

未来的工作希望评估提取的线特征的准确性,以减少特征较少的场景中的校准偏差。利用蒙特卡罗方法可以提供初始参数。

6 参考文献

[1]R. G. Von Gioi, J. Jakubowicz, J.-M. Morel, and G. Randall, “Lsd: a
line segment detector,” Image Processing On Line, vol. 2, pp. 35–55, 2012.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1147517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序备案教你快速小程序备案

下面是小程序备案的步骤: 1. 在微信公众平台上登录小程序账号,进入“设置”页面。 2. 点击“账号信息”栏,进入账号信息页面。 3. 点击“备案”栏,进入备案页面。 4. 在备案页面中,选择需要备案的域名或网站&#…

Flash(Animate)和木疙瘩的元件学习和理解

元件就是讲一个图形或素材封装到一个容器里面!可以被任何舞台、页面通过从仓库中拖拽的方式无限重复使用,类似unity中的预制体! Flash(Animate)和木疙瘩中元件唯一区别:木疙瘩中一个元件A中不可以添加另一个元件B! 一…

操作系统运行机制

文章目录 操作系统运行机制特权指令VS非特权指令内核态VS用户态中断和异常内中断(异常)外中断中断机制基本原理中断处理过程 系统调用系统调用和库函数的区别为什系统调用时必须的?什么功能需要用到系统调用系统调用的过程小结 操作系统内核 操作系统运行机制 特权…

防火墙的技术(NAT NAT-Server 策略路由 ) 第二十课

防火墙的技术(NAT NAT-Server 策略路由 ) 第二十课 环境的准备工作 1 配置如图所示的所有的IP地址 1 配置IIP地址 2 配置防火墙中的基本配置 防火墙的默认管理口的ip地址 <USG6000-ISP-LOCAL>display current-configuration 2023-10-28 02:54:08.620 !Software Ver…

YugaByteDB -- 全新的 “PostgreSQL“ 存储层

文章目录 0 背景1 架构1.1 Master1.2 TServer1.3 Tablet 2 读写链路2.1 DDL2.2 DML2.3 事务 3 KEY 的设计4 Rocksdb 在 YB 中的一些实践总结 0 背景 YugaByteDB 的诞生也是抓住了 spanner 推行的NewSQL 浪潮的尾巴&#xff0c;以 PG 生态为基础 用C实现的 支持 SQL 以及 CQL 语…

Linux多核CPU启动内核调试(详细)总结

目录 一、综述二、调试流程简介2.1 大体流程2.2 spin-table简介 三、uboot和内核配置3.1 uboot配置3.2 timer配置3.3 GIC中断配置3.4 驱动确认3.5 SMP配置3.6 内核config配置 四、其他相关链接1、[交叉编译linux内核总结](https://blog.csdn.net/Luckiers/article/details/1245…

Apache服务的搭建与配置(超详细版)

前言 Apache是一种常见的Web服务器软件&#xff0c;广泛用于Linux和其他UNIX操作系统上。它是自由软件&#xff0c;可以通过开放源代码的方式进行自由分发和修改。Apache提供了处理静态和动态内容的能力&#xff0c;而且还支持多种编程语言和脚本&#xff0c;如PHP、Python和P…

Doremy‘s Connecting Plan(cf 906 div2)

Doremy生活在一个由编号从1到n的n个城市组成的国家&#xff0c;第二个城市居住着ai人。它可以被建模为具有n节点的无向图。最初&#xff0c;图形中没有边。现在Doremy想要使图连通。 要做到这一点&#xff0c;她可以在i和j之间添加一条边,并且满足以下条件 其中S是当前在i或j的…

分类预测 | Matlab实现KOA-CNN-BiGRU-selfAttention多特征分类预测(自注意力机制)

分类预测 | Matlab实现KOA-CNN-BiGRU-selfAttention多特征分类预测&#xff08;自注意力机制&#xff09; 目录 分类预测 | Matlab实现KOA-CNN-BiGRU-selfAttention多特征分类预测&#xff08;自注意力机制&#xff09;分类效果基本描述程序设计参考资料 分类效果 基本描述 1.M…

基于UDP/TCP的网络通信编程实现

小王学习录 今日鸡汤Socket套接字基于UDP来实现一个网络通信程序DatagramSocket类DatagramPacket类基于UDP的服务器端代码基于UDP的客户端代码基于TCP来实现一个网络通信程序ServerSocket类Socket类基于TCP的服务器端代码基于TCP的客户端代码优化之后的服务器端代码补充TCP长短…

RabbitMQ学习04

文章目录 发布确认1. 发布确认的原理2. 发布确认的策略2.1.开启发布确认的方法2.2.单个确认2.3.批量确认发布2.4.异步确认发布2.5.如何处理异步未确认消息2.6 总结&#xff1a; 发布确认 1. 发布确认的原理 生产者将信道设置成 confirm 模式&#xff0c;一旦信道进入 confirm …

Spring Cloud Alibaba 教程 Fegin 篇

Spring Cloud Alibaba 教程 | Feign 篇 写在前面的话&#xff1a; 本笔记在参考网上视频以及博客的基础上&#xff0c;只作为个人学习笔记&#xff0c;如有侵权联系删除&#xff0c;谢谢&#xff01; 1、Feign替代RestTemplate ​ 1.1 引入依赖 <!-- Feign 客户端依赖 --&…

StringBuffer类提供针对字符的操作方法

StringBuffer类是Java中用于操作字符串的一个类&#xff0c;提供了许多针对字符的操作方法&#xff0c;例如&#xff1a; append()&#xff1a;用于在字符串末尾添加字符或字符串。 insert()&#xff1a;用于在字符串的指定位置插入字符或字符串。 delete()&#xff1a;用于删…

Spring中简单的获取Bean对象(对象装配)

获取Bean对象也叫做对象装配&#xff0c;是把对象取出来放到某个类中&#xff0c;有时候也叫对象注入&#xff01; 对象装配&#xff08;对象注入&#xff09;更加简单的读取Bean&#xff08;是从Spring容器中读取某个对象放到当前类里面&#xff09;的实现方法有以下3种&…

06 MIT线性代数-线性无关,基和维数Independence, basis, and dimension

1. 线性无关 Independence Suppose A is m by n with m<n (more unknowns than equations) Then there are nonzero solutions to Ax0 Reason: there will be free variables! A中具有至少一个自由变量&#xff0c;那么Ax0一定具有非零解。A的列向量可以线性组合得到零向…

【AD9361 数字接口CMOS LVDSSPI】C 并行数据之LVDS

接上一部分&#xff0c;AD9361 数字接口CMOS &LVDS&SPI 目录 一、LVDS模式数据路径和时钟信号LVDS模式数据通路信号[1] DATA_CLK[2] FB_CLK[3] Rx_FRAME[4] Rx_D[5&#xff1a;0][5] Tx_FRAME[6]Tx_D[5&#xff1a;0][7] ENABLE[8] TXNRX系列 二、LVDS最大时钟速率和信…

附录B 其他第三方软件移植(FTP、OpenSSH、GDB)

目录 开发板 FTP 服务器移植与搭建vsftpd 源码下载vsftpd 移植vsftpd 服务器测试配置vsftpd添加新用户Filezilla 连接测试 开发板 OpenSSH 移植与使用OpenSSH 简介OpenSSH 移植OpenSSH 源码获取移植zlib 库移植openssl 库移植openssh 库 openssh 设置openssh 使用ssh 登录scp 命…

opencv4.x通过cmake编译带cuda

首选确定目标&#xff0c;需要编译的是opencv4.5.5带第三方库&#xff0c;带cuda的版本&#xff0c;使用vs编译器&#xff0c;编译releasedebug版本。 需要先安装好cmake cuda cudnn等基础依赖&#xff0c;并且确保安装好vs的编译器&#xff0c;并且大小版本都符合实际要求。 …

【C++的OpenCV】第十四课-OpenCV基础强化(三):Mat元素的访问之data和step属性

&#x1f389;&#x1f389;&#x1f389; 欢迎来到小白 p i a o 的学习空间&#xff01; \color{red}{欢迎来到小白piao的学习空间&#xff01;} 欢迎来到小白piao的学习空间&#xff01;&#x1f389;&#x1f389;&#x1f389; &#x1f496; C\Python所有的入门技术皆在 我…

信息系统项目管理师教程 第四版【第4章-信息系统管理-思维导图】

信息系统项目管理师教程 第四版【第4章-信息系统管理-思维导图】