SLAM自学笔记(一)

博主本人于大二时大创选题做无人机SLAM,但是当时每个队员都在忙其他事,于是就只是草草水过成功结项了。现已大四,毕设再次想做于无人机SLAM有关的项目,遂重新学起以扎实功底,实事求是。

主要参考为《视觉SLAM十四讲》(第二版)
书中源码 https://github.com/gaoxiang12/slambook2

所需基础:高数线代概率论、C++、Linux基础
第一讲:预备知识
需再深入学习C++中的STL,C++11标准,学习Vim(但只用作文本编辑器,不建议用成IDE)

第二讲:初识SLAM
传感器:携带在机器人本体上的传感器(如激光传感器,相机,轮式编码器(测量轮子转动的角度),惯性测量单元IMU(测量运动的角速度和加速度))比安装于环境中的(如导轨、二维码标志等)更通用,且通常都是测量间接物理量而不是直接的位置数据。

相机:单目Monocula,双目Stereo,深度RGB-D

  • 单目相机

必须移动相机才能估计它的运动Motion,同时估计场景中物体的远近和大小(称为结构Structure),利用物体在图像上的运动形成的视差(近处物体移动块远处移动慢)来定量判断物体远近(但仍为相对值)。单目估计的轨迹和地图 与真实轨迹和地图相差一个因子(成为尺度Scale),无法仅凭图像确定尺度——尺度不确定性(Scale Ambiguity)加粗样式

  • 双目相机

两目之间的距离(称为基线Baseline)已知。能测到的深度范围与基线有关。基线距离越大,能测到的物体就越远
需要大量计算才能不太可靠地估计每个像素点的深度。不依赖其他传感设备——既可用在室内也可用在室外。需要大算力(常用GPU和FPGA加速)

  • 深度相机

通过红外结构光或ToF原理,主动发射光并接收返回的光,测出物体与相机的距离。比起双目可以节省大量算力,但存在测量范围窄,噪声大,视野小,易受日光干扰,无法测量透射材质等问题。

SLAM不是一个算法,而是一个完整的算法框架。

  • 经典视觉SLAM框架

传感器信息读取→前端视觉里程计→后端(非线性)优化→建图
        ↓                            ↑
    回环检测 →→→→→→→→→→→→

  1. 传感器信息读取
    在视觉SLAM中主要是相机图像信息读取&预处理。若为机器人,还可能有码盘、IMU等信息的读取和同步

  2. 前端视觉里程计(Visual Odometry , VO)
    估算相邻图像间相机的运动,以及局部地图的样子。称为前端(Front End)
    (叫里程计是因为和真实的里程计一样,都是只计算相邻时刻的运动,而和过去的信息没有关联,仅有短时记忆(如5~10帧))
    仅通过VO来估计轨迹,将不可避免地出现**累计漂移(Accumulating Drift)**由于每次估计都会有一定误差,先前时刻的误差会传递到下一时刻。
    因此需要回环检测——把机器人回到原始位置的事情检测出来,后端优化——根据回环检测的信息,校正整个轨迹的形状。
    前端与计算机视觉更相关,研究图像的特征提取与匹配等

  3. 后端(非线性)优化(Optimization)
    后端接收不同时刻VO测量的相机位姿,以及回环检测的信息,对它们进行优化,得到全局一致的轨迹和地图。后端(Back End)主要指处理SLAM过程中的噪声问题。**SLAM本质:对运动主体自身和周围环境空间不确定性的估计
    后端与滤波和非线性优化算法有关。**为解决SLAM问题,需要状态估计理论,把定位和建图的不确定性表达出来,再采用滤波器或非线性优化,估计状态的均值和不确定性(方差)

  4. 回环检测(Loop Closure Detection)
    判断机器人是否达到过先前的位置。若检测到回环,它会把信息提供给后端进行处理。主要解决位置估计随时间漂移的问题

  5. 建图(Mapping)
    根据估计的轨迹,建立与任务要求对应的地图。
    地图可分为度量地图(Metric Map)和拓扑地图(Topological Map)

度量地图 强调精确表示地图中物体的位置关系,通常用稀疏(Sparse)与稠密(Dense)进行分类。

拓扑地图 强调地图元素之间的关系,拓扑是一个图,由节点和边组成,只考虑节点间的连通性。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值