第3讲 三维空间刚体运动
3.1 旋转矩阵
3.1.1 点和向量,坐标系
点和点之间可以组成向量。点本身可以由原点指向它的向量来描述。和坐标不同,是空间中的一样东西。
坐标是向量在坐标系下的表示
向量:
坐标系:由3个正交的轴组成,构成线性空间的一组基。
通过叉乘来确定z轴:左手系(Unity、Direct3D)和右手系(大部分3D程序,如:OpenGL、3D Max)
内积:
外积:
引入
外积还可以用于旋转(方向)
(叉乘交换顺序,方向为负)
3.1.2 坐标系间的坐标变换
如何计算同一个向量在不同坐标系里的坐标?
SLAM中,由固定的世界坐标系和移动的机器人坐标系。机器人坐标系随着机器人运动而改变,每个时刻都有新的坐标系
变换:原点间的平移以及三个轴的旋转(刚体是只有这些)
欧氏变换:同一个向量在各个坐标系下的长度和夹角都不会发生变化。
假设单位正交基从
左右两边同时左乘:
定义特殊正交群
旋转矩阵可以描述相机的旋转
其逆(即转置
将旋转和平移合在一起有:
注:
- 在《ROS机器人编程》中,对旋转矩阵的解释为:坐标轴各分量在另一坐标轴上的分量。
- 对于平移向量的理解:转换后坐标系的原点,指向转换前坐标系的原点,得到的向量,在转换后坐标系下的表示
3.1.3 变换矩阵与齐次坐标
做2次变换:
多次变换过于复杂,引入齐次坐标和变换矩阵:
将三维向量的末尾添加1,变成四维向量,成为齐次坐标。
齐次坐标是射影几何的概念,多了一个自由度,但是允许将变换写成线性的形式。将某个点的每个分量同乘一个非 0 常数
定义特殊欧氏群:
反向的变换:
例1:世界坐标系的一个点
在
世界坐标系下
例2:两个世界坐标系下的 pose
考虑坐标系的2个点
3.3 旋转向量和欧拉角
3.3.1旋转向量
的旋转矩阵有9个量,但一次旋转只有3个自由度。同理,变换矩阵用16个量表达了6自由度的变换 旋转矩阵自身带有约束,必须是正交矩阵,且行列式为1
任意旋转都可以用一个旋转轴和一个旋转角来刻画。旋转轴可以使用一个向量表示,长度等于旋转角。这种向量称为旋转向量(或轴角 Axis-Angle)。只需一个三维向量可以描述旋转。(李代数)
对于变换矩阵,使用一个旋转向量和一个平移向量即可表达一个变换。
假设有一个旋转轴为
Rodrigues公式在ORB-SLAM3的表述如下:
这是因为有如下等式:
由于旋转轴上的向量在旋转后不发生改变,说明:
转轴
两个转换公式正是
3.3.2 欧拉角
因为旋转矩阵、旋转向量不直观,所以使用3个分离的转角把一个旋转分解成3次绕不同轴的旋转。还需要区分每次是绕固定轴旋转还是绕旋转之后的轴旋转的。
偏航-俯仰-滚转(yaw-pitch-roll)
rpy 角比较常用,使用
使用欧拉角会出现一个著名的万向锁(Gimbal lock)问题:俯仰角为
理论上,只要想用3个实数表达三维旋转,都会不可避免碰到奇异性问题。因此,欧拉角不适用于插值和迭代,往往只用于人机交互中。也很少在 SLAM 中直接使用欧拉角表达姿态,同样不会在滤波或优化中使用欧拉角表达旋转。
(补充)
- 内旋:每一次旋转都会改变下一次旋转的轴(物体空间的轴)
- 外旋:轴固定(惯性系的轴)
内在旋转与外在旋转的转换关系:互换第一次和第三次旋转的位置则两者结果相同。例如
- 外旋:B 绕 A 的
轴旋转 角,再绕 A 的 轴旋转 角,最后绕 A 的 轴旋转 角,完成旋转。整个过程,A 不动 B 动。 - 旋转矩阵的计算方法如下:
,乘法顺序:从右向左,依次旋转X轴Y轴Z轴。常用的右前上坐标系 yaw(z)-pitch(x)-roll(y) 就是
- 旋转矩阵的计算方法如下:
- 内旋:B 绕 B 的
轴旋转 角,再绕 B 的 轴旋转 角,最后绕 B 的 轴旋转 角,完成旋转。整个过程,A 不动 B 动。 - 旋转矩阵的计算方法如下:
。乘法顺序:从左向右
- 旋转矩阵的计算方法如下:
3.4 四元数
3.4.1 四元数的定义
- 旋转矩阵带有冗余性
- 欧拉角和旋转向量具有奇异性
- 类似于用两个坐标表示地球表面(经度和纬度),必定存在奇异性(纬度为
经度无意义)
- 类似于用两个坐标表示地球表面(经度和纬度),必定存在奇异性(纬度为
四元数是一种扩展的复数,既紧凑也没有奇异性。缺点是不直观,运算稍复杂
一个四元数拥有一个实部和3个虚部:
满足:
有时也用一个标量和一个向量表示:
类似于模长为1的复数表示复平面上的纯旋转,用单位四元数表示三维空间上的任意旋转。乘
先看旋转向量:假设某个旋转是绕旋转向量
给
3.4.2 四元数的运算
现有2个四元数
加法和减法
乘法
2个实的四元数相乘也是实的,由于最后一项外积的存在,四元数乘法通常不可交换
- 共轭
实部不变,虚部取相反数。
- 模长
- 逆
- 数乘和点乘 和向量一样
3.4.3 用四元数表示旋转
- 将三维空间点用一个虚四元数描述:
- 用四元数
表示这个旋转:
旋转后的点
计算结果实部为0,虚部的3个坐标即为旋转后的点的坐标
3.4.4 四元数到旋转矩阵的转换
这里直接给出四元数
假设旋转矩阵
- 由于
和 表示同一个旋转,一个 对应的四元数表示并不是唯一的 - 除此还存在其他几种计算方法
- 当
接近0,其余3个分量非常大
3.5 相似、仿射、射影变换
- 相似变换:比欧氏变换多了一个自由度,允许物体进行均匀缩放
- 仿射变换:只要求
是可逆矩阵。变换后立方体不再是方形,各个面仍然是平行四边形 - 射影变换:
是可逆矩阵, 是平移矩阵,左下角缩放 。 可以对整个矩阵 得到一个右下角为 1 的矩阵。 - 2D 的射影变换一共有8个自由度,3D 的射影变换一共有15个自由度。
- 真实世界到相机照片的变换可以看成一个射影变换
| 变换名称 | 矩阵形式 | 自由度 | 不变性质 |
|---|---|---|---|
| 欧氏变换 | 6 | 长度、夹角、体积 | |
| 相似变换 | 7 | 体积比 | |
| 仿射变换 | 12 | 平行性、体积比 | |
| 射影变换 | 15 | 接触平面的相交和相切 |
3.6(补充)三维旋转转换
欧拉角转旋转矩阵
欧拉角声明:
- 采用ZXY顺规(Roll
-Pitch -Yaw ) - 列主向量
- 外旋
欧拉角转四元数
欧拉角声明:
- 采用ZXY顺规(Roll
-Pitch -Yaw ) - 列主向量
- 外旋
如果欧拉角带有不确定性,并使用协方差
其中