当前位置: 首页 > news >正文

视觉SLAM第二讲

SLAM分为定位和建图两个问题。

定位问题

定位问题是通过传感器观测数据直接或间接求解位置和姿态。

通常可以分为两类:基于已知地图的定位和基于未知地图的定位。

基于已知地图的定位

利用预先构建的地图,结合传感器数据进行全局定位。SLAM中的全局定位是指在地图参考系下的定位,而全局地图只是在较大范围内完整的环境地图,所以本质上还是局部相对定位。

基于未知地图的定位

传感器分为两类:一种是安装在机器人本体上的,如轮式编码器、IMU、相机、激光传感器等;另一种是安装在环境中的,如导轨、二维码路标、UWB、GPS等。环境中的传感器通常能够直接测量机器人的位置信息,提供简单有效的定位解决方案。然而,由于需要在环境中进行设置,限制了机器人的使用范围。相反,安装在机器人本体上的传感器测量的通常是间接的物理量而不是直接的位置数据,需要通过间接方法推算位置,但其优点是不对环境提出特定要求。

引入SLAM的主要目的如下:

1)建图。在传感器性能良好的环境下,使用SLAM技术可以构建高精度的全局地图。这些构建的地图将为后续的定位、导航等功能提供支持。

2)定位。在视觉SLAM中,通过帧间特征点匹配可以计算出相机的相对变换,对应地推算出机器人的位姿信息。然而,这种计算方法会引入累积误差。利用SLAM构建的全局地图,通过相机采集的环境信息与地图进行匹配,可以实现重定位,从而消除累积误差的影响,获得更加精确的机器人位姿。

3)导航。如果我们建立的地图中包含了可通行区域和不可通行区域的信息,那么可以利用这些信息实现机器人的路径规划和路径跟踪,从而使机器人能够在地图中从起点到达终点,并能够对地图中的静态障碍物进行避障。导航所用地图要求是稠密地图

建图问题

建图问题是利用传感器位姿和观测数据求解被观测物体的位置。

通常可以分为两类:全局建图和局部建图。全局建图涉及在较大范围内生成完整的环境地图,而局部建图则关注于在特定区域内生成详细的地图信息。建图过程中可能需要对环境进行多次扫描和数据融合,以提高地图的精度和一致性。

经典视觉SLAM框架

在这里插入图片描述

整个视觉 SLAM 流程包括以下步骤。

  1. 传感器标定、数据采集。在视觉 SLAM 中主要为相机图像信息的读取和预处理。如果是在机器人中,还可能有码盘、惯性传感器等信息的读取和同步。
  2. 视觉里程计(Visual Odometry,VO)。视觉里程计的任务是估算相邻图像间相机的运动,以及局部地图的样子。VO 又称为前端(Front End)。
  3. 后端优化(Optimization)。后端接收不同时刻视觉里程计测量的相机位姿,对它们进行批量式优化,减轻累积误差,此外接收回环检测的信息,消除累积误差,得到全局一致的轨迹和地图。由于接在 VO 之后,又称为后端(Back End)。
  4. 回环检测(Loop Closing)。回环检测判断机器人是否到达过先前的位置。如果检测到回环,它会把信息提供给后端进行处理。
  5. 建图(Mapping)。它根据估计的轨迹,建立与任务要求对应的地图。

需要注意的是,前端包括后端优化得到的运动信息始终包含累积误差,该累积误差在SLAM中只能通过回环检测或者与预先建立好的具有较高精度的全局地图匹配来消除。

视觉SLAM方案可按照传感器的不同(单目、双目、RGBD、与IMU的组合等)、前端方法的不同(主要分为直接法和特征点法)、后端优化方案的不同(滤波或者非线性优化)、生成地图形式的不同(稀疏地图、稠密地图等)具有不同的划分。

SLAM 问题的本质:对运动主体自身和周围环境空间不确定性的估计。为了解决SLAM问题,我们需要状态估计理论,把定位和建图的不确定性表达出来,然后采用滤波器或非线性优化,估计状态的均值和不确定性(方差)。

SLAM 问题的数学表述

  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
    在这里插入图片描述

其中 O \mathcal{O} O是一个集合,记录着在哪个时刻观察到了哪个路标(通常不是每个路标在每个时刻都能看到的——我们在单个时刻很可能只看到一小部分)。这两个方程描述了最基本的 SLAM 问题:当知道运动测量的读数 u u u,以及传感器的读数 z z z时,如何求解定位问题(估计 x x x)和建图问题(估计 y y y)?这时,我们就把SLAM问题建模成了一个状态估计问题:如何通过带有噪声的测量数据,估计内部的、隐藏着的状态变量?

状态估计问题的求解,与两个方程的具体形式,以及噪声服从哪种分布有关。按照运动和观测方程是否为线性,噪声是否服从高斯分布进行分类,分为线性/非线性和高斯/非高斯系统。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【03】Java虚拟机是如何加载Java类的
  • AttributeError: module ‘selenium.webdriver‘ has no attribute ‘PhantomJS‘
  • QT 关于QTableWidget的常规使用
  • Postman测试工具详细解读
  • 如何将整个运行环境打包成docker
  • 每日一知识点 - Java Lambda 表达式
  • C++——类和对象(中)
  • DeFi革命:揭秘去中心化金融的核心技术与实操指南
  • Typesript的type和interface的异同?
  • vscode回退不显示了,不方便操作
  • Rust:cargo的常用命令
  • Flutter Geolocator插件使用指南:获取和监听地理位置
  • 乐鑫ESP32-H2设备联网芯片,集成多种安全功能方案,启明云端乐鑫代理商
  • 【QT】TCP
  • Qt自定义带前后缀图标的PushButton
  • ES学习笔记(12)--Symbol
  • LeetCode18.四数之和 JavaScript
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Vim Clutch | 面向脚踏板编程……
  • 服务器之间,相同帐号,实现免密钥登录
  • 构造函数(constructor)与原型链(prototype)关系
  • 开源地图数据可视化库——mapnik
  • 前端_面试
  • 全栈开发——Linux
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 再次简单明了总结flex布局,一看就懂...
  • ​Spring Boot 分片上传文件
  • ###STL(标准模板库)
  • #Java第九次作业--输入输出流和文件操作
  • #NOIP 2014#Day.2 T3 解方程
  • #pragma once与条件编译
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (30)数组元素和与数字和的绝对差
  • (4.10~4.16)
  • (C11) 泛型表达式
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • .bat批处理(六):替换字符串中匹配的子串
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .Net 基于MiniExcel的导入功能接口示例
  • .NET 中 GetProcess 相关方法的性能
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解
  • [2010-8-30]
  • [bzoj1038][ZJOI2008]瞭望塔
  • [C++]——带你学习类和对象
  • [Codeforces] combinatorics (R1600) Part.2
  • [dart学习]第四篇:函数
  • [FBCTF2019]RCEService (PCRE回溯绕过和%a0换行绕过)
  • [Hadoop in China 2011] Hadoop之上 中国移动“大云”系统解析
  • [Linux](15)线程基础,线程控制,线程的互斥与同步
  • [Linux内存管理-分页机制]—把一个虚拟地址转换为物理地址