视觉SLAM的前段后端最详细的梳理(硕士入门知识框架更新)

本文详细介绍了视觉SLAM(Simultaneous Localization and Mapping)技术的基本原理与最新进展,包括视觉里程计的不同方法、SLAM后端优化技术、单目视觉里程计的初始化、运动估计流程等。此外还探讨了视觉与IMU融合的优势与挑战。

视觉SLAM的组成结构
70%
视觉里程计(VO)
-特征点法 -构建稀疏点云地图

  特征点法提取图像中稀疏的特征点,通过描述子完成帧间匹配,然后根据特征点间 2D 到 2D、2D 到 3D 或是 3D 到 3D 的约束关系使用对极几何、PNP 或 ICP 等算法求解位姿。

Klein G, Murray D. Parallel Tracking and Mapping for Small AR Workspaces[C]// IEEE & Acm International Symposium on Mixed & Augmented Reality. 2008.

  Klein 提出的 PTAM(Parallel Tracking and Mapping)创新性的实现了跟踪与建图过程的并行化,并首次有了前端与后端的概念:前端为跟踪线程,根据获取的图像数据实时估计位姿;后端引入了关键帧机制,实现对地图的非线性优化。但 PTAM 也 存在着应用场景小、特征易跟丢等缺陷。

Mur-Artal R , Montiel J M M , Tardos J D . ORB-SLAM: a Versatile and Accurate Monocular SLAM System[J]. IEEE Transactions on Robotics, 2015, 31(5):1147-1163.

Mur-Artal R , Tardos J D . ORB-SLAM2: An Open-Source SLAM System for Monocular, Stereo, and RGB-D Cameras[J]. IEEE Transactions on Robotics, 2017:1-8.

  2015 年 Mur-Artal 等人提出的 ORB-SLAM,相较于 PTAM 的双线程,它采用了并行跟踪,局部建图,闭环检测三线程:

  并行跟踪线程用于完成基于模型评分的地图初始化、特征匹配及位姿估计;

  局部建图部分提出了一个宽进严出的关键帧筛选策略,并对构建的局部地图进行优化;

  闭环检测使用词袋模型判断当前场景是否曾经出现过,并实现了对全局地图进行优化,对于要求全局一致性的应用场景有着优秀的效果。

  目前在基于特征点法的 SLAM 系统中,ORB-SLAM 中被认为非常稳定与出色,后续的一些研究也以它为标准。

-直接法 -构建稠密或半稠密的地图 --需要使用 RGB-D 传感器

  直接法引入了光流跟踪的思想,在光度不变假设的基础上,以最小化光度误差为优化目标, 对位姿变量进行求解。

Engel J, Schöps T, Cremers D. LSD-SLAM: Large-Scale Direct Monocular SLAM[J]. 2014.

Engel J, Koltun V, Cremers D. Direct Sparse Odometry.[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 2018, 40(3):611-625.

  Engle 等人于 2014 年提出 的 LSD-SLAM(Large Scale Direct Monocular SLAM),实现了一种 CPU 级别的单目半稠密地图重建,并且在单目深度估计上考虑到三角化的不确定性而采用了一种新颖的滤波形式 。

  LSD-SLAM 对于相机的快速运动、曝光变换鲁棒性较低,2016 年 Engle 等人提出了另一个单目稀疏 直接法视觉里程计 DSO(Direct Sparse Odometry),针对直接法易受光照干扰的缺点,DSO 采 用光度标定模型,它在优化中会动态的估计光度参数,从而使得算法对曝光变换更加鲁棒。

Forster C , Pizzoli M , Scaramuzza D . SVO: Fast Semi-Direct Monocular Visual Odometry[C]// IEEE International Conference on Robotics & Automation. IEEE, 2014.

  SVO(Semi-direct Visual Odometry)是由 Forster 等人于 2014 年提出的半直接法视觉里程计, 应用在携带俯视视角单目相机的无人机平台。因为它首先对图像提取角点,然后再对角点采用 直接法求位姿,所以称之为半直接法。SVO 在纹理丰富的平面场景中有着较好的定位精度,并且能达到极快的运行速度。

视觉里程计–总结:

  特征点法适应于帧间的大运动,即只要帧间存在视野重叠就能通过特征描述子进行全局匹配。

  直接法的本质是进行一个最优化,当帧间存在大运动或者光照变换、 图像模糊等情况,易陷入局部最优或是丢失对地图点的跟踪。

  因此特征点法具有更好的鲁棒性, 然而特征点、描述子的提取会占据大量时间,在保证点个数、匹配效率的情况下就很难达到实时性,目前特征点法在保证实时性的情况下多使用 ORB 特征提取算法。

  直接法能利用图像中的更多的信息,包括一些不能提取特征点的区域,在 GPU 下能够实现稠密重建,而稀疏直接法能在 CPU 上达到一个较优的实时性。

SLAM 后端研究

  SLAM 问题的数学描述通常为运动方程与观测方程两部分,对于不同的传感器,不同应用场景,分别有着不同的参数化方程及状态量。本质上可将后端优化看作一个状态估计问题:如何根据带有噪声的观测求系统状态的最优估计,在实现方式上分为滤波器和非线性优化法。

滤波器法

  滤波器法假设状态间具有马尔科夫性,即当前时刻状态仅于上一时刻状态有关。基于滤波器法的 SLAM 并没有明显的区分出后端的概念,其核心思想可通过贝叶斯滤波模型进行统一描述,即对状态量不断的进行迭代与更新。

  如果运动和观测方程属于线性方程,且状态与噪声服从高斯分布, 即可得到卡尔曼滤波。 对于非线性的系统, Smith 等人通过扩展卡尔曼滤波器 (Extended Kalman Filter,EKF)解决该问题,对系统方程进行一阶线性近似。

  对于视觉 SLAM, 地图点以及位姿量随着系统运行会越来越多,那么 EKF 需要维护和更新的均值与协方差规模随之也会越来越大,则会大量占用存储空间,因此不适用于大规模环境。同时,SLAM 的运动与观测通常具有严重的非线性,线性近似仅在小范围内成立,而较远处则会造成严重的非线性误差。

Sim R , Elinas P , Little J J . A Study of the Rao-Blackwellised Parti

### 视觉SLAM后端实现与优化 #### 1. 后端概述 视觉SLAM(Simultaneous Localization and Mapping)系统的后端负责处理前端提供的数据,通过一系列复杂的计算来估计相机的姿态和构建环境的地图。这一部分通常涉及到非线性优化问题的解决方法[^1]。 #### 2. 束调整(Bundle Adjustment, BA) 束调整是一种用于精化三维结构和摄像机运动的技术。它通过对所有观测到的特征点及其对应的图像坐标进行联合小二乘拟合,从而获得更精确的位置信息。在基于图优化框架下的视觉SLAM算法里,BA扮演着至关重要的角色[^3]。 ```python from scipy.optimize import least_squares def bundle_adjustment(object_points, image_points, camera_matrix): """ Perform Bundle Adjustment to refine the object points and camera poses. Args: object_points (list of tuples): Initial estimates of 3D point positions. image_points (list of lists of tuples): Corresponding 2D projections on images. camera_matrix (numpy.ndarray): Camera intrinsic parameters matrix. Returns: optimized_object_points (list of tuples), optimized_camera_poses (list of matrices) """ # Define residual function here... residuals = lambda params: compute_residuals(params) result = least_squares(residuals, initial_guess) return parse_result(result.x) optimized_points, optimized_poses = bundle_adjustment(initial_3d_points, observed_image_points, K) ``` #### 3. 图优化(Graph Optimization) 另一种常见的后端技术是图优化,其中节点代表关键帧或路标,边则表示它们之间的相对变换关系。为了提高效率并减少内存消耗,可以采用滑动窗口策略只考虑近的关键帧来进行局部地图更新[^2]。 ```cpp #include "g2o/core/sparse_optimizer.h" using namespace g2o; SparseOptimizer optimizer; // Add vertices representing keyframes or landmarks... EdgeSE3* edge = new EdgeSE3(); edge->vertices()[0] = vertex_from; // From a previous pose edge->vertices()[1] = vertex_to; // To current pose estimate optimizer.addEdge(edge); optimizer.initializeOptimization(); optimizer.optimize(10); // Optimize with max iterations set to 10 ``` #### 4. 多模态融合(Multi-modal Fusion) 除了纯视觉输入之外,还可以结合其他类型的传感器如IMU(Inertial Measurement Unit),形成更加鲁棒可靠的定位方案——即VIO(Visual-Inertial Odometry)[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值