SLAM学习笔记(一)

第三讲三维空间刚体运动

Posted by QIY on June 27, 2020

高翔老师SLAM14讲学习笔记

1 内外积

1.1 内积

1.2 外积

2 坐标系的欧式变换

  • 直观看来由两个部分组成:

    • 原点间的平移

    • 三个轴的旋转

2.1 旋转

2.1.1 基本旋转动作

C:\Users\ASUS\AppData\Local\Temp\1592924827(1).png

左乘:

得:

2.1.2 R矩阵性质

C:\Users\ASUS\AppData\Local\Temp\1592925283(1).png

2.1.3 旋转变换方式

旋转矩阵描述了两个坐标的变换关系

  • 比如:

  • 反之:

  • 于是:

  • 进一步,三个坐标系亦有:

2.2 平移

2.3 换种表达

用旋转+平移方式有一点不便之处,比如发生了两次变换:

这时:

叠加起来过于复杂。

改变形式,写成:

记:

那么多次变换就可写成:

这种用四个数表达三维向量的做法称为齐次坐标。引入齐次坐标后,旋转和平移可以放入同一个矩阵,称为变换矩阵

目前我们一般研究三维,故有:

称为特殊欧氏群(Special Euclidean Group)。

类似的,可定义反向的变换:

2.4 例子

3 旋转向量和欧拉角

3.1 旋转向量由来

除了旋转矩阵之外,旋转是一个三自由度的东西,也就是绕着三个轴去转,用9个数去描述它(旋转矩阵是一个3x3的矩阵),这样比较浪费存储空间,旋转矩阵计算也比较麻烦,旋转矩阵本身也是带有约束的(行列式等于1,正交矩阵)。那么在旋转矩阵上做这个事情相对困难,它不能当一个普通的矩阵去做优化。如何解决这个问题呢?嘎嘎,可以换其他的表示方法,如旋转向量和欧拉角,以及后面学到的四元数。

如下:

a 到b是绕w轴旋转90°。(旋转轴和旋转角)

方向为旋转轴、长度为转过的角度,称为角轴(Angle-Axis)或旋转向量(Rotation Vector)

那么这就就通过了三维空间的一个向量(代替了矩阵)描述了旋转

3.2 角轴与旋转矩阵差异总结

旋转矩阵:九个量,有正交性约束和行列式值约束

角轴:三个量,没有约束

注意它们只是表达方式的不同,但表达的东西可以是同一个

3.3 角轴与旋转矩阵转换关系

轴角转旋转矩阵:罗德里格斯公式(Rodrigues’s Formula )

(n的反对称)

旋转矩阵转轴角

角度:

轴:

(n:R特征值为1的特征向量)

4 欧拉角

欧拉角是相对于人,便以视觉观测的,可以看出大概是什么样子的。

概念:

将旋转分解为三次不同轴上的转动,以便理解

例如:按 Z-Y-X 顺序转动

轴可以是定轴或动轴,顺序亦可不同,因此存在许多种定义方式不同的欧拉角

常见的有 yaw-pitch-roll (偏航-俯仰-滚转)角等等

  1. 绕物体的Z轴旋转,得到偏航角yaw;

  2. 绕旋转之后的Y轴旋转,得到俯仰角pitch;

  3. 绕旋转之后的X轴旋转,得到滚转角roll。

如果用一个旋转矩阵或向量很难想象是怎么转的,用三个轴的分量便于感知如何旋转。

欧拉角为什么不适用,它存在“万向锁”的情况,如下:

ZYX顺序中,若Pitch为正负90度,则第三次旋转和第一次绕同一个轴,使得系统丢失了一个自由度——存在奇异性问题(SLAM 程序中很少直接使用欧拉角表达姿态)。

5 四元数(一种扩展复数)

5.1 概念

(二维)

四元数有三个虚部,可以表达三维空间中的旋转:

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

虚部之间的关系:

自己和自己的运算像复数 ,自己和别人的运算像叉乘。

5.2 四元数的一些运算和性质

5.3 四元数和角轴的关系

角轴到四元数:

四元数到角轴:

类似可知四元数亦可转换为旋转矩阵、欧拉角。

5.4 如何旋转

5.5 实践部分

Eigen几何模块,略;