SLAM文献之-SuperOdometry: Lightweight LiDAR-inertial Odometry and Mapping

《Super Odometry: IMU-centric LiDAR-Visual-Inertial Estimator for Challenging Environments》是一篇旨在增强 SLAM 系统在恶劣环境下鲁棒性的工作,尤其关注尘雾、烟雾等遮挡条件下的鲁棒估计。下面从算法原理、公式推导、创新点和应用场景四个方面进行详细解析:

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1cb5e2da44e94c4f8ae7817f1ac4d5a4.png


一、算法原理概述

Super Odometry 提出了一个以 IMU 为中心的多传感器融合框架,集成了 IMU、LiDAR 和相机信息,核心思想是:

  • IMU 作为主导惯导轨迹提供器(IMU-centric),在结构退化或视觉遮挡时仍可提供高频、稳定的运动估计;
  • LiDAR 和视觉信息作为约束项,增强轨迹精度;
  • 通过 多度量 ICP(Multi-metric ICP)动态八叉树(Dynamic Octree) 提高匹配质量与实时性;
  • 利用 质量权重(Quality Weighting)机制 来判定不可靠匹配并降低其优化影响;
  • 最终构造统一的优化框架,融合 IMU 先验、LiDAR ICP、视觉重投影误差进行非线性优化。

二、主要公式推导

1. 匹配质量权重(用于抑制退化点云匹配)

用于判断一个点是否真的属于点、线、面三种结构:

对应点质量(点 → 点):

w i p o → p o = σ 3 D σ 3 D max w^{po \rightarrow po}_i = \frac{\sigma_{3D}}{\sigma_{3D_{\text{max}}}} wipopo=σ3Dmaxσ3D

其中:

  • σ 3 D \sigma_{3D} σ3D:点周围的 3D 曲率
  • σ 3 D max \sigma_{3D_{\text{max}}} σ3Dmax:最大曲率阈值
点 → 线 / 面的误差项:

w i p o → l i / p l = 1 − 1 k ⋅ d max ∑ i = 1 k ( p i − p ˉ ) ⊤ A ( p i − p ˉ ) w^{po \rightarrow li/pl}_i = 1 - \frac{1}{k \cdot d_{\text{max}}} \sum_{i=1}^{k} (p_i - \bar{p})^\top A (p_i - \bar{p}) wipoli/pl=1kdmax1i=1k(pipˉ)A(pipˉ)

  • A = I − n k n k ⊤ A = I - n_k n_k^\top A=Inknk(点到线) 或 A = n k n k ⊤ A = n_k n_k^\top A=nknk(点到面)
  • n k n_k nk:法向量
  • p i p_i pi:邻近点, p ˉ \bar{p} pˉ:邻近点均值
  • d max d_{\text{max}} dmax:最大误差范围

2. 全局优化目标函数(基于 LM 法):

最终优化目标是:

min ⁡ T i + 1 { ∑ p ∈ F i ∥ W l ⋅ e p o → p o , l i , p l ∥ 2 + ∑ ( i , i + 1 ) ∈ B ∥ W i m u ⋅ e i m u ∥ 2 + E p r i o r i m u _ o d o m } \min_{T_{i+1}} \left\{ \sum_{p \in F_i} \| W_l \cdot e_{po \rightarrow po, li, pl} \|^2 + \sum_{(i, i+1) \in \mathcal{B}} \| W_{imu} \cdot e_{imu} \|^2 + E_{prior}^{imu\_odom} \right\} Ti+1min pFiWlepopo,li,pl2+(i,i+1)BWimueimu2+Epriorimu_odom

  • 第一项:多度量 ICP 残差(带权)
  • 第二项:IMU 预积分残差
  • 第三项:IMU 初始先验

3. 动态八叉树构建(Dynamic Octree)

  • 地图采用 Hash Table 存储体素 (voxel):

Hash : ( x , y , z ) → Voxel \text{Hash}: (x, y, z) \rightarrow \text{Voxel} Hash:(x,y,z)Voxel

  • 每个 Voxel 内部包含一个小型 Octree(用于点云检索)
  • 新点到来时仅更新对应 voxel 中的 Octree,避免重建整棵 KD-Tree,提高效率。

三、创新点总结

模块创新点作用
IMU 中心建模将 IMU 作为核心轨迹估计器即使视觉和 LiDAR 退化,仍能提供稳定估计
多度量 ICP点-点、点-线、点-面联合建模提高几何匹配鲁棒性
质量评估机制判断特征是否可靠并加权抑制雾霾等环境下错误匹配的影响
动态 Octree每个 voxel 拥有独立 octree 结构替代传统 KD-Tree,极大提升匹配效率
多模态优化联合视觉重投影、LiDAR ICP、IMU 先验构建稳健一致的因子图优化

四、适用场景与优势

适用场景:

  • 尘雾、烟雾等遮挡严重的场景
  • 结构退化(如隧道、矿井、管道)中点云特征不足的环境
  • UAV、UGV、机器人等对实时鲁棒性要求高的导航任务

相较传统方法的优势:

方法IMU 融合点云匹配策略实时性雾霾鲁棒性
LOAM弱融合点-线、点-面中等
LIO-SAM中等经典 ICP中等一般
Super Odometry强融合(IMU-centric)多度量 ICP + 动态 octree

五、Super Odometry与当前主流LIO/VLO系统对比

下面将《Super Odometry: IMU-centric LiDAR-Visual-Inertial Estimator for Challenging Environments》与当前主流的三种 LVI(LiDAR-Visual-Inertial)系统进行系统性对比分析,主要围绕以下五个维度:

  1. 系统架构(IMU主导 / LiDAR主导 / Vision主导)
  2. 数据关联策略(特征提取 + 匹配)
  3. 地图组织与效率(KD-Tree / Octree / 动态结构)
  4. 优化方式(因子图 / 滑窗 / 非线性优化)
  5. 鲁棒性与适用环境

1. 总览对比表格

系统主导传感器数据关联地图结构优化策略特殊能力 / 适用环境
VINS-Fusion视觉 + IMU(视觉主导)视觉特征匹配无地图(轨迹为主)滑窗 + 非线性 BA室内/良好光照环境,不能单独使用 LiDAR
FAST-LIOLiDAR + IMU(LiDAR 主导)点 → 面(surf)动态 KD-Tree点云因子图优化无需回环,全 LiDAR 特征
LVI-SAMLiDAR + Vision + IMU(三者融合)LiDAR 点面、视觉重投影GTSAM + KD-Tree联合因子图优化回环 + 语义 + 多模态地图
Super OdometryIMU 主导(IMU-centric)点 → 点/线/面(多度量)+ 视觉动态 Octree + 哈希IMU 先验 + 多因子优化雾霾/灰尘环境强鲁棒,点云退化适应强

2. 架构对比分析

系统架构核心优点缺点
VINS-Fusion视觉滑窗 + IMU 预积分成熟,延迟小,开源广泛使用对光照变化敏感,不能处理严重遮挡
FAST-LIOLiDAR 点面残差 + IMU 优化高精度,实时性强在低结构环境中(隧道、烟雾)易退化
LVI-SAM多模态因子图(视觉+激光+IMU)通用性强,有回环架构复杂,对同步和标定要求高
Super OdometryIMU 为轨迹主导者在 IMU 数据质量好时极稳定,适应退化对 IMU 噪声与漂移更敏感,初始化要求较高

3. 数据关联方式对比

系统LiDAR 匹配策略视觉处理特点
VINS-Fusion无(只用相机)ORB + 光流 + BA不依赖点云,依赖光照和纹理
FAST-LIO点到面残差(边缘/平面特征)高效,适合室外结构场景
LVI-SAM点到面 + 视觉重投影误差ORB + 重投影 + 同步对位姿初值依赖大
Super Odometry点 → 点/线/面 多度量匹配 + 质量权重滤波视觉重投影 + 前端边缘辅助匹配鲁棒性强,可自适应退化特征剔除

4. 地图与结构组织

系统地图结构特点
VINS-Fusion无地图,仅轨迹滑窗轻量,但不能做密集建图
FAST-LIOKD-Tree 动态维护易受更新频率限制,插入慢
LVI-SAMKD-Tree + 回环维护精度高,实时性适中
Super Odometry动态 Octree + Hash Voxel插入更新仅局部 voxel,极高效率

5. 优化模型

系统优化引擎优化项注释
VINS-FusionCeres / GTSAM视觉重投影 + IMU 预积分类似视觉 SLAM,结构清晰
FAST-LIOCeres / LIO-Mapping点云残差 + IMU实时性强,因子图稀疏
LVI-SAMGTSAM点云 ICP + 相机 + 回环多传感器融合
Super Odometry自定义 LM / GTSAMICP 多度量 + IMU + 视觉重投影 + 权重筛选优先信任 IMU,融合中引入权重机制提高鲁棒性

6. 在遮挡/雾霾等极端环境下表现

系统在恶劣条件下表现原因分析
VINS-Fusion极易失效视觉严重依赖光照、清晰纹理
FAST-LIO退化严重点云特征稀疏或被遮挡后误配严重
LVI-SAM有一定缓解依赖视觉与回环,遮挡下仍可能失效
Super Odometry鲁棒性极强IMU 主导 + 质量评估 + 多度量ICP,自动剔除低质量约束

六、 总结:何时选择 Super Odometry

推荐使用场景:

  • 无法保证视觉质量的任务(如无人机穿越烟雾、采矿机器人)
  • 高速运动下需要稳定惯导估计
  • 点云特征退化严重但 IMU 保持稳定输入的系统
  • 高鲁棒 SLAM 要求,如国防、灾害、地下隧道等

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

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

相关文章

指令烧录ORIN NANO操作系统

1 概述 模组为ORIN NANO 4GB版本 Ubuntu系统为18.04虚拟机 说明:刷机过程会有重新连接USB的操作,烧写过程需要注意虚拟机提示,官方不建议使用虚拟机,建议直接使用ubuntu操作系统的机器。 2 下载烧录所需文件 进入到下载网址&am…

游戏引擎学习第287天:加入brain逻辑

Blackboard:动态控制类似蛇的多节实体 我们目前正在处理一个关于实体系统如何以组合方式进行管理的问题。具体来说,是在游戏中实现多个实体可以共同或独立行动的机制。例如,我们的主角拥有两个实体组成部分,一个是身体&#xff0…

QML定时器Timer和线程任务WorkerScript

定时器 Timer 属性 interval: 事件间隔毫秒repeat: 多次执行,默认只执行一次running: 定时器启动triggeredOnStart: 定时器启动时立刻触发一次事件 信号 triggered(): 定时时间到,触发此信号 方法 restart(): 重启定时器start(): 启动定时器stop(): 停止…

Linux中的域名解析服务器

一、DNS(域名系统)详解 1. 核心功能与特点 特性说明核心作用将域名(如 www.example.com)转换为 IP 地址(如 192.168.1.1),实现人类可读地址与机器可读地址的映射。端口与协议- 默认端口&#…

Springboot2

1、搭建环境 2、配置文件 application.properties application.yml 3、springboot接收请求 springspringmvc 接收请求 响应数据 4、springboot集成jdbc spring-boot-starter-jdbc.jar JdbcTemplate(update|query) 5、springboot自动装配原理(重点&#x…

【课堂笔记】核方法和Mercer定理

文章目录 Kernal引入定义Mercer定理描述有限情形证明一般情形证明 Kernal 引入 在实际数据中常常遇到不可线性分割的情况,此时通常需要将其映射到高维空间中,使其变得线性可分。例如二维数据: 通过映射 ϕ ( x 1 , x 2 ) ( x 1 2 , 2 x 1…

谈谈未来iOS越狱或巨魔是否会消失

2024年10月的预测,先说结论: 巨魔iOS17.1消失概率为99%。 因为巨魔强依赖的漏洞就是一个签名漏洞,攻击面有限又经过2轮修复,第3次出现漏洞的概率极低。而越狱的话由于系统组件和服务较多,所以出现漏洞概率高攻击面多&…

根据当前日期计算并选取上一个月和上一个季度的日期范围,用于日期控件的快捷选取功能

1.选择月份范围 代码如下&#xff1a; <el-date-picker v-model"value" type"monthrange" align"right" unlink-panels range-separator"至"start-placeholder"开始月份" end-placeholder"结束月份" :picker-…

用户栈的高效解析逻辑

一、背景 在之前的博客 内核逻辑里抓取用户栈的几种方法-CSDN博客 里&#xff0c;介绍了使用内核逻辑进行用户栈的函数地址的抓取逻辑&#xff0c;但是并没有涉及如何解析出函数符号的逻辑。 就如perf工具一样&#xff0c;它也是分为两个步骤&#xff0c;一个步骤是内核态抓取…

vue3 el-table 行号

在 Vue 3 中&#xff0c;使用 Element Plus 的 <el-table> 组件来创建表格时&#xff0c;如果你想添加行号&#xff08;即每一行的编号&#xff09;&#xff0c;可以通过自定义列来实现。下面是如何实现的步骤&#xff1a; 1. 安装 Element Plus 首先&#xff0c;确保你…

Linux:进程信号---信号的保存与处理

文章目录 1. 信号的保存1.1 信号的状态管理 2. 信号的处理2.1 用户态与内核态2.2 信号处理和捕捉的内核原理2.3 sigaction函数 3. 可重入函数4. Volatile5. SIGCHLD信号 序&#xff1a;在上一章中&#xff0c;我们对信号的概念及其识别的底层原理有了一定认识&#xff0c;也知道…

UML 图的细分类别及其应用

统一建模语言&#xff08;UML&#xff0c;Unified Modeling Language&#xff09;是一种用于软件系统建模的标准化语言&#xff0c;广泛应用于软件工程领域。UML 图分为多种类别&#xff0c;每种图都有其特定的用途和特点。本文将详细介绍 UML 图的细分类别&#xff0c;包括 类…

「极简」扣子(coze)教程 | 小程序UI设计进阶!控件可见性设置

大师兄在上一期的内容中对用户的UI做了一些简单的介绍。这期大师兄继续介绍UI设计上的进阶小技巧&#xff0c;帮我们获得更好的使用体验。 扣子&#xff08;coze&#xff09;编程 「极简」扣子(coze)教程 | 3分钟学会小程序UI设计&#xff01;从零开始创建页面和瓷片按钮 「极…

2025年渗透测试面试题总结-快手[实习]安全工程师(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 快手[实习]安全工程师 一面问题分析与详细回答 1. 自我介绍 4. 项目问题与解决 7. 防止SQL注入&…

WordPress Madara插件存在文件包含漏洞(CVE-2025-4524)

免责声明 本文档所述漏洞详情及复现方法仅限用于合法授权的安全研究和学术教育用途。任何个人或组织不得利用本文内容从事未经许可的渗透测试、网络攻击或其他违法行为。使用者应确保其行为符合相关法律法规,并取得目标系统的明确授权。 对于因不当使用本文信息而造成的任何直…

互联网大厂Java面试场景:从Spring Boot到分布式缓存技术的探讨

互联网大厂Java面试场景&#xff1a;从Spring Boot到分布式缓存技术的探讨 场景描述 互联网大厂某次Java开发岗面试&#xff0c;主考官是一位严肃的技术专家&#xff0c;而应聘者则是搞笑的程序员“码农明哥”。面试围绕音视频场景的技术解决方案展开&#xff0c;探讨从Sprin…

leetcode hot100刷题日记——8.合并区间

class Solution { public:vector<vector<int>> merge(vector<vector<int>>& intervals) {if(intervals.empty()){//复习empty函数啊&#xff0c;日记1有的return {};}// 按照区间的起始位置进行排序sort(intervals.begin(), intervals.end());vect…

Unity中GPU Instancing使用整理

GPU Instancing是一种绘制调用优化方法,可在单个绘制调用中渲染具有相同材质Mesh的多个副本(实例),可用于绘制在场景中多次出现的几何体(例如,树木或灌木丛),在同一绘制调用中渲染相同的网格,每个实例可以具有不同的属性(如 Color 或 Scale),渲染多个实例的绘制调用…

【后端】【UV】【Django】 `uv` 管理的项目中搭建一个 Django 项目

&#x1f680; 一步步搭建 Django 项目&#xff08;适用于 uv pyproject.toml 项目结构&#xff09; &#x1f9f1; 第 1 步&#xff1a;初始化一个 uv 项目&#xff08;如果还没建好&#xff09; uv init django-project # 创建项目&#xff0c;类似npm create vue⚙️ 第 …

Linux操作系统之进程(二):进程状态

目录 前言 一、补充知识点 1、并行与并发 2、时间片 3、 等待的本质 4、挂起 二. 进程的基本状态 三、代码演示 1、R与S 2、T 3、Z 四、孤儿进程 总结&#xff1a; 前言 在操作系统中&#xff0c;进程是程序执行的基本单位。每个进程都有自己的状态&#xff0c;这些…