纯LiDAR Odometry——LinK3D论文详解

news2024/10/7 17:28:06

先说总结

        总体思路是:针对输入来的点云,对每一个scan进行edge特征点的提取,因为提取的特征点因为噪声等原因导致特征点不鲁棒,所以又对特征点通过聚类的方法进行了特征增强,对增加后的特征投影到平面上,分别对每个投影后的特征点进行求解描述符,描述符里面不单单有180个距离还有180个方向,至此,作者认为得到了鲁棒的特征,用这些特征进行配准、求解机器人的姿态。

        总体来讲,论文有创新,在特征点描述符这里借鉴了视觉的相关概念,能达到实时处理(10Hz数据采集),同时,该方法仍然是主流框架范围内对SLAM进行研究。目前该算法暂未开源。

文章连接如下:

[2206.05927] LinK3D: Linear Keypoints Representation for 3D LiDAR Point Cloud (arxiv.org)

摘要

        特征提取和匹配是许多计算机视觉任务的基本部分,例如二维或三维物体检测、识别和配准。众所周知,二维特征提取和匹配已经取得了很大的成功。遗憾的是,在3D领域,由于描述能力差和效率低,目前的方法无法支持3D激光雷达传感器在视觉任务中的广泛应用。为了解决这一局限性,我们提出了一种新的3D特征表示方法:用于3D LiDAR点云的线性关键点表示,称为LinK3D。LinK3D的新颖之处在于它充分考虑了LiDAR点云的特点(如场景的稀疏性、复杂性),并用其健壮的相邻关键点来表示当前关键点,这对当前关键点的描述提供了强大的约束。提出的LinK3D已在两个公共数据集(即KITTI和Steven VLP16)上进行了评估,实验结果表明,我们的方法在匹配性能方面大大优于现有技术。更重要的是,LinK3D显示了出色的实时性能(基于LiDAR的10 Hz频率)。LinK3D从64射线激光束采集的点云中提取特征平均只需32毫秒,在配备Intel Core i7@2.2 GHz处理器的笔记本电脑中执行时,匹配两次LiDAR扫描只需约8毫秒。此外,我们的方法可以广泛扩展到各种三维视觉应用。在本文中,我们将LinK3D应用于3D注册、LiDAR里程计和地点识别任务,并与最先进的方法相比取得了具有竞争力的结果。
        关键词:三维激光雷达点云,特征提取、匹配、高效,可扩展到三维视觉任务。

图1. 描述了LinK3D的核心思想和匹配结果。图1展示了基于LinK3D两次激光雷达扫描的匹配结果,其中绿线表示有效的匹配项。当前关键点的描述符用其相邻的关键点表示,描述符的每个维度对应一个扇区(180个扇区对应180个维度)。第一个维度对应当前关键点最接近的关键点所在的扇区,其他维度对应逆时针排列的区域。如果扇区中有关键点,则搜索扇区中最接近的。

提出的方法

        我们方法的流程图主要由两部分组成:特征提取(即关键点提取和描述符生成,如图 2 所示)和特征匹配。如图 2 所示,首先提取LiDAR扫描的边缘点,然后将其输入边缘关键点聚合算法,在该算法中提取稳健的聚合关键点,以便随后生成描述符。然后,描述符生成算法首先建立距离表和方向表,用于快速描述符生成。我们将在以下三个小节中分别详细介绍所提出方法的每个部分。

图2. 展示了LinK3D在关键点提取和描述方面的工作流程。首先,输入的点云被关键点提取算法处理。然后,执行LinK3D描述以获得高效的关键点描述符。

 

A. 关键点提取

1) edge边缘点提取:在关键点提取中,我们使用类似于2D图像关键点的策略,即角点或边缘点。在这里,我们还提取了代表性的边缘点作为三维激光雷达扫描的关键点。激光雷达扫描大致可分为两种类型:边缘点和平面点。边缘点和平面点之间的主要区别在于点所在的局部曲面的平滑度

 $\nabla_i=\frac{1}{|S|}\left\|\sum_{j \in P_s, j \neq i}\left(\vec{p}_j-\vec{p}_i\right)\right\|^2$

图3. (a) 中的分散边缘点(用红色虚线框标记)和聚集边缘关键点(用蓝色虚线框标识)。聚集边缘关键点就是我们所需要的。(b)显示了通过算法1提取的边缘关键点。

2) edge关键点聚类:然而,在收集边缘点的过程中,通常有许多点高于阈值但不稳定。具体来说,这些不稳定点出现在当前扫描中,但可能不会出现在下次扫描中。如图 3a 中红色虚线框所示,不稳定点通常是分散的。如果我们利用这些点进行匹配,很可能会导致不匹配。因此,有必要过滤掉这些点并找到正的有效边关键点。如图 3a 中的蓝色虚线框所示,有效的边缘关键点通常垂直分布在簇中。

具体做法是,我们首先将以LiDAR坐标系原点为中心的水平面平均划分为 N_{\text {sect }} 扇区,然后只对每个扇区中的点进行聚类。应该注意的是,当我们在实验中设置 N_{\text {sect }}=120 时,我们的算法运行速度大约是经典KMeans的25倍[47]。提取的边缘关键点如图 3b 所示。可以观察到,我们的算法可以过滤掉无效的边缘点,并找到正的有效边缘关键点。此外,计算每个簇点的质心并将其命名为聚合关键点,该关键点可以表示其簇并用于后续的描述符生成。

B. 描述符生成

图4展示了以当前关键点ko为中心的水平平面被划分为180个扇形区域。我们首先搜索k0的最近关键点k1,然后主方向是从k0到k1的向量。此外,第一个扇形区域由主方向对半分。其他区域按逆时针顺序排列。当前关键点(Current Keypoint,CK)是指正在处理的LiDAR扫描中的一个关键点。即每个关键点都有对应的描述符。100个关键点有100个描述符。

        在描述符生成中,首先将所有聚集关键点投影到水平面,这样可以消除聚集边缘关键点沿垂直方向分布不均匀所带来的影响。为了快速匹配,我们的LinK3D表示为多维向量,它使用0或当前关键点与其相邻关键点之间的距离作为每个维度。图 4 所示,我们将水平面划分为以当前关键点 k0 为中心的180个扇区,描述符的每个维度对应一个扇区。受二维描述符SIFT[10]的启发,该描述符搜索主方向以确保姿势不变性,LinK3D的主方向也被搜索并表示为从当前关键点 k0 到其最近关键点 k1 的方向矢量,该关键点位于第一扇区。其他扇区按逆时针顺序排列。然后,在每个扇区中搜索最近的关键点 k0 。如果存在最近的关键点,则使用当前关键点和最近关键点之间的距离作为描述符的相应值,否则,该值设置为0

在此过程中,从当前点到其他点 $k_i(i \neq 1)$的方向表示为 $\vec{m}_{0 i}$,我们使用$\vec{m}_{0 i}$和主方向$\vec{m}_{0 1}$之间的角度来确定 $k_i$ 属于哪个扇区。该角度的计算公式为:

$\theta_i= \begin{cases}\arccos \frac{\vec{m}_{01} \cdot \vec{m}_{0 i}}{\left|\vec{m}_{01}\right|\left|\vec{m}_{0 i}\right|} & \text { if } D_i>0 \\ 2 \pi-\arccos \frac{\vec{m}_{01}}{\left|\vec{m}_{01}\right|\left|\vec{m}_{0 i}\right|} & \text { if } D_i<0\end{cases}$

其中 $D_i$ 定义为:

$D_i=\left|\begin{array}{ll}x_1 & y_1 \\ x_i & y_i\end{array}\right|$

        上述算法有两个主要问题。一个问题是算法对最近的关键点敏感。如果存在异常关键点的干扰,匹配将失败。另一个问题是,我们必须经常计算两点之间的相对距离和方向,因此会有大量重复计算。为了解决第一个问题,我们搜索一定数量的最近关键点(具体数量在实验部分评估)。假设我们搜索3个最接近的关键点,并计算出相应的3个关键点描述符,如图 5 所示。Des1对应于最接近的键点,Des3对应于第三个最近的键点。我们根据这三个距离值定义优先级。Des1的优先级最高,因为它距离最近,Des3的优先级最低,因为它距离最远。最终描述符中每个维度的值对应于其中优先级最高的非零值。如图 5 中红色虚线框所示,Des1有一个非零值$D_0^1$ ,那么由于它的高优先级,它在最终描述符中的对应值也被设置为 $D_0^1$ 。其他两种情况如图 5 中的紫色和黑色虚线框所示。它大大提高了LinK3D对异常值的鲁棒性。为了解决第二个问题,我们建立了距离表,所有关键点的方向表都可以通过直接参考表来获得,以避免重复计算。

 图5 最终描述符中每个维度的值对应于Des1、Des2和Des3中具有最高优先级的非零值。

C. 匹配两个描述符

        在本节中,我们将介绍匹配算法。为了快速测量两个描述符的相似性,我们采用类似于汉明距离的计算方法来定义两个LinK3D描述符的相似分数。它们都计算相应的尺寸。然而,与汉明的异或运算不同,我们只计算了两个描述符的非零维数。具体来说,在两个描述符中计算相应非零维度之间的差值的绝对值。如果该值低于0.2,则相似性分数增加1。如果匹配的相似性分数高于阈值,则认为匹配有效。具体匹配算法见算法 3

实验

        在本节中,我们对我们的方法和最先进的功能进行了一些基本测试和比较,然后评估了一些扩展应用,以证明我们方法的优越性。

......具体实验结果略......

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

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

相关文章

无线通信模块|wifi模块、BLE蓝牙模块、wifi蓝牙二合一模块科普介绍

物联网技术能够帮助智能家居环境中的门厅场景、客厅场景、厨房场景、卧室场景以及阳台场景的智能化管理。现如今智能家居和智能应用之间的配合离不开物联网模块的帮助。没有WiFi模块智能家居就不能很好的工作&#xff0c;甚至不能很好的进行数据的交换。现阶段的物联网智能家居…

程序员必须知道的加密、解密和签名算法

1. 对称加密 对称加密&#xff0c;加密和解密使用相同的秘钥&#xff0c;加密速度快、效率高。常见的有 DES&#xff08;淘汰&#xff09;、3DES&#xff08;淘汰&#xff09;、AES&#xff08;用于替代 DES&#xff0c;是目前常用的&#xff09;等。 加密解密 1.1. DES&#…

建造者模式:详解构造函数、set方法、建造者模式三种对象创建方式

思考&#xff1a; 为什么需要建造者模式 与工厂模式有何区别&#xff1f; 为什么需要建造者模式&#xff1f; 平时常常使用new关键字来创建对象&#xff0c;什么时候new对象时候不适用了呢&#xff1f;可能是创建对象时候可能是构造函数中传入太多的内容吧。 下面通过一个例子…

基于Java电脑硬件库存管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

Linux下从CPU/内存/IO三个方面来分析系统性能

在实际生产环境中是否遇到如下问题&#xff1f; 系统平均负载过高。 CPU使用率过高。 硬盘利用率已经饱和&#xff0c;IO存在瓶颈。 首先明确一下进程的常见6种状态 R运行状态&#xff08;running&#xff09;&#xff1a;并不意味着进程一定在运行中&#xff0c;它表明进程要…

钉钉聊天对话框和截图经常发生白屏

环境&#xff1a; 7.0.30-rel6019102 Win10专业版 L盾加密环境 问题描述&#xff1a; 钉钉聊天对话框和截图经常发生白屏 解决方案&#xff1a; 1.【电脑端钉钉】- 左上角【头像】-【设置】-【高级】- 下拉【网络检测】- 点击【开始检测】 如果变红说明网络有问题&#x…

redis安装后启动报redis-server.exe redis.windows.conf

文章目录 1. 报错的内容2. 解决方法&#xff1a;&#xff08;亲测有效&#xff09; 1. 报错的内容 redis安装后启动报redis-server.exe redis.windows.conf 完整报错如下&#xff1a; 2. 解决方法&#xff1a;&#xff08;亲测有效&#xff09; 先使用命令切换到redis安装目…

Redis常用命令操作

#linux是redis-cli #普通环境 redis-cli.exe -h host -p port -a password #集群环境&#xff0c;否则报&#xff1a;(error) MOVED 6918 127.0.0.1:6381 redis-cli.exe -c -h host -p port -a password#参数说明 #host&#xff1a;远程redis服务器host #port&#xff1a;远程r…

开发人员必备:9个令人惊叹的CSS网格生成器推荐!

微信搜索 【大迁世界】, 我会第一时间和你分享前端行业趋势&#xff0c;学习途径等等。 本文 GitHub https://github.com/qq449245884/xiaozhi 已收录&#xff0c;有一线大厂面试完整考点、资料以及我的系列文章。 快来免费体验ChatGpt plus版本的&#xff0c;我们出的钱 体验地…

【分布式应用】zabbix 二:自定义监控、自动发现与自动注册

目录 一、添加zabbix客户端主机1.1环境设置1.2配置zabbix-angent1.3在 Web 页面中添加 agent 主机 二 、自定义监控内容2.1客户端自定义key2.2在Web页面创建自定义监控模板 三、zabbix自动发现四、zabbix自动注册 一、添加zabbix客户端主机 1.1环境设置 systemctl disable --…

2490. 回环句

句子 是由单个空格分隔的一组单词&#xff0c;且不含前导或尾随空格。 例如&#xff0c;"Hello World"、"HELLO"、"hello world hello world" 都是符合要求的句子。 单词 仅 由大写和小写英文字母组成。且大写和小写字母会视作不同字符。 如果…

查询例题(三道)

一、 写法一&#xff1a; 写法二&#xff1a; 二、 1、内连接&#xff1a; 一个部门下有哪些人&#xff0c;找的相关联的数据 2、左外连接&#xff1a; 以部门表为基准&#xff0c;部门下面没有人&#xff0c;但是也会查询出来 3、右外连接&#xff1a; 以员工表为基准&#…

【Spring 丨数据绑定】

数据绑定 概述Databinder核心属性绑定参数绑定元数据绑定验证 概述 Spring 数据绑定(Data Binding)的作用是将用户的输入动态绑定到应用程序的领域模型JavaBean(或用于处理用户输入的任何对象)。 也就是说&#xff0c;Spring数据绑定机制是将属性值设置到目标对象中。如下图所示…

Bug小能手系列(python)_9: 使用sklearn库报错 module ‘numpy‘ has no attribute ‘int‘

AttributeError: module numpy has no attribute int. 0. 错误介绍1. 环境介绍2. 问题分析3. 解决方法3.1 调用解决3.2 库包中存在报错 4. 总结 首先&#xff0c;对于自己使用代码dtypenp.int报错的情况&#xff0c;建议直接修改为np.int_即可解决&#xff0c;也不用向下看了&a…

Python3安装教程在Unix/Linux操作系统

在Linux操作系统上安装Python3教程&#xff0c;先下载Python3安装包&#xff1a; Python3下载&#xff1a;https://www.python.org/downloads/source/ 选择适用于 Unix/Linux 的源码压缩包。下载及解压压缩包 Python-3.x.x.tgz&#xff0c;3.x.x 为你下载的对应版本号。如果你…

triton客户端使用

model_analyzer 简介&#xff1a; Triton Model Analyzer is a CLI tool which can help you find a more optimal configuration, on a given piece of hardware, for single, multiple, ensemble, or BLS models running on a Triton Inference Server. Model Analyzer wil…

SSM框架训练 实现各个功能时遇到的常见问题

快速复制当前代码到下一行&#xff1a;ctrlD 格式化代码&#xff08;快速整理代码&#xff09;&#xff1a;ctrilaltL 一步一步来&#xff0c;后续会不停添加功能。 先创建项目结构&#xff1a;搭建框架 (36条消息) SSM框架模板&#xff08;高配&#xff1a;一次性配完所有…

指针进阶1

目录 本章将学习 1字符指针 2数组指针与指针数组 3数组传参与指针传参 复习指针初阶基本知识点 1指针是个地址&#xff08;编号&#xff09;&#xff0c;指针变量是存放指针的变量&#xff0c;但是我们平常所说的指针就是指的指针变量&#xff0c;指针变量的大小有4(32位平…

解决Quixel Bridge导出到Blender3.1失败port 28888

文章目录 前言一、错误情景二、解决办法总结 前言 解决Quixel Bridge导出到Blender3.1报错无法经由端口28888导出. 一、错误情景 导出插件显示已安装完成: 但是点击右下角导出报错无法从端口28888执行该操作. 我尝试过把MSPlugin插件手动安装到Blender3.1但这并不奏效. 二、解…

聚观早报|Threads上线7小时注册破千万;兰博基将终结燃油车生产

今日要闻&#xff1a;Threads上线7小时注册破千万&#xff1b;兰博基尼宣布将终结燃油车生产&#xff1b;腾讯旗下企鹅FM9月6日正式停止运营&#xff1b;ChatGPT暂停接入必应搜索功能&#xff1b;首个国产GLP-1“减肥药”获批 Threads上线7小时注册破千万 7 月 6 日消息&#…