SLAM:同时定位和建图(Simultaneous Localization and Mapping)。

希望机器人从未知环境的未知地点出发,在运动过程中通过重复观测到的地图特征(比如,墙角,柱子等)定位自身位置和姿态,再根据自身位置增量式的构建地图,从而达到同时定位和地图构建的目的。

所用传感器:激光雷达,相机(单目,双目,RGBD,事件)

SLAM框架:
传感器信息提取—前端视觉里程计—后端优化—建图
传感器信息提取—回环检测—后端优化(这两条线路之间形成一个闭环)

传感器信息提取:SLAM中传感器信息的提取和预处理,往往是多种传感器信息的融合。

前端视觉里程计(VO):通过估算相邻图像间的关系来推导相机的运动,以及局部地图的样子。

后端优化:接受不同时刻视觉里程计测量的相机位姿以及回环检测的信息,并对他们进行优化(往往是非线性优化),进而得到全局地图和轨迹。

回环检测:用于判断机器人是否到达先前预定的位置,用于解决位置估计随时间漂移的问题。

建图:根据估计的轨迹,建立相应要求的地图(栅格地图,拓扑地图,点云地图,网格地图)。

综上,定位与建图便完成了。

SLAM数学表达
此处分为4个部分进行阐述:运动方程及李代数优化,观测方程,非线性优化。

**1. 运动方程:**从K-1时刻运动到K时刻,位姿X变化的数学表示。
可以表述为一个方程:X_k = F(X_(k-1), U_k, W_k)
其中U_k表示传感器输入,W_k表示过程中的噪声,F往往表示非线性函数。

为了进一步从数学角度来理解空间变换,需要了解一下旋转矩阵、变换矩阵。

1.1 旋转矩阵
我们用一个3X1的矩阵来表示物体的位置,3X3的矩阵来表示物体的姿态。
物体在空间里的运动可以分解为平移加旋转,平移操作只需要坐标的简单相加,旋转则涉及到坐标系的变换,下面对旋转矩阵进行分析:
设某个单位正交基(e1,e2,e3) 经过一次旋转,变成了(e1, e2, e3)。那么,对于同一个向量a(该向量并没有随着坐标系的旋转而发生运动),它在两个坐标系下的坐标为[a1, a2, a3]T 和[a1, a2, a3]。根据坐标的定义,有:

上面等式左右同乘以[a1, a2, a3`]T,变成:

我们把R称为旋转矩阵,它描述了旋转前后同一个向量的坐标变换关系。通过旋转矩阵,我们便可以求解物体的旋转变换了。

1.2 变换矩阵
有了旋转矩阵和平移矩阵,便可以描述一个物体的空间变换了,不过还有一个遗憾,便是操作的复杂性,因为目前变换前后的坐标不是一个线性关系,而是两次变换(平移和旋转)。为了使其变为一次线性操作,我们提出了变换矩阵的概念:
将平移矩阵和旋转矩阵按照如下规律合在一起,便称之为变换矩阵T:

,易知,后式成立:

式中[a, i]T为齐次坐标(四维向量)。

如此,变换前后的坐标便成了线性关系。

但是,这样的表示还不够,因为旋转矩阵一共有9个量,但是它只描述了3个自由度的旋转,这便产生了冗余。同理,变换矩阵有16个量,但只描述了6个自由度。于是,我们就寻找更加紧凑的表达。

书中给出了很多种表达,如旋转向量、欧拉角和四元数等,但是由于前两种三维向量描述方式都带有奇异性(所谓奇异性,即在某些情况下这种描述方式不管用),所以常用的还是四元数,此处仅介绍一下四元数:

四元数是一种类似于复数的代数,由四个部分组成,即是紧凑的,也没有奇异性。
一个四元数q 拥有一个实部和三个虚部。q = q0 + q1i + q2j + q3k;
其中i; j; k 为四元数的三个虚部。这三个虚部满足关系式:

假设某个旋转是绕单位向量n = [nx; ny; nz]T 进行了角度为 theta 的旋转,那么这个旋转的四元数形式为:

具体表示:假设一个空间三维点p = [x; y; z],以及一个由轴角n; theta 指定的旋转。三维点p 经过旋转之后变成为p′。如果使用矩阵描述,那么有p′ = Rp。如果用四元数描述旋转:
首先,把三维空间点用一个虚四元数来描述: p = [0; x; y; z]
用四元数q 表示这个旋转:

旋转后的点p′ 即可表示为这样的乘积:

至此,我们已经可以用四元数和一个平移矩阵来表示物体的空间运动了。

2. 运动方程的李代数优化

目前,我们已经知道了三维世界中刚体运动的表示方式,但是在SLAM 中,除了表示之
外,我们还要对它们进行估计和优化。因为在 SLAM 中位姿是未知的,而我们需要解决什
么样的相机位姿最符合当前观测数据这样的问题。

一种典型的方式是把它构建成一个优化问题,求解最优的R; t,使得误差最小化。

但是,由于旋转矩阵自身是带有约束的(正交且行列式为1)。所以它们作为优化变量时,会引入额外的约束,使优化问题变得困难。于是我们提出了通过李群——李代数间的转换关系,把位姿估计变成无约束的优化问题,简化求解方式。

李群:下节再讲,好累啊,感觉在做无用功···

3. 观测方程:在X_k位置上观测到路标点Y_i时,产生的观测数据Z_(k,j).
Z_(k,j) = H(Y_i, X_k, V_(k,j))
其中V_(k,j)表示此时的噪声

视觉SLAM十四讲:运动方程相关推荐

  1. 视觉SLAM十四讲(2):初识SLAM

    这一讲主要介绍视觉SLAM的结构,并完成第一个SLAM程序:HelloSLAM. 目录 2.1 小萝卜的例子 单目相机 双目相机 深度相机 2.2 经典视觉SLAM框架 2.3 SLAM问题的数学表述 ...

  2. 视觉SLAM十四讲学习笔记-第六讲学习笔记总结(1)---非线性优化原理

    第六讲学习笔记如下: 视觉SLAM十四讲学习笔记-第六讲-非线性优化的状态估计问题_goldqiu的博客-CSDN博客 ​​​​​​视觉SLAM十四讲学习笔记-第六讲-非线性优化的非线性最小二乘问题_ ...

  3. 视觉SLAM十四讲学习笔记-第六讲-非线性优化的状态估计问题

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

  4. 视觉SLAM十四讲学习笔记-第二讲-初识SLAM

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 "定位"和"建图",可以看成感知的"内外之分". ...

  5. 【视觉SLAM入门】一些关于视觉SLAM十四讲的重要基础概念

    文章目录 高翔. *视觉SLAM十四讲 从理论到实践*. 电子工业出版社, 2017. Print. 第二章:初识SLAM 第三章:三维空间刚体运动 第四章:李群与李代数 第五章:相机与图像 第六章: ...

  6. 视觉SLAM十四讲笔记-第三讲 刚体运动

    目录 1.两条基本公式:运动方程和观测方程 2.点与坐标系: 3. 旋转矩阵 3.1 两个条件: 4.旋转向量和欧拉角 4.1 旋转向量(Rotation Vector,又称角轴/轴角(Angle A ...

  7. 视觉SLAM十四讲学习记录 第五讲

    之前第四讲的地址 以及第四讲习题的地址 第五讲 相机与图像   前面两讲中,我们介绍了"机器人如何表示自身位姿"的问题,部分地解释了SLAM经典模型中变量的含义和运动方程部分.本讲 ...

  8. 【视觉SLAM十四讲】第一章理论详解

    文章目录 第一讲 概述与预备知识 SLAM是什么 室内/室外定位 稀疏-半稠密重建 稠密重建 SLAM可以用在哪些地方? **作业1.** SLAM会在哪些场合中⽤到?⾄少列举三个⽅向. SLAM: ...

  9. 《视觉SLAM十四讲 第二版》笔记及课后习题(第七讲)

    读书笔记:视觉里程计1 之前的内容,介绍了运动方程和观测方程的具体形式,并讲解了以非线性优化为主的求解方法.从本讲开始,我们结束了基础知识的铺垫,开始步入正题:按照第二讲的内容,分别介绍视觉里程计.优 ...

  10. 视觉SLAM总结——视觉SLAM十四讲笔记整理

    视觉SLAM总结--视觉SLAM十四讲笔记整理 说明 基础知识点 1. 特征提取.特征匹配 (1)Harris (2)SIFT (3)SUFT (4)ORB (5)特征匹配 2. 2D-2D:对极约束 ...

最新文章

  1. 鼠标按键获取感兴趣区域
  2. centos7 选定默认启动内核,及删除无用内核
  3. Android中图片的三级缓存策略
  4. ASP.NET MVC 学习6、学习使用Code First Migrations功能,把Model的更新同步到DB中
  5. 【小白学习C++ 教程】九、C++中字符型、字符串和转义字符
  6. 算法复杂度为O(N) 的排序算法
  7. c#编译时提高兼容性_幻像类型提高了编译时的安全性
  8. 30多岁的男人是创业,还是选择找个踏实的工作?
  9. java 封装log4j_Java项目 切片实现log4j的终极封装
  10. UVA11313 Gourmet Games【数学】
  11. training test validation 各有其用,实践中有了体会
  12. Java数据库的介绍和使用
  13. 30分钟!用Django做一个迷你的Todolist!下篇!
  14. 穿越熊市?用 Python 自制指数估值图
  15. ESET 杀毒软件企业版
  16. 20191223-20191227风险指标的学习总结
  17. 单片机实现跑马灯c语言程序,用单片机编写几种跑马灯程序
  18. Serverless之Knative部署应用实例;
  19. 从零开始构建VUE 客户端和服务端SSR项目
  20. 宝塔Linux面板操作命令使用大全 – 宝塔面板

热门文章

  1. (附源码)ssm医务志愿者管理系统 毕业设计 100910
  2. 口袋西游150服务器维护,口袋西游版本更新披露 幽冥界场景首曝
  3. 四大城市卖地3671亿元逼平去年 北京同比暴涨40%
  4. python中格式化输出是什么意思_python中的格式化输出用法总结
  5. 蛋白质的屠呦呦和粗纤维的黄晓明
  6. R902520808、AA10VSO140DRS/32R-VPB22U00E液压变量柱塞泵
  7. 不看后悔系列:强烈推荐的一款截图神器
  8. 人工智能第四章第四丶五和六节知识总结
  9. 远程访问服务器Jupyter Notebook的两种方法
  10. DAO,除了协议、社交、媒体、服务之外还能发展哪个领域?