datetime:2023/10/09 11:03
author:nzb

该项目来源于大佬的动手学ROS2

SLAM技术概述

第一节中我们知道,要解决机器人自主导航问题就需要有感知(建图和定位)参与,通过感知输出机器人当前环境的地图信息和位置。而本节要讲的SLAM就是解决地图和定位问题的。

1. SLAM是什么

SLAM是同步定位与地图构建(Simultaneous Localization And Mapping)的缩写。

先通过一个视频直观了解一下

视频中随着机器人的移动,机器人的传感器获取到了环境信息,然后完成对博物馆地图的构建。

有小伙伴可能会问,只看到建图没看到定位呀。细心观察可以发现建图的过程中,其实一直都在计算机器人的位置。

2. SLAM如何解决建图定位问题

机器人通过自身传感器数据处理进行位置估计,同时通过不断移动完成对整个未知环境的地图构建。这就是SLAM解决的问题。

那又是如何解决的呢?SLAM实现的方案很多,但是几个比较关键的技术如下:

  1. 传感器感知 通过各类传感器实现对环境的感知,比如通过激光雷达获取环境的深度信息。同时可以通过传感器融合来提高位置估计的精度,比如融合轮式里程计、IMU、雷达、深度相机数据等。

  2. 视觉/激光里程计 基本原理是通过前后数据之间对比得出机器人位置的变化。

  3. 回环检测 判断机器人是否到达之前到过的位置,可以解决位置估计误差问题,建图时可以纠正地图误差。

经典视觉SLAM结构

经典视觉SLAM结构

视觉SLAM主要是以视觉为传感器,解决定位与建图的问题,其主要可以分为前端、后端、回环检测和建图等四个部分,其中各个部分的作用分别为:

  • (1)前端:前端也称为视觉里程计,其作用是接受传感器(相机)的数据,通过计算得到两帧图像之间传感器(相机)的位姿变化,并将此变化传递给后端进行优化。
  • (2)后端:后端的作用是接受前端传过来的位姿数据,从一系列带噪声的位姿数据中估计最优的轨迹与地图。
  • (3)回环检测:由于后端的估计总避免不了误差,经过较长一段的时间还是会有漂移,为了保证相机在经过同一点的时候,预测的轨迹点与之前是重合的,所以需要通过回环检测检测图像的相似性,将相同的位姿点约束到同一点,减少漂移的误差。
  • (4)建图:建图部分是为了构建周围环境的地图,表达“我周围的环境如何”。

经过上述的四个部分,机器人就能在一个陌生的环境中知道“我在哪”以及“我周围的环境如何”,这样机器人就能完成一些高层次的任务,如导航、规划等。

3.SLAM算法分类

从算法的对数据的处理方式上看,目前常用的SLAM开源算法可以分为两类

1.基于滤波,比如扩展卡尔曼滤波(EKF: Extended Kalman Filter)、粒子滤波(PF: Particle Filter)等。

ROS中的gmapping、hector_slam算法都是基于滤波实现的。

2.基于图优化,先通过传感器进行构图,然后对图进行优化。

目前比较主流的是图优化的方法,Cartographer就是基于图优化实现的。图优化相对于滤波,不用实时的进行计算,效率更高,消耗的资源更少,所以在实际场景中使用的更多。

4.SLAM开源库

4.1. Cartographer

github地址:https://github.com/cartographer-project/cartographer

Cartographer是一个可跨多个平台和传感器配置以2D和3D形式提供实时同时定位和建图(SLAM)的系统。

4.2. ORB_SLAM2(纯视觉)

github地址:https://github.com/raulmur/ORB_SLAM2

ORB-SLAM2适用于单目,双目和RGB-D相机的实时SLAM库,用于计算相机轨迹和稀疏3D重建

4.3 VINS

github地址:https://github.com/HKUST-Aerial-Robotics/VINS-Mono

VINS-Mono是单目视觉惯性系统的实时SLAM框架。它使用基于优化的滑动窗口配方来提供高精度的视觉惯性测距。

5.总结

本节课我们简单介绍了下感知部分的技术担当SLAM,并对常用的开源库进行介绍,下一节我们就对其中的Cartograpger开源库进行介绍和安装。

参考文章:


results matching ""

    No results matching ""