【视觉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操作系统

使用CMake

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

使用库

  • 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系统的重要基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值