《视觉SLAM十四讲》自用笔记 第二讲:SLAM系统概述

news2025/6/7 23:26:18

在rm队伍里作为算法组梯队队员度过了一个赛季,为了促进和负责其他工作的算法组成员的交流,我决定在接下来的半个学期里(可能更快)读完这本书,并将其中的部分理论应用于我自制的雷达导航小车上。
以下为第二讲的部分笔记:

第二讲 SLAM系统概述

2.0 目标

1.理解一个视觉SLAM框架由哪几个模块组成,各模块的任务是什么。

2.搭建编程环境,为开发和实验做准备

2.1 相机

单目相机:只使用一个摄像头。无法通过单张照片获取三维信息,需移动相机视角,通过时序信息获取。由于无法获取三维信息,故其估计的轨迹和地图与真实世界相差一个因子,即尺度。称之为尺度不确定性

双目相机:双目相机由两个单目相机组成,两个相机之间的距离(称为基线)已知,通过基线估计每个像素的空间位置,与人眼类似。基线距离越大,测量范围越远。

深度相机(RGB-D):通过红外结构光或Time-of-Flight原理,通过主动向物体发射光并接受返回的光,测量处物体离相机的距离。缺点:测量范围窄、噪声大、视野小、易受日光干扰、无法测量透射材料。

2.2 SLAM框架

SLAM流程为以下几步:

1.传感器信息读取与时间戳同步

2.视觉里程计,用于估算相邻图像间相机的运动及局部地图的模样,被称为前端。

3.后端优化,后端接受不同时刻视觉里程计测量的相机位姿及回环检测的信息,对其优化后得到全局一致的轨迹和地图。

4.回环检测,判断机器人是否到达过先前的位置,若检测到回环,则将信息交由后端处理。

5.建图,根据估计的轨迹,建立于任务要求对应的地图。

若将工作环境限定在静态、刚体、光照变化不明显、没有人为干扰的场景,该系统已相当成熟。

2.2.1 视觉里程计

计算机如何通过图像确定相机的运动?

要定量地估计相机运动,必须在了解相机与空间点的几何关系之后进行。

视觉里程计只计算相邻时刻的图像,与更前或更后的信息没有关联。将相邻时刻的运动串联起来,构成了机器人的运动轨迹。

但由于其只估计两个图像,不可避免地出现累计漂移——误差的累计传递使得轨迹错误。此时需要后端优化与回环检测。回环检测负责检测机器人是否回到了原始位置,后端优化根据信息矫正整个轨迹的形状。

2.2.2 后端优化

后端优化主要指处理SLAM过程中噪声的问题,即如何从带有噪声的传感器数据中估计整个系统的状态,以及这个状态估计的不确定性有多大——最大后验概率估计。状态包括机器人自身的轨迹与地图。

2.2.3 回环检测

主要解决位置随时间漂移的问题,通过在原点设置环境传感器或判断图像的相似性来完成检测。通过回环检测,可以消除累计误差,得到全局一致的轨迹和地图。

2.2.4 建图

建图指构建地图的过程,但其数据结构应视需要而定。

度量地图:强调精确表示地图中物体的位置关系,以稀疏与稠密对其分类。稀疏地图进行了一定程度的抽象,并不需要表达所有的物体。例如,若选择一部分具有代表意义的东西,称之为路标,则一张稀疏地图就是由路标组成的,而不是路标的部分可以忽略掉。

相对的,稠密地图着重于建模所有东西。对于定位,稀疏足够了,对于导航则需要稠密地图。

稠密地图通常按照某种分辨率,由许多个小块组成。二维度量地图由格子组成,三位为小方块。一般地,一个小块有占据、空闲、未知三种状态,表达该格内是否有物体。这样的地图空间成本大,会出现一致性问题,一点误差都可能使得地图出现重叠,进而失效。

拓扑地图:拓扑地图更强调地图元素之间的关系。拓扑地图由节点与边组成,只考虑节点间的连通性,不考虑节点间通行的过程。拓扑地图不擅长表达具有复杂结构的地图,且有待研究如何将地图分割为节点和边,以及如何利用其进行导航和路径规划。

2.3 SLAM的数学表述

如何用数学描述机器人的运动?

由于传感器是离散地采集数据的,故将一段连续时间内的运动分割为离散时刻的 t = 1 , . . . , K t=1,...,K t=1,...,K当中发生的事,在这些时刻, x x x表示机器人自身的位置, x 1 , . . . , x K x_1,...,x_K x1,...,xK记为各时刻的位置,其构成了机器人的轨迹。假如地图由许多个路标组成的,而每个时刻,传感器会检测到一部分路标点。假设路标以 y 1 , . . . , y N y_1,...,y_N y1,...,yN表示。

则机器人的运动由如下两件事描述:

1.什么是运动?需要考虑从 k − 1 k-1 k1时刻到 k k k时刻,机器人的位置 x x x是如何变化的,

2.什么是观测?假如机器人在 k k k时刻,于 x k x_k xk检测到了某路标 y j y_j yj,则需要考虑如何用数学描述。

机器人上搭载的传感器一般可以测量运动相关的读数,可能是位置之差、加速度、角速度等信息。以下有一个通用的抽象数学模型:
x k = f ( x k − 1 , u k , w k ) x_k=f(x_{k-1},u_k,w_k) xk=f(xk1,uk,wk)
其中 u k u_k uk为控制输入(如速度、角速度等,指从 x k − 1 x_{k-1} xk1 x k x_k xk之间施加的控制量), w k w_k wk为噪声。此为运动方程。与之相对,还有一个观测方程。其描述的是机器人在 x k x_k xk位置时看到某个路标点 y j y_j yj,产生了一个观测数据 z k , j z_{k,j} zk,j。同样有一个数学模型:
z k , j = h ( y j , x k , v k , j ) z_{k,j}=h(y_j,x_k,v_{k,j}) zk,j=h(yj,xk,vk,j)
v k , j v_{k,j} vk,j为观测时产生的噪声。

以上抽象模型根据任务、数据的不同有不同形式。

此时的SLAM问题即:当知道输入 u u u以及对某个对象的观测数据 z z z时,如何求解定位问题(估计 x x x)和建图问题(估计 y y y)——如何通过带有噪声的测量数据,估计内部的隐藏着的状态变量?

要求解这个状态估计问题,与两个方程的具体形式,以及噪声服从哪种分布有关。按照运动和观测方程是否为线性,以及噪声是否服从高斯分布进行分类,分为线性/非线性和高斯/非高斯系统。
其中线性高斯系统是最简单的,其无偏最优估计可以由卡尔曼滤波器给出,而非线性非高斯系统中,以扩展卡尔曼滤波器和非线性优化两种方法求解,或是粒子滤波器、图优化等。优化技术在计算资源充足的情况下优于滤波技术。

位姿 x x x​是什么?三维空间的运动由三个轴构成,则机器人的运动由三轴上的平移与旋转(为方便,视为yaw轴旋转)描述,共有六自由度。表达与优化这样的位姿在第三、四讲中讨论。如何在视觉上参数化观测方程,则在第五章讨论,知道了以上信息,如何求解上述状态方程,则在第六讲中。有待后续学习。

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

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

相关文章

Excel 模拟分析之单变量求解简单应用

正向求解 利用公式根据贷款总额、还款期限、贷款利率,求每月还款金额 反向求解 根据每月还款能力,求最大能承受贷款金额 参数: 目标单元格:求的值所在的单元格 目标值:想要达到的预期值 可变单元格:变…

装备制造项目管理具备什么特征?如何选择适配的项目管理软件系统进行项目管控?

国内某大型半导体装备制造企业与奥博思软件达成战略合作,全面引入奥博思 PowerProject 打造企业专属项目管理平台,进一步提升智能制造领域的项目管理效率与协同能力。 该项目管理平台聚焦半导体装备研发与制造的业务特性,实现了从项目立项、…

FPGA 动态重构配置流程

触发FPGA 进行配置的方式有两种,一种是断电后上电,另一种是在FPGA运行过程中,将PROGRAM 管脚拉低。将PROGRAM 管脚拉低500ns 以上就可以触发FPGA 进行重构。 FPGA 的配置过程大致可以分为:配置的触发和建立阶段、加载配置文件和建…

网络安全逆向分析之rust逆向技巧

rust逆向技巧 rust逆向三板斧: 快速定位关键函数 (真正的main函数):观察输出、输入,字符串搜索,断点等方法。定位关键 加密区 :根据输入的flag,打硬件断点,快速捕获程序中对flag访问的位置&am…

Leetcode 2494. 合并在同一个大厅重叠的活动

1.题目基本信息 1.1.题目描述 表: HallEvents ----------------- | Column Name | Type | ----------------- | hall_id | int | | start_day | date | | end_day | date | ----------------- 该表可能包含重复字段。 该表的每一行表示活动的开始日期和结束日期&…

vue+elementui 网站首页顶部菜单上下布局

菜单集合后台接口动态获取&#xff0c;保存到store vuex状态管理器 <template><div id"app"><el-menu:default-active"activeIndex2"class"el-menu-demo"mode"horizontal"select"handleSelect"background-…

网络安全-等级保护(等保) 3-3-1 GB/T 36627-2018 附录A (资料性附录) 测评后活动、附 录 B (资料性附录)渗透测试的有关概念说明

################################################################################ GB/T 36627-2018 《信息安全技术 网络安全等级保护测试评估技术指南》对网络安全等级保护测评中的相关测评技术进行明确的分类和定义,系统地归纳并阐述测评的技术方法,概述技术性安全测试和…

pytorch3d+pytorch1.10+MinkowskiEngine安装

1、配置pytorch1.10cuda11.0 pip install torch1.10.1cu111 torchvision0.11.2cu111 torchaudio0.10.1 -f https://download.pytorch.org/whl/cu111/torch_stable.html 2、配置 MinkowskiEngine库 不按下面步骤&#xff0c;出现错误 1、下载MinkowskiEngine0.5.4到本地 2、查看…

AI Infra运维实践:DeepSeek部署运维中的软硬结合

发布会资料 《AI Infra运维实践&#xff1a;DeepSeek部署运维中的软硬结合》 袋鼠云运维服务 1、行业痛点 随着数字化转型的深入&#xff0c;企业面临的运维挑战日益复杂&#xff0c;所依托的平台在长期使用的过程中积累了各式各样的问题或者难点。这些问题不仅影响效率&…

MySQL体系架构解析(二):MySQL目录与启动配置全解析

MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录&#xff0c;这个目录下存放着许多可执行文件。与其他系统的可执行文件类似&#xff0c;这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中&#xff0c;用…

K8s基础一

Kubernetes 架构 Kubernetes 背后的架构概念。 Kubernetes 集群由一个控制平面和一组用于运行容器化应用的工作机器组成&#xff0c; 这些工作机器称作节点&#xff08;Node&#xff09;。每个集群至少需要一个工作节点来运行 Pod。 工作节点托管着组成应用负载的 Pod。控制平…

2025五大免费变声器推荐!

在游戏开黑时想靠声音搞怪活跃气氛&#xff0c;或是在直播中用独特声线吸引观众&#xff0c;又或者给视频配音时想尝试不同角色 —— 但市面上的变声软件要么收费高昂&#xff0c;要么效果生硬、操作复杂&#xff0c;难道找到一款好用又免费的变声器真的这么难&#xff1f; 今…

SDC命令详解:使用set_min_capacitance命令进行约束

相关阅读 SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482 目录 指定最小需驱动电容值 指定对象列表/集合 简单使用 写在最后 set_min_capacitance命令用于设置输入端口的最小需驱动电容&#xff08;设置了输入端口的min_c…

几何引擎对比:OpenCasCade、ACIS、Parasolid和CGM

概述 从技术架构与行业实践来看&#xff0c;OpenCasCade 凭借开源生态与轻量化设计形成差异化竞争力&#xff0c;尤其适合预算敏感、需定制开发或依赖开源工具链的场景&#xff1b;而 ACIS、Parasolid 等商业内核则通过工业级精度优化与主流 CAD 深度绑定占据大型企业市场&…

汽车安全体系:FuSa、SOTIF、Cybersecurity 从理论到实战

汽车安全&#xff1a;功能安全&#xff08;FuSa&#xff09;、预期功能安全&#xff08;SOTIF&#xff09;与网络安全(Cybersecurity) 从理论到实战的安全体系 引言&#xff1a;自动驾驶浪潮下的安全挑战 随着自动驾驶技术从L2向L4快速演进&#xff0c;汽车安全正从“机械可靠…

Excel-vlookup -多条件匹配,返回指定列处的值

前提&#xff1a;先了解vlookup 的简单使用&#xff0c; 参照&#xff1a;https://blog.csdn.net/yanweijie0317/article/details/144886106?spm1011.2124.3001.6209 要求&#xff1a;按照Sheet0的B列和I列&#xff0c;在Sheet1中查找H列。 函数&#xff1a; VLOOKUP(B509&a…

Python异步爬虫与代理完美结合

为了编写一个高性能的异步爬虫&#xff0c;并使用代理IP&#xff0c;我们可以使用以下技术栈&#xff1a;aiohttp &#xff08;用于异步HTTP请求&#xff09;、asyncio &#xff08;用于异步编程&#xff09;、代理IP可以使用一个代理池&#xff0c;我们从文件中读取或者从API获…

吃透 Golang 基础:数据结构之 Map

文章目录 Map概述初始化删除访问不存在的 key 返回 value 的零值遍历 mapmap 自身的零值map 索引时返回的第二个参数使用 map 实现 set Map Hash Map 是无序的 key/value 对集合&#xff0c;其中所有的 key 都是不同的。通过给定的 key 可以在常数时间复杂度内完成检索、更新或…

5.Nginx+Tomcat负载均衡群集

Tomcat服务器应用场景&#xff1a;tomcat服务器是一个免费的开放源代码的Web应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP程序的首选。一般来说&#xff0c;Tomcat虽然和Apache或…

React项目的状态管理:Redux Toolkit

目录 1、搭建环境 2、Redux Toolkit 包含了什么 3、使用示例 &#xff08;1&#xff09;创建user切片 &#xff08;2&#xff09;合并切片得到store &#xff08;3&#xff09;配置store和使用store 使用js来编写代码&#xff0c;方便理解一些 1、搭建环境 首先&#xf…