解读 | 快速精确的体素GICP三维点云配准算法

 原创 | 文 BFT机器人

图片

01

摘要

本文提出了体素化广义迭代最近点(VGICP)算法,用于快速准确的三维点云配准。所提出的方法通过体素化扩展了广义迭代最近点(GICP)方法,以避免昂贵的最近邻搜索,同时保持其准确性。与从点位置计算体素分布的正态分布变换(NDT)相反,我们通过聚合体素中每个点的分布来估计体素分布。

体素化方法使我们能够高效地并行处理优化,并且所提出的算法可以在CPU上以30 Hz运行,在GPU上以120 Hz运行。通过在模拟和真实环境中的评估,我们确认所提出的算法的准确性与GICP相当,但比现有方法要快得多。这将使实时3D LIDAR应用程序的开发成为可能,这些应用程序需要对LIDAR帧之间的相对位姿进行极快速的评估。

02

相关介绍

三维 (3D) 点云配准对于许多3D LIDAR应用(例如校准、定位、测绘和环境识别)来说是一项至关重要的任务。3D LIDAR有两种流行的点云配准方法:广义迭代最近点 (GICP) 和正态分布变换 (NDT)。

GICP以分布到分布的比较方式扩展了经典ICP算法[4],以实现准确配准,而NDT利用体素化方法来避免昂贵的最近邻搜索并提高处理速度。然而,这两种方法都有其自身的弱点。由于GICP和其他ICP变体高度依赖最近邻搜索,因此如果点数很大,有时很难在计算能力有限的计算机上实时运行它们。相反,NDT通常对体素分辨率的选择非常敏感。最佳体素分辨率取决于环境和传感器属性,如果我们不选择合适的分辨率,NDT的配准精度会急剧下降。

在本文中,我们提出了V oxelized GICP (VGICP) 算法,用于快速准确的3D点云配准。体素化方法使所提出的算法能够有效地并行运行,并且我们的VGICP实现可以在CPU上以30 Hz频率和GPU上以120 Hz频率处理包含15,000个点的点云。通过聚合体素中所有点的分布(多点分布到单体素分布),我们估计体素稳健。与从点位置估计体素分布的NDT相比,即使体素中只有很少的点,这种方法也会产生有效的体素分布,从而产生对体素分辨率变化具有鲁棒性的算法。在模拟和真实环境中获得的评估结果表明,所提出的VGICP算法的配准精度与GICP相当,并且在处理速度方面优于其他方法。

本文的贡献有三个方面。首先,我们提出了一种多点分布聚合方法,可以从较少数量的点稳健地估计体素的分布。其次,我们提出了VGICP算法,该算法与GICP一样准确,但比现有方法快得多。第三,可以从公共存储库获取这些实现,该存储库包含拟议的VGICP的实现以及GICP的并行实现。

03

相关工作

A.GICP

经典ICP算法有很多变体,例如Trimmed ICP[5]和Normal ICP[6]。GICP[1]是最流行的ICP变体之一。GICP以分布到分布匹配的方式扩展了经典ICP算法。尽管该算法以其良好的准确性而闻名,但该算法(以及其他ICP变体)高度依赖最近邻搜索来关联最近的点。虽然通常使用基于KD树的高效搜索,但最近邻搜索常常成为瓶颈,使得当点数较多时算法无法实时运行。此外,基于最近邻搜索的方法不适合在GPU上进行优化,因为它大量使用条件分支,这会显着降低GPU的性能。

B.NDT

NDT[2]采用基于体素的关联方法,而不是精确的最近邻搜索。该算法首先将输入点云分割成一组体素,并对每个体素中的点拟合正态分布。然后,它通过找到使体素分布下输入点的可能性最大化的变换,将另一个点云与体素化的点云对齐。由于NDT 避免了成本高昂的最近邻关联,因此它通常比ICP变体算法快得多。D2D-NDT(分布到分布无损检测)[7]是对源点云和目标点云进行体素化并计算源体素和目标体素分布之间的距离的NDT。其比较方案与GICP类似,[8]表明D2D-NDT在精度方面优于经典NDT。

然而,NDT及其变体的准确性取决于体素尺寸的选择。为了获得NDT 的最佳性能,我们需要根据传感器和环境属性仔细选择合适的体素大小。一些研究提出了使NDT对超参数变化具有鲁棒性的方法(例如,多分辨率[9]和三线性体素平滑[3])。然而,这些扩展对无损检测的处理速度有负面影响。

C.Feature-based registration

基于特征的配准方法首先从输入点云中提取一些代表性特征,然后根据特征对应估计变换。已经提出了许多用于点云配准的特征,例如基本平面和边缘特征[10]、[4]、快速点特征直方图(FPFH)[11]和方向直方图签名(SHOT)[12]。由于这些特征能够稳健地找到点云之间的对应关系,因此基于特征的方法通常对初始姿态误差具有鲁棒性(有些甚至不需要初始猜测)。

然而,由于基于特征的方法仅使用有限数量的特征(通常远小于输入点的数量),因此其精度比基于点的方法差。因此,在典型的使用案例中,在基于特征的方法之后执行基于点的精细配准。基于特征的配准方法和基于点的配准方法是正交的,它们应该被用来互补。

04

提出的算法

在本节中,我们首先解释GICP算法,然后以一对多分布对应方式扩展它以导出VGICP算法。

A.GICP algorithm

我们考虑变换T的估计,它将一组点A={a0,···,aN}(源点云)相对于另一组点B= {b0,···,bN}(目标点云)。遵循经典的ICP算法,我们假设A和B之间的对应关系是通过最近邻搜索给出的:bi=Tai。GICP算法[1]将采样点的表面建模为高斯分布:ai∼N(ˆai,CAi),bi∼N(ˆbi,CBi)。然后,我们定义变换误差如下:

图片

di的分布由高斯分布的再生性质给出:

图片

GICP算法找到使方程(1)的对数似然最大化的变换T。如下:

图片

每个点的协方差矩阵通常是根据其k个邻居估计的(例如,k=20)。按照[1]中的建议,通过用(1,1,c)替换其特征值来对每个协方差矩阵进行正则化。这种正则化使GICP作为平面到平面ICP工作。

B.Voxelized GICP algorithm

为了推导体素化GICP算法,我们首先扩展方程:计算ai与其相邻点{bj|kai−bjk<r} 之间的距离,如下所示:

图片

该方程可以解释为平滑目标点分布。然后,类似于等式。d0i的分布由下式给出:

图片

我们估计使方程的对数似然最大化的变换T。如下:

图片

为了有效地计算上式,我们将其修改为:

图片

图片

图1:(a)GICP、(b)NDT和(c)VGICP中距离计算的对应模型。红色圆圈表示源点,蓝色圆圈表示目标点。(GICP:最近的分布到分布,NDT:基于体素的点到分布,VGICP:基于体素的分布到多分布。)即使体素仅包含几个,VGICP模型也会产生有效的分布点。

分布到分布对应模型,这是合理的,但依赖于昂贵的最近邻搜索。为了快速配准,NDT使用点到体素分布对应模型。然而,我们至少需要四个点(实际上超过十个)来计算3D协方差矩阵。如果体素中的点数较少,协方差矩阵就会损坏。我们的VGICP利用体素对应中的单到多分布来处理只有几个点落在体素内的情况。因为它根据点分布计算体素分布,所以即使体素仅包含一个点,它也会产生适当的协方差矩阵。

C.Implementation

图片

算法1详细描述了VGICP的配准过程。如上所述,VGICP算法在优化过程中不需要昂贵的最近邻搜索,因此可以利用CPU和GPU并行处理。对于位姿优化,我们选择高斯-牛顿优化器,因为与拟牛顿方法不同,它收敛速度快并且不需要超参数。

我们实现了VGICP算法的三个版本:单线程、多线程和GPU处理。所有版本首先使用基于KD树的最近邻搜索来估计每个点的协方差矩阵[13]。这种协方差估计在多线程和GPU处理版本中是并行的。我们还实现了基于GPU的强力最近邻搜索。作为基线,除了VGICP之外,我们还实现了GICP算法。GICP实现也是通过CPU多线程并行化的,但没有在GPU上实现,因为它依赖于KD树最近邻搜索,不适合GPU。

05

总结及未来的工作

在本研究中,我们提出了体素化GICP算法。所提出的VGICP与GICP一样准确,因为它利用基于体素的关联方法。模拟和真实环境中的评估结果表明,所提出的方法显示出卓越的处理速度(CPU上为30 fps,GPU上为120 fps),并且对体素分辨率变化具有鲁棒性。我们计划评估和改进所提出的VGICP算法的收敛性,因为它采用体素化方法,当初始猜测不接近真实姿态时,可能会影响配准结果。我们还计划使用VGICP开发基于IMU-LIDAR联合优化的定位方法,这需要对关键帧之间的相对位姿进行极快的评估。

END

作者 | 江城

排版 | 小河

审核 | 橙橙

若您对该文章内容有任何疑问,请与我们联系,我们将及时回应。

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

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

相关文章

Microsoft Edge浏览器中使用免费的ChatGPT

一、双击打开浏览器 找到&#xff1a;扩展&#xff0c;打开 二、打开Microsoft Edge加载项 三、Move tab新标签 获取免费ChatGPT 四、启用Move tab。启用ChatGPT。 扩展 管理扩展 启用 五、新建标签页&#xff0c;使用GPT 六、使用举例 提问 GPT回复

酷开科技 | 酷开系统,为居家生活打开更精彩的窗口

电视在我们的日常生活中扮演着重要的角色。虽然&#xff0c;作为客厅C位的扛把子——电视的娱乐作用深入人心&#xff0c;但是&#xff0c;它的涵义和影响力却因我们每个人的具体生活环境而存在着种种差异&#xff0c;而我们的生活环境又受到我们所处的社会及文化环境的影响。 …

Gartner发布2024 年十大战略技术趋势

10月17日&#xff0c;Gartner 发布2024年企业机构需要探索的****十大战略技术趋势。Gartner研究副总裁Bart Willemsen表示&#xff1a;“由于技术变革以及社会经济方面的不确定性&#xff0c;我们必须大胆采取行动并从战略上提高弹性&#xff0c;而不是采取临时措施。IT领导者的…

页面查询多项数据组合的线程池设计 | 京东云技术团队

背景 我们应对并发场景时一般会采用下面方式去预估线程池的线程数量&#xff0c;比如QPS需求是1000&#xff0c;平均每个任务需要执行的时间是t秒&#xff0c;那么我们需要的线程数是t * 1000。 但是在一些情况下&#xff0c;这个t是不好估算的&#xff0c;即便是估算出来了&…

VS Code C# 开发工具包正式发布

前言 微软于本月正式发布Visual Studio Code C#开发工具包&#xff0c;此前该开发套件已经以预览版的形式在6月份问世。经过4个月的测试和调整&#xff0c;微软修复了350多个问题&#xff0c;其中大部分是用户反馈导致的问题。此外&#xff0c;微软还对产品进行了300多项有针对…

1024 CSDN 程序员节-知存科技-基于存内计算芯片开发板验证语音识别

前言 在今年的 CSDN 程序员节上&#xff0c;我参与了这次知存科技举办的一个 AI Workshop 小活动——“基于存内计算芯片开发板验证语音识别”&#xff0c;并且有幸成为完成任务的学习者之一XD。上一次参与类似的活动是算能公司举办的“千校万里行”AIGC 大模型编译部署活动&a…

【Django 04】Serialization 序列化的高级使用

序列化器 serializers 序列化器的作用 序列化将 queryset 和 instance 转换为 json/xml/yaml 返回给前端 反序列化与序列化则相反 定义序列化器 定义类&#xff0c;继承自 Serializer 通常新建一个 serializers.py 文件 撰写序列化内容 suah as 目前只支持 read_only 只…

设计模式:外观模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

大家好&#xff01;本节主要介绍设计模式中的外观模式。 简介&#xff1a; 外观模式&#xff0c;它是一种设计模式&#xff0c;它为子系统中的一组接口提供一个统一的、简单的接口。这种模式主张按照描述和判断资料来评价课程&#xff0c;关键活动是在课程实施的全过程中进行…

科学计算语言Julia编程初步

文章目录 安装基本类型和计算函数初步条件和判断循环向量计算 Julia号称有着比肩C的速度&#xff0c;同时又像Python一样便捷的编程语言&#xff0c;非常适合科研狗使用。之前写了很多博客介绍Julia在数值分析中的应用&#xff0c;这次写一个适合初学者学习的Julia教程系列。 …

中科芯与IAR共建生态合作,IAR集成开发环境全面支持CKS32系列MCU

中国上海–2023年10月18日–嵌入式开发软件和服务的全球领导者IAR今日宣布&#xff0c;与中科芯集成电路有限公司&#xff08;以下简称中科芯&#xff09;达成生态合作&#xff0c;IAR已全面支持CKS32系列MCU的应用开发。这一合作将进一步推动嵌入式系统的发展&#xff0c;并为…

【吞噬星空】战神宫全体投票,为罗峰脱罪,徐欣补办婚礼,洪成功恢复脑电波

【侵权联系删除】【文/郑尔巴金】 吞噬星空动画第90集即将更新&#xff0c;官方相当给力&#xff0c;提前曝光了图文情报与先行预告。虽然罗峰与巴巴塔尚未正式开始闯荡宇宙&#xff0c;但却是斩杀阿特金三大巨头的平稳生活。不但有战神宫为罗峰脱罪&#xff0c;而且还给徐欣补…

Linux安装Redis(这里使用Redis6,其它版本类似)

目录 一、选择需要安装的Redis版本二、下载并解压Redis三、编译安装Redis四、启动Redis4.1、修改配置文件4.2、启动 五、测试连接5.1、本地连接使用自带客户端redis-cli连接操作redis5.2、外部连接使用RedisDesktopManager操作redis 六、关闭Redis七、删除Redis 一、选择需要安…

【Chrome】使用k8s、docker部署无头浏览器Headless,Java调用示例

什么是无头浏览器&#xff1f; 无头浏览器是一种没有图形用户界面的浏览器。无头浏览器不通过其图形用户界面(GUI)控制浏览器的操作&#xff0c;而是使用命令行。 为什么要用Chrome无头&#xff1f; Chrome Headless用于抓取(谷歌)、测试(开发者)和黑客(黑客)。搜索引擎&…

倾斜摄影三维模型根节点合并技术方法探讨

倾斜摄影三维模型根节点合并技术方法探讨 倾斜摄影技术是一种通过无人机或其他航空器采集大量高分辨率照片&#xff0c;并使用特殊软件将这些照片拼接成三维模型的方法。在这个过程中&#xff0c;摄影机以倾斜角度拍摄照片&#xff0c;从而捕捉到目标物体的多个视角&#xff0c…

特殊类设计

文章目录 特殊类设计1. 请设计一个类&#xff0c;不能被拷贝2. 请设计一个类&#xff0c;只能在堆上创建对象3. 请设计一个类&#xff0c;只能在栈上创建对象4. 请设计一个类&#xff0c;不能被继承5. 单例模式5.1 设计模式5.2 单例模式(1) 饿汉模式(2) 懒汉模式 特殊类设计 1…

python如何创建自己的对冲交易算法

在这篇文章中&#xff0c;我解释了如何创建一个人工智能来每天为我进行自动交易。 随着机器学习的现代进步和在线数据的轻松访问&#xff0c;参与量化交易变得前所未有的容易。为了让事情变得更好&#xff0c;AWS 等云工具可以轻松地将交易想法转化为真正的、功能齐全的交易机器…

UDP网络通信反复发收

package UDP2;import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Scanner;/* * 完成UDP 通信快速入门 实现发1收1*/ public class Client {public static void main(String[] args) throws Exception{// …

k8s的coreDNS添加自定义hosts

1.ack的hosts不会继承宿主机的hosts&#xff0c;而工作中有一个域名默认是走内网解析&#xff0c;内网被限制访问了&#xff0c;只能在coreDNS中加一个hosts解析域名 2.编辑configmap (coredns) kubectl edit configmap -n kube-system coredns 增加hosts节点 Corefile: |.:53…

VMware Workstation安装ESXi和vCenter(8.0)

一、环境准备 虚拟机&#xff1a;VMware Workstation 17 Pro ESXi&#xff1a;ESXi-8.0U2-22380479-standard vCenter&#xff1a;VMware-VCSA-all-8.0.2-22385739.iso 主要是内存设置&#xff0c;因为vCenter需要14Gb内存&#xff0c;所以这个至少16Gb。 硬盘需要2块&…

S4.2.4.3 Electrical Idle Sequence(EIOS)

一 本章节主讲知识点 1.1 EIOS的具体码型 1.2 EIOS的识别规则 1.3 EIEOS的具体码型 二 本章节原文翻译 当某种状态下&#xff0c;发送器想要进入电器空闲状态的时候&#xff0c;发送器必须发送EIOSQ&#xff0c;也既是&#xff1a;电器Electrical Idle Odered Set Sequenc…