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

【视觉SLAM:一、初识SLAM】

视觉SLAM(Simultaneous Localization and Mapping,简称视觉SLAM)是机器人和计算机视觉领域的重要研究方向。它的核心目标是利用摄像头获取的图像数据,在未知环境中实现同时定位(Localization)与建图(Mapping)。视觉SLAM的应用场景广泛,包括自动驾驶、增强现实、无人机导航等。
以下从“易于理解的小萝卜例子”、“经典视觉SLAM框架”、“SLAM问题的数学表述”和“实践基础”四个方面详细介绍视觉SLAM

小萝卜的例子:SLAM的简单理解

  • 故事背景: 假设有一个机器人“小萝卜”,它被放置在一个完全未知的房间内。小萝卜的任务是:

    • 知道自己当前在房间里的位置(定位)。
    • 画出房间的地图(建图)。
      在这里插入图片描述
  • 问题挑战:

    • 小萝卜没有现成的地图,也无法直接知道自己的位置。
    • 小萝卜只能依靠自己的“眼睛”(摄像头)和传感器来感知环境。
    • 随着小萝卜的移动,它需要边定位边更新地图。
  • 解决方案:

    • 小萝卜利用视觉SLAM技术,在每一步获取图像信息,检测其中的特征点,并通过匹配和优化,估计自己的位姿,同时建立和更新环境的地图。
    • 这就形成了视觉SLAM的核心目标:在未知环境中,使用视觉传感器同时完成定位和建图任务。

经典视觉SLAM框架

视觉SLAM系统通常被划分为以下四大模块,每个模块都承担着不同的任务,共同构建完整的SLAM框架:

视觉里程计

  • 作用:负责估计机器人当前帧与前一帧之间的相对位姿变化(运动估计)。
  • 关键技术:
    • 特征点法:通过提取图像中的特征点(如ORB特征),进行匹配,并通过几何关系(如基础矩阵、单应矩阵等)计算相对运动。
    • 直接法:利用像素灰度信息直接最小化重投影误差,估计运动。

后端优化

  • 作用:通过全局一致性的方式,优化机器人所有关键帧的位姿和地图点的坐标,减小累计误差。
  • 关键技术:
    • 图优化:将关键帧和地图点建模为图的顶点,运动和观测约束建模为图的边,利用g2o、Ceres等库进行非线性优化。
    • 捆绑调整(Bundle Adjustment, BA):在多帧图像上联合优化相机位姿和地图点坐标。

回环检测

  • 作用:当机器人经过先前访问过的位置时,识别出这一位置,闭合地图中的“环”以消除漂移误差。
  • 关键技术:
    • 基于词袋模型的场景匹配:通过对图像特征描述子的离线训练,快速判断新图像与先前关键帧的相似性。
    • Sim(3)优化:在单目系统中,通过Sim(3)变换同时优化尺度、旋转和位移。

建图

  • 作用:将估计的位姿和地图点信息结合起来,生成稠密或稀疏的地图。
  • 关键技术:
    • 稀疏建图:仅利用特征点构建地图,计算高效但地图表达较为粗糙。
    • 稠密建图:基于深度图或稠密点云生成完整地图,通常使用RGB-D相机。

SLAM问题的数学表述

视觉SLAM本质上是一个优化问题,其数学形式可以描述为:

问题定义

  • 输入:
    • 图像序列(视觉信息)。
    • 可选的其他传感器数据(IMU、激光雷达等)。
  • 输出:
    • 机器人在环境中的轨迹(位姿序列)。
    • 环境地图。

状态表示

  • 相机位姿:
    • 相机在每个时刻的位姿用 T i ∈ S E ( 3 ) \mathbf{T}_i\in SE(3) TiSE(3),其中 T i \mathbf{T}_i Ti包括旋转和平移。
  • 地图点:
    • 环境中3D地图点的坐标用 X j ∈ R 3 \mathbf{X}_j\in\mathbb{R}^3 XjR3 表示。

优化目标

SLAM的目标是优化所有位姿 T i \mathbf{T}_i Ti和地图点 X j \mathbf{X}_j Xj,使得以下误差函数最小化: min ⁡ { T i , X j } ∑ i , j ρ ( ∥ z i j − π ( T i , X j ) ∥ 2 ) \min_{\{\mathbf{T}_{i},\mathbf{X}_{j}\}}\sum_{i,j}\rho\left(\|\mathbf{z}_{ij}-\pi(\mathbf{T}_{i},\mathbf{X}_{j})\|^{2}\right) {Ti,Xj}mini,jρ(zijπ(Ti,Xj)2)

  • z i j z_{ij} zij:相机𝑖i对地图点𝑗的观测。
  • π:投影函数,用于将地图点 X j \mathbf{X}_j Xj投影到相机𝑖的像素平面。
  • ρ:鲁棒核函数,用于抑制异常观测对优化的影响。

实践:视觉SLAM编程基础

安装Linux操作系统

  • 视觉SLAM开发通常在Linux系统下进行(如Ubuntu),因为其支持丰富的开源工具和库。
  • 安装步骤:
    • 下载Ubuntu ISO镜像文件。
    • 制作启动盘并完成安装。
  • 参考连接
    • win乌班图双系统安装(win11、Ubuntu20.04)及安装后的环境、软件配置
    • Ubuntu 20.04.6(一):系统安装(单系统,双系统均可)

使用CMake

  • CMake简介:跨平台的项目构建工具,用于管理和构建C++工程。
  • 使用方法:
    • 编写CMakeLists.txt文件,定义源文件、依赖库、编译选项等。
    • 使用命令cmake生成Makefile,并用make进行编译。
  • 优点:自动化项目管理、支持跨平台构建、易于与第三方库集成。
  • 参考连接
    • 视觉惯性SLAM:二、编译及编译工具

使用库

  • SLAM开发中需要大量的第三方库,常用的有:
    • Eigen:高效的矩阵运算库,用于几何计算。
    • OpenCV:计算机视觉库,用于图像处理和特征提取。
    • Pangolin:轻量级图形显示库,用于可视化。
    • g2o:图优化库,用于SLAM中的后端优化。

使用IDE

  • 推荐的C++开发IDE:
    • CLion:功能强大的CMake集成IDE,适合中大型项目。
    • VSCode:轻量化的文本编辑器,配置C++插件后可用于SLAM开发。
    • Qt Creator:支持GUI开发,适合需要界面的SLAM工具。

总结

视觉SLAM是机器人技术和计算机视觉领域的核心课题,其目标是实现定位与建图的同步。通过“小萝卜”的例子,我们理解了SLAM的基本任务;通过“经典视觉SLAM框架”,我们剖析了视觉里程计、后端优化、回环检测和建图模块的核心功能;通过“数学表述”,我们理解了SLAM问题的本质是一个非线性优化问题;最后,通过“编程基础”,我们掌握了SLAM开发所需的操作系统、工具链、库和IDE。理解这些内容是深入学习和开发SLAM系统的重要基础。


http://www.kler.cn/a/458401.html

相关文章:

  • 获取 Astro Bot AI 语音来增强您的游戏体验!
  • 基本算法——分类
  • [羊城杯 2024]hiden
  • 各个Spring Cloud版本有何主要差异
  • 深入浅出梯度下降与反向传播
  • Unity+Hybridclr发布WebGL记录
  • Pytorch知识框架梳理
  • C# 语法糖集锦
  • 【每日学点鸿蒙知识】子窗口方向、RichEdit不居中、本地资源缓存给web、Json转对象丢失方法、监听状态变量数组中内容改变
  • dede-cms关于shell漏洞
  • Unity3D Huatuo技术原理剖析详解
  • 修改RuoYi框架,并添加新项目
  • 实现一个iOS晃动动画
  • KaiOS 4.0 | DataCall and setupData implemention
  • GAMES101:现代计算机图形学入门-笔记-12
  • 如何强制关闭mac卡死的进程
  • 前端(htmlcss)
  • python爬取网站
  • vue最新源码探索分析
  • git分支与部署环境的关系以及开发规范
  • 【HENU】河南大学计院2024 计算机网络 期末复习知识点
  • MySQL 中存储金额数据一般使用什么数据类型
  • 【每日学点鸿蒙知识】Text填充父控件、Native接收数组、js逻辑不执行问题、UIAbility上下文问题、页面跳转路由栈
  • Apache Doris 创始人:何为“现代化”的数据仓库?
  • 【Lua之·Lua与C/C++交互·Lua CAPI访问栈操作】
  • Mono里运行C#脚本12—load_section_tables