视觉Slam笔记I

第二讲-三位空间刚体运动

点与坐标系:

基础概念:

  • 坐标系:左手系和右手系。右手系更常用。定义坐标系时,会定义世界坐标系,相机坐标系,以及其他关心对象的坐标系。空间中任意一点可由空间的基的线性表出。

  • 加减法:用坐标描述更方便。

  • 内积:点乘得数,即

  • 外积:叉乘得向量,即右手系下,得到按照右手定则获取的向量。

  • 坐标系间的变换:

    通过平移(向量的加减)和旋转(有多种描述方式,见下)

  • 2D情况:二维坐标点表示位置+一个旋转角表示朝向。

  • 3D情况:三维坐标点表示位置+一个旋转角(角度间的变换使用旋转,旋转方式有多种,见下)。

旋转矩阵:(描述旋转的第一种方式)

坐标系 (e_1,e_2,e_3)经过旋转变成 (e'_1,e'_2,e'_3),在三维空间中,向量 a保持不动,那么如何表出它在 (e'_1,e'_2,e'_3)下的坐标:

  1. 线性表出法向量 a坐标:两坐标系实质是分别用两组不同的基去表示同一个点,则两者的线性组合是相等的:
  2. 左右两边同时左乘 (e_1,e_2,e_3)的转置,得到:
  • R即为旋转矩阵
  • 性质:
    • R是一个正交矩阵(矩阵的逆即矩阵的转置,或转置×本身即为一个单位矩阵)。
    • R的行列式值为1。
  • 满足上述性质的矩阵都可以称为旋转矩阵,使用集合表示: ,又称特殊正交群SO(3)。
  • 固定表示方式(下标顺序):且满足矩阵关系:

因此,空间中不同坐标系下点坐标的变换可以使用:即旋转+平移的形式完全描述

  • 理论依据:欧拉定理,刚体在三维空间中的一般运动,可分解为刚体上方某一点的平移,以及绕经过此点的旋转轴的转动。

但是,这种表示方式在多次进行变换时会有不便(),因此使用增广的方式进行表示:

  • 其中,称为变换矩阵,的形式称为齐次坐标。
  • 齐次坐标性质:齐次坐标乘上任意非0常数时仍表达同一坐标
  • 变换矩阵的集合:称为特殊欧式群SE(3):

旋转向量和欧拉角:

旋转矩阵在实际中更常用,但这些概念也是需要清楚的。

旋转矩阵R是一个3×3的矩阵,有九个元素,但仅有三个自由度,也就是存在描述方式上的冗余,那么能否以更少的元素表达旋转?

刚体旋转存在一个转轴(向量),还有转过的角度,于是想用角度乘以向量(单位化过后)的形式去描述旋转。

旋转向量
  • 一个向量,方向为旋转轴方向,长度为转过的角度。(单位向量乘角度大小)

  • 又称角轴/轴角。

  • 罗德里格斯公式可以将旋转向量(n,theta)转换成旋转矩阵R:

  • 旋转矩阵R也可以转换成旋转向量(n,theta):n是特征向量。

欧拉角
  • 将旋转分解成三个方向上的转动,常用顺序为yaw-pitch-roll(也就是绕Z-Y-X方式转,注意 ,不同地方在绕Z转之后,所绕的Y轴可能是原来的Y轴,也可能是转动后的Y轴)
  • 万向锁(Gimbal Lock):欧拉角存在奇异性(特定值下,旋转的自由度减1)
  • 在pitch方向旋转完毕后,roll方向旋转和yaw方向旋转是重合的。由此,欧拉角不适合插值或迭代,故不常用。

四元数:

吸取了旋转矩阵和旋转向量、欧拉角的优点,是一种优秀的描述方式。

  • 2D情况下,可以用单位复数表达旋转:

\[z=x+iy=\rho e^{i\theta}
\]

  • 用z乘以i,相当于旋转了90度(),乘-i转动-90度。

在三维情况下,四元数可作为扩充定义的复数

  • 特点1:有三个虚部+一个实部

  • 特点2:虚部之间存在关系:

  • 单位四元数可以表达三维空间的旋转:

  • 四元数也能定义很多运算:

  • 四元数转换成旋转向量:

  • 旋转向量转换成四元数:

  • 用四元数表示旋转:

Slam笔记I的更多相关文章

  1. 非滤波单目视觉slam笔记1

    非滤波单目视觉slam 主要分为以下8部分 数据类型 数据关联 初始化 位姿估计 地图维护 地图生成 失效恢复 回环检测 数据类型 直接法(稠密,半稠密) 基本原理是亮度一致性约束,\(J(x,y) ...

  2. SLAM笔记

    1.matrix.preTranslate()和matrix.postTranslate()的区别 matrix.preTranslate(matrix_1); matrix.postTranslat ...

  3. ROS_RGB-D SLAM学习笔记--室内环境测试

    ROS_RGB-D SLAM学习笔记 RTAB-Map's ros-pkg. RTAB-Map is a RGB-D SLAM approach with real-time constraints. ...

  4. Learning ROS for Robotics Programming Second Edition学习笔记(十) indigo Gazebo rviz slam navigation

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 moveit是书的最后一章,由于对机械臂完全不知,看不懂 ...

  5. Learning ROS for Robotics Programming Second Edition学习笔记(三) indigo rplidar rviz slam

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  6. SLAM学习笔记

    ORB_SLAM2源码: 获得旋转矩阵,来自这里:http://www.cnblogs.com/shang-slam/p/6406584.html 关于Covisibility图来自:http://b ...

  7. ROS进阶学习笔记(11)- Turtlebot Navigation and SLAM - ROSMapModify - ROS地图修改

    ROS进阶学习笔记(11)- Turtlebot Navigation and SLAM - 2 - MapModify地图修改 We can use gmapping model to genera ...

  8. 三维重建7:Visual SLAM算法笔记

    VSLAM研究了几十年,新的东西不是很多,三维重建的VSLAM方法可以用一篇文章总结一下. 此文是一个好的视觉SLAM综述,对视觉SLAM总结比较全面,是SLAM那本书的很好的补充.介绍了基于滤波器的 ...

  9. SLAM学习笔记(2)SLAM算法

    SLAM算法分为三类:Kalman滤波.概率滤波.图优化 Kalman滤波方法包括EKF.EIF:概率滤波包括RBPF,FastSLAM是RBPF滤波器最为成功的实例, 也是应用最为广泛的SLAM方法 ...

随机推荐

  1. Mac Webstrom 快捷键

    C + D 删除当前行 光标所在行 S + C + F 格式化 S  + C + R 重命名 C + { 查找上次 C + } 查找下次 C + S + DE 回到上一次编程位置 C + F 查找 C ...

  2. redis命令学习(二) · THIS SPACE

    列表(Lists)操作命令 Redis列表是简单的字符串列表,按照插入顺序排序. 你可以添加一个元素导列表的头部(左边)或者尾部(右边)LPUSH命令插入一个新的元素导头部,而RPUSH插入一个新元素 ...

  3. css之制作三角形

    箭头向上三角形 #triangle-up { width: 0; height: 0; border-left: 50px solid transparent; border-right: 50px ...

  4. Rails工程实战记录

    项目git:https://github.com/yixiaoyang/ruby 为熟悉Rails的基本特性创建的工程,本博文仅作更新记录. (1)2013.10.1-2013.10.5 Ruby基本 ...

  5. ysoserial-调试分析总结篇(1)

    前言: ysoserial很强大,花时间好好研究研究其中的利用链对于了解java语言的一些特性很有帮助,也方便打好学习java安全的基础,刚学反序列化时就分析过commoncollections,但是 ...

  6. .NET Core 获取程序运行环境信息与反射的应用

    目录 RuntimeInformation.Environment 获取信息 反射获取信息 获取某个属性的值以及别名 反射获取信息 使用 总结 笔者的九篇反射系统文章已经完结,但是笔者会持续更新反射在 ...

  7. Selenium 实现自动下载文件(FirefoxOptions,FirefoxProfile) - 根据Selenium Webdriver3实战宝典

    Firefox 版本是72geckodriver 是 0.24selenium 是3.14 代码中注释有关于FirefoxOptions,FirefoxProfile的解释,请各位寻找一下,不做另外解 ...

  8. 分布式系统一致性问题与Raft算法(下)

    上一篇讲述了什么是分布式一致性问题,以及它难在哪里,liveness和satefy问题,和FLP impossibility定理.有兴趣的童鞋可以看看分布式系统一致性问题与Raft算法(上). 这一节 ...

  9. TensorFlow入门知识

    Tensorflow基本操作 Tensorflow是一种计算图模型,即用图的形式来表示运算过程的一种模型.Tensorflow程序一般分为图的构建和图的执行两个阶段.图的构建阶段也称为图的定义阶段,该 ...

  10. 如何学习kafka?

      本文是我学习kafka的一个思路和总结,希望对刚接触kafka的你有所帮助.在学习kafka之前,最好能对kafka有一个简单的了解,可以提出一些问题,带着问题去学习,就会容易一些. 0 什么是k ...