第三章 三维空间刚体运动

主要目标

  1. 理解三维空间的刚体运动描述方式:旋转矩阵、变换矩阵、四元数和欧拉角。
  2. 掌握 Eigen 库的矩阵、几何模块使用方法。
    一、 旋转矩阵
    刚体,它不光有位置,还有自身的姿态。相机也可以看成三维空间的刚体,于是位置是指相机在空间中的哪个地方,而姿态
    则是指相机的朝向。我们要用数学语言来描述它。
    1)点和向量
    点就是空间当中的基本元素,没有长度,没有体积。把两个点连接起来,就构成了向量。向量可以看成从某点指向另一点的一个箭头。
    2)基
    维空间中的某个点的坐标也可以用 R3 来描述。假设在这个线性空间内,我们找到了该空间的一组基(e1, e2, e3),那么,任意向量 a 在这组基下就有一个坐标:

    这里 (a1, a2, a3)T 称为 a 在此基下的坐标。坐标的具体取值,一是和向量本身有关,二是和坐标系(基)的选取有关。
    3)内积和外积
    对于 a, b ∈ R3,通常意义下的内积可以写成:

    其中 ⟨a, b⟩ 指向量 a, b 的夹角。内积也可以描述向量间的投影关系。而外积则是这个样子:

    外积的结果是一个向量,它的方向垂直于这两个向量,大小为 |a| |b|sin ⟨a, b⟩,是两个向量张成的四边形的有向面积。
    对于外积运算,我们引入 ∧ 符号,把 a 写成一个矩阵。事实上是一个反对称矩阵(Skew-symmetric matrix),可以将 ∧ 记成一个反对称符号。这样就把外积 a × b 写成了矩阵与向量的乘法a∧b,把它变成了线性运算。

    4)坐标系间的欧氏变换
    如下图所示的坐标变换。对于同一个向量 p,它在世界坐标系下的坐标 pw 和在相机坐标系下的坐标 pc是不同的。这个变换关系由变换矩阵 T 来描述。变换矩阵由旋转矩阵和平移向量构成。

    欧氏变换由旋转和平移组成。我们首先考虑旋转。设某个单位正交基 (e1, e2, e3) 经过一次旋转变成了 (e′1, e′2, e′3)。那么,对于同一个向量 a(该向量并没有随着坐标系的旋转而发生运动),它在两个坐标系下的坐标为 [a1, a2, a3]T 和 [a′1, a′2, a′3]T。因为向量本身没变,根据坐标的定义,有:

    为了描述两个坐标之间的关系,我们对上述等式的左右两边同时左乘 [eT1 eT2 eT3 ]T,那么左边的系数就变成了单位矩阵,所以:

    5)变换矩阵与齐次坐标

    这是一个数学技巧:我们在一个三维向量的末尾添加 1,将其变成了四维向量,称为齐次坐标。对于这个四维向量,我们可以把旋转和平移写在一个矩阵里面,使得整个关系变成线性关系。该式中,矩阵 T 称为变换矩阵(Transform Matrix)。
    二、实践:Eigen
    输入以下命令进行安装:
    sudo apt-get install libeigen3-dev
    三、旋转向量和欧拉角
    1)旋转向量
    任意旋转都可以用一个旋转轴和一个旋转角来刻画。于是,我们可以使用一个向量,其方向与旋转轴一致,而长度等于旋转角。这种向量称为旋转向量(或轴角/角轴,Axis-Angle),只需一个三维向量即可描述旋转。同样,对于变换矩阵,我们使用一个旋转向量和一个平移向量即可表达一次变换。这时的变量维数正好是六维。
    假设旋转轴为一个单位长度的向量 n,角度为 θ,那么向量 θn 也可以描述这个旋转。从旋转向量到旋转矩阵的转换过程由罗德里格斯公式(Rodrigues’s Formula )表明:

    一个旋转矩阵到旋转向量的转换:

    2)欧拉角
    而欧拉角则提供了一种非常直观的方式来描述旋转——它使用了 3 个分离的转角,把一个旋转分解成 3 次绕不同轴的旋转。
    具体参考:https://blog.csdn.net/sinolover/article/details/90671784
    三、四元数
    1)四元数的定义
    旋转矩阵用 9 个量描述 3 自由度的旋转,具有冗余性;欧拉角和旋转向量是紧凑的,但具有奇异性。而四元数是 Hamilton 找到的一种扩展的复数。它既是紧凑的,也没有奇异性。如果说缺点,四元数不够直观,其运算稍复杂些。
    一个四元数 q 拥有一个实部和三个虚部。

    其中 i, j, k 为四元数的三个虚部。这三个虚部满足以下关系式:

    2)四元数的运算
    四元数 qa, qb 的加减运算为:

    乘法:

    模长:

    共轭:

    逆:

    数乘:

    3)四元数表示旋转
    首先,把三维空间点用一个虚四元数来描述:

    相当于把四元数的 3 个虚部与空间中的 3 个轴相对应。那么,旋转后的点 p′ 即可表示为这样的乘积:

    这里的乘法均为四元数乘法,结果也是四元数。最后把 p′ 的虚部取出,即得旋转之后点的坐标。
    4)四元数到其他旋转表示的转换
    四元数到旋转矩阵:

    四元数到旋转向量的转换公式:

    四、相似、仿射、射影变换
    1、相似变换
    相似变换比欧氏变换多了一个自由度,它允许物体进行均匀缩放,其矩阵表示为:

    2、仿射变换
    仿射变换的矩阵形式如下:

    3、射影变换

    4、常见变换比较

    五、实践:Eigen 几何模块
    • 旋转矩阵(3 × 3):Eigen::Matrix3d。
    • 旋转向量(3 × 1):Eigen::AngleAxisd。
    • 欧拉角(3 × 1):Eigen::Vector3d。
    • 四元数(4 × 1):Eigen::Quaterniond。
    • 欧氏变换矩阵(4 × 4):Eigen::Isometry3d。
    • 仿射变换(4 × 4):Eigen::Affine3d。
    • 射影变换(4 × 4):Eigen::Projective3d。

视觉SLAM十四讲第三讲相关推荐

  1. 视觉SLAM十四讲学习笔记---前三讲学习笔记总结之SLAM的作用、变换和位姿表示

    经过半年学习SLAM相关知识,对SLAM系统有了一些新的认识,故回看以前的学习记录,做总结和校正. 前三讲学习笔记如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉S ...

  2. 视觉SLAM十四讲学习笔记-第三讲-相似、仿射、射影变换和eigen程序、可视化演示

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

  3. 视觉SLAM十四讲学习笔记-第三讲-旋转矩阵和Eigen库

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

  4. 视觉SLAM十四讲学习笔记-第三讲-旋转向量、欧拉角、四元数

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

  5. 视觉 SLAM 十四讲 —— 第十三讲 建图

    视觉 SLAM 十四讲 -- 第十三讲 建图 在前端和后端中,我们重点关注同时估计相机运动轨迹与特征点空间位置的问题.然而,在实际使用 SLAM 时,除了对相机本体进行定位之外,还存在许多其他的需求. ...

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

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

  7. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-三角测量和实践

     专栏汇总 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第 ...

  8. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-对极几何和对极约束、本质矩阵、基础矩阵

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

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

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

  10. 视觉SLAM十四讲学习笔记-第四讲---第五讲学习笔记总结---李群和李代数、相机

    第四讲---第五讲学习笔记如下: 视觉SLAM十四讲学习笔记-第四讲-李群与李代数基础和定义.指数和对数映射_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第四讲-李代数求导与扰动模 ...

最新文章

  1. 如何更好的招聘软件测试人员?
  2. MyBatis日志到底是如何做到兼容所有常用日志框架的?
  3. OSMboxPost()
  4. jsp页面内引入静态html,JSP技术实现动态页面到静态页面的方法
  5. Chapter12(动态内存)--C++Prime笔记
  6. linux进程莫名其妙被kill,Linux运行程序时,程序进程莫名退出(被杀死)
  7. mysql集群集成springboot_springboot配置数据库包括集群下 配置
  8. php程序员述职材料_php程序员述职报告(精选多篇)
  9. 构建之法第四章学习心得
  10. BZOJ1001: [BeiJing2006]狼抓兔子 (最小割)
  11. 探讨【IGE】的源代码【三】。
  12. 基于微信小程序点餐系统的设计与实现
  13. Python打包为exe文件
  14. 在线客服系统解决方案:物流行业
  15. 工银亚洲见证开户详细过程和攻略
  16. 手机必备四款提高工作效率APP,每一个都是黑科技!
  17. Charles 抓包夜神模拟器,实现对App网络请求的监控
  18. 迪士尼超级计算机多少钱,上海迪士尼乐园公布票务调整方案,明年1月9日起实行新票价...
  19. Java研发技术学习路线
  20. VisualStudio20008快捷键大全

热门文章

  1. 概率论简明教程_Chapter-02_最大似然估计
  2. 西门子 PLC 和 AB罗克韦尔 PLC 有什么区别?
  3. linux机顶盒线刷教程,网络机顶盒刷机教程和详细方法,实现软件任意安装,电视免费看...
  4. matlab卷积动画实现
  5. System.Data.SQLite 支持所有(32位、64位的资源下载包)
  6. oracle根据中文获取拼音全拼函数
  7. 酷Q插件dll 加载失败!错误:缺失AppInfo返回的AppID(york.1996.com)对应的文件(-110)
  8. 【原创】VBA学习笔记(4)VBA函数 和 worksheetfunction工作表函数
  9. cad插件_CAD插件燕秀工具箱2.81
  10. 黑马程序员—怎么去黑马?吃住问题解答