经典文献阅读之--LIO-PPF(增量平面预拟合LIO)
0. 简介
自从ikd-tree出来后,现在越来越多的工作瞄准了增量式这种方法,比如说激光惯导里程计(LIDAR-Inertial Odometry,LIO)的高精度跟踪通常涉及最小化点到平面距离的k最近邻(kNN)搜索,然而,这样做的成本是维护大型局部地图并为每个点执行kNN平面拟合。在《LIO-PPF: Fast LiDAR-Inertial Odometry via Incremental Plane Pre-Fitting and Skeleton Tracking》中,我们通过节省这些不必要的成本来减少LIO的时间和空间复杂度,在技术上设计了一个平面预拟合(PPF)方法来跟踪3D场景的基本框架。在PPF中,平面不是为每个扫描单独拟合的,更不用说为每个点拟合了,而是随着场景“流动”而逐步更新,与kNN不同,PPF对噪声和非严格平面更具有鲁棒性,而且我们采用迭代主成分分析(iPCA)进行优化。此外,还引入了一个简单但有效的夹层,以消除假的点对平面匹配,并且完全开源了代码。
1. 文章贡献
本文中,与在搜索每个点的kNN之后懒惰地拟合平面相比,我们采用了一种更积极的平面预拟合方法。这个想法源于两个不必要的因素:
1)不必要的kNN:当前的LiDAR扫描跟踪[1]-[6]为每个单独的点搜索kNN以拟合平面,假设空间接近的点来自同一平面。然而,这个条件太严格了,即空间上远离的点也可能属于同一个平面,例如长墙。换句话说,kNN策略忽略了平面不总是在小的局部区域内这一事实。对于大平面来说,大多数kNN搜索是冗余的,因为它们最终拟合相同的平面。同时,来自连续LiDAR扫描的点通常来自同一个大平面的不同部分,即它们共享同一个高级别大平面对象。这给了我们一个提示:如果搜索发生在高级特征平面空间中,那么kNN的昂贵成本自然可以被节省。
2)不必要的大型局部地图:如果只保留几个扫描在局部地图中,NN可能会很远,因此很可能属于其他对象,导致kNN不准确地拟合匹配的平面。因此,扩大局部地图以保证足够接近的点对kNN对应关系[5]-[7],如图1d所示。但是,我们注意到:即使只保留一个扫描在局部地图中,缺乏接近的NN≠NN \neqNN= 缺乏平面匹配。例如,在图1b中,大多数橙色墙体点未能在长墙上找到接近的NN,但是这面墙的平面可以轻松地从一个单独的先前扫描中的点(蓝点)预拟合。再次,这给了我们一个提示:如果搜索发生在高级特征平面空间中,一个单独的先前扫描就足以提供足够的点对平面匹配。总之,我们做出以下贡献:
- 我们建议通过LiDAR扫描之间的平面预拟合(PPF)来表示场景的基本骨架进行点匹配。我们证明了(i)PPF可以自然地缩小局部地图并消除大多数冗余的kNN搜索和平面拟合;(ii)kNN对噪声和非严格平面的不鲁棒性。
- 在PPF中,不是为每个点/扫描拟合平面,而是利用IMU和LiDAR扫描的顺序性来实现增量平面更新;迭代PCA使PPF比kNN更具有噪声和非严格平面的鲁棒性;引入了一个简单而有效的夹层来排除错误的点对平面匹配。
- 工程贡献包括完全开源的LIO-PPF。在5个开放数据集的22个序列上进行的实验表明,与原始方法相比,我们的PPF最多可以将本地地图大小减小64%,在残差计算方面实现4倍的加速,最多实现1.92倍的总体FPS,并仍然显示相同水平的精度。

图1. (a) 重建的场景。(b) 在快速旋转下(a)的两个连续扫描。© 跨越扫描的大面形成了场景的基本骨架,并揭示了其整体几何结构。(d) kNN需要大型的局部地图,否则大多数点无法找到邻居来拟合平面。而我们使用基本骨架来表示场景以进行点匹配。搜索区域扩大到平面级别,不需要kNN搜索。
2. 符号和预备知识
在本文中,我们将世界坐标系表示为WWW,LiDAR坐标系表示为LLL,IMU体坐标系表示为BBB。令PiP_iPi表示从扫描i接收到的去畸变的LiDAR点。一个3D平面可以由其法向量n∈R3n∈\mathbb{R}^3n∈R3和其中任意一点p∈R3p∈\mathbb{R}^3p∈R3来确定,或者更简洁地通过一个4维向量f=[nT,d]Tf=[n^T,d]^Tf=[nT,d]T来确定,使得f⋅p~=0f· \tilde{p}=0f⋅p~=0,其中p~=[pT,1]T\tilde{p}=[p^T,1]^Tp~=[pT,1]T。我们用变换矩阵T∈SE(3)T∈SE(3)T∈SE(3)来表示6自由度姿态,其中包含旋转矩阵R∈SO(3)R∈SO(3)R∈SO(3)和平移向量t∈R3t∈\mathbb{R}^3t∈R3。
定理1:fff经过TTT的变换为:

证明:设 p~\tilde{p}p~ 是 fff 上的任意一点,且 p~′\tilde{p}^′p~′ 是其通过 TTT 变换后得到的对应点,即p~′=Tp~\tilde{p}^′ = T \tilde{p}p~′=Tp~。那么我们有:

这意味着p~′\tilde{p}^′p~′在f′f^′f′上。
下面我们将会介绍本文高效平面预拟合方法。然后,我们描述基于PPF的对应骨架跟踪算法。最后,提出了一个三明治层,以使算法在复杂场景中更加鲁棒。

图2. 预拟合平面和跟踪流程的概览。浅箭头 → 表示为准备下一个激光雷达扫描而进行的操作。
3. 增量iPCA平面预拟合(最重要的部分,如何对平面完成拟合)
…详情请参照古月居
相关文章:
经典文献阅读之--LIO-PPF(增量平面预拟合LIO)
0. 简介 自从ikd-tree出来后,现在越来越多的工作瞄准了增量式这种方法,比如说激光惯导里程计(LIDAR-Inertial Odometry,LIO)的高精度跟踪通常涉及最小化点到平面距离的k最近邻(kNN)搜索&#x…...
ChatGPT背后有哪些关键技术?CSIG企业行带你一探究竟
目录1 ChatGPT的时代2 CSIG企业行3 议题&嘉宾介绍3.1 对生成式人工智能的思考3.2 对话式大型语言模型研究3.3 文档图像处理中的底层视觉技术4 观看入口1 ChatGPT的时代 2015年,马斯克、美国创业孵化器Y Combinator总裁阿尔特曼、全球在线支付平台PayPal联合创始…...
C#基础之面向对象编程(二)
总目录 文章目录总目录前言一、概述1. 定义2. 面向对象的三大特性二、封装1. 定义2. 属性三、继承1. 定义2. 继承的使用3. base 和this四、多态1. 定义2. 重写和重载3. 多态性的实现1、静态多态性2、动态多态性4. 向上转型和向下转型1、定义2、语法格式3、案例结语前言 本文主…...
蓝桥杯刷题冲刺 | 倒计时25天
作者:指针不指南吗 专栏:蓝桥杯倒计时冲刺 🐾马上就要蓝桥杯了,最后的这几天尤为重要,不可懈怠哦🐾 文章目录1.完全二叉树1.完全二叉树 题目 链接: 完全二叉树的权值 - 蓝桥云课 (lanqiao.cn) 给…...
c语言—动态内存管理
一.为什么存在动态内存开辟开辟空间的特点:空间开辟大小是固定的数组在申明时,必须指定数组长度,她所需要的内存在编译时分配但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道ÿ…...
请说明Ajax、Fetch、Axios三者的区别
相同点: 1、三者都用于网络请求,但是不同维度 2、 Ajax(Asynchronous Javascript and XML),一种技术的统称,并不是实际的API 3、Fetch是一个具体的API,浏览器里面直接有一个API就叫Fetch 4、 Axios是一个第三方库&…...
阿里p8测试总监,让我们用这份《测试用例规范》,再也没加班过
经常看到无论是刚入职场的新人,还是工作了一段时间的老人,都会对编写测试用例感到困扰?例如: 固然,编写一份好的测试用例需要:充分的需求分析能力 理论及经验加持,作为测试职场摸爬打滚的老人&…...
【Unity】数据持久化路径Application.persistentDataPath
今天突然想到这个路径Application.persistentDataPath,热更的重要路径,该文件夹可读可写,在移动端唯一一个可读写操作的文件夹。移动端可以将本地的资源(资源MD5值配置表)等一些文件放到StreamingAssets文件夹下&#…...
华为OD机试 - 插队(Java JS Python)
题目描述 某银行将客户分为了若干个优先级, 1 级最高, 5 级最低,当你需要在银行办理业务时,优先级高的人随时可以插队到优先级低的人的前面。 现在给出一个人员到来和银行办理业务的时间序列,请你在每次银行办理业务时输出客户的编号。 如果同时有多位优先级相同且最高…...
MongoDB数据库从入门到精通系列之八:调整oplog大小
MongoDB数据库从入门到精通系列之八:调整oplog大小 一、oplog的概念二、oplog大小三、调整oplog大小详细步骤一、oplog的概念 操作日志oplog包含了主节点执行的每一次写操作。oplog是存在于主节点local数据库中的一个固定集合。从节点通过查询此集合以获取需要复制的操作。每个…...
PCL 间接平差法拟合二维直线
目录 一、算法原理二、代码实现三、结果展示四、相关链接一、算法原理 通过传统最小二乘法对点云数据进行二维直线拟合时,可将误差只归因于一个方向上,本文假设误差只存在于 y y y轴方向上,设点云拟合的二维直线方程为: y =...
进程调度的基本过程
这里写目录标题什么是进程进程管理结构体或类的主要属性pid内存指针文件描述符表辅助进程调度的属性并发并行并发什么是进程 进程是操作系统对一个正在运行的程序的一种抽象,也就是说,一个运行起来的程序就是一个进程。 进程又是操作系统进行资源分配的…...
python自动化办公(二)
上接python自动化办公(一) 文章目录文件和目录操作使用shutil库文件查找globfnmatchhashlib文件和目录操作 使用shutil库 shutil库也是Python标准库,它可以处理文件、文件夹、压缩包,能实现文件复制、移动、压缩、解压缩等功能。…...
Qt Quick - GridLayout 网格布局
GridLayout 理论总结一、概述二、依赖属性三、例子1. 不含跨行的2. 带跨行列的3. 从右到左一、概述 GridLayout 是最常用的布局器,也叫网格布局器,如果网格布局被调整大小,布局中的所有 Item 将被重新排列。它类似于基于widget的QGridLayout…...
安卓手机也可以使用新必应NewBing
没有魔法安卓手机也可以使用新必应NewBing 目前知道的是安卓手机 安卓手机先安装一个猴狐浏览器 打开手机自带浏览器,搜索关键词:猴狐浏览器,找到官网 也可以直接复制这个网址 狐猴浏览器 lemurbrowser CoolAPK 我的手机是荣耀安卓手机…...
支付系统设计:消息重试组件封装
文章目录前言一、重试场景分析一、如何实现重试1. 扫表2. 基于中间件自身特性3. 基于框架4. 根据公司业务特性自己实现的重试二、重试组件封装1. 需求分析2. 模块设计2.1 持久化模块1. 表定义2. 持久化接口定义3. 持久化配置类2.2 重试模块1.启动2.重试3. 业务端使用1. 引入依赖…...
Visual Studio 2022 c#中很实用的VS默认快捷键和原生功能
常常使用VS感觉还是有必要掌握其默认的快捷键,我这个人比较懒,不喜欢动不动就去设置快捷键,系统有就用,记住了就可以到处用,问题是像我们这种有很多个工作场所的人不可能每台电脑都去配置一下快键键。实际上我使用3dma…...
Python的30个编程技巧
1. 原地交换两个数字 Python 提供了一个直观的在一行代码中赋值与交换(变量值)的方法,请参见下面的示例: x,y 10,20 print(x,y) x,y y,x print(x,y) #1 (10, 20) #2 (20, 10) 赋值的右侧形成了一个新的元组,左侧立即解…...
MySQL:JDBC
什么是JDBC? JDBC( Java DataBase Connectivity ) 称为 Java数据库连接 ,它是一种用于数据库访问的应用程序 API ,由一组用Java语言编写的类和接口组成,有了JDBC就可以 用统一的语法对多种关系数据库进行访问,而不用担…...
C++【list容器模拟实现函数解析】
list容器&&模拟实现函数解析 文章目录list容器&&模拟实现函数解析一、list容器使用介绍二、list容器模拟实现及函数解析2.1 list结构体创建2.2 迭代器封装2.21 构造函数:2.22 前置和后置及- -2.23 解引用2.24 判断相等2.25 箭头重载2.26 第二个和第…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
