目录

一、SLAM是什么

二、SLAM技术框架

三、SLAM优秀开源方案

一、SLAM是什么

SLAM(simultaneous localization and mapping)同时定位与建图、同时定位与地图构建

当某种移动设备(如机器人、无人机、手机、汽车等)
从一个未知环境里的位置地点出发
在运动过程中通过传感器(如激光雷达、摄像头等)观测自身位置、姿态、运动轨迹等
再根据自身的位置进行增量式的地图构建
从而达到同时定位和地图构建的目的

二、SLAM技术框架

SLAM传感器

激光(2d laser;3d laser)
视觉(单目、双目、RGB-D相机、全景相机)

三、SLAM优秀开源方案

稀疏地图
ORB SLAM v2 https://github.com/raulmur/ORB_SLAM2

半稠密地图
LSD SLAM (单双目、RGB-D) https://github.com/tum-vision/lsd_slam
DSO (单目) https://github.com/JakobEngel/dso

稠密地图
Elastic Fusion (RGB-D) https://github.com/mp3guy/ElasticFusion
Bundle Fusion (RGB-D) https://github.com/niessner/BundleFusion
InfiniTAM v3 (RGB-D) https://github.com/victorprad/InfiniTAM

多传感器融合
VINS-Fusion (单双目+IMU) https://github.com/HKUST-Aerial-Robotics/VINS-Fusion
OKVIS (单双目+IMU) https://github.com/ethz-asl/okvis
Cartographer (LIDAR + IMU) https://github.com/googlecartographer/cartographer

四、功能包

现在有比较多的现成的功能包可以进行学习和二次开发:

gmapping:
实时构建室内地图,在构建小场景地图所需的计算量较小且精度较高。相比Hector SLAM对激光雷达频率要求低、鲁棒性高(Hector 在机器人快速转向时很容易发生错误匹配,建出的地图发生错位,原因主要是优化算法容易陷入局部最小值);而相比Cartographer在构建小场景地图时,Gmapping不需要太多的粒子并且没有回环检测因此计算量小于Cartographer而精度并没有差太多。但是,不适合构建大场景地图,并且没有回环检测,因此在回环闭合时可能会造成地图错位,虽然增加粒子数目可以使地图闭合但是以增加计算量和内存为代价,不能像Cartographer那样构建大的地图。

hector_slam:
设计初衷Hector主要用于救灾等地面不平坦的情况,因此无法使用里程计,特点是用IMU解决了激光的运动畸变问题。虽然系统不提供明确的循环关闭能力,但对于许多真实世界场景来说它足够准确。​​​​​​​

cartographer:
累计误差较前两种算法低,能天然的输出协方差矩阵,后端优化的输入项。成本较低的雷达也能跑出不错的效果。​​​​​​​是Google开源的一个ROS系统支持的2D和3D SLAM(simultaneous localization and mapping)库。

rgbdslam:
RGBD SLAM属于视觉SLAM中的一种,使用的RGBD传感器包括zed(双目立体,适用于室外)、Kinect(结构光,仅限室内)、Kinect v2(TOF,主要用于室内)等。RGBD SLAM是SLAM中难度最小的,当然其具体实现也很复杂,对于不同的深度相机以及不同的应用场景,其实现也需要作出相应调整。RGBD SLAM可以应用在以下领域:室内三维建模、AR/VR、机器人室内定位导航、高精地图、自动驾驶、无人机避障与测图等。

ORB_SLAM:
它是一个完整的 SLAM 系统,包括视觉里程计、跟踪、回环检测,是一种完全基于稀疏特征点的单目 SLAM 系统,同时还有单目、双目、RGBD 相机的接口。其核心是使用 ORB (Orinted FAST and BRIEF) 作为整个视觉 SLAM 中的核心特征。​​​​​​​

move_base:
这是ROS下关于机器人路径规划的中心枢纽。它通过订阅激光雷达、map地图、amcl的定位等数据,然后规划出全局和局部路径,再将路径转化为机器人的速度信息,最终实现机器人导航。
amcl:
amcl是一种机器人在2D中移动的概率定位系统。amcl模块是ROS的导航定位模块,amcl也叫自适应蒙特卡罗定位,amcl通过订阅scan、map和tf信息,发布出机器人的pose,以供move_base使用,该方法使用粒子滤波器来针对已知地图跟踪机器人的位姿。
......