在七月算法报的班,老师讲的蛮好。好记性不如烂笔头,关键内容还是记录一下吧, 课程入口,感兴趣的同学可以学习一下。
-------------------------------------------------------------------------------------------------------------------------------
基础知识的相关教程
需要的知识
Math:高数,线性代数(矩阵论)、概率论;Coding:C++OS:Ubuntu 16.04Reading:English
SLAM : Simultaneous Localization and Mapping;同步定位与建图。SLAM的目的是同步估算出机器人的位姿信息并对环境建图。定位是指确定机器人在哪里;建图是指确定机器人周围的环境如何。
如果要实现机器人的全自动化,SLAM是一个基础的问题。
SLAM问题输入的数据 | 需要解算出的数据 |
•对机器人的控制 𝑈 1:𝑘 = {𝑢 1 , 𝑢 2 , … , 𝑢 𝑘 } •相对局部的观察 𝑍 1:𝑘 = {𝑧 1 , 𝑧 2 , … , 𝑧 𝑘 } | •地图特征 𝑚 = {𝑚 1 , 𝑚 2 , … , 𝑚 𝑘 } •机器人的轨迹 𝑋 1:𝑘 = {𝑥 1 , 𝑥 2 , … , 𝑥 𝑘 } |
问题的特点是机器人的位姿和路标的位置都是世界坐标系下的绝对值,但是所有的测量值都是相对值。
SLAM的难点:
1.机器人的轨迹和地图都是未知的, 对姿态和地图的估计误差会累积;2.多帧检测的路标之间的映射关系未知,映射错误会导致后续的错误。
SLAM的整体框架
包括数据采集、视觉里程计、回路检测、优化及构图。
视觉里程计的作用就是通过连续两帧之间的时差,反向计算出相机位姿变化的情况。
回路检测的作用时通过检测出之前出现过的场景,判断出走过的路径是一个环路,这样可以消除之前轨迹产生的误差。
构图就是构建出周围环境的情况,分为拓扑图、测量图(metric map),其中又包含稀疏图和稠密图。
SLAM的核心有两个部分:
第一部分是估计计算机的姿态(计算机在三维空间中的位置和朝向信息)。第二部分是建立周围环境的三维地图(稀疏或者稠密的三维点云)。