Large-Scale LiDAR Consistent Mapping usingHierarchical LiDAR Bundle Adjustment

1. 代码地址

GitHub - hku-mars/HBA: [RAL 2023] A globally consistent LiDAR map optimization module

2. 摘要

重建精确一致的大规模激光雷达点云地图对于机器人应用至关重要。现有的基于位姿图优化的解决方案,尽管它在时间方面是有效的,但不能直接优化建图的一致性。激光雷达集束调整(BA)最近被提出来解决这个问题;但是在大尺度规模建图上太费时间了。为了解决这一问题,本文提出了一种适用于大尺度地图的全局一致的高效建图方法。我们提出的工作由自底向上的分层BA和自顶向下的位姿图优化组成,结合了两种方法的优点。通过分层设计,我们用比原始BA小得多的Hessian矩阵来解决多个BA问题;通过位姿图优化,我们可以平滑高效地更新激光雷达姿态。我们提出的方法的有效性和鲁棒性已经在多个空间和时间上的大规模公共旋转激光雷达数据集上得到验证(KITTI,MulRan和Newer College),以及结构化和非结构化场景下的自行收集的固态激光雷达数据集。通过适当的设置,我们证明了我们的工作可以在只用大约12%的序列时间生成一个全局一致的地图。

3. 主要贡献

  • 我们提出了一种分层集束调整方法,以全局优化激光雷达建图一致性和里程计精度。我们提出的方法在给定良好的初始姿态轨迹(例如,来自位姿图优化)的情况下提高了建图质量,并且甚至在初始姿态轨迹存在大漂移的情况下闭合了间隙。
  • 我们提出的工作的有效性已经在结构化和非结构化场景中的多个公共机械旋转激光雷达数据集和我们自己收集的固态激光雷达数据集上得到验证。

4. 算法解析

4.1. 系统概述

图1,提出的分层集体束调整的金字塔结构,层数l = 3,步长s = 3,窗口大小w = 6。第一、第二和第三层因子连接同一层内的每两个相邻节点。红色虚线连接的节点应该是相同的,例如x_{9i}^1,从下层的局部窗口的第一个节点到从上层的这个局部窗口构建的节点,例如x_{3i}^2x_{i}^3

图2,黄色部分表示自下而上的过程,蓝色部分表示自上而下的过程。

我们提出的方法的系统工作流程如图2所示。输入是来自每次激光雷达扫描的原始点或去畸变后的点,以及它们在全局坐标系中的相应位姿的初始估计,这可以从通用激光雷达里程计或SLAM算法获得。该方法由自下而上和自上而下两个过程组成,迭代直到收敛。自下而上的过程中,在较小的局部窗口内对激光雷达帧执行局部BA,以构建从第一层到第二层的关键帧。该过程分层执行,直到满足最佳层数,并且在顶层关键帧上执行全局BA。然后,使用来自每个优化层和相邻层之间的因子来构建位姿图。如图1所示,第一层,也称为底层,描述了初始LiDAR帧和姿态的集合。同样,第二层表示使用局部BA从第一层创建的激光雷达关键帧和姿态的集合。顶层意味着最后剩余的激光雷达关键帧的集合(在图1中,顶层指的是第三层)。从底层到顶层分层创建激光雷达关键帧的过程称为自下而上过程。通过位姿图优化更新底层激光雷达位姿的过程称为自顶向下过程。

4.2. 自下而上的分层BA

我们定义F^i_j为第i层的第j个雷达帧,X^i_j \triangleq T^i_j = (R, t)表示对应的位姿。T^i_{j,k}表示T^i_{j}T^i_{k}之间的相对位姿。需要注意的是,F^i_j中的点是在激光雷达的局部坐标系,T^i_{j}是在全局坐标系中。w是窗口的大小,s为激光雷达关键帧自下而上构建过程中的步幅大小。

假设在第i层一共有N_i个雷达帧。在自下而上的过程中,每个局部窗口使用给定的初始位姿执行局部BA,优化得到帧间相对位姿和第一帧的位姿。从每个局部窗口中的BA得到的Hessian矩阵H也被记录,并用作后面的自上而下的位姿图构造中的信息矩阵。给定第i层一个局部窗口的w个激光帧\left\{F_{s j+k}^i \mid j=0, \cdots,\left\lfloor\frac{N_i-w}{s}\right\rfloor ; k=0, \cdots, w-1\right\}和优化得到的相对位姿,我们将这些帧聚合成第i+1层的关键帧。将窗口内的点云都转到第一帧坐标系,聚合后的关键帧位姿表示为T^{i+1}_{j},被设置为在前一个局部窗口优化中得到的第一帧的位姿。

\begin{aligned} & \mathbb{F}_j^{i+1} \triangleq \bigcup_{k=0}^{w-1}\left(\mathbf{T}_{s \cdot j, s \cdot j+k}^{i *} \cdot \mathbb{F}_{s \cdot j+k}^i\right) \\ & \mathbf{T}_j^{i+1}=\mathbf{T}_{s \cdot j}^{i *}=\prod_{k=1}^j \mathbf{T}_{s \cdot k-s, s \cdot k}^{i *} \end{aligned}

图3,使用w = 10, s = 5和n = 8,层数N,位姿数l
可以看出,从原始BA到分层BA时间消耗显著减少。

对于自底向上的分层BA的每一层中的特征提取和关联,我们使用BALM中提出的自适应体素化方法,该方法提取适合于不同结构的环境的不同大小的平面特征。 然而当点数非常大时,自适应体素化过程是耗时的。为了缓解这一问题,我们注意到,在较低层中不被视为平面要素的点也不会在较高层中形成平面。因此,在自下而上的过程中,我们仅使用来自局部BA中每个体素的平面特征点来构建上层的关键帧。该过程进一步节省了下一层自适应体素地图构建的时间,并提高了局部BA中的计算精度。

4.3. 自上而下的位姿图优化

自上而下的姿态图优化过程旨在减少自下而上的分层BA过程中的位姿估计误差,因为自下而上的分层BA仅考虑了同一局部窗口中的共视特征,而忽略了在不同局部窗口中共视的那些特征。

位姿图在金字塔结构中以自顶向下的方式构建。在金字塔的每一层中,因子是相邻帧之间的相对位姿。具体来说,节点X^i_{j}X^i_{j + 1}之间的第i层因子中的代价函数定义为:

其中,i\in{\mathcal{L}},\ j\in{\mathcal{L}},\ Z=\{1,\cdot\cdot\cdot,l\},\ {\mathcal{F}}^{i}=\{0,\cdot\cdot\cdot,N_{i}-1\}

由于节点X^{i+1}_{j}X^{i}_{sj}本质是同一个,所以有:

因此,代价函数可以简化为:

最终的位姿图

整体的目标函数:

其中F是第一层所有关键帧的集合,最终使用GTSAM中的LM求解该图优化问题。

5. 实验

5.1. 精度分析

数据集:KITTI、MulRan、New College、Self Collected Dataset

对比方案:MULLS、LIO-SAM、FAST-LIO2、CT-ICP、GICP Matching Factor

  • 带回环的初始位姿
表2 记录了在KITTI数据集上的角度和平移的RMSE误差。
图5 在KITTI数据集序列07上,(A)MULLS建图结果;(B)HBA优化后的结果;A白色区域中的点云分层现象在B中明显消失。
在MulRan数据集DCC03上的建图效果。(A)LIO-SAM带回环的建图结果;(B)HBA建图结果;

白色区域底部中放大的部分显示了A中存在点云分层现象,B中点云地图一致性更好。

  • 不带回环的初始位姿

图7 (A) 是在KITTI数据集00序列上,MULLS不带回环的建图结果;(B)是HBA建图结果;(A)中白色区域显示了点云重影误差,在B中明显消失;
图8 (A)是FAST-LIO建图结果;(B)是HBA优化后的结果;(B)中白色区域点云重影消失。
图9(A)是FAST-LIO建图结果;(B)是HBA优化后的结果;(B)中侧视图点云地面高度一致,俯视图中重影消失。

由于没有真值,使用MME评估建图质量。

5.2. 消融实验

  • 位姿图优化 VS 直接指定

为了更新底层姿态,一种简单的方法是直接将优化的上层姿态分配给下层姿态,例如,使用上层关键帧的优化姿态在相应的局部窗口内更新下层的前s个姿态。

图10  (A)直接指定结果;(B)从上到下的优化;从黄色虚线区域可以看出,我们提出的位姿图优化在位姿估计精度和建图一致性方面都优于直接分配优化结果。
  • 分层BA VS 简化BA
表8记录了原始BA、简化BA、分层BA在MulRan Dataset的耗时和精度结果。

5.3. 算力消耗

6. 总结

本文提出一种基于分层BA和位姿图优化的方法,对大规模激光雷达点云的位姿估计精度和建图一致性进行优化。利用自下向上的分层BA,我们用比原始BA方法小得多的Hessian矩阵并行求解多个BA问题。通过自上而下的位姿图优化,我们可以平稳高效地更新激光雷达位姿。在给定良好的初始姿态轨迹或大漂移的情况下,我们在具有结构化和非结构化场景的空间和时间大规模激光雷达数据集上验证了我们工作的有效性。在多个公共旋转激光雷达和我们自己收集的固态激光雷达数据集上,我们证明了我们提出的工作在位姿估计精度和建图一致性方面优于其他SOTA方法。在我们未来的工作中,我们可以将IMU预积分和激光雷达测量噪声模型结合到我们的分层BA工作中。

参考文献

主要内容来自下文,略有改动

RAL2023 港大开源 | 基于分层激光雷达集束调整的一致性建图 - 知乎

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

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

相关文章

ubuntu使用docker安装openwrt

系统:ubuntu24.04 架构:x86 1. 安装docker 1.1 离线安装 docker下载地址 根据系统版本,依次下载最新的三个关于docker的软件包 container.io(注意后缀版本顺序)docker-ce-clidocker-ce 然后再ubuntu系统中依次按顺…

【召回第一篇】召回方法综述

各个网站上找的各位大神的优秀回答,记录再此。 首先是石塔西大佬的回答:工业界推荐系统中有哪些召回策略? 万变不离其宗:用统一框架理解向量化召回前言常读我的文章的同学会注意到,我一直强调、推崇,不要…

多种策略提升线上 tensorflow 模型推理速度

前言 本文以最常见的模型 Bi-LSTM-CRF 为例,总结了在实际工作中能有效提升在 CPU/GPU 上的推理速度的若干方法,包括优化模型结构,优化超参数,使用 onnx 框架等。当然如果你有充足的 GPU ,结合以上方法提升推理速度的效…

真空衰变,真正的宇宙级灾难,它到底有多可怕?

真空衰变,真正的宇宙级灾难,它到底有多可怕? 真空衰变 真空衰变(Vacuum decay)是物理学家根据量子场论推测出的一种宇宙中可能会发生的现象,这种现象被称为真正的宇宙级灾难,它到底有多可怕呢…

前端 Vue 操作文件方法(导出下载、图片压缩、文件上传和转换)

一、前言 本文对前端 Vue 项目开发过程中,经常遇到要对文件做一些相关操作,比如:文件导出下载、文件上传、图片压缩、文件转换等一些处理方法进行归纳整理,方便后续查阅和复用。 二、具体内容 1、后端的文件导出接口,…

【报文数据流中的反压处理】

报文数据流中的反压处理 1 带存储体的反压1.1 原理图1.2 Demo 尤其是在NP芯片中,经常涉及到报文的数据流处理;为了防止数据丢失,和各模块的流水处理;因此需要到反压机制; 反压机制目前接触到的有两种:一是基…

【深度学习】目标检测,Faster-RCNN算法训练,使用mmdetection训练

文章目录 资料环境数据测试 资料 https://mmdetection.readthedocs.io/zh-cn/latest/user_guides/config.html 环境 Dockerfile ARG PYTORCH"1.9.0" ARG CUDA"11.1" ARG CUDNN"8"FROM pytorch/pytorch:${PYTORCH}-cuda${CUDA}-cudnn${CUDNN}…

使用 Scapy 库编写 TCP 劫持攻击脚本

一、介绍 TCP劫持攻击(TCP Hijacking),也称为会话劫持,是一种攻击方式,攻击者在合法用户与服务器之间的通信过程中插入或劫持数据包,从而控制通信会话。通过TCP劫持,攻击者可以获取敏感信息、执…

mysql 更改数据存储目录

先停止 mysql :sudo systemctl start/stop mysql 新建新的目录, 比如 /mnt/data/systemdata/mysql/mysql_data sudo chown -R mysql:mysql /mnt/data/sysdata/mysql/mysql_data sudo chmod -R 750 /mnt/data/sysdata/mysql/mysql_data 更改mysql.cnf…

2024高考作文-ChatGPT完成答卷,邀请大家来打分

高考,愿你脑洞大开,知识点全都扎根脑海;考试时手感倍儿棒,答题如行云流水;成绩公布时,笑容如春风拂面,心情如阳光普照!高考加油,你一定行! 新课标I卷 试题内…

“深入探讨Java中的对象拷贝:浅拷贝与深拷贝的差异与应用“

前言:在Java编程中,深拷贝(Deep Copy)与浅拷贝(Shallow Copy)是两个非常重要的概念。它们涉及到对象在内存中的复制方式,对于理解对象的引用、内存管理以及数据安全都至关重要。 ✨✨✨这里是秋…

多粒度特征融合(细粒度图像分类)

多粒度特征融合(细粒度图像分类) 摘要Abstract1. 多粒度特征融合1.1 文献摘要1.2 研究背景1.3 创新点1.4 模型方法1.4.1 Swin-Transformer1.4.2 多粒度特征融合模块1.4.3 自注意力1.4.4 通道注意力1.4.5 图卷积网络1.4.6 基于Vision-Transformer的两阶段…

Rust 实战丨SSE(Server-Sent Events)

📌 SSE(Server-Sent Events)是一种允许服务器向客户端浏览器推送信息的技术。它是 HTML5 的一部分,专门用于建立一个单向的从服务器到客户端的通信连接。SSE的使用场景非常广泛,包括实时消息推送、实时通知更新等。 S…

数据结构笔记 3 串 数组 广义表

以下了解即可,暂时没发现有什么考点 参考: 【数据结构】——多维数组和广义表_数据结构loc-CSDN博客 相对应的题目: 他这个数组不是从0开始的,是从1开始的,所以为了配合公式要减1 下面这道题又不一样,它是…

【python深度学习】——torch.einsum|torch.bmm

【python深度学习】——torch.einsum|torch.bmm 1. 基本用法与示例2. torch.bmm 1. 基本用法与示例 基本用法: torch.einsum(equation, *operands)equation: 一个字符串,定义了张量操作的模式。 使用逗号来分隔输入张量的索引,然后是一个箭头&#xff…

linux中dd命令以及如何测试读写速度

dd命令详解 dd命令是一个在Unix和类Unix系统中非常常用的命令行工具,它主要用于复制文件和转换文件数据。下面我会详细介绍一些dd命令的常见用法和功能: 基本语法 dd命令的基本语法如下: bash Copy Code dd [option]...主要选项和参数 if…

Data Mining2 复习笔记6 - Optimization Hyperparameter Tuning

6. Optimization & Hyperparameter Tuning Why Hyperparameter Tuning? Many learning algorithms for classification, regression, … Many of those have hyperparameters: k and distance function for k nearest neighbors, splitting and pruning options in decis…

力扣1712.将数组分成三个子数组的方案数

力扣1712.将数组分成三个子数组的方案数 确定左边界的值 然后二分求右边界的范围 右边界处的前缀和满足 2*s[i] < s[r] < (s[n] s[i]) / 2 int s[100010];const int N 1e97;class Solution {public:int waysToSplit(vector<int>& nums) {int n nums.siz…

Mac清洁神器CleanMyMac2024一键轻松解决电脑垃圾问题

【CleanMyMac】苹果mac电脑垃圾清理软件 大家好&#xff01;今天我要给大家种草一个超级好用的苹果mac电脑垃圾清理软件&#xff0c;那就是 CleanMyMac。相信很多人都遇到过电脑运行速度变慢、存储空间不足的问题&#xff0c;而这款软件就是解决这些问题的救星&#xff01;让我…

20240605解决飞凌的OK3588-C的核心板刷机原厂buildroot不能连接ADB的问题

20240605解决飞凌的OK3588-C的核心板刷机原厂buildroot不能连接ADB的问题 2024/6/5 13:53 rootrootrootroot-ThinkBook-16-G5-IRH:~/repo_RK3588_Buildroot20240508$ ./build.sh --help rootrootrootroot-ThinkBook-16-G5-IRH:~/repo_RK3588_Buildroot20240508$ ./build.sh lun…