从零开始学习SLAM|技术路线

概念

视觉SLAM(Simultaneous Localization and Mapping)系统中,整个过程通常分为 前端后端 两个主要部分。前端处理的是从传感器数据(如相机图像、激光雷达等)中提取和处理信息,用于实时定位建图,而后端则负责全局优化地图生成和精确化。

SLAM前端

前端的核心任务是处理传感器数据(如图像、IMU等)并生成与位姿相关的局部信息。主要包括 特征提取、匹配、位姿估计 和 局部优化。

前端 有时被称为 视觉里程计(Visual Odometry,VO)。在 视觉SLAM 系统中,前端的任务通常包括 从相机图像中估计相机的相对运动,这正是视觉里程计的核心任务。

1.1 视觉里程计(VO):
视觉里程计是指通过连续的图像序列来估计相机的 相对运动(即位移和旋转)。它只关注相机的运动估计,而不依赖于全局地图或回环检测,通常用于短期、局部的运动估计。是前端的一部分,负责估计相机的相对运动。

前端除了执行视觉里程计(估计相机相对运动)外,还会进行一些其他任务,例如:特征提取与匹配、位姿估计(通过方法如PNP等)、局部地图构建(局部优化),滑动窗口优化等。

步骤
  1. 传感器数据预处理
    点云滤波:点云数据通常包含噪声和离群点,需要通过滤波方法进行清理。常见的滤波方法包括统计滤波(Statistical Outlier Removal)、体素滤波(Voxel Grid Filter)、直通滤波(Pass-through Filter)等。滤波之后还会进行点云平滑(冲裁样)
    图像预处理:对于视觉SLAM,图像的预处理包括去畸变、灰度化、降噪等操作。
    利用图像生成点云的代码:可以看我这篇文章 点云滤波与重采样可以看这篇文章
    1.1 特征提取
    关键点检测:从图像中提取关键点(如角点、边缘、特征点等),常见的算法包括 SIFT、SURF、ORB、FAST、BRIEF 等。

特征描述符生成:为每个关键点生成描述符(特征向量),描述符用于匹配不同视角下的相同物理点。常见的描述符有 ORB、BRIEF 等。

1.2 特征匹配
局部匹配(粗匹配):通过描述符,在不同时间的图像中找到相同或相似的特征点。例如,通过 暴力匹配(Brute-Force) 或 FLANN(Fast Library for Approximate Nearest Neighbors) 来匹配特征点。
精匹配:如ICP
外点剔除:使用 RANSAC 算法去除错误匹配点(外点),确保匹配点的准确性。

1.3 位姿估计
PnP (Perspective-n-Point):根据已知的3D点和其在图像中的投影,估计相机的旋转和位移,进而求得相机的 位姿(位置与朝向)。常用的方法包括 EPnP、UPnP。

光流法(Optical Flow):通过估计像素点在连续图像帧之间的运动,来计算相机的相对位姿。

1.4 局部地图构建
将多帧点云数据融合到一个统一的坐标系中,形成完整的环境地图。
局部优化:根据前端估计的相机位姿,进行局部地图的更新。通过 局部地图(如特征点、深度图、关键帧等)来帮助改进定位精度。

1.5 滑动窗口优化(Sliding Window Optimization)
滑动窗口:为了保持实时性,通常只处理一小部分最近的帧(例如,前几帧或一段时间的帧)。滑动窗口优化能够减少计算负担,同时保证定位精度。

局部一致性:前端会维持一个 滑动窗口,随着新帧的加入,窗口中只保留当前的几帧,这样能够在局部范围内进行优化,使得前端的估计更加精确。

SLAM后端

后端主要负责全局优化,包括 回环检测、全局图优化 和 地图精细化。它主要是处理前端产生的数据,通过全局优化来纠正位姿的漂移和误差。
2.0 多传感器融合
IMU与视觉数据融合:通过时间戳对齐和姿态对齐(如四元数插值)将IMU数据与视觉数据融合,以提高定位精度
2.1 回环检测(Loop Closure Detection)
回环检测:当机器人回到已知的位置时,后端需要检测到这个回环(即,识别该位置已经被之前的帧访问过)。这有助于减少累积误差,恢复全局一致性。

方法:常用的回环检测算法包括基于 Bag of Words 的方法、 FabMap、 ORB-SLAM 的回环检测等。

2.2 图优化(Graph Optimization)
图模型:后端通过构建 图优化模型,将机器人位姿和地标视为图的节点,而它们之间的相对约束(如运动约束、观测约束)则是图中的边。图的边通常对应前端得到的相对位姿、地标观测等约束。

非线性优化:使用 非线性最小二乘法 或 Levenberg-Marquardt 算法来优化图中节点的位置,最小化边约束的误差。常见的优化框架包括 g2o、Ceres Solver。

2.3 地图优化
地图更新:后端根据优化后的位姿和地图信息来更新全局地图。随着回环检测的成功,地图会得到纠正和优化。

图优化:地图的精细化不仅包括位姿优化,还包括 地标位置 的优化和重定位,确保整个地图的一致性和精确度。 如Bundle Adjustment 方法,见文章中的代码部分

2.4 姿态修正与全局一致性
姿态校正:由于前端的累积误差,后端的全局优化会对机器人的姿态进行修正,确保地图和轨迹的准确性。

全局一致性:图优化后的结果不仅能修正回环检测引入的误差,还能确保地图在全球范围内的一致性。

2.5 地图构建与精细化
地图生成:通过前端和后端的共同工作,最终生成的地图包含了机器人的位姿轨迹以及环境中的特征点或地标。

稀疏/密集地图:根据所使用的算法和传感器类型,地图可以是 稀疏地图(由特征点组成)或 密集地图(如通过深度图或语义分割得到的更丰富的地图数据)。

前端与后端的协同工作

前端的作用:实时获取传感器数据,估计局部的位姿变化,并不断更新局部地图。前端通常依赖于滑动窗口优化、特征匹配和位姿估计,保证实时性和定位精度。

后端的作用:对前端的输出进行全局优化,确保全局轨迹的一致性和精确性,尤其是在回环检测和图优化过程中,解决长期累积的误差问题。

视觉SLAM的典型系统架构

ORB-SLAM:一个经典的视觉SLAM系统,使用 ORB 特征进行匹配,支持回环检测和图优化,适用于大规模的环境。

LSD-SLAM:密集SLAM系统,基于直接法(不依赖特征提取和匹配),直接使用图像的像素强度进行位姿估计和地图构建。

VINS-Mono:一个基于单目相机和IMU的视觉惯性SLAM系统,结合了视觉和惯性传感器的数据进行位姿估计。

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

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

相关文章

LeetCode 解题思路 44(Hot 100)

解题思路: dp 数组的含义: 以 nums[i] 为结尾的最长递增子序列的长度。递推公式: dp[i] Math.max(dp[i], dp[j] 1)。dp 数组初始化: dp[i] 1。遍历顺序: 从小到大去遍历,从 i 1 开始,直到 …

精益数据分析(22/126):解锁创业增长密码与长漏斗分析

精益数据分析(22/126):解锁创业增长密码与长漏斗分析 在创业与数据分析的探索旅程中,我们都在不断寻求新的知识和方法,以提升创业的成功率。我一直期望能和大家共同学习、共同进步,今天就让我们继续深入研…

大模型应用开发之LLM入门

一、大模型概述 1、大模型概念 LLM是指用有大量参数的大型预训练语言模型,在解决各种自然语言处理任务方面表现出强大的能力,甚至可以展现出一些小规模语言模型所不具备的特殊能力 2、语言模型language model 语言建模旨在对词序列的生成概率进行建模…

Vue 计算属性 VS 侦听器:从原理到性能的深度对比

在 Vue 开发中,computed(计算属性)和watch(侦听器)是响应式系统的两大核心工具。 它们看似都能处理数据变化,实则设计理念和应用场景大相径庭。 一、核心区别:数据驱动的两种范式 1. 触发机制…

特斯拉宣布启动自动驾驶网约车测试,无人出租车服务进入最后准备阶段

特斯拉公司于4月24日正式宣布,已在美国得克萨斯州奥斯汀和加利福尼亚州旧金山湾区启动自动驾驶网约车服务的员工内部测试。这项测试将为今年夏季计划推出的完全无人驾驶出租车服务进行最后的验证和准备。 此次测试使用约200辆经过特殊改装的Model 3车型,…

基于springboot的在线教育系统

一、系统架构 前端:vue | element-ui | html | jquery | css | ajax 后端:springboot | mybatis 环境:jdk1.8 | mysql | maven | nodejs | idea 二、代码及数据 三、功能介绍 01. web端-首页1 02. web端-首页2 03. w…

文档编辑:reStructuredText全面使用指南 — 第四部分 高级主题

文档编辑:reStructuredText全面使用指南 — 第四部分 高级主题 reStructuredText(简称RST或ReST)是一种轻量级的标记语言,用于编写结构化的文档。它由Python社区开发,并广泛应用于技术文档、书籍、博客文章等。reStruc…

git Http改用户下载

用原先别人账号,无权下更新 http方式设置自己账号 例如 git fetch --all 提示没有权限从 http://192.168.1.2/gitlab/项目路径.git下载 git remote set-url origin http://your-username192.168.1.2/gitlab/项目路径.git your-username修改成自己的git账号 需要输入一个Tok…

Cancer Cell|scRNA-seq + scTCR + 空间多组学整合分析,揭示CD8⁺ T细胞在免疫治疗中的“双路径” | 临床问题的组学解答

Cancer Cell|scRNA-seq scTCR 空间多组学整合分析,揭示CD8⁺ T细胞在免疫治疗中的“双路径” 👋 欢迎关注我的生信学习专栏~ 如果觉得文章有帮助,别忘了点赞、关注、评论,一起学习 近日,《Cancer Cell》…

Python编程的真谛:超越语法,理解编程本质

你是否也曾陷入这样的误区:学了无数的 Python 语法、刷了几十套题,写起代码却仍然卡顿、举步维艰?这时候你才发现,真正阻碍进步的,从不是语法,而是你对“编程本质”的理解。 如果你只是死记硬背Python的语…

Go协程的调用与原理

Goroutine Go不需要像C或者Java那样手动管理线程,Go语言的goroutine机制自动帮你管理线程。 使用goroutine、 Go语言中使用goroutine非常简单,只需要在调用函数的时候在前面加上go关键字,就可以为一个函数创建一个goroutine。 一个gorout…

自然语言处理(9)—— 共现词矩阵及Python实现

共现词矩阵 1. 概述2. 构建步骤3. 代码实现(Python)结语 共现词矩阵(Co-occurrence Matrix)是自然语言处理(NLP)中用于捕捉词语间语义关系的重要工具。共现矩阵通过统计词语在特定上下文窗口内的共现频率&a…

Spark SQL核心解析:大数据时代的结构化处理利器

在大数据处理领域,Spark以其强大的分布式计算能力脱颖而出,而Spark SQL作为Spark生态系统的重要组成部分,为结构化和半结构化数据处理提供了高效便捷的解决方案。它不仅整合了传统SQL的强大查询功能,还深度集成到Spark的计算框架中…

多态以及多态底层的实现原理

本章目标 1.多态的概念 2.多态的定义实现 3.虚函数 4.多态的原理 1.多态的概念 多态作为面对三大特性之一,它所指代的和它的名字一样,多种形态.但是这个多种形态更多的指代是函数的多种形态. 多态分为静态多态和动态多态. 静态多态在前面已经学习过了,就是函数重载以及模板,…

linux下开发NFC读写器

linux下使用NFC读卡器,基于QT5开发 创建工程,引入lib开始编写代码 创建工程,引入lib 创建一个QT工程,如果是控制台程序,则去掉gui QT - gui引入lib库 LIBS -L$$PWD/lib -lyw60x这里需要将libyw60x.so库文件放在工程…

Linux基础使用-笔记

1. 文件和目录操作 查看当前目录:pwd 命令用于显示当前工作目录的完整路径。 pwd切换目录:cd 命令用于切换工作目录。 # 切换到指定目录 cd /home/user/Documents # 切换到上一级目录 cd .. # 切换到用户主目录 cd ~列出目录内容:ls 命令用…

DAG(有向无环图)计算模型面试内容整理-拓扑排序(Topological Sort)和节点依赖与并行度

拓扑排序(Topological Sort) 拓扑排序(Topological Sort): 拓扑排序是针对有向无环图(DAG)的一种线性排序方法。这种排序方法的特点是,对于DAG中的每一条有向边 (A → B),在拓扑排序中节点A总是排在节点B之前。

23种设计模式-结构型模式之享元模式(Java版本)

Java 享元模式(Flyweight Pattern)详解 🦋 什么是享元模式? 享元模式是一种结构型模式,它通过共享相同的对象来减少内存消耗,适用于大量细粒度对象的场景。关键思想是缓存重复出现的对象,避免…

浏览器访问背后的秘密:从加载到关闭,数据是否会丢失?

⏩ 一次浏览器访问 www.xxx.com 背后发生了什么? —— 以及“我点了 ,数据会不会丢?”的深度剖析 适读人群:Web 开发者、运维工程师、性能调优/安全从业者 1️⃣ 打开浏览器敲下网址:链路是如何启动的? 阶…

【HDFS入门】深入解析DistCp:Hadoop分布式拷贝工具的原理与实践

目录 1 DistCp概述与应用场景 2 DistCp架构设计解析 2.1 系统架构图 2.2 执行流程图 3 DistCp核心技术原理 3.1 并行拷贝机制 3.2 断点续传实现原理 4 DistCp实战指南 4.1 常用命令示例 4.2 性能优化策略 5 异常处理与监控 5.1 常见错误处理流程 5.2 监控指标建议…