【视觉SLAM】1-概述

devtools/2024/11/18 15:43:52/

读书笔记

文章目录

  • 1. 经典视觉SLAM框架
  • 2. 数学表述
    • 2.1 运动方程
    • 2.2 观测方程
    • 2.3 问题抽象

1. 经典视觉SLAM框架

在这里插入图片描述

  • 传感器信息读取:相机图像、IMU等多源数据;
  • 前端视觉里程计(Visual Odometry,VO):估计相机的相对运动,生成局部地图,VO又称为前端(Front End);
  • 后端非线性优化(Optimization):接收不同时刻VO测量的相机位姿、回环检测信息,进行联合优化,得到全局一致的轨迹和地图,又称为后端(Back End);
  • 回环检测(Loop Closure Detection):判断机器人是否到达过先前的位置,若检测到回环,则把信息交由后端处理(对VO轨迹产生的累积漂移(Accumulating Drift)误差进行校正);
  • 建图(Mapping):根据估计的轨迹,建立与任务要求对应的地图。

SLAM中地图的形式主要分为度量地图拓扑地图两种:

  • 度量地图(Metric Map):强调精确表示地图中物体的位置关系,通常用稀疏(Sparse)与稠密(Dense)对其分类。选择一部分具有代表意义的物体称为路标(Landmark)(特征点、点云?);
  • 拓扑地图(Topological Map):强调地图元素之间的关系,它是一个图(Graph),由节点和边组成,只考虑节点间的连通性。

2. 数学表述

对于由相机和各类传感器如IMU组成的机器人来说,其在环境中的运动数据可通过两个途径获得:①由传感器数据估计,称为运动;②由相机图像数据估计,称为观测。为了对这两个过程进行数学表述,做如下定义:

  • 在机器人的连续时间运动内取离散时刻 t = 1 , ⋯ , K t=1, \cdots, K t=1,,K
  • x x x 表示机器人自身位置,则其各时刻位置记为 x 1 , ⋯ , x K x_1, \cdots, x_K x1,,xK
  • N N N个路标点表示为 y 1 , ⋯ , y N y_1, \cdots, y_N y1,,yN

分别用运动方程 f ( ⋅ ) f(\cdot) f()观测方程 h ( ⋅ ) h(\cdot) h() 来描述上述两个过程,这两个函数都是一种通用方程表示,这里不用纠结其具体表达式。

2.1 运动方程

x k = f ( x k − 1 , u k , ω k ) x_k=f(x_{k-1},u_k,\omega_k) xk=f(xk1,uk,ωk)
其中, u k u_k uk为运动传感器的输入, ω k \omega_k ωk为该过程的噪声。

2.2 观测方程

机器人在 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为观测噪声。

2.3 问题抽象

上述两方程描述了最基本的SLAM问题:已知运动测量读数 u u u、传感器读数 z z z时,如何求解定位问题(估计 x x x)和建图问题(估计 y y y)?

这时,可把SLAM问题建模成一个状态估计问题:如何通过带有噪声的测量数据,估计内部的、隐藏的状态变量。

按照运动和观测方程是否为线性噪声是否服从高斯分布进行分类,上述状态估计问题可分为线性/非线性高斯/非高斯系统。其中线性高斯系统(Linear Gaussian,LG)最简单,其无偏的最优估计可由卡尔曼滤波(Kalman Filter,KF)给出;而复杂的非线性非高斯系统(Non-Linear Non-Gaussian,NLNG)中,可使用扩展卡尔曼滤波器(Extended Kalman Filter,EKF)和非线性优化两大类方法求解。


http://www.ppmy.cn/devtools/134981.html

相关文章

LLM学习笔记(1).env文件与Anaconda虚拟环境有何区别?

刚入门,我打算跟着这个随笔走: 前言 LLM 应用开发实践笔记 会先从ChatGPT的中文文档开始: 入门 | OpenAI 官方帮助文档中文版 以上笔记和文档里的内容就不会在我的学习笔记里重复了,最后会把注意力转移到Hugging Face和论文上…

go channel select 语句使用

在 Go 语言中,select 语句用于在多个通道操作中进行选择。它的工作机制类似于 switch 语句,但专门用于处理通道操作。select 语句可以同时等待多个通道操作,并在其中一个通道准备好时执行相应的分支。 select 的基本用法 以下是 select 的基…

npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。

npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Policies。 PS C:\WINDOWS\system32> get-ExecutionPolicy Restricted…

20241115在飞凌的OK3588-C的核心板上跑Linux R4时拿大文件到电脑的方法

20241115在飞凌的OK3588-C的核心板上跑Linux R4时拿大文件到电脑的方法 2024/11/15 15:26 缘起:使用SONY 405的机芯,以1080p60录像了半小时,3.5GB的mp4视频要拿到电脑上播放确认。 方法:1、拷贝到TF卡。记住,对于FAT32…

lab2:docker基础实战

一、实验目的 1.通过本次实验,完成Docker主机的安装和配置、镜像的搜索和下载、容器生命周期的基本管理、容器网络的管理。 2.通过Dockerfile来构建nginx镜像,了解Dockerfile镜像构建过程。 二、实验内容与实验要求 1.完成Docker的安装和配置。 2.完…

动态内存管理(c语言)

我们通常开辟空间的方式 int val 20; //大小为4个字节 char arr[10] {0} //开辟出一块连续的空间且大小为10 但是上面开辟空间方式的特点 1.空间开辟大小是固定的 2.数组在声明得时候,必须指定数组得长度,它所需要得内存在编译时分配 但是以上的方式不能…

【Ubuntu侧边菜单点击没反应】【Ubuntu 20.04】【浏览器、文件夹点击没反应】

在Ubuntu服务器上,出现左侧菜单栏(如浏览器、文件资源管理器等)点击无反应的问题,通常是由于桌面环境(如GNOME)出现了异常,可能是由于资源消耗过高、图形驱动问题、或者某些后台进程挂起等原因导…

哈希表学习分享

1.哈希表介绍 //1.介绍哈希表unordered_map<int, int>map;//unordered_map是不按照键值排序的 &#xff08;使用头文件unordered_map&#xff09;/*unordered_map<int, int>其中的第一个int代表的是键&#xff0c;第二个int代表的是值所以称为键值对&#xff0c;以…