最近看了一个非常不错的免费的SLAM进阶课程,B站地址:第一章 四元数与旋转矩阵——1.1 旋转矩阵的定义,右手系,SO(3)上的投影;应用:组合导航初始化
在此做一些记录防止后续遗忘。
SO(3)需要满足三个行向量和三个列向量均构成单位正交基,所谓单位正交基就是每个向量的模长为1(即向量与自身的内积为1)且三个向量两两正交(即不同向量之间的内积为0,由于之前确定了向量的模长为1,所以无需考虑模长为0的向量与其他向量的内积为0的情况)。
关于内积、基、模长、正交、向量等概念推荐观看哈工大严质彬老师讲的矩阵分析
SO(3)的行列式为1表明其采用右手系定义一个三维的欧式空间,对于一般的正交矩阵,其行列式为正负1(可以根据正交矩阵的定义两边同时取行列式再利用两个矩阵的行列式相乘等于两个矩阵相乘之后的行列式这个性质即可证明),所以这里行列式为1的条件就是O(3)转成SO(3)的原因,根据3Blue1Brown讲的行列式的几何性质,我们可以得出SO(3)与满足乘法规则的任意向量或矩阵相乘,不会改变所乘向量或矩阵的内部性质(如模长,面积,体积等),当然这点也可以参考计算机视觉中的多视图几何这本圣经。
由于计算机计算旋转矩阵的过程中由于数据结构不会严格满足数学中数字的精度,因此在迭代过程中会导致得到的旋转矩阵在数学上满足旋转矩阵的定义,但是在计算机数值上不满足,因此需要将该计算机求得的伪旋转矩阵投影到SO(3)的流形空间上,(如果对流形空间不太了解,可以反复读一下A micro Lie theory for state estimation in robotics, Joan Solà大佬的很多文章都推荐读一下,可以好好提升一下数学功底)有三种投影的方法:
- QR分解,对伪旋转矩阵进行QR分解,用Q矩阵作为最终的旋转矩阵,适用于精度要求不高但是求解速度要求较快的场景(非迭代解析解)
- SVD分解,
最后
,第一个公式的R是伪旋转矩阵,第二个公式的R即为最终求得的旋转矩阵,这种方法速度比较慢但是精度较高,该方法较为常用
- 极分解(polar decomposition),可以通过SVD分解转换得到,将伪旋转矩阵分解为一个正交矩阵和一个对称正定矩阵(
)
对于一个旋转矩阵R和两个向量n,m,其旋转后的向量为n',m’,其中一对旋转前后的向量约束旋转矩阵的两个自由度(这里需要注意此处探究的是向量对旋转矩阵的自由度约束,所以我们假设向量是不变的,例如重力向量,那么想让重力向量保持不变,我们就需要严格控制我们的roll角和pitch角的角度,否则重力方向就不会指向地心,但是我们改变yaw角的角度,重力方向依然指向地心,这里roll pitch和yaw三个欧拉角假设为东北天坐标系(这里不懂的同学可以了解一下欧拉角或者看一下《惯性导航与GNSS/INS组合导航原理》)),因此我们可以构建如下方程求解旋转矩阵
,将
这里求出来的R并不一定满足旋转矩阵的约束,因此需要将其投影到SO3空间上,同时n和m需要时线性无关的两个向量,即两个向量模长均不为零且方向不平行。
本节作业:
- 证明R*RT=I
RT*R=I
列向量构成单位正交基
行向量构成单位正交基,R是一个3*3的矩阵
- 已知e1,e2,e3构成单位正交基,如果构成右手系,等价于e3 = e1 x e2
- 对于一个旋转矩阵,对其进行SVD分解,它的奇异值是[1,1,1 ]
疑惑:
1.旋转矩阵特征值为[1,],这个
是旋转矩阵转成角轴之后角轴的长度吗,特征值为1的特征向量为旋转矩阵对应的角轴,那么剩余两个特征值对应的特征向量是什么呢
2.没有脑补出来为什么已知一个向量旋转前后的坐标,为什么只能约束旋转矩阵的两个自由度
3.一个3*3的矩阵如何一步步削减9自由度变成一个自由度为3的旋转矩阵呢(例如行列式为1,行向量和列向量单位正交,特征值为[1,],奇异值为[1,1,1],每一个条件能削减几个自由度呢)
看到一个博主说六个约束分别是这六个式子实现了对这个3*3的矩阵进行了六个自由度的约束,保留了三个自由度