SLAM入坑邀请

很多人对SLAM很恐惧,因为我相信很多人和我的学习路径一样:高等数学->数据结构->C语言->java/python->leetcode算法->大数据->机器学习->深度学习->NLP/CV->SLAM

或许你停在了哪一步,然后开始深入研究这一部分的内容

又或许有人和我一样,一直走了下来,走到了SLAM的门口,但犹豫许久不敢入门

这篇文章的作用或许就是能将我的入门经验分享给你,然后多骗一些人和我共同进行SLAM的学习,独入坑不如众入坑。

一、什么是SLAM

SLAM即是同步定位与地图构建,首先要提醒的是,SLAM并不是一个具体的网络或者一个算法,而是一种概念:希望机器人从未知环境的未知地点出发,在运动过程中通过重复观测到的地图特征(比如,墙角,柱子等)定位自身位置和姿态,再根据自身位置增量式的构建地图,从而达到同时定位和地图构建的目的。

二、SLAM入门要求

SLAM是目前能想到的所有学科的交叉:统计学、线性代数、机器学习、深度学习、计算机视觉、李群代数、机器人系统等,但入门SLAM并不需要你精通这些,如果你能回答的出我下面的问题,你就可以开始SLAM的学习:

1、线性方程 Ax = b的解有哪几种情况?
-- 对于列满秩矩阵,其要么有0个解,要么有1个解
-- 列满秩即是对于m*n矩阵,r(A) = n
-- 行满秩情况总会有解
-- 满秩,即r=m=n,这个我们容易理解其有唯一解"
2、高斯分布的一维形式与多维形式分别是怎么样?
-- 高斯分布:即是随机变量X服从数学期望为μ、方差为σ^2的正态分布
一维形式:

多维度形式:


3、C++ STL你了解吗?
-- C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。
-- C++11 标准    C++11标准:https://blog.csdn.net/FX677588/article/details/70157088

4、基础的统计学知识你会吗?

5、基础机器学习算法推导你会吗?

6、基础深度学习算法理论你会吗(比如语义分割、实例分割、目标检测、识别、轻量化网络、对抗网络,自然是多多益善、但如果只会调包也没有问题)?

三、SLAM第一课

要入门SLAM,以下几个概念是你必须要了解的

1、定位
-- 定位传感器:二维码、GPS、导行轨道、激光雷达、IMU单元、双目相机

2、建图
-- 非常强调未知环境、未知环境才需要建图

3、视觉SLAM
-- 主要考虑的是怎么用相机解决定位和建图问题

4、相机按照工作方式可以分为三类:
-- 单目、双目、RGB-D(深度相机)
  -- 单目相机成本低,但数据是:照片
     -- 缺点是不知道深度(只是三维世界的二维投影)
     -- 必须移动相机才可以估计物体的远近和大小
        -- 估计方法:相机左移图像右移动、远慢近快
     -- 但单目相机有尺度不确定性(本质问题还是无法通过单张图像确定深度)
  -- 为了解决这个问题,人们才会引入双目和深度相机
     -- 因为双目相机可以根据两个相机之间的距离作为基线
        -- 双目相机的主要问题是计算量大,需要GPU加速才能实时
     -- 而深度相机,是可以通过红外结构光或 Time-of-Flight(ToF)原理,像激光传感器那样,通过主动向物体发射光并接收返回的光,测出物体离相机的距离。
        -- 这部分并不像双目那样通过软件计算来解决,而是通过物理的测量手段,所以相比于双目可节省大量的计算量
-- RGB-D 原理较复杂,除了能够采集到彩色图片之外,还能读出每个像素离相机的距离。

四、经典SLAM框架

所谓经典SLAM框架,也就是经过了几十年的发展(是的,这个领域已经有了几十年的历史了)之后,人们总结的最整洁、有效、且使用的步骤与流程,人们认为按照这样的步骤和流程来实现SLAM最为合理。

1、传感器信息读取    

在视觉 SLAM 中主要为相机图像信息的读取和预处理。
-- 如果在机器人中,还可能有码盘、惯性传感器等信息的读取和同步。

2、视觉里程计(VO)    

视觉里程计任务是估算相邻图像间相机的运动,以及局部地图的样子
-- VO 又称为前端(Front End)。

3、后端优化    

后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对它们进行优化
-- 得到全局一致的轨迹和地图。
-- 由于接在 VO 之后,又称为后端(Back End)。

4、回环检测    

判断机器人是否曾经到达过先前的位置。
-- 如果检测到回环,它会把信息提供给后端进行处理。
-- 相当于是后端输入的第二个来源
-- 而这个来源的开启条件是检测到回环(机器人到达过先前的位置)

5、建图    
根据估计的轨迹,建立与任务要求对应的地图。
这个SLAM系统在这些环境已经相当成熟
-- 如果把工作环境限定在静态、刚体,光照变化不明显、没有人为干扰的场景

五、SLAM与智能驾驶的关系

目前的智能驾驶,其实较少用到SLAM技术,原因很简单,目前智能驾驶使用的主要是高精度预制地图+localization技术,并没有特别要求实时性;

但是一旦智能驾驶技术发展到一个新的阶段,需要实时的定位与建图,那么SLAM的优势就会体现出来了;

所以目前来看,我们不如先专注于SLAM技术,专注于怎么提高里程计的精度、怎么提高回环检测的效率、怎么更好的进行后端优化、怎么成熟稳定的建图。

六、资料建议

先声明,可能会有很多更好的资料,我只是提供一些我正在用的,还不错的资料:

[Multiple View Geometry in Computer Vision] 
-- 这本书基本涵盖了 Vision-based SLAM这个领域的全部理论基础,另外建议配合 Berkeley 的课件学习。(更新:这本书书后附录也可以一并读完,包括附带 bundle adjustment 最基本的 levenberg marquardt 方法,newton 方法等)
[Probabilistic Robotics] 
-- 了解概率学是如何解决机器人中的问题的
[State Estimation for Robotics] 
-- 这本书能够帮你很快建立整套关于状态估计理论的框架,同时在三维运动方面,提供了充分但不那么困难的学习途径

欢迎大家共同学习,共同交流,人多的情况下可以建个群交流下


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值